public override void Kill() { if (!Alive) { return; } Alive = false; //base.Kill(); CoalescingEffect.Stop(true); PepperField.Stop(); NegativeParticles.Stop(); Astronaut.PlayKillSound(2); MyRigidbody.bodyType = RigidbodyType2D.Dynamic; Astronaut.TheAstronaut.dropResistance(.4f / (1f + HitsDone), this.transform.position, Astronaut.Element.Fire); exploded = false; if (Astronaut.AggressionLevelF >= 1f) { if (this.MyState == State.Exploding) { premature = true; explode(); } } dontstopparticles = true; deathKnockback(); }
public void explode() { if (exploded) { return; } CoalescingEffect.Stop(true); PepperField.Stop(); PepperField.Clear(); ExplosionEffect.Play(true); exploded = true; Astronaut plr = Astronaut.TheAstronaut; Am.am.oneshot(Am.am.M.FireBallEnemyExplosion); //if (Alive && !isStunned()) //{ Vector3 dif = (this.transform.position - plr.transform.position); float sc = 1f; float pre = 1f; /* * if (premature) * { * float f = ((Time.time - StateTime) / StateDuration); * pre = (.25f + (.75f * f)); * //ExplosionEffect.transform.localScale = (Vector3.one * pre); * } else * { * * ExplosionEffect.transform.localScale = (Vector3.one ); * } */ float radius = (4f * sc); //*pre float dist = (dif.magnitude / radius); if (dist < 1f) { //if ((Time.time - plr.lastDamageTakenTime) >= 1.5f) //{ Vector3 diff = (plr.transform.position - this.transform.position); HitsDone += 1f; float df = (1f - dist); //df = Mathf.Pow(df, 1f/(1f + (1f * Astronaut.AggressionLevelF))); if (plr.TakeDamage(80f * df, (diff.normalized * 30f) + new Vector3(0f, plr.JumpSpeed * 2f, 0f))) { HitsDone += 4f; } //} } //} }
void FixedUpdate() { Astronaut plr = Astronaut.TheAstronaut; if (Alive && !isStunned()) { bool stateexpired = (Time.time >= (StateTime + StateDuration)); switch (MyState) { case State.None: { break; } case State.Waiting: { MyRigidbody.bodyType = RigidbodyType2D.Dynamic; /* * float sdif = (this.transform.position.x - StartPosition.x); * if (Mathf.Abs(sdif) > 2f) * { * float sig = Mathf.Sign(sdif); * GoLeftGoRight = (sig >= 0f); * } * MyRigidbody.AddForce(new Vector2(GoLeftGoRight ? -1f : 1f, 0f) * 3f); */ //if (stateexpired) //{ bool ch = false; if ((plr != null) && (plr.Alive) && (!Astronaut.TheAstronaut.Quelling)) { Vector3 dif = (plr.transform.position - this.transform.position); if (((SurpriseFromLava && (Mathf.Abs(dif.x) < 3f)) || (!SurpriseFromLava)) && (dif.magnitude < 15f)) { RaycastHit2D rh = Physics2D.Linecast(this.transform.position, plr.transform.position, LayerMask.GetMask(new string[] { "Geometry" })); if ((rh.distance <= 0f)) { //The player is present. Invade their space //Debug.Log("Approach"); //ParticleSystem s = ShootWindUpGlow; InvadeStartTime = Time.time; setState(State.Invading, 2f); ch = true; //Debug.Log("Visible"); } else { //Debug.Log("hiding..."); } } } if (!ch) { setState(State.Waiting, .5f); } //} //if (MyRigidbody.velocity.x != 0f) //{ //MySpriteRenderer.flipX = (Mathf.Sign(MyRigidbody.velocity.x) < 0f); //} break; } case State.Invading: { bool ch = false; MyRigidbody.bodyType = RigidbodyType2D.Dynamic; if ((plr != null) && (plr.Alive) && (!Astronaut.TheAstronaut.Quelling)) { Vector3 dif = (plr.transform.position - this.transform.position); if (dif.magnitude < 10f) { RaycastHit2D rh = Physics2D.Linecast(this.transform.position, plr.transform.position, LayerMask.GetMask(new string[] { "Geometry" })); LookDirection = (int)((dif.x != 0) ? Mathf.Sign(dif.x) : LookDirection); if ((Time.time - LastLoveDuckTime) >= LOVEDUCKINTERVAL) { LoveDuck = !LoveDuck; LastLoveDuckTime = Time.time; if (!SurpriseFromLava) { Vector3 crs = Vector3.Cross(dif, Vector3.forward); MoveDirection = (((dif) + (crs * LoveDuckOffset * (LoveDuck ? 1f : -1f))).normalized * (1f - FreezeFactor) * MoveSpeed); MySpriteRenderer.sortingOrder = 0; MyCollider.enabled = true; } else { if (surprising) { ch = true; setState(State.Waiting, .5f); SurpriseFromLava = false; MyCollider.enabled = true; } else { MoveDirection = new Vector3(0f, 1f * MoveSpeed * (1f - FreezeFactor) * 2f * (1f - FreezeFactor), 0f); surprising = true; Am.am.oneshot(Am.am.M.LavaPillarSpout); NegativeParticles.Play(); MyCollider.enabled = false; } } } else { if (SurpriseFromLava) { if (SurpriseParticles) { SurpriseParticles.Emit(5); } } } if (rh.distance <= 0f) { // //ParticleSystem s = ShootWindUpGlow; if (dif.magnitude < 5f) { NearTime = Mathf.Clamp01(NearTime + (Time.deltaTime / 1f)); } else { NearTime = Mathf.Clamp01(NearTime - (Time.deltaTime / 1f)); } if ((dif.magnitude < 2f) && ((NearTime >= 1f))) { ch = true; setState(State.Exploding, 2f - ((1f * Astronaut.AggressionLevelF))); } else { //MyRigidbody.AddForce(new Vector2(dif.normalized.x, dif.normalized.y) * 5f); //setState(); } //Debug.Log("Visible"); } else { setState(State.Invading, .5f); } } else { setState(State.Waiting, .5f); } } if (LookDirection != 0f) { MySpriteRenderer.flipX = (LookDirection > 0f); } if (!ch) { MyRigidbody.velocity = new Vector3(MoveDirection.x, MoveDirection.y, 0f); } if (stateexpired) { SurpriseFromLava = false; StateTime = Time.time; } break; } case State.Exploding: { //MyRigidbody.bodyType = RigidbodyType2D.Static; //MyRigidbody.velocity = new Vector2(); if (!PepperField.isPlaying) { PepperField.Play(); } if (!CoalescingEffect.isPlaying) { CoalescingEffect.Play(true); } bool ch = false; float f = ((Time.time - StateTime) / StateDuration); MySpriteRenderer.transform.localScale = originalspritesize * (1f + ((1f + (1f * Astronaut.AggressionLevelF)) * f)); ExplosionEffect.transform.localScale = (Vector3.one * (.25f + (.75f * f))); if ((!Telegraphed) && (((StateTime + StateDuration) - Time.time) < TelegraphDelay)) { Telegraphed = true; TelegraphEffect.Play(true); } if (stateexpired) { explode(); setState(State.Aftermathing, 1f); } break; } case State.Aftermathing: { MySpriteRenderer.transform.localScale = originalspritesize; if (stateexpired) { setState(State.Waiting, 1f); } break; } } } else { if (Alive) { if (PepperField.isPlaying) { PepperField.Stop(); } if (CoalescingEffect.isPlaying) { CoalescingEffect.Stop(true); } setState(State.Waiting, .5f); if (isStunned()) { MySpriteRenderer.transform.localScale = originalspritesize; } } } freezeStep(); }