// *********************************************************************** // Assembly : Game // Author : Kimch // Created : 2020-09-02 // Description : // Last Modified By : // Last Modified On : // *********************************************************************** // // // *********************************************************************** using System.Collections.Generic; using UnityEngine; namespace G { /// /// 受击 /// public class Stat_HitAction : Stat_BaseAction { private bool m_isDownHigher; private float f_risefactor; private bool m_bAnimEnd = true; public Stat_HitAction(Stat_StateManager statMgr) : base(statMgr) { } public override bool Enter(Dictionary param, bool clearDelegates = false) { base.Enter(param, clearDelegates); m_char.StopAnimation(); if (param.ContainsKey("down")) { //m_curAniLength = m_char.PlayAnimation("behitdown"); m_isDownHigher = false; } else if (param.ContainsKey("down_hight")) { //m_curAniLength = m_char.PlayAnimation("behitfly"); m_char.transform.Rotate(0f, Random.Range(0, 360), 0f); m_isDownHigher = false; } else if (param.ContainsKey("down_higher")) { //m_curAniLength = m_char.PlayAnimation("behitdown"); m_char.transform.Rotate(0f, Random.Range(0, 360), 0f); m_isDownHigher = true; f_risefactor = 3f; } else { if (!param.ContainsKey("higher_hit")) { return false; } //m_curAniLength = m_char.PlayAnimation("behitdown"); m_isDownHigher = true; f_risefactor = 0.6f; } if (/*!LevelData.IsPVPMode &&*/ m_char.IsPlayer()) { m_char.invincible = true; } m_bAnimEnd = false; if (!m_isDownHigher) { m_statMgr.AddTimer(m_curAniLength, AnimationEnd_CB); } return true; } private bool AnimationEnd_CB(object[] param) { m_bAnimEnd = true; return SetCurActionState(enStat.STAT_ACTION_IDLE); } public override bool Exit() { if (/*!LevelData.IsPVPMode &&*/ m_char.IsPlayer()) { m_char.invincible = false; } return base.Exit(); } public override bool UpdateDelegate() { if (m_isDownHigher) { m_char.transform.position += Vector3.up * f_risefactor * Time.deltaTime; f_risefactor -= Time.deltaTime * 5f; Vector3 position = m_char.transform.position; if (position.y < 0f) { Transform transform = m_char.transform; Vector3 position2 = m_char.transform.position; float x = position2.x; Vector3 position3 = m_char.transform.position; transform.position = new Vector3(x, 0f, position3.z); m_isDownHigher = false; f_risefactor = 0f; m_bAnimEnd = true; SetCurActionState(enStat.STAT_ACTION_IDLE); } } return true; } public override bool CanTransition(enStat stat) { //if (MonoInstancePool.getInstance().curGuideModule == 0 && stat > enStat.STAT_ACTION_SKILL && stat < enStat.STAT_ACTION_SKILL_MAX) //{ // return true; //} bool result = false; if (m_bAnimEnd || stat == enStat.STAT_ACTION_DEAD) { result = true; } if (stat == enStat.STAT_ACTION_CHACKLES) { result = true; } if (stat == enStat.STAT_ACTION_HIT && !m_isDownHigher) { m_char.StopAnimation(); result = true; } if (stat == enStat.STAT_ACTION_XULI_HIT) { result = true; } return result; } } }