public override bool OnEvent(FSMEvent ev) { if (ev is AnimFSMEventIdle) { (ev as AnimFSMEventIdle).IsFinished = true; return(true); } if (ev is AnimFSMEventShowHideSword) { if ((ev as AnimFSMEventShowHideSword).show == true) { string animName = Agent.AnimSet.GetShowWeaponAnim(Agent.BlackBoard.weaponSelected); _timeToFinishWeapon = Time.timeSinceLevelLoad + Agent.AnimEngine[animName].length * 0.8f; AnimationTools.PlayAnim(Agent.AnimEngine, animName, 0.1f); } else { string animName = Agent.AnimSet.GetHideWeaponAnim(Agent.BlackBoard.weaponSelected); _timeToFinishWeapon = Time.timeSinceLevelLoad + (Agent.AnimEngine[animName].length * 0.9f); AnimationTools.PlayAnim(Agent.AnimEngine, animName, 0.1f); } _eventSword = ev as AnimFSMEventShowHideSword; return(true); } return(false); }
public override void OnExit(Phenix.Unity.AI.WorldState ws) { if (_eventSword != null) { _eventSword.Release(); _eventSword = null; } base.OnExit(ws); }
protected override void Initialize(FSMEvent ev) { Agent.BlackBoard.motionType = MotionType.NONE; Agent.BlackBoard.moveDir = Vector3.zero; Agent.BlackBoard.speed = 0; _timeToFinishWeapon = 0; _eventSword = null; if (ev is AnimFSMEvent) { (ev as AnimFSMEvent).IsFinished = true; } }
public override void OnUpdate() { if (_eventSword != null && _timeToFinishWeapon < Time.timeSinceLevelLoad) // 拔刀或者收刀完毕 { Agent.BlackBoard.weaponState = _eventSword.show ? WeaponState.IN_HAND : WeaponState.NOT_IN_HANDS; _eventSword.IsFinished = true; _eventSword = null; _timeToFinishWeapon = 0; AnimationTools.PlayAnim(Agent.AnimEngine, Agent.AnimSet.GetIdleAnim( Agent.BlackBoard.weaponSelected, Agent.BlackBoard.weaponState), 0.2f); // 播放待机动作 } if (Agent.IsPlayer == false) { //Owner.BlackBoard.Vigor = Owner.BlackBoard.Vigor + 0.2f; } }
void SendEvent() { _eventSword = AnimFSMEventShowHideSword.pool.Get(); _eventSword.show = true; Agent.FSMComponent.SendEvent(_eventSword); }
public override void Reset() { base.Reset(); _eventSword = null; }
public override void Reset() { base.Reset(); _eventSword = null; idleBeginTime = hideSwordDelay = 0; }
// Update is called once per frame protected override void Update() { base.Update(); if (Input.GetKey(KeyCode.Alpha1)) { AnimFSMEventGoTo ev = AnimFSMEventGoTo.pool.Get(); ev.moveType = MoveType.FORWARD; ev.motionType = MotionType.RUN; ev.finalPosition = Agent.Decision.GetBestAttackStart(Agent.BlackBoard.desiredTarget); Agent.FSMComponent.SendEvent(ev); } if (Input.GetKey(KeyCode.Alpha2)) { AnimFSMEventShowHideSword ev = AnimFSMEventShowHideSword.pool.Get(); ev.show = true; Agent.BlackBoard.weaponState = WeaponState.IN_HAND; Agent.FSMComponent.SendEvent(ev); } if (Input.GetKey(KeyCode.Alpha3)) { AnimFSMEventIdle ev = AnimFSMEventIdle.pool.Get(); Agent.FSMComponent.SendEvent(ev); } if (Input.GetKey(KeyCode.Alpha4)) { AnimFSMEventRotate ev = AnimFSMEventRotate.pool.Get(); ev.target = Agent.BlackBoard.desiredTarget; //ev.rotationModifier = 0.8f; Agent.FSMComponent.SendEvent(ev); } if (Input.GetKey(KeyCode.Alpha5)) { AnimFSMEventCombatMove ev = AnimFSMEventCombatMove.pool.Get(); ev.target = Agent.BlackBoard.desiredTarget; ev.minDistanceToTarget = 3; ev.moveType = MoveType.FORWARD; if (Agent.agentType == AgentType.DOUBLE_SWORDS_MAN || Agent.agentType == AgentType.SWORD_MAN) // 这里暂时偷个懒,另外扩展一个不同参数的goapaction才是更灵活的做法 { ev.motionType = MotionType.WALK; ev.totalMoveDistance = Agent.BlackBoard.DistanceToDesiredTarget - (Agent.BlackBoard.combatRange * 0.8f); } else { ev.totalMoveDistance = UnityEngine.Random.Range((Agent.BlackBoard.DistanceToDesiredTarget - (Agent.BlackBoard.combatRange * 0.5f)) * 0.5f, Agent.BlackBoard.DistanceToDesiredTarget - (Agent.BlackBoard.combatRange * 0.5f)); } Agent.FSMComponent.SendEvent(ev); } if (Input.GetKey(KeyCode.Alpha6)) { AnimFSMEventCombatMove ev = AnimFSMEventCombatMove.pool.Get(); ev.moveType = MoveType.BACKWARD; ev.target = Agent.BlackBoard.desiredTarget; ev.minDistanceToTarget = 0; if (Agent.agentType == AgentType.DOUBLE_SWORDS_MAN) // 这里暂时偷个懒,另外扩展一个不同参数的goapaction才是更灵活的做法 { ev.motionType = MotionType.RUN; ev.totalMoveDistance = UnityEngine.Random.Range(4f, 6f); } else { ev.totalMoveDistance = UnityEngine.Random.Range(2f, 5f); } Agent.FSMComponent.SendEvent(ev); } if (Input.GetKey(KeyCode.Alpha7)) { AnimFSMEventCombatMove ev = AnimFSMEventCombatMove.pool.Get(); ev.moveType = MoveType.LEFTWARD; ev.target = Agent.BlackBoard.desiredTarget; ev.totalMoveDistance = UnityEngine.Random.Range(2.0f, 4.0f); ev.minDistanceToTarget = Agent.BlackBoard.DistanceToDesiredTarget * 0.7f; Agent.FSMComponent.SendEvent(ev); } if (Input.GetKey(KeyCode.Alpha8)) { AnimFSMEventCombatMove ev = AnimFSMEventCombatMove.pool.Get(); ev.moveType = MoveType.RIGHTWARD; ev.target = Agent.BlackBoard.desiredTarget; ev.totalMoveDistance = UnityEngine.Random.Range(2.0f, 4.0f); ev.minDistanceToTarget = Agent.BlackBoard.DistanceToDesiredTarget * 0.7f; Agent.FSMComponent.SendEvent(ev); } if (Input.GetKey(KeyCode.Alpha9)) { AnimFSMEventShowHideSword ev = AnimFSMEventShowHideSword.pool.Get(); ev.show = false; Agent.BlackBoard.weaponState = WeaponState.NOT_IN_HANDS; Agent.FSMComponent.SendEvent(ev); } if (Input.GetKey(KeyCode.Alpha0)) { AnimFSMEventAttackMelee ev = AnimFSMEventAttackMelee.pool.Get(); ev.target = Agent.BlackBoard.desiredTarget; //ev.attackType = OrderAttackType.X; //ev.animAttackData = Agent.GetComponent<AnimSet>().GetFirstAttackAnim(Agent.BlackBoard.weaponSelected, // ev.attackType); Agent.FSMComponent.SendEvent(ev); } if (Input.GetKey(KeyCode.Minus)) { AnimFSMEventAttackWhirl ev = AnimFSMEventAttackWhirl.pool.Get(); ev.data = Agent.GetComponent <AnimSet>().GetWhirlAttackAnim(); Agent.FSMComponent.SendEvent(ev); } }