public CRT_State(CRT_StateManager myStateManager, CRT_Boss thisBoss, string name, CRT_State previous)
 {
     SM       = myStateManager;
     Boss     = thisBoss;
     Name     = name;
     Previous = previous;
 }
 public CRT_State(CRT_StateManager myStateManager, CRT_Boss thisBoss, string name, float dur)
 {
     SM       = myStateManager;
     Boss     = thisBoss;
     Name     = name;
     Duration = dur;
 }
 public CRT_State(CRT_StateManager myStateManager, CRT_Boss thisBoss, string name, float dur, float prepDur, float cooldown, bool isBlockable)
 {
     SM               = myStateManager;
     Boss             = thisBoss;
     Name             = name;
     Duration         = dur;
     PrepDuration     = prepDur;
     Cooldown         = cooldown;
     this.isBlockable = isBlockable;
 }
    private void Start()
    {
        Main_SM = this;
        Boss    = this.GetComponent <CRT_Boss>();
        player  = FindObjectOfType <Player>();

        Idle          = new CRT_State_Idle(Main_SM, Boss, "Idle", Boss.TimeBetweenAttacks_P1);
        PrepareAttack = new CRT_State_PrepareAttack(Main_SM, Boss, "Prepare", 0);
        Stunned       = new CRT_State_Stunned(Main_SM, Boss, "Stunned", Boss.StunnedDuration);
        Dead          = new CRT_State_Dead(Main_SM, Boss, "Dead", 0);

        SingleAttack_normal = new CRT_State_Attack(Main_SM, Boss, "Single", Boss.SingleDuration_norm, Boss.SingleDuration_normPrep, Boss.SingleCooldown_norm, true);
        SingleAttack_quick  = new CRT_State_Attack(Main_SM, Boss, "Single", Boss.SingleDuration_quick, Boss.SingleDuration_quickPrep, Boss.SingleCooldown_quick, true);
        SingleAttack_long   = new CRT_State_Attack(Main_SM, Boss, "Single", Boss.SingleDuration_long, Boss.SingleDuration_longPrep, Boss.SingleCooldown_long, true);
        DoubleAttack_hoz    = new CRT_State_Attack(Main_SM, Boss, "DoubleHoz", Boss.DoubleDuration_norm, Boss.DoubleDuration_normPrep, Boss.DoubleCooldown_norm, true);
        DoubleAttack_ver    = new CRT_State_Attack(Main_SM, Boss, "DoubleVer", Boss.DoubleDuration_norm, Boss.DoubleDuration_normPrep, Boss.DoubleCooldown_norm, true);
        AllAttack_simul     = new CRT_State_Attack(Main_SM, Boss, "AllSimul", Boss.AllDuration_norm, Boss.AllDuration_normPrep, Boss.AllCooldown_norm, true);

        attackStateList = new CRT_State[] { SingleAttack_normal, DoubleAttack_hoz, DoubleAttack_ver, AllAttack_simul };

        ComboState = new CRT_State_Combo(Main_SM, Boss, "Combo", Idle);

        Attack_1   = new CRT_State[] { SingleAttack_normal };
        Attack_2_h = new CRT_State[] { DoubleAttack_hoz };
        Attack_2_v = new CRT_State[] { DoubleAttack_ver };
        Attack_3   = new CRT_State[] { AllAttack_simul };

        Combo_1 = new CRT_State[] { SingleAttack_normal, SingleAttack_normal, DoubleAttack_hoz };
        Combo_2 = new CRT_State[] { SingleAttack_normal, SingleAttack_normal, SingleAttack_normal };
        Combo_3 = new CRT_State[] { SingleAttack_normal, SingleAttack_normal, SingleAttack_normal, SingleAttack_normal };
        Combo_4 = new CRT_State[] { DoubleAttack_hoz, DoubleAttack_hoz, AllAttack_simul };
        Combo_5 = new CRT_State[] { DoubleAttack_hoz, SingleAttack_normal, SingleAttack_normal, DoubleAttack_hoz, SingleAttack_normal };
        Combo_6 = new CRT_State[] { DoubleAttack_ver, DoubleAttack_ver, DoubleAttack_hoz, DoubleAttack_hoz, AllAttack_simul };
        Combo_7 = new CRT_State[] { DoubleAttack_ver, SingleAttack_normal, SingleAttack_normal, DoubleAttack_hoz, SingleAttack_normal, SingleAttack_normal };
        Combo_8 = new CRT_State[] { AllAttack_simul, SingleAttack_normal, SingleAttack_normal, SingleAttack_normal, DoubleAttack_hoz };


        // PHASE 1: MOVE LIST
        MovesList_1 = new CRT_State[][] { Attack_1, Attack_2_v, Combo_1, Combo_2 };
        // PHASE 2: MOVE LIST
        MovesList_2 = new CRT_State[][] { Attack_3, Combo_1, Combo_2, Combo_3, Combo_4 };
        // PHASE 2: MOVE LIST
        MovesList_3 = new CRT_State[][] { Combo_4, Combo_5, Combo_6, Combo_7, Combo_8 };

        /*MovesList_1 = new CRT_State[][] { Attack_1 };
        *  // PHASE 2: MOVE LIST
        *  MovesList_2 = new CRT_State[][] { Attack_1 };
        *  // PHASE 2: MOVE LIST
        *  MovesList_3 = new CRT_State[][] { Attack_1 };*/

        ChangeState(Idle); // Starting state is idle
        currentAnimationState = AnimationState.CRT_Idle;
    }
 public CRT_State_Stunned(CRT_StateManager myStateManager, CRT_Boss myBoss, string myName, float myDur) : base(myStateManager, myBoss, myName, myDur)
 {
 }
 public CRT_State_Combo(CRT_StateManager myStateManager, CRT_Boss myBoss, string myName, CRT_State myPrev) : base(myStateManager, myBoss, myName, myPrev)
 {
 }
 public CRT_State_PrepareAttack(CRT_StateManager myStateManager, CRT_Boss myBoss, string myName, float myDur) : base(myStateManager, myBoss, myName, myDur)
 {
 }
 public CRT_State_Attack(CRT_StateManager myStateManager, CRT_Boss myBoss, string myName, float myDur, float myPrepDur, float myCd, bool myBlock) : base(myStateManager, myBoss, myName, myDur, myPrepDur, myCd, myBlock)
 {
 }