/// <summary> /// 测试一下攻击碰撞盒检测 /// </summary> /// <param name="caster"></param> /// <param name="atkData"></param> public static void attack(BaseEntity caster, AttackData atkData) { var ier = EntityMgr.getPool().GetEnumerator(); long uid = caster.UID; while (ier.MoveNext()) { if (ier.Current.Value.UID != uid) { if (Physics3D.isCollision(atkData.hitBox, ier.Current.Value.HitBox)) { FSMArgs args = Pool.PoolMgr.Instance.getData <FSMArgs>(); HitData data = Pool.PoolMgr.Instance.getData <HitData>(); Vector2 dir = caster.DyBox.centerX - ier.Current.Value.DyBox.centerX > 0 ? Vector2.left : Vector2.right; data.attackDir = dir; data.duration = 4; data.startFrame = FrameMgr.NowFrame; data.repelValue = 0.5f; args.hitData = data; ier.Current.Value.transFsm(FSM_Flag.StandHit, args); } } } }
public virtual bool onChangeState(StateType type, FSMArgs args = null) { if (this.fsm != null) { SType = type; return(this.fsm.onChangeState(type, args)); } return(false); }
public override void onEnter(FSMArgs args = null) { hitData = args.hitData; if (hitData == null) { Agent.transFsm(FSM_Flag.Idle, null, true); } //强转到站立受击 Agent.transFsm(FSM_Flag.StandHit, args); }
public override void onEnter(FSMArgs args = null) { hitData = args.hitData; int animIndex = hitData.hitAnimIndex; string animName = "hit"; Agent.playAnim(animName); //回收一下 Pool.PoolMgr.Instance.recyleData(args); }
/// <summary> /// 接口 转换状态 /// </summary> /// <param name="flag"></param> /// <param name="args"></param> public void transFsm(FSM_Flag flag, FSMArgs args = null, bool forceTrans = false) { if (this.fsm != null) { bool isSuccess = this.fsm.transFsm(flag, args, forceTrans); if (isSuccess) { Flag = flag; } } }
public virtual void onReleaseSkill(int skillId, FSMArgs args = null) { StateType stateType = StateType.die; if (args != null && args.skillData != null) { stateType = args.skillData.fsmStateType; } bool canChangeState = isCanChangeState(stateType); // Debug.LogError("释放技能 id == " + skillId + " stateType : " + stateType.ToString()); if (MySkill.releaseSkill(skillId, canChangeState) && canChangeState) { onChangeState(stateType, args); onReleaseSkillSuccess(skillId); } }
//切换状态 public bool onChangeState(StateType type, FSMArgs args) { bool isCan = true; if (currState != null) { isCan = currState.isCanChangeTo(type); } if (isCan) { if (dictStates.ContainsKey(type)) { nextState = dictStates[type]; nextState.setArgs(args); } } return(isCan); }
/// <summary> /// 转换状态 /// </summary> /// <param name="flag"></param> /// <param name="args"></param> public bool transFsm(FSM_Flag flag, FSMArgs args = null, bool forceTrans = false) { bool isSuccess = false; if (pool.ContainsKey(flag)) { if (currState == null || forceTrans || currState.allow(flag)) { if (currState != null) { currState.onExit(); } currState = pool[flag]; currState.onEnter(args); isSuccess = true; } } return(isSuccess); }
//当接受到释放技能请求 private void onCastSkill(Message msg) { int skillId = (int)msg["skillId"]; if (dictSkillData == null) { initData(); } SkillItemUIData skillData = null; if (dictSkillData.ContainsKey(skillId)) { skillData = dictSkillData[skillId]; } EntityMainPlayer role = EntityMgr.Instance.getMainPlayer() as EntityMainPlayer; if (role != null) { if (skillData != null) { if (skillData.skillModeType == SkillModeType.baseSkill) { MessageCenter.Instance.SendMessage(MsgCmd.On_Combo_Release_Success, this); if (role.isCanChangeState(StateType.baseCombo)) { FSMArgs args = new FSMArgs(); args.comboSkills = getComboSkills(); role.onChangeState(StateType.baseCombo, args); } } else { FSMArgs args = new FSMArgs(); args.skillData = skillData; role.onReleaseSkill(skillId, args); } } } }
public override void onEnter(FSMArgs args = null) { this.Agent.playAnim("idle", true); }
public virtual void onEnter(FSMArgs args = null) { }
public override void onEnter(FSMArgs args = null) { Agent.modifyCompleteEvent(true); Agent.playAnim("shoot"); }
public override void onEnter(FSMArgs args = null) { Agent.modifyCompleteEvent(false); this.Agent.playAnim("jump old", true); }
public virtual void setArgs(FSMArgs args) { this.args = args; }