//循环动作锁定,(一直在2个帧段之间播放,待特定条件打成就退出该帧段)
    void PlayPosEvent()
    {
        //有硬直时间存在,但是还没开始消耗硬直时间时,先消耗硬直时间
        if (IsInStraight())
        {
            //能否开始计算硬直?如果角色在空中播放循环落地动作,这个硬直是无法开始计算的,只有落地后,才能开始计算硬直
            if (!mOwner.IsOnGround())
            {
                return;
            }
            //已经开始计算硬直时间的流逝
            if (LockCurrentFrame)
            {
                return;
            }

            LockCurrentFrame = true;//开始计算硬直流逝,一直到硬直时间结束.
        }
        else
        {
            if (po.Idx == CommonAction.ChangeWeapon)
            {
                owner.ChangeNextWeapon();
                loop = false;
            }
            else if (po.Idx == CommonAction.AirChangeWeapon)
            {
                owner.ChangeNextWeapon();
                loop = false;
            }
            else if ((po.Idx >= CommonAction.Idle && po.Idx <= 21) || (po.Idx >= CommonAction.WalkForward && po.Idx <= CommonAction.RunOnDrug))
            {
                if (owner.GameFinished)
                {
                    loop = false;
                }
            }
            else if (po.Idx == 219 || po.Idx == 221 || po.Idx == 223)//飞轮出击后等待接回飞轮
            {
                //等着收回武器
            }
            else
            {
                if (mOwner.IsOnGround())
                {
                    loop = false;
                    //Debug.Log("PlayPosEvent:" + po.Idx);
                }
            }
        }
    }
Пример #2
0
    //处理动作最后一帧要做的事
    public static void HandlerFinalActionFrame(MeteorUnit owner, int Action)
    {
        if (LastEvents == null)
        {
            LastEvents = new List <int>()
            {
                (int)FrameEvent.ChangeWeapon0, (int)FrameEvent.ChangeWeapon1, (int)FrameEvent.ChangeWeaponPos0, (int)FrameEvent.ChangeWeaponPos5,
                (int)FrameEvent.ChangeWeaponPose570_0, (int)FrameEvent.ChangeWeaponPose451_0, (int)FrameEvent.ChangeWeaponPos7, (int)FrameEvent.RebornFriend
            };
        }

        if (!LastEvents.Contains(Action))
        {
            return;
        }

        switch ((FrameEvent)Action)
        {
        case FrameEvent.ChangeWeaponPos7:    //收刀切换为居合最后一帧
            owner.ChangeWeaponPos(WeaponPos.PosB);
            break;

        //0拔刀1长枪2居合
        case FrameEvent.ChangeWeaponPos0:
            owner.ChangeWeaponPos(WeaponPos.PosA);
            //owner.ChangeWeaponPos(2);
            break;

        //case FrameEvent.ChangeWeaponPos2:
        //    owner.ChangeWeaponPos(0);
        //    break;
        //case FrameEvent.ChangeWeaponPos3:
        //    owner.ChangeWeaponPos(2);
        //    break;
        case FrameEvent.ChangeWeaponPos8:
            owner.ChangeWeaponPos(WeaponPos.PosB);
            break;

        case FrameEvent.ChangeWeaponPos5:
            owner.ChangeWeaponPos(WeaponPos.PosA);
            break;

        case FrameEvent.ChangeWeapon0:    //左打虎
        case FrameEvent.ChangeWeapon1:    //右打虎
            owner.ChangeNextWeapon();
            break;

        case FrameEvent.ChangeWeaponPose570_0:
            owner.ChangeWeaponPos(WeaponPos.PosA);
            break;

        case FrameEvent.ChangeWeaponPose451_0:
            owner.ChangeWeaponPos(WeaponPos.Pos);
            break;

        case FrameEvent.RebornFriend:
            owner.RebornFriend();
            break;
        }
    }
Пример #3
0
    //处理动作最后一帧要做的事
    public static void HandlerFinalActionFrame(MeteorUnit owner, int Action)
    {
        if (LastEvents == null)
        {
            LastEvents = new List <int>()
            {
                (int)FrameEvent.ChangeWeapon0, (int)FrameEvent.ChangeWeapon1, (int)FrameEvent.ChangeWeaponPos0,
                (int)FrameEvent.ChangeWeaponPos1, (int)FrameEvent.ChangeWeaponPos5,
                (int)FrameEvent.ChangeWeaponPose570_0, (int)FrameEvent.ChangeWeaponPose456_0, (int)FrameEvent.ChangeWeaponPose451_0
            };
        }

        if (!LastEvents.Contains(Action))
        {
            return;
        }

        switch ((FrameEvent)Action)
        {
        //0拔刀1长枪2居合
        case FrameEvent.ChangeWeaponPos0:
            owner.ChangeWeaponPos(1);
            //owner.ChangeWeaponPos(2);
            break;

        case FrameEvent.ChangeWeaponPos1:
            owner.ChangeWeaponPos(2);
            break;

        //case FrameEvent.ChangeWeaponPos2:
        //    owner.ChangeWeaponPos(0);
        //    break;
        //case FrameEvent.ChangeWeaponPos3:
        //    owner.ChangeWeaponPos(2);
        //    break;
        case FrameEvent.ChangeWeaponPose456_0:
            owner.ChangeWeaponPos(2);
            break;

        case FrameEvent.ChangeWeaponPos5:
            owner.ChangeWeaponPos(1);
            break;

        case FrameEvent.ChangeWeapon0:    //左打虎
        case FrameEvent.ChangeWeapon1:    //右打虎
            owner.ChangeNextWeapon();
            break;

        case FrameEvent.ChangeWeaponPose570_0:
            owner.ChangeWeaponPos(1);
            break;

        case FrameEvent.ChangeWeaponPose451_0:
            owner.ChangeWeaponPos(0);
            break;
        }
    }
Пример #4
0
    public void Drop(MeteorUnit player)
    {
        //player.Attr;
        //List<GameObject> obj = new List<GameObject>();
        //一定爆出角色主武器,有Flag爆出Flag,并且这个Flag,会持续一定时间,若无人拾取,则会重置Flag归位.
        int        mainWeapon = player.Attr.Weapon;
        ItemBase   ib         = GameData.itemMng.GetRowByIdx(mainWeapon) as ItemBase;
        WeaponBase wb         = WeaponMng.Instance.GetItem(ib.UnitId);
        GameObject trigget    = CreateObj(wb.WeaponR, player.transform, -player.transform.forward);

        //obj.Add(trigget);
        //ExplosionObject01.iTweenExplosion01(1, ref obj, player.transform.position);
        ExplosionObject01.DropItem(trigget, player.mPos, -player.transform.forward);
        //如果角色拥有第二武器,那么第一武器扔掉时,切换到第二武器
        player.ChangeNextWeapon();

        //扔掉Flag道具
        if (player.GetFlag)
        {
            trigget = CreateObj(player.GetFlagItem.model, player.transform, -player.transform.forward);
            ExplosionObject01.DropItem(trigget, player.mPos, Quaternion.AngleAxis(30, Vector3.up) * -player.transform.forward);
        }
    }
 void PlayPosEvent()
 {
     if (po.Idx == CommonAction.ChangeWeapon)
     {
         owner.ChangeNextWeapon();
         loop = false;
     }
     else if (po.Idx == CommonAction.AirChangeWeapon)
     {
         owner.ChangeNextWeapon();
         loop = false;
     }
     else if (po.Idx == CommonAction.FallOnGround)
     {
         mOwner.IgnoreGravitys(false);
         if (mOwner.IsOnGround())
         {
             posMng.ChangeAction(0, 0.1f);
         }
     }
     else if (po.Idx == CommonAction.KnifeA2Fall)//匕首空中A2落地
     {
         mOwner.IgnoreGravitys(false);
         if (mOwner.IsOnGround())
         {
             loop = false;
         }
     }
     else if (po.Idx == CommonAction.HammerMaxFall)
     {
         mOwner.IgnoreGravitys(false);
         if (mOwner.IsOnGround())
         {
             loop = false;
         }
     }
     else if (po.Idx == CommonAction.Fall)
     {
         mOwner.IgnoreGravitys(false);
         if (mOwner.IsOnGround())
         {
             loop = false;
         }
     }
     else if (po.Idx == CommonAction.Struggle || po.Idx == CommonAction.Struggle0)
     {
         //一些有僵直的动作,必须等到僵直循环动作第一次结束后开始减少僵直值.
         //if (CheckStraight && PoseStraight < 0)
         //{
         //    mOwner.IgnoreGravitys(false);
         //    if (mOwner.IsOnGround()) loop = false;
         //    CheckStraight = false;
         //}
     }
     else if ((po.Idx >= CommonAction.Idle && po.Idx <= 21) || (po.Idx >= CommonAction.WalkForward && po.Idx <= CommonAction.RunOnDrug))
     {
         //这些动作是不具有硬直的循环动作.
     }
     else if (po.Idx == 219)//飞轮出击后等待接回飞轮
     {
         //等着收回武器
     }
     else
     {
         if (PoseStraight <= 0.0f)
         {
             mOwner.IgnoreGravitys(false);
             if (mOwner.IsOnGround())
             {
                 loop = false;
             }
         }
         //Log.LogFrame("POSE:" + po.Idx + " Straight:" + PoseStraight);
     }
 }