You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

768 lines
32 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using SiegeSong;
namespace SiegeSong
{
public class HintManager : MonoBehaviour
{
public InputManager InputManager;
public Image FarLeftHintPrimaryIconDisplay;
public Image FarLeftHintSecondaryIconDisplay;
public Text FarLeftHintText;
public Text FarLeftHintIconDivider;
public Image MidLeftHintPrimaryIconDisplay;
public Image MidLeftHintSecondaryIconDisplay;
public Text MidLeftHintText;
public Text MidLeftHintIconDivider;
public Image CenterHintPrimaryIconDisplay;
public Image CenterHintSecondaryIconDisplay;
public Text CenterHintText;
public Text CenterHintIconDivider;
public Image FarRightHintPrimaryIconDisplay;
public Image FarRightHintSecondaryIconDisplay;
public Text FarRightHintText;
public Text FarRightHintIconDivider;
public Image MidRightHintPrimaryIconDisplay;
public Image MidRightHintSecondaryIconDisplay;
public Text MidRightHintIconDivider;
public Text MidRightHintText;
public InputButton? FarLeftPrimaryInputButton;
public InputButton? FarLeftSecondaryInputButton;
public InputButton? MidLeftPrimaryInputButton;
public InputButton? MidLeftSecondaryInputButton;
public InputButton? CenterPrimaryInputButton;
public InputButton? CenterSecondaryInputButton;
public InputButton? MidRightPrimaryInputButton;
public InputButton? MidRightSecondaryInputButton;
public InputButton? FarRightPrimaryInputButton;
public InputButton? FarRightSecondaryInputButton;
public Sprite AIcon;
public Sprite BIcon;
public Sprite XIcon;
public Sprite YIcon;
public Sprite LSIcon;
public Sprite RSIcon;
public Sprite LBIcon;
public Sprite RBIcon;
public Sprite LTIcon;
public Sprite RTIcon;
public Sprite StartIcon;
public Sprite BackIcon;
public Sprite AlertIcon;
public Sprite AKeyIcon;
public Sprite BKeyIcon;
public Sprite CKeyIcon;
public Sprite DKeyIcon;
public Sprite EKeyIcon;
public Sprite FKeyIcon;
public Sprite GKeyIcon;
public Sprite HKeyIcon;
public Sprite IKeyIcon;
public Sprite JKeyIcon;
public Sprite KKeyIcon;
public Sprite LKeyIcon;
public Sprite MKeyIcon;
public Sprite NKeyIcon;
public Sprite OKeyIcon;
public Sprite PKeyIcon;
public Sprite QKeyIcon;
public Sprite RKeyIcon;
public Sprite SKeyIcon;
public Sprite TKeyIcon;
public Sprite UKeyIcon;
public Sprite VKeyIcon;
public Sprite WKeyIcon;
public Sprite XKeyIcon;
public Sprite YKeyIcon;
public Sprite ZKeyIcon;
public Sprite ZeroKeyIcon;
public Sprite OneKeyIcon;
public Sprite TwoKeyIcon;
public Sprite ThreeKeyIcon;
public Sprite FourKeyIcon;
public Sprite FiveKeyIcon;
public Sprite SixKeyIcon;
public Sprite SevenKeyIcon;
public Sprite EightKeyIcon;
public Sprite NineKeyIcon;
public Sprite MinusKeyIcon;
public Sprite EqualsKeyIcon;
public Sprite TildeKeyIcon;
public Sprite BackspaceKeyIcon;
public Sprite TabKeyIcon;
public Sprite ShiftKeyIcon;
public Sprite SpaceKeyIcon;
public Sprite CtrlKeyIcon;
public Sprite AltKeyIcon;
public Sprite CommaKeyIcon;
public Sprite PeriodKeyIcon;
public Sprite BackslashKeyIcon;
public Sprite SemicolonKeyIcon;
public Sprite ApostropheKeyIcon;
public Sprite EnterKeyIcon;
public Sprite LeftBracketKeyIcon;
public Sprite RightBracketKeyIcon;
public Sprite ForwardslashKeyIcon;
public Sprite LeftArrowKeyIcon;
public Sprite RightArrowKeyIcon;
public Sprite UpArrowKeyIcon;
public Sprite DownArrowKeyIcon;
public Sprite LeftMouseButtonKeyIcon;
public Sprite RightMouseButtonKeyIcon;
public Sprite EscKeyIcon;
public CanvasGroup HintBarUIGroup;
public CanvasGroup FarLeftUIGroup;
public CanvasGroup MidLeftUIGroup;
public CanvasGroup CenterUIGroup;
public CanvasGroup MidRightUIGroup;
public CanvasGroup FarRightUIGroup;
public string FarLeftHint;
public string MidLeftHint;
public string CenterHint;
public string MidRightHint;
public string FarRightHint;
public string FarLeftIconDivider;
public string MidLeftIconDivider;
public string CenterIconDivider;
public string MidRightIconDivider;
public string FarRightIconDivider;
public Sprite FarLeftPrimaryIcon;
public Sprite FarLeftSecondaryIcon;
public Sprite MidLeftPrimaryIcon;
public Sprite MidLeftSecondaryIcon;
public Sprite CenterPrimaryIcon;
public Sprite CenterSecondaryIcon;
public Sprite MidRightPrimaryIcon;
public Sprite MidRightSecondaryIcon;
public Sprite FarRightPrimaryIcon;
public Sprite FarRightSecondaryIcon;
public bool HintBarHidden;
public bool FarLeftTransitioning;
public bool FarLeftTransitioningIn;
public bool MidLeftTransitioning;
public bool MidLeftTransitioningIn;
public bool CenterTransitioning;
public bool CenterTransitioningIn;
public bool MidRightTransitioning;
public bool MidRightTransitioningIn;
public bool FarRightTransitioning;
public bool FarRightTransitioningIn;
public List<IconHint> IconHintReferences;
private float alphaStep = 0.2f;
private InputScheme currentInputScheme;
public Sprite GetInputIcon(InputButton button)
{
switch (button)
{
case InputButton.ActivateAccept:
switch (currentInputScheme)
{
case InputScheme.PC:
return FKeyIcon;
case InputScheme.Xbox:
return AIcon;
}
break;
case InputButton.BackReject:
switch (currentInputScheme)
{
case InputScheme.PC:
return BackspaceKeyIcon;
case InputScheme.Xbox:
return BIcon;
}
break;
case InputButton.SwapUseAbility:
switch (currentInputScheme)
{
case InputScheme.PC:
return CKeyIcon;
case InputScheme.Xbox:
return XIcon;
}
break;
case InputButton.JumpClimb:
switch (currentInputScheme)
{
case InputScheme.PC:
return SpaceKeyIcon;
case InputScheme.Xbox:
return YIcon;
}
break;
case InputButton.CrouchStabilize:
switch (currentInputScheme)
{
case InputScheme.PC:
return CtrlKeyIcon;
case InputScheme.Xbox:
return RSIcon;
}
break;
case InputButton.SprintZoomIn:
switch (currentInputScheme)
{
case InputScheme.PC:
return ShiftKeyIcon;
case InputScheme.Xbox:
return LSIcon;
}
break;
case InputButton.CycleLeft:
switch (currentInputScheme)
{
case InputScheme.PC:
return QKeyIcon;
case InputScheme.Xbox:
return LBIcon;
}
break;
case InputButton.CycleRight:
switch (currentInputScheme)
{
case InputScheme.PC:
return EKeyIcon;
case InputScheme.Xbox:
return RBIcon;
}
break;
case InputButton.UseLeft:
switch (currentInputScheme)
{
case InputScheme.PC:
return RightMouseButtonKeyIcon;
case InputScheme.Xbox:
return LTIcon;
}
break;
case InputButton.UseRight:
switch (currentInputScheme)
{
case InputScheme.PC:
return LeftMouseButtonKeyIcon;
case InputScheme.Xbox:
return RTIcon;
}
break;
case InputButton.CharacterMenu:
switch (currentInputScheme)
{
case InputScheme.PC:
return TabKeyIcon;
case InputScheme.Xbox:
return BackIcon;
}
break;
case InputButton.GameMenu:
switch (currentInputScheme)
{
case InputScheme.PC:
return EscKeyIcon;
case InputScheme.Xbox:
return StartIcon;
}
break;
}
return StartIcon;
}
public void SetHint(HintArea area, string hint, InputButton? primaryInput = null, InputButton? secondaryInput = null, string secondaryDivider = "")
{
switch (area)
{
case HintArea.FarLeft:
FarLeftHint = hint;
FarLeftPrimaryInputButton = primaryInput;
FarLeftIconDivider = secondaryDivider;
FarLeftSecondaryInputButton = secondaryInput;
if (primaryInput != null)
{
FarLeftPrimaryIcon = GetInputIcon(primaryInput.Value);
if (secondaryInput != null)
FarLeftSecondaryIcon = GetInputIcon(secondaryInput.Value);
else
FarLeftSecondaryIcon = null;
FarLeftTransitioning = true;
}
else
{
FarLeftPrimaryIcon = null;
FarLeftSecondaryIcon = null;
FarLeftPrimaryInputButton = null;
FarLeftSecondaryInputButton = null;
FarLeftPrimaryIcon = null;
FarLeftSecondaryIcon = null;
}
break;
case HintArea.MidLeft:
MidLeftHint = hint;
MidLeftPrimaryInputButton = primaryInput;
MidLeftIconDivider = secondaryDivider;
MidLeftSecondaryInputButton = secondaryInput;
if (primaryInput != null)
{
MidLeftPrimaryIcon = GetInputIcon(primaryInput.Value);
if (secondaryInput != null)
MidLeftSecondaryIcon = GetInputIcon(secondaryInput.Value);
else
MidLeftSecondaryIcon = null;
MidLeftTransitioning = true;
}
else
{
MidLeftPrimaryIcon = null;
MidLeftSecondaryIcon = null;
MidLeftPrimaryInputButton = null;
MidLeftSecondaryInputButton = null;
MidLeftPrimaryIcon = null;
MidLeftSecondaryIcon = null;
}
break;
case HintArea.Center:
CenterHint = hint;
if (primaryInput != null)
{
CenterPrimaryIcon = GetInputIcon(primaryInput.Value);
CenterPrimaryInputButton = primaryInput.Value;
CenterIconDivider = secondaryDivider;
CenterSecondaryInputButton = secondaryInput;
if (secondaryInput != null)
CenterSecondaryIcon = GetInputIcon(secondaryInput.Value);
else
CenterSecondaryIcon = null;
CenterTransitioning = true;
}
else
{
CenterPrimaryIcon = null;
CenterSecondaryIcon = null;
CenterPrimaryInputButton = null;
CenterSecondaryInputButton = null;
CenterPrimaryIcon = null;
CenterSecondaryIcon = null;
}
break;
case HintArea.MidRight:
MidRightHint = hint;
MidRightPrimaryInputButton = primaryInput;
MidRightIconDivider = secondaryDivider;
MidRightSecondaryInputButton = secondaryInput;
if (primaryInput != null)
{
MidRightPrimaryIcon = GetInputIcon(primaryInput.Value);
if (secondaryInput != null)
MidRightSecondaryIcon = GetInputIcon(secondaryInput.Value);
else
MidRightSecondaryIcon = null;
MidRightTransitioning = true;
}
else
{
MidRightPrimaryIcon = null;
MidRightSecondaryIcon = null;
MidRightPrimaryInputButton = null;
MidRightSecondaryInputButton = null;
MidRightPrimaryIcon = null;
MidRightSecondaryIcon = null;
}
break;
case HintArea.FarRight:
FarRightHint = hint;
FarRightPrimaryInputButton = primaryInput;
FarRightIconDivider = secondaryDivider;
FarRightSecondaryInputButton = secondaryInput;
if (primaryInput != null)
{
FarRightPrimaryIcon = GetInputIcon(primaryInput.Value);
if (secondaryInput != null)
FarRightSecondaryIcon = GetInputIcon(secondaryInput.Value);
else
FarRightSecondaryIcon = null;
FarRightTransitioning = true;
}
else
{
FarRightPrimaryIcon = null;
FarRightSecondaryIcon = null;
FarRightPrimaryInputButton = null;
FarRightPrimaryIcon = null;
FarRightSecondaryIcon = null;
}
break;
}
}
void Start()
{
IconHintReferences = new List<IconHint>();
}
void updateHintSchema()
{
currentInputScheme = InputManager.CurrentScheme;
foreach (var iconHint in IconHintReferences)
{
iconHint.RefreshHint();
}
if (FarLeftPrimaryInputButton.HasValue)
{
FarLeftPrimaryIcon = GetInputIcon(FarLeftPrimaryInputButton.Value);
FarLeftTransitioning = true;
}
if (FarLeftSecondaryInputButton.HasValue)
{
FarLeftSecondaryIcon = GetInputIcon(FarLeftSecondaryInputButton.Value);
FarLeftTransitioning = true;
}
if (MidLeftPrimaryInputButton.HasValue)
{
MidLeftPrimaryIcon = GetInputIcon(MidLeftPrimaryInputButton.Value);
MidLeftTransitioning = true;
}
if (MidLeftSecondaryInputButton.HasValue)
{
MidLeftSecondaryIcon = GetInputIcon(MidLeftSecondaryInputButton.Value);
MidLeftTransitioning = true;
}
if (CenterPrimaryInputButton.HasValue)
{
CenterPrimaryIcon = GetInputIcon(CenterPrimaryInputButton.Value);
CenterTransitioning = true;
}
if (CenterSecondaryInputButton.HasValue)
{
CenterSecondaryIcon = GetInputIcon(CenterSecondaryInputButton.Value);
CenterTransitioning = true;
}
if (FarRightPrimaryInputButton.HasValue)
{
FarRightPrimaryIcon = GetInputIcon(FarRightPrimaryInputButton.Value);
FarRightTransitioning = true;
}
if (FarRightSecondaryInputButton.HasValue)
{
FarRightSecondaryIcon = GetInputIcon(FarRightSecondaryInputButton.Value);
FarRightTransitioning = true;
}
if (MidRightPrimaryInputButton.HasValue)
{
MidRightPrimaryIcon = GetInputIcon(MidRightPrimaryInputButton.Value);
MidRightTransitioning = true;
}
if (MidRightSecondaryInputButton.HasValue)
{
MidRightSecondaryIcon = GetInputIcon(MidRightSecondaryInputButton.Value);
MidRightTransitioning = true;
}
}
void Update()
{
if (HintBarHidden)
{
if (HintBarUIGroup.alpha > 0.0f)
HintBarUIGroup.alpha -= alphaStep;
}
else
{
if (HintBarUIGroup.alpha < 1.0f)
HintBarUIGroup.alpha += alphaStep;
}
if (currentInputScheme != InputManager.CurrentScheme)
updateHintSchema();
if (FarLeftHintText.text != FarLeftHint)
FarLeftTransitioning = true;
if (MidLeftHintText.text != MidLeftHint)
MidLeftTransitioning = true;
if (CenterHintText.text != CenterHint)
CenterTransitioning = true;
if (MidRightHintText.text != MidRightHint)
MidRightTransitioning = true;
if (FarRightHintText.text != FarRightHint)
FarRightTransitioning = true;
if (FarLeftTransitioning)
{
if (FarLeftTransitioningIn)
{
if (FarLeftUIGroup.alpha < 1.0f)
FarLeftUIGroup.alpha += alphaStep;
else
{
FarLeftTransitioning = false;
FarLeftTransitioningIn = false;
}
}
else
{
if (FarLeftUIGroup.alpha > 0.0f)
FarLeftUIGroup.alpha -= alphaStep;
else
{
FarLeftHintText.text = FarLeftHint;
FarLeftTransitioningIn = true;
if (FarLeftPrimaryIcon != null)
{
FarLeftHintPrimaryIconDisplay.gameObject.SetActive(true);
FarLeftHintPrimaryIconDisplay.sprite = FarLeftPrimaryIcon;
if (FarLeftSecondaryIcon != null)
{
FarLeftHintSecondaryIconDisplay.gameObject.SetActive(true);
FarLeftHintIconDivider.text = FarLeftIconDivider;
FarLeftHintPrimaryIconDisplay.sprite = FarLeftSecondaryIcon;
FarLeftHintSecondaryIconDisplay.sprite = FarLeftPrimaryIcon;
FarLeftHintSecondaryIconDisplay.enabled = true;
}
else
{
FarLeftHintSecondaryIconDisplay.gameObject.SetActive(true);
FarLeftHintIconDivider.enabled = false;
FarLeftHintSecondaryIconDisplay.enabled = false;
FarLeftHintSecondaryIconDisplay.sprite = null;
}
}
else
{
FarLeftHintPrimaryIconDisplay.sprite = null;
FarLeftPrimaryIcon = null;
FarLeftPrimaryInputButton = null;
FarLeftHintPrimaryIconDisplay.gameObject.SetActive(false);
FarLeftHintSecondaryIconDisplay.gameObject.SetActive(false);
FarLeftHintIconDivider.enabled = false;
}
}
}
}
if (MidLeftTransitioning)
{
if (MidLeftTransitioningIn)
{
if (MidLeftUIGroup.alpha < 1.0f)
MidLeftUIGroup.alpha += alphaStep;
else
{
MidLeftTransitioning = false;
MidLeftTransitioningIn = false;
}
}
else
{
if (MidLeftUIGroup.alpha > 0.0f)
MidLeftUIGroup.alpha -= alphaStep;
else
{
MidLeftHintText.text = MidLeftHint;
MidLeftTransitioningIn = true;
if (MidLeftPrimaryIcon != null)
{
MidLeftHintPrimaryIconDisplay.gameObject.SetActive(true);
MidLeftHintPrimaryIconDisplay.sprite = MidLeftPrimaryIcon;
if (MidLeftSecondaryIcon != null)
{
MidLeftHintSecondaryIconDisplay.gameObject.SetActive(true);
MidLeftHintIconDivider.text = MidLeftIconDivider;
MidLeftHintIconDivider.enabled = true;
MidLeftHintPrimaryIconDisplay.sprite = MidLeftSecondaryIcon;
MidLeftHintSecondaryIconDisplay.sprite = MidLeftPrimaryIcon;
}
else
{
MidLeftHintSecondaryIconDisplay.gameObject.SetActive(false);
MidLeftHintIconDivider.enabled = false;
MidLeftHintSecondaryIconDisplay.enabled = false;
MidLeftHintSecondaryIconDisplay.sprite = null;
}
}
else
{
MidLeftHintPrimaryIconDisplay.sprite = null;
MidLeftPrimaryIcon = null;
MidLeftPrimaryInputButton = null;
MidLeftHintPrimaryIconDisplay.gameObject.SetActive(false);
MidLeftHintSecondaryIconDisplay.gameObject.SetActive(false);
MidLeftHintIconDivider.enabled = false;
}
}
}
}
if (CenterTransitioning)
{
if (CenterTransitioningIn)
{
if (CenterUIGroup.alpha < 1.0f)
CenterUIGroup.alpha += alphaStep;
else
{
CenterTransitioning = false;
CenterTransitioningIn = false;
}
}
else
{
if (CenterUIGroup.alpha > 0.0f)
CenterUIGroup.alpha -= alphaStep;
else
{
CenterHintText.text = CenterHint;
CenterTransitioningIn = true;
if (CenterPrimaryIcon != null)
{
CenterHintPrimaryIconDisplay.sprite = CenterPrimaryIcon;
CenterHintPrimaryIconDisplay.gameObject.SetActive(true);
if (CenterSecondaryIcon != null)
{
CenterHintIconDivider.text = CenterIconDivider;
CenterHintSecondaryIconDisplay.gameObject.SetActive(true);
CenterHintPrimaryIconDisplay.sprite = CenterSecondaryIcon;
CenterHintSecondaryIconDisplay.sprite = CenterPrimaryIcon;
CenterHintSecondaryIconDisplay.enabled = true;
}
else
{
CenterHintIconDivider.enabled = false;
CenterHintSecondaryIconDisplay.sprite = null;
CenterHintSecondaryIconDisplay.enabled = false;
CenterHintSecondaryIconDisplay.gameObject.SetActive(false);
}
}
else
{
CenterHintPrimaryIconDisplay.sprite = null;
CenterPrimaryIcon = null;
CenterPrimaryInputButton = null;
CenterHintPrimaryIconDisplay.gameObject.SetActive(false);
CenterHintSecondaryIconDisplay.gameObject.SetActive(false);
CenterHintIconDivider.enabled = false;
}
}
}
}
if (MidRightTransitioning)
{
if (MidRightTransitioningIn)
{
if (MidRightUIGroup.alpha < 1.0f)
MidRightUIGroup.alpha += alphaStep;
else
{
MidRightTransitioning = false;
MidRightTransitioningIn = false;
}
}
else
{
if (MidRightUIGroup.alpha > 0.0f)
MidRightUIGroup.alpha -= alphaStep;
else
{
MidRightHintText.text = MidRightHint;
MidRightTransitioningIn = true;
if (MidRightPrimaryIcon != null)
{
MidRightHintPrimaryIconDisplay.sprite = MidRightPrimaryIcon;
MidRightHintPrimaryIconDisplay.gameObject.SetActive(true);
if (MidRightSecondaryIcon != null)
{
MidRightHintIconDivider.text = MidRightIconDivider;
MidRightHintSecondaryIconDisplay.sprite = MidRightSecondaryIcon;
MidRightHintSecondaryIconDisplay.enabled = true;
MidRightHintSecondaryIconDisplay.gameObject.SetActive(true);
}
else
{
MidRightHintIconDivider.enabled = false;
MidRightHintSecondaryIconDisplay.sprite = null;
MidRightHintSecondaryIconDisplay.enabled = false;
MidRightHintSecondaryIconDisplay.gameObject.SetActive(false);
}
}
else
{
MidRightHintPrimaryIconDisplay.sprite = null;
MidRightPrimaryIcon = null;
MidRightPrimaryInputButton = null;
MidRightHintPrimaryIconDisplay.gameObject.SetActive(false);
MidRightHintSecondaryIconDisplay.gameObject.SetActive(false);
MidRightHintIconDivider.enabled = false;
}
}
}
}
if (FarRightTransitioning)
{
if (FarRightTransitioningIn)
{
if (FarRightUIGroup.alpha < 1.0f)
FarRightUIGroup.alpha += alphaStep;
else
{
FarRightTransitioning = false;
FarRightTransitioningIn = false;
}
}
else
{
if (FarRightUIGroup.alpha > 0.0f)
FarRightUIGroup.alpha -= alphaStep;
else
{
FarRightHintText.text = FarRightHint;
FarRightTransitioningIn = true;
if (FarRightPrimaryIcon != null)
{
FarRightHintPrimaryIconDisplay.sprite = FarRightPrimaryIcon;
FarRightHintPrimaryIconDisplay.gameObject.SetActive(true);
if (FarRightSecondaryIcon != null)
{
FarRightHintIconDivider.text = FarRightIconDivider;
FarRightHintSecondaryIconDisplay.sprite = FarRightSecondaryIcon;
FarRightHintSecondaryIconDisplay.enabled = true;
FarRightHintSecondaryIconDisplay.gameObject.SetActive(true);
}
else
{
FarRightHintIconDivider.enabled = false;
FarRightHintSecondaryIconDisplay.sprite = null;
FarRightHintSecondaryIconDisplay.enabled = false;
FarRightHintSecondaryIconDisplay.gameObject.SetActive(false);
}
}
else
{
FarRightHintPrimaryIconDisplay.sprite = null;
FarRightPrimaryIcon = null;
FarRightPrimaryInputButton = null;
FarRightHintPrimaryIconDisplay.gameObject.SetActive(false);
FarRightHintSecondaryIconDisplay.gameObject.SetActive(false);
FarRightHintIconDivider.enabled = false;
}
}
}
}
}
}
}