public void OnAnimEvent(AnimEventID id) { if (id == AnimEventID.ShamanAttackEnd) { if (ShamanManager.Get().m_AttackVersion == ShamanManager.AttackVersion.Fast) { if (base.transform.position.Distance(this.m_Player.transform.position) <= this.m_Agent.stoppingDistance) { this.SetState(Shaman.State.Attack); return; } this.SetState(Shaman.State.MoveToPlayer); return; } else if (ShamanManager.Get().m_AttackVersion == ShamanManager.AttackVersion.Slow) { if (this.m_AttacksCount == 0 && base.transform.position.Distance(this.m_Player.transform.position) <= this.m_Agent.stoppingDistance && UnityEngine.Random.Range(0f, 1f) > this.m_DoubleAttackChance) { this.SetState(Shaman.State.Attack); this.m_AttacksCount++; return; } this.SetState(Shaman.State.Idle); this.m_AttacksCount = 0; return; } } else if (id == AnimEventID.ShamanDamage) { this.TryGiveDamage(); } }
private void OnEnterState() { this.m_EnterStateTime = Time.time; switch (this.m_State) { case Shaman.State.MoveToPlayer: this.m_Animator.SetTrigger(this.m_MoveHash); this.m_Agent.speed = this.m_MoveSpeed; return; case Shaman.State.Attack: this.m_Animator.SetTrigger((ShamanManager.Get().m_AttackVersion == ShamanManager.AttackVersion.Slow) ? this.m_AttackHash : this.m_AttackFastHash); this.m_Agent.speed = this.m_MoveSpeed; return; case Shaman.State.Idle: this.m_Animator.SetTrigger(this.m_IdleHash); return; case Shaman.State.Spawn: this.m_Animator.SetTrigger(this.m_IdleHash); return; default: return; } }
public override bool TakeDamage(DamageInfo info) { base.TakeDamage(info); UnityEngine.Object.Destroy(base.gameObject); ShamanManager.Get().OnKillShaman(); return(true); }
private bool ShouldSetupDestination() { if (ShamanManager.Get().m_AttackVersion == ShamanManager.AttackVersion.Slow) { return(this.m_State == Shaman.State.MoveToPlayer && this.m_Agent.destination.Distance(this.m_Player.transform.position) > 0.2f); } return(this.m_Agent.destination.Distance(this.m_Player.transform.position) > 0.2f); }
private void UpdateMoveSpeed() { if (ShamanManager.Get().m_AttackVersion == ShamanManager.AttackVersion.Slow) { this.m_Animator.SetFloat(this.m_MoveSpeedHash, (this.m_State == Shaman.State.MoveToPlayer) ? this.m_Agent.velocity.magnitude : 0f); return; } this.m_Animator.SetFloat(this.m_MoveSpeedHash, this.m_Agent.velocity.magnitude); }
private void UpdateState() { switch (this.m_State) { case Shaman.State.MoveToPlayer: if (this.ShouldSetupDestination()) { this.SetupDestination(); } if (base.transform.position.Distance(this.m_Player.transform.position) <= this.m_Agent.stoppingDistance) { this.SetState(Shaman.State.Attack); return; } break; case Shaman.State.Attack: if (this.ShouldSetupDestination()) { this.SetupDestination(); return; } break; case Shaman.State.Idle: if (ShamanManager.Get().m_AttackVersion == ShamanManager.AttackVersion.Fast && Time.time - this.m_EnterStateTime >= 0.5f && base.transform.position.Distance(this.m_Player.transform.position) > this.m_Agent.stoppingDistance + 1f) { this.SetState(Shaman.State.MoveToPlayer); return; } if (Time.time - this.m_EnterStateTime >= 2f) { if (base.transform.position.Distance(this.m_Player.transform.position) <= this.m_Agent.stoppingDistance) { this.SetState(Shaman.State.Attack); return; } this.SetState(Shaman.State.MoveToPlayer); return; } break; case Shaman.State.Spawn: if (Time.time - this.m_EnterStateTime >= 1f) { this.SetState(Shaman.State.MoveToPlayer); } break; default: return; } }
private void TryGiveDamage() { if (base.transform.position.Distance(this.m_Player.transform.position) > this.m_Agent.stoppingDistance) { return; } DamageInfo damageInfo = new DamageInfo(); damageInfo.m_Damager = base.gameObject; damageInfo.m_Damage = ((ShamanManager.Get().m_AttackVersion == ShamanManager.AttackVersion.Fast) ? 5f : 20f); this.m_Player.TakeDamage(damageInfo); CJDebug.Log("TryGiveDamage"); }