public void SetQuest(ActiveQuestBase currentQuest) { RemoveListeners(previous); if (currentQuest is ActiveWalkingQuest) { ActiveWalkingQuest awq = currentQuest as ActiveWalkingQuest; awq.AmountSoFar.OnChange.AddListener(OnChange); } else if (currentQuest is ActiveQuest <int, IntVariable, UnityEventInt> ) { ActiveQuest <int, IntVariable, UnityEventInt> awq = currentQuest as ActiveQuest <int, IntVariable, UnityEventInt>; awq.AmountSoFar.OnChange.AddListener(OnChange); } else if (currentQuest is ReachValueQuest) { var awq = currentQuest as ReachValueQuest; awq.TotalAmount.OnChange.AddListener(OnChange); } var prog = currentQuest.GetProgress(); ProgressText.text = $"{prog.current} / {prog.max}"; ProgressFill.rectTransform.anchorMax = ProgressFill.rectTransform.anchorMax.SetX(Mathf.Clamp01((float)(prog.current / prog.max))); QuestTitle.text = currentQuest.DisplayName; previous = currentQuest; }
void RemoveListeners(ActiveQuestBase previousQuest) { if (previousQuest == null) { return; } if (previousQuest is ActiveWalkingQuest) { ActiveWalkingQuest awq = previousQuest as ActiveWalkingQuest; awq.AmountSoFar.OnChange.RemoveListener(OnChange); } else if (previousQuest is ActiveEnemySlayerQuest) { ActiveEnemySlayerQuest awq = previousQuest as ActiveEnemySlayerQuest; awq.AmountSoFar.OnChange.RemoveListener(OnChange); } else if (previousQuest is ActiveItemCollectQuest) { ActiveItemCollectQuest awq = previousQuest as ActiveItemCollectQuest; awq.AmountSoFar.OnChange.RemoveListener(OnChange); } if (previousQuest is ActiveWalkingQuest) { ActiveWalkingQuest awq = previousQuest as ActiveWalkingQuest; awq.AmountSoFar.OnChange.RemoveListener(OnChange); } else if (previousQuest is ActiveQuest <int, IntVariable, UnityEventInt> ) { ActiveQuest <int, IntVariable, UnityEventInt> awq = previousQuest as ActiveQuest <int, IntVariable, UnityEventInt>; awq.AmountSoFar.OnChange.RemoveListener(OnChange); } else if (previousQuest is ReachValueQuest) { var q = previousQuest as ReachValueQuest; q.TotalAmount.OnChange.RemoveListener(OnChange); } }