public void RemoveIcon(StatChange mod) { switch (mod.affectedStat) { case AffectedStat.Strength: strIcon.gameObject.SetActive(false); break; case AffectedStat.Magic: magIcon.gameObject.SetActive(true); break; case AffectedStat.Accuracy: accIcon.gameObject.SetActive(true); break; case AffectedStat.Initiative: initIcon.gameObject.SetActive(true); break; case AffectedStat.CriticalChance: critIcon.gameObject.SetActive(true); break; case AffectedStat.Defense: defIcon.gameObject.SetActive(true); break; case AffectedStat.Resistance: resIcon.gameObject.SetActive(true); break; case AffectedStat.Agility: agiIcon.gameObject.SetActive(true); break; } }
public void ResolveStatChanges() { foreach (KeyValuePair <StatChange, bool> statChanges in afflictedStatChanges) { // Check status afflictions and do action depending on the affliction StatChange sc = statChanges.Key; switch (sc) { case StatChange.HpUp: case StatChange.MpUp: case StatChange.AtkUp: case StatChange.DefUp: case StatChange.SpdUp: case StatChange.HpDestruct: case StatChange.MpDown: case StatChange.AtkDown: case StatChange.DefDown: case StatChange.SpdDown: if (statChangeTurnCounter[sc] > 0) { statChangeTurnCounter[sc] -= 1; if (statChangeTurnCounter[sc] == 0) { TryRemoveStatChange(sc); } } break; default: Debug.Log("Affliction not valid"); break; } } }
private Sprite GetCorrectArrowSprite(StatChange mod) { if (Math.Abs(mod.StatModifier) >= 0.40f) { return(tripleArrow); } return(Math.Abs(mod.StatModifier) >= 0.20f ? doubleArrow : singleArrow); }
protected void AfflictStatChange(StatChange statChange) { if (!afflictedStatChanges.ContainsKey(statChange)) { afflictedStatChanges.Add(statChange, true); return; } afflictedStatChanges[statChange] = true; }
public bool TryStatChange(StatChange statChange, int turnsToAfflict) { if (DoesResistStatChange(statChange) || AfflictedByStatChange(statChange)) { return(false); } // afflict the stat change AfflictStatChange(statChange); statChangeTurnCounter [statChange] = turnsToAfflict; switch (statChange) { case StatChange.HpUp: ModifyHp(true); break; case StatChange.MpUp: ModifyMp(true); break; case StatChange.AtkUp: ModifyAtk(true); break; case StatChange.DefUp: ModifyDef(true); break; case StatChange.SpdUp: ModifySpd(true); break; case StatChange.HpDestruct: ModifyHp(false); break; case StatChange.MpDown: ModifyMp(false); break; case StatChange.AtkDown: ModifyAtk(false); break; case StatChange.DefDown: ModifyDef(false); break; case StatChange.SpdDown: ModifySpd(false); break; default: throw new ArgumentOutOfRangeException("statChange", statChange, null); } return(true); }
public bool TryRemoveStatChange(StatChange statChange) { if (!DoesResistStatChangeRemoval(statChange) && !AfflictedByStatChange(statChange)) { // TODO: afflict the stat change RemoveStatChange(statChange); statChangeTurnCounter [statChange] = 0; return(true); } return(false); }
/// <summary> /// Reset stat changes. Invokes stat mod events to notify listeners of stat changes. /// </summary> /// <param name="statChange">Desired stat change</param> /// <exception cref="ArgumentOutOfRangeException"></exception> public void ResetStatChange(StatChange statChange) { if (afflictedStatChanges.ContainsKey(statChange)) { afflictedStatChanges[statChange] = false; } else { afflictedStatChanges.Add(statChange, false); } switch (statChange) { case StatChange.AtkUp: case StatChange.AtkDown: currentAtk = baseAtk; BattleEventManager.bem.InvokeAtkModEvent(affiliation, slot); // atkModEvent.Invoke(); break; case StatChange.DefUp: case StatChange.DefDown: currentDef = baseDef; BattleEventManager.bem.InvokeDefModEvent(affiliation, slot); // defModEvent.Invoke(); break; case StatChange.SpdUp: case StatChange.SpdDown: currentSpd = baseSpd; BattleEventManager.bem.InvokeSpdModEvent(affiliation, slot); // spdModEvent.Invoke(); break; case StatChange.HpUp: case StatChange.HpDestruct: maxHp = baseHp; BattleEventManager.bem.InvokeHpModEvent(affiliation, slot); // hpModEvent.Invoke(); break; case StatChange.MpUp: case StatChange.MpDown: maxMp = baseMp; BattleEventManager.bem.InvokeMpModEvent(affiliation, slot); // mpModEvent.Invoke(); break; default: throw new ArgumentOutOfRangeException("statChange", statChange, null); } }
private void UpdateIcon(StatChange statChange, Image icon) { icon.sprite = GetCorrectArrowSprite(statChange); if (statChange.StatModifier > 0) { icon.transform.localRotation = icon.sprite == doubleArrow? Quaternion.Euler(0, 0, -90) : Quaternion.Euler(0, 0, 90); } else if (statChange.StatModifier < 0) { icon.transform.localRotation = icon.sprite == doubleArrow? Quaternion.Euler(0, 0, 90) : Quaternion.Euler(0, 0, -90); } }
private int ModStat(StatChange statChange) { switch (statChange) { case StatChange.HpUp: return(Mathf.RoundToInt(baseHp * 0.15f)); case StatChange.HpDestruct: return(Mathf.RoundToInt(baseHp * -0.15f)); case StatChange.MpUp: return(Mathf.RoundToInt(baseHp * 0.15f)); case StatChange.MpDown: return(Mathf.RoundToInt(baseHp * -0.15f)); case StatChange.AtkUp: return(Mathf.RoundToInt(baseAtk * 0.25f)); case StatChange.DefUp: return(Mathf.RoundToInt(baseDef * 0.25f)); case StatChange.SpdUp: return(Mathf.RoundToInt(baseSpd * 0.2f)); case StatChange.AtkDown: return(Mathf.RoundToInt(baseAtk * -0.25f)); case StatChange.DefDown: return(Mathf.RoundToInt(baseDef * -0.25f)); case StatChange.SpdDown: return(Mathf.RoundToInt(baseSpd * -0.2f)); default: throw new ArgumentOutOfRangeException("statChange", statChange, null); } }
public bool DoesResistStatChangeRemoval(StatChange statChange) { return(ResistsStatChangeRemoval(statChange)); }
public bool DoesResistStatChange(StatChange statChange) { return(ResistsStatChange(statChange)); }
public void AddIcon(StatChange mod) { switch (mod.affectedStat) { case AffectedStat.Strength: strengthChange = mod; UpdateIcon(mod, strIcon); strIcon.gameObject.SetActive(true); strIcon.gameObject.GetComponent <StatusEffectTimer>().SetTimer(mod, unitBase); break; case AffectedStat.Magic: magicChange = mod; UpdateIcon(mod, magIcon); magIcon.gameObject.SetActive(true); magIcon.gameObject.GetComponent <StatusEffectTimer>().SetTimer(mod, unitBase); break; case AffectedStat.Accuracy: accuracyChange = mod; UpdateIcon(mod, accIcon); accIcon.gameObject.SetActive(true); accIcon.gameObject.GetComponent <StatusEffectTimer>().SetTimer(mod, unitBase); break; case AffectedStat.Initiative: initChange = mod; UpdateIcon(mod, initIcon); initIcon.gameObject.SetActive(true); initIcon.gameObject.GetComponent <StatusEffectTimer>().SetTimer(mod, unitBase); break; case AffectedStat.CriticalChance: critChange = mod; UpdateIcon(mod, critIcon); critIcon.gameObject.SetActive(true); critIcon.gameObject.GetComponent <StatusEffectTimer>().SetTimer(mod, unitBase); break; case AffectedStat.Defense: defenseChange = mod; UpdateIcon(mod, defIcon); defIcon.gameObject.SetActive(true); defIcon.gameObject.GetComponent <StatusEffectTimer>().SetTimer(mod, unitBase); break; case AffectedStat.Resistance: resistanceChange = mod; UpdateIcon(mod, resIcon); resIcon.gameObject.SetActive(true); resIcon.gameObject.GetComponent <StatusEffectTimer>().SetTimer(mod, unitBase); break; case AffectedStat.Agility: agilityChange = mod; UpdateIcon(mod, agiIcon); agiIcon.gameObject.SetActive(true); agiIcon.gameObject.GetComponent <StatusEffectTimer>().SetTimer(mod, unitBase); break; } }
public bool AfflictedByStatChange(StatChange statChange) { return(afflictedStatChanges.ContainsKey(statChange) && afflictedStatChanges[statChange]); }
protected bool ResistsStatChangeRemoval(StatChange statChange) { return(statChangeRemovalResists.ContainsKey(statChange) && statChangeRemovalResists[statChange]); }
protected void RemoveStatChange(StatChange statChange) { afflictedStatChanges[statChange] = false; }