Esempio n. 1
0
    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);
    }
Esempio n. 2
0
 public override void OnExit(Phenix.Unity.AI.WorldState ws)
 {
     if (_eventSword != null)
     {
         _eventSword.Release();
         _eventSword = null;
     }
     base.OnExit(ws);
 }
Esempio n. 3
0
    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;
        }
    }
Esempio n. 4
0
    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;
        }
    }
Esempio n. 5
0
 void SendEvent()
 {
     _eventSword      = AnimFSMEventShowHideSword.pool.Get();
     _eventSword.show = true;
     Agent.FSMComponent.SendEvent(_eventSword);
 }
Esempio n. 6
0
 public override void Reset()
 {
     base.Reset();
     _eventSword = null;
 }
Esempio n. 7
0
 public override void Reset()
 {
     base.Reset();
     _eventSword   = null;
     idleBeginTime = hideSwordDelay = 0;
 }
Esempio n. 8
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);
     }
 }