void SendEvent()
 {
     _eventBlock          = AnimFSMEventBlock.pool.Get();
     _eventBlock.attacker = Agent.BlackBoard.desiredTarget;
     _eventBlock.holdTime = Agent.BlackBoard.blockHoldTime;
     Agent.FSMComponent.SendEvent(_eventBlock);
 }
 public override void OnExit(Phenix.Unity.AI.WorldState ws)
 {
     if (_eventBlock != null)
     {
         _eventBlock.Release();
         _eventBlock = null;
     }
     base.OnExit(ws);
 }
    protected override void Initialize(FSMEvent ev = null)
    {
        _eventBlock = ev as AnimFSMEventBlock;

        string animName = Agent.AnimSet.GetBlockAnim(BlockState.START, Agent.BlackBoard.weaponSelected);

        _startRotation = Agent.Transform.rotation;
        _startPosition = Agent.Transform.position;

        Vector3 dir   = _eventBlock.attacker.Position - Agent.Transform.position;
        float   angle = 0;

        if (dir.sqrMagnitude > 0.1f * 0.1f)
        {
            dir.Normalize();
            angle = Vector3.Angle(Agent.Transform.forward, dir);
        }
        else
        {
            dir = Agent.Transform.forward;
        }

        _finalRotation.SetLookRotation(dir);
        _rotationTime = angle / 500.0f;
        _moveTime     = 0;

        _rotationOK = _rotationTime == 0;
        _positionOK = _moveTime == 0;

        _curRotationTime = 0;
        _curMoveTime     = 0;

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

        _endOfStateTime   = Time.timeSinceLevelLoad + Agent.AnimEngine[animName].length * 0.9f;
        _blockHoldEndTime = Time.timeSinceLevelLoad + _eventBlock.holdTime;
        _blockState       = BlockState.START;
    }
 public override void Reset()
 {
     base.Reset();
     _eventBlock = null;
 }