public override void TakeDamage(float damage)
    {
        float resolvedDamage = damage * DefenseDamageReduction * DamageReduction;

        Health -= resolvedDamage;

        FCTInterface.SpawnText(resolvedDamage.ToString("0"), Camera.main.WorldToScreenPoint(this.handler.transform.position) + FCTOffset, 92f);

        if (Health <= 0f)
        {
            //dead
            //handler.Die(); // doing this in the battle controller now
            handler.GetHit();

            // TRIGGER OnDeath here
            if (boss.HasPassiveSkill(SkillTriggers.OnDeath))
            {
                List <Skill> passives = boss.GetPassiveSkills(SkillTriggers.OnDeath);
                if (passives.Count > 0)
                {
                    // Add it to the battlecontroller incase multiple actors have died and multiple skills need to be activated
                    foreach (Skill passive in passives)
                    {
                        controller.AddOnDeathSKill(this, passive);
                    }
                }
            }
        }
        else
        {
            handler.GetHit();
        }
        Health = UnityEngine.Mathf.Max(0f, Health);

        // Check for HP phase change
        BossPatternTrigger Trigger = boss.GetCurrentPhaseTrigger();

        if (Trigger != null)
        {
            Debug.Log("[HealthTrigger] " + boss.Name + " has trigger: [" + Trigger.ToString() + "]\n");
        }

        if (Trigger != null && Trigger.Trigger == BossPhaseTriggerType.HealthPercent)
        {
            float percent = Health / (float)boss.MaxHealth;

            // if the condition is met, change the phase
            if (percent < Trigger.Condition)
            {
                boss.BossPhase = Trigger.PhaseChange;
                FCTInterface.SpawnText(Trigger.MessageOnChange, Camera.main.WorldToScreenPoint(this.handler.transform.position) + FCTOffset, 72f, textColor: Color.blue);
                Debug.Log("[HealthTrigger] " + boss.Name + " has triggered and changed from phase {" + Trigger.TargetPhase + "} to phase {" + boss.BossPhase + "}\n");
            }
        }

        if (onHealthChanged != null)
        {
            onHealthChanged();
        }
    }
    public override void OnAllyDeath()
    {
        BossPatternTrigger Trigger = boss.GetCurrentPhaseTrigger();

        if (Trigger != null)
        {
            Debug.Log("[OnAllyDeathTrigger] " + boss.Name + " has trigger: [" + Trigger.ToString() + "]\n");
        }

        if (Trigger != null && Trigger.Trigger == BossPhaseTriggerType.OnAllyDeath)
        {
            boss.BossPhase = Trigger.PhaseChange;
            FCTInterface.SpawnText(Trigger.MessageOnChange, Camera.main.WorldToScreenPoint(this.handler.transform.position) + FCTOffset, 72f, textColor: Color.blue);
            Debug.Log("[OnAllyDeathTrigger] " + boss.Name + " has triggered and changed from phase {" + Trigger.TargetPhase + "} to phase {" + boss.BossPhase + "}\n");
        }
    }
    public void UpdateTurnCount()
    {
        TurnCount++;

        BossPatternTrigger Trigger = boss.GetCurrentPhaseTrigger();

        if (Trigger != null)
        {
            Debug.Log("[TurnTrigger] " + boss.Name + " has trigger: [" + Trigger.ToString() + "]\n");
        }

        if (Trigger != null && Trigger.Trigger == BossPhaseTriggerType.TurnsPassed)
        {
            if (TurnCount >= Trigger.Condition)
            {
                boss.BossPhase = Trigger.PhaseChange;
                FCTInterface.SpawnText(Trigger.MessageOnChange, Camera.main.WorldToScreenPoint(this.handler.transform.position) + FCTOffset, 72f, textColor: Color.blue);
                TurnCount = 0;
                Debug.Log("[TurnTrigger] " + boss.Name + " has triggered and changed from phase {" + Trigger.TargetPhase + "} to phase {" + boss.BossPhase + "}\n");
            }
        }
    }