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 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(); } 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; } } } } } } }