protected void EndAttackAction(SkillAction skillAction)
 {
     isCanSkill     = true;
     isSkillPlaying = false;
     owner.SetAction(0);
     owner.ClearSkill();
     if (owner is EntityMyself)
     {
         Mogo.Util.EventDispatcher.TriggerEvent(GUIEvent.START_JOYSTICK_TURN);
     }
 }
    virtual public void OnHit(int _actionID, uint _attackerID, uint woundId, List <int> harm)
    {
        if (woundId != theOwner.ID)
        {
            return;
        }
        //TODO如果死了return

        if (!theOwner.immuneShift)
        {
            theOwner.ClearSkill(true);
        }
        SkillAction action = SkillAction.dataMap[_actionID];

        if (action.hitSfx != null && action.hitSfx[0] > 0)
        {
            theOwner.PlayFX((int)action.hitSfx[0]);
        }
        //HitBuff(action);
        List <int> hitAction = action.hitAction;

        if (hitAction == null || hitAction.Count == 0 || theOwner.immuneShift)
        {
            return;
        }
        int  _act    = Utils.Choice <int>(hitAction);
        bool cfgShow = true;
        //if (((theOwner is EntityMonster) && (theOwner as EntityMonster).ShowHitAct != 0) ||
        //    ((theOwner is EntityDummy) && (theOwner as EntityDummy).ShowHitAct != 0) ||
        //    ((theOwner is EntityMercenary) && (theOwner as EntityMercenary).ShowHitAct != 0))
        //{
        //    cfgShow = false;
        //}
        string actName = theOwner.CurrActStateName();

        if (GameWorld.showHitAction && _act > 0 && theOwner.curHp > 0 &&
            !actName.EndsWith("getup") &&
            !actName.EndsWith("knockout") &&
            !actName.EndsWith(PlayerActionNames.names[ActionConstants.HIT_GROUND]) &&
            //!theOwner.IsInTransition() &&
            cfgShow)
        {//如果没填就不做受击表现
            //TODO切换被击状态
            //theOwner.SetAction(_act);
            //theOwner.Actor.AddCallbackInFrames<int>(theOwner.SetAction, 0);
            theOwner.ChangeState(FSMStateType.Hit, _actionID, _attackerID);
        }
        if (GameWorld.showHitEM && !(theOwner is EntityMonster) && action.hitExtraSpeed != 0)
        {
            theOwner.Motor.SetExrtaSpeed(-action.hitExtraSpeed);
            theOwner.Motor.SetMoveDirection(theOwner.transform.forward);
            TimerHeap.AddTimer <EntityParent>((uint)(action.hitExtraSl), 0, (e) =>
            {
                if (e == null || e.Motor == null)
                {
                    return;
                }
                e.Motor.SetExrtaSpeed(0);
            }, theOwner);
        }
    }