public void SetAbility(Ability ability, bool shouldBePresent, AbilityViewState newState) { bool alreadyPresent = _abilityViewsByOrder[ability.Order] != null; if (alreadyPresent && !shouldBePresent) { AbilityView viewToRemove = _abilityViewsByOrder[ability.Order]; _abilityViewsByOrder[ability.Order] = null; PoolingManager.Free(PoolingManager.AbilityView, viewToRemove.gameObject); } else if (!alreadyPresent && shouldBePresent) { AbilityView newView = PoolingManager.Fetch <AbilityView>(PoolingManager.AbilityView, Vector3.zero, Quaternion.identity, transform); _abilityViewsByOrder[ability.Order] = newView; newView.InitializeWith(ability, newState); AdjustViewOrder(ability, newView); } else if (alreadyPresent) { AbilityView viewToChange = _abilityViewsByOrder[ability.Order]; viewToChange.UpdateForState(newState); } }
public void InitializeWith(Ability ability, AbilityViewState initialState) { Ability = ability; string keyCodeAsString = Ability.KeyCode.ToString(); string label = keyCodeAsString.StartsWith("Alpha") ? keyCodeAsString.Substring(5) : keyCodeAsString; Label.text = label; Frame.color = Ability.BackgroundColor; Icon.sprite = Ability.Sprite; UpdateForState(initialState); }
public void UpdateForState(AbilityViewState newState) { if (newState == State) { return; } State = newState; if (newState == AbilityViewState.Unusable) { Frame.color *= Color.gray; Icon.color *= Color.gray; Label.color *= Color.gray; } else if (newState == AbilityViewState.Usable) { Frame.color = Ability.BackgroundColor; Icon.color = Color.white; Label.color = Color.white; } }