public override void Act(GameObject player, GameObject npc) { FlagshipBoss flagship = npc.GetComponent <FlagshipBoss>(); if (flagship) { // Update transform flagship.UpdatePosition(); flagship.UpdateRotation(player); // Use weapons if (Time.time >= flagship.NextFireTime) { // Lasers flagship.FireAllLasers(); // Bubble red flagship.weapons[0].fire(); flagship.StartCoroutine(flagship.delayFire(flagship.weapons[0], 3.0f)); flagship.StartCoroutine(flagship.delayFire(flagship.weapons[0], 6.0f)); // Bolt flagship.StartCoroutine(flagship.delayAimFire(flagship.weapons[1], player, 2.0f)); flagship.StartCoroutine(flagship.delayAimFire(flagship.weapons[2], player, 6.0f)); flagship.StartCoroutine(flagship.delayAimFire(flagship.weapons[3], player, 7.0f)); flagship.StartCoroutine(flagship.delayAimFire(flagship.weapons[2], player, 8.0f)); flagship.StartCoroutine(flagship.delayAimFire(flagship.weapons[3], player, 9.0f)); // Sphere flagship.StartCoroutine(flagship.delayAimFire(flagship.weapons[4], player, 4.0f)); flagship.StartCoroutine(flagship.delayAimFire(flagship.weapons[7], player, 4.25f)); flagship.StartCoroutine(flagship.delayAimFire(flagship.weapons[5], player, 4.5f)); flagship.StartCoroutine(flagship.delayAimFire(flagship.weapons[6], player, 4.75f)); flagship.StartCoroutine(flagship.delayAimFire(flagship.weapons[4], player, 8.0f)); flagship.StartCoroutine(flagship.delayAimFire(flagship.weapons[7], player, 8.25f)); // Set next fire time float cooldown = 10.0f; flagship.NextFireTime = Time.time + cooldown; } } else { Debug.LogWarning("This state can only handle Flagship."); } }
public override void Reason(GameObject player, GameObject npc) { FlagshipBoss flagship = npc.GetComponent <FlagshipBoss>(); if (flagship) { // Drop to low health float hpProportion = (float)flagship.health / flagship.maxHealth; if (hpProportion < 0.25f) { flagship.SetTransition(FSMSystem.Transition.LowHealth); } } else { Debug.LogWarning("This state can only handle Flagship."); } }