public CRT_State(CRT_StateManager myStateManager, CRT_Boss thisBoss, string name, CRT_State previous) { SM = myStateManager; Boss = thisBoss; Name = name; Previous = previous; }
IEnumerator Combo(CRT_State[] attacks) { comboStep = 0; comboLength = attacks.Length; comboActive = true; foreach (CRT_State state in attacks) { CRT_State S = attacks[comboStep]; //PlayAnimation(AnimationState.CRT_Single_Back); comboNextState = S; ChangeState(PrepareAttack); // Take Aim yield return(new WaitForSeconds(S.GetPrepDuration())); //Boss.PlaySound(); ChangeState(S); // Attack!! yield return(new WaitForSeconds(S.GetDuration())); ComboState.SetPrevious(S); //ChangeState(ComboState); yield return(new WaitForSeconds(ComboState.GetPrevious().GetCooldown())); comboStep++; // //Prepare, S, BackToIdle } //ChangeState(Idle); comboActive = false; }
public void ChangeState(CRT_State newState) { if (currentState != null) { currentState.Leave(); } currentState = newState; currentState.Enter(); }
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; }
/*private float DetermineDuration(CRT_State attack) // Set respective duration for the attack * { * switch (attack.GetName()) * { * case "Single": * if (SM.comboActive) * return Boss.PrepDur_Combo_fast; * else * return Boss.PrepDuration_Single; * case "DoubleHoz": * if (SM.comboActive) * return Boss.PrepDur_Combo_medium; * else * return Boss.PrepDuration_Double; * case "DoubleVer": * if (SM.comboActive) * return Boss.PrepDur_Combo_medium; * else * return Boss.PrepDuration_Double; * default: * return 0; * } * }*/ public override void Enter() { Boss.sp.color = Color.yellow; Location playerLoc = FindPlayer(); // Find the location the player is occupying AttackToPerform = GetNextComboStep(); // Determine which attack to perform (random, currently) //Duration = DetermineDuration(AttackToPerform); // Determine duration of the current attack Boss.targets = DetermineTargets(AttackToPerform, playerLoc); // Determine the target locations based on the current attack Boss.TargetLocations(); // Target (visually indicate - yellow) those locations SM.DetermineAnimation(AttackToPerform.GetName()); }
public CRT_State_Combo(CRT_StateManager myStateManager, CRT_Boss myBoss, string myName, CRT_State myPrev) : base(myStateManager, myBoss, myName, myPrev) { }
private List <Location> DetermineTargets(CRT_State attack, Location player) // aquire targets according to attack { List <Location> targets = new List <Location>(); switch (attack.GetName()) { case "Single": targets.Add(player); Boss.SetSound(0); return(targets); case "DoubleHoz": if (player.isUp) // if up { for (int i = 0; i < Boss.locations.Length; i++) { if (Boss.locations[i].isUp) { targets.Add(Boss.locations[i]); } } } else // if down { for (int i = 0; i < Boss.locations.Length; i++) { if (!Boss.locations[i].isUp) { targets.Add(Boss.locations[i]); } } } Boss.SetSound(0); return(targets); case "DoubleVer": if (player.isRight) // if right { for (int i = 0; i < Boss.locations.Length; i++) { if (Boss.locations[i].isRight) { targets.Add(Boss.locations[i]); } } } else // if left { for (int i = 0; i < Boss.locations.Length; i++) { if (!Boss.locations[i].isRight) { targets.Add(Boss.locations[i]); } } } Boss.SetSound(0); return(targets); case "AllSimul": foreach (Location t in Boss.locations) { targets.Add(t); } Boss.SetSound(2); return(targets); default: return(targets); } }
public void SetPrevious(CRT_State state) { Previous = state; }