public override void OnExit(Phenix.Unity.AI.WorldState ws)
 {
     if (_eventRoll != null)
     {
         _eventRoll.Release();
         _eventRoll = null;
     }
     base.OnExit(ws);
 }
 void SendEvent()
 {
     if (_rollDir == Vector3.zero)
     {
         return;
     }
     _eventRoll           = AnimFSMEventRoll.pool.Get();
     _eventRoll.direction = _rollDir;
     Agent.FSMComponent.SendEvent(_eventRoll);
 }
    protected override void Initialize(FSMEvent ev)
    {
        _eventRoll           = ev as AnimFSMEventRoll;
        _currentMoveTime     = 0;
        _currentRotationTime = 0;
        _startRotation       = Agent.Transform.rotation;
        _startPosition       = Agent.Transform.position;

        Vector3 finalDir;

        if (_eventRoll.toTarget != null)
        {
            finalDir = _eventRoll.toTarget.Position - Agent.Transform.position;
            finalDir.Normalize();

            _finalPosition = _eventRoll.toTarget.Position - finalDir * Agent.BlackBoard.weaponRange;
        }
        else
        {
            finalDir       = _eventRoll.direction;
            _finalPosition = _startPosition + _eventRoll.direction * Agent.BlackBoard.rollDistance;
        }

        string animName = Agent.AnimSet.GetRollAnim(Agent.BlackBoard.weaponSelected, Agent.BlackBoard.weaponState);

        AnimationTools.PlayAnim(Agent.AnimEngine, animName, 0.1f);

        _finalRotation.SetLookRotation(finalDir);
        _rotationTime   = Vector3.Angle(Agent.Transform.forward, finalDir) / 1000.0f;
        _moveTime       = Agent.AnimEngine[animName].length * 0.85f;
        _endOfStateTime = Agent.AnimEngine[animName].length * 0.9f + Time.timeSinceLevelLoad;

        _rotationOk = _rotationTime == 0;
        _positionOK = false;

        Agent.BlackBoard.motionType = MotionType.ROLL;

        if (Agent.BlackBoard.showMotionEffect)
        {
            ParticleTools.Instance.Play(Agent.particleSystemRollTust, Agent.gameObject.ForwardRadian(), 0f);
        }
    }
 public override void Reset()
 {
     base.Reset();
     _eventRoll = null;
 }