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