예제 #1
0
파일: ActionStatus.cs 프로젝트: tsuixl/act
        /// <summary>
        /// 检测中断
        /// </summary>
        /// <returns></returns>
        bool ProcessInterruptEveryFrame()
        {
            if (_queuedInterrupt != null)
            {
                return(false);
            }

            if (_activeActionData.InterruptList.Count == 0)
            {
                return(false);
            }

            int iCount = _activeActionData.InterruptList.Count;

            for (int i = 0; i < iCount; i++)
            {
                ActionInterrupt interrupt = _activeActionData.InterruptList[i];

                if (InterruptEnabled(i))
                {
                    if (ProcessActionInterrupt(interrupt))
                    {
                        return(true);
                    }
                }
            }


            return(false);
        }
예제 #2
0
파일: ActionStatus.cs 프로젝트: tsuixl/act
        /// <summary>
        /// 处理中断
        /// 立即模式 立即由切换Action.
        /// 等待完成 等待动画播放完成后执行.
        /// </summary>
        /// <param name="interrupt"></param>
        /// <returns></returns>

        bool LinkAction(ActionInterrupt interrupt)
        {
            if (ActionHelp.GetActionIndex(_actionGroupData, interrupt.ActionID) == -1)
            {
                Debug.LogError(string.Format("Can't find ActionID {0}", interrupt.ActionID.ToString()));
                return(false);
            }

            bool connectImmediately = interrupt.ConnectMode == ActionInterruptConnectMode.Immediately;

            if (interrupt.ConnectMode == ActionInterruptConnectMode.WaitFinish)
            {
                //  中断触发的时机是当前动画播放完成
                int actualQueuedTime = interrupt.ConnectTime <= 100 ?
                                       _activeActionData.AnimTime * interrupt.ConnectTime / 100 : // [0-100] AnimTime
                                       _activeActionData.AnimTime + _activeActionData.PoseTime * (interrupt.ConnectTime - 100) / 100;

                if (actualQueuedTime <= _actionTime)
                {
                    connectImmediately = true;
                }

                _queuedInterrupt     = interrupt;
                _queuedInterruptTime = actualQueuedTime;
            }

            //  立即中断到指定动画
            if (connectImmediately || interrupt.ConnectMode == ActionInterruptConnectMode.Immediately)
            {
                ChangeAction(interrupt.ActionID, 0);
            }

            return(true);
        }
예제 #3
0
    private void Awake()
    {
        Ins                     = this;
        Log                     = new Log();
        ActiveState             = new List <PersistState>();
        GameOverlay             = new GameOverlayDialogState();
        FightState              = new FightState();
        ReplayState             = new ReplayState();
        NickNameDialogState     = new NickNameDialogState();
        BattleStatusDialogState = new BattleStatusDialogState();
        PlayerDialogState       = new PlayerDialogState();
        ChatDialogState         = new ChatDialogState();
        PsdEditDialogState      = new PsdEditDialogState();
        RoomChatDialogState     = new RoomChatDialogState();
        LoadingEx               = new LoadingEXDialogState();
        ItemInfoDialogState     = new ItemInfoDialogState();
        GunShootDialogStatus    = new GunShootDialogStatus();
        //面板管理器.
        DialogStateManager = new MainDialogStateManager();
        //顺序排队弹出框.
        PopupStateManager = new MainPopupStateManager();
        //各类游戏数据.
        GameStateMgr    = new GameStateMgr();
        UpdateHelper    = new UpdateHelper();
        AppInfo         = new AppInfo();
        CombatData      = new CombatData();
        GameNotice      = new GameNotice();
        MeteorManager   = new MeteorManager();
        ScriptMng       = new ScriptMng();
        SFXLoader       = new SFXLoader();
        ActionInterrupt = new ActionInterrupt();

        BuffMng         = new BuffMng();
        EventBus        = new EventBus();
        NetWorkBattle   = new NetWorkBattle();
        SceneMng        = new SceneMng();
        FrameSync       = new FrameSync();
        MeteorBehaviour = new MeteorBehaviour();
        DropMng         = new DropMng();
        //原版相关资源的加载器.
        MenuResLoader    = new MenuResLoader();
        SkcLoader        = new SkcLoader();
        BncLoader        = new BncLoader();
        FMCLoader        = new FMCLoader();
        GMBLoader        = new GMBLoader();
        GMCLoader        = new GMCLoader();
        DesLoader        = new DesLoader();
        FMCPoseLoader    = new FMCPoseLoader();
        DataMgr          = new DataMgr();
        SfxMeshGenerator = new SfxMeshGenerator();
        RoomMng          = new RoomMng();
        SoundManager     = new SoundManager();
        ResMng           = new ResMng();
        DlcMng           = new DlcMng();

        DontDestroyOnLoad(gameObject);
        Log.WriteError(string.Format("GameStart AppVersion:{0}", Main.Ins.AppInfo.AppVersion()));
    }
예제 #4
0
파일: ActionStatus.cs 프로젝트: tsuixl/act
        /// <summary>
        /// 处理中断
        /// </summary>
        /// <param name="interrupt"></param>
        /// <returns></returns>

        bool ProcessActionInterrupt(ActionInterrupt interrupt)
        {
            if (!CheckActionInterrupt(interrupt))
            {
                return(false);
            }

            return(LinkAction(interrupt));
        }
예제 #5
0
파일: ActionStatus.cs 프로젝트: tsuixl/act
        //private string beforName = string.Empty;

        /// <summary>
        /// 重置中断标记
        /// </summary>

        void ResetInterruptList()
        {
            _actionInterruptFlag = 0;
            _queuedInterrupt     = null;
            // copy the action request enabled/disabled flags.
            //for (int i = 0; i < _activeActionData.InterruptList.Count; i++)
            //{
            //    ActionInterrupt actionInterrupt = _activeActionData.InterruptList[i];
            //    _actionInterruptFlag |= (1 << i);
            //    //if (actionInterrupt.InputEnable)
            //    //    _actionInterruptFlag |= (1 << i);
            //}
        }
예제 #6
0
파일: Main.cs 프로젝트: WeeirJoe/Joe
    void Create()
    {
        Log = new Log();
        LayerManager.Init();
        //不受状态机控制,仅打开和关闭的
        PersistMgr = PersistDialogMgr.Ins;
        //面板管理器.
        DialogStateManager = new MainDialogMgr();
        //顺序排队弹出框.
        PopupStateManager = new MainPopupStateManager();
        //各类游戏数据.
        GameStateMgr  = GameStateMgr.Ins;
        AppInfo       = AppInfo.Ins;
        CombatData    = CombatData.Ins;
        GameNotice    = new GameNotice();
        MeteorManager = MeteorManager.Ins;
        ScriptMng     = ScriptMng.Ins;

        ActionInterrupt = ActionInterrupt.Ins;

        BuffMng       = BuffMng.Ins;
        EventBus      = new EventBus();
        NetWorkBattle = NetWorkBattle.Ins;
        SceneMng      = SceneMng.Ins;

        //FrameSyncLocal = FrameSyncLocal.Ins;
        FrameSyncServer = FrameSyncServer.Ins;

        MeteorBehaviour = MeteorBehaviour.Ins;
        DropMng         = DropMng.Ins;
        //原版相关资源的加载器.
        MenuResLoader    = MenuResLoader.Ins;
        SkcLoader        = SkcLoader.Ins;
        BncLoader        = BncLoader.Ins;
        FMCLoader        = FMCLoader.Ins;
        GMBLoader        = GMBLoader.Ins;
        GMCLoader        = GMCLoader.Ins;
        DesLoader        = DesLoader.Ins;
        FMCPoseLoader    = FMCPoseLoader.Ins;
        SFXLoader        = SFXLoader.Ins;
        AmbLoader        = AmbLoader.Ins;
        DataMgr          = DataMgr.Ins;
        SfxMeshGenerator = SfxMeshGenerator.Ins;
        RoomMng          = RoomMng.Ins;
        SoundManager     = SoundManager.Ins;
        DlcMng           = DlcMng.Ins;
        PathMng          = PathMng.Ins;
        DownloadManager  = DownloadManager.Ins;
        DontDestroyOnLoad(gameObject);
        Log.WriteError(string.Format("GameStart AppVersion:{0}", Main.Ins.AppInfo.AppVersion()));
    }
예제 #7
0
파일: ActionStatus.cs 프로젝트: tsuixl/act
        /// <summary>
        /// 等待中断处理程序
        /// </summary>
        /// <param name="deltaTime">当前帧间隔时间</param>
        /// <returns></returns>
        bool ProcessQueuedInterrupt(int deltaTime)
        {
            if (_queuedInterrupt == null)
            {
                return(false);
            }

            //  时间是否满足
            if (!CheckTime(deltaTime))
            {
                return(false);
            }

            //  误差时间,下一帧切换, 动画播放时长 - 中断时间.
            int nextActionTime = _actionTime + deltaTime - _queuedInterruptTime;

            ChangeAction(_queuedInterrupt.ActionID, nextActionTime);
            _queuedInterrupt = null;

            return(true);
        }
예제 #8
0
파일: ActionStatus.cs 프로젝트: tsuixl/act
        /// <summary>
        /// 检测中断条件
        /// </summary>
        /// <param name="interrupt">true 触发中断,否则不处理.</param>
        /// <returns></returns>

        bool CheckActionInterrupt(ActionInterrupt interrupt)
        {
            //  检测中断条件 (与)
            if (interrupt.ConditionType == ConditionType.And)
            {
                for (int i = 0; i < interrupt.Conditions.Count; i++)
                {
                    if (interrupt.Conditions[i].Check(_ownerUnit) == false)
                    {
                        return(false);
                    }
                }

                return(true);
            }
            //  检测中断条件 (或)
            else
            {
                for (int i = 0; i < interrupt.Conditions.Count; i++)
                {
                    if (interrupt.Conditions[i].Check(_ownerUnit))
                    {
                        if (interrupt.ActionID == "W10020")
                        {
                            Debug.Log(string.Format("中断成功 {0} key {1} next key {2} State {3} Interrupt {4} Frame {5}", interrupt.InterruptName, _actionKey, tempNextKey,
                                                    InputManager.Instance.GetKeycodeState(GameInputType.Attack).State, _actionInterruptFlag, Time.frameCount));
                            //Debug.log
                        }

                        return(true);
                    }
                    //else
                    //    Debug.Log(string.Format("中断失败 {0} key {1} next key {2}", interrupt.InterruptName, _actionKey, tempNextKey));
                }
                return(false);
            }
        }
예제 #9
0
파일: ActionStatus.cs 프로젝트: tsuixl/act
        //public void ProcessKeyActionInterrupt(float delta)
        //{
        //    int preKey = _actionKey;
        //    int nextKey = GetNextKey((int) (delta*1000));

        //    if (_queuedInterrupt != null)
        //        return;

        //    // check the action interrupts
        //    if (_activeActionData.InterruptList.Count == 0)
        //        return;

        //    int iCount = _activeActionData.InterruptList.Count;

        //    for (int i = 0; i < iCount; i++)
        //    {
        //        ActionInterrupt interrupt = _activeActionData.InterruptList[i];

        //        //if (interrupt.)
        //        //if (interrupt.ke)

        //        if ((preKey >= interrupt.DetectionStartTime || nextKey >= interrupt.DetectionStartTime) &&
        //            (preKey <= interrupt.DetectionEndTime || nextKey <= interrupt.DetectionEndTime))
        //        {
        //            //if ((_actionInterruptFlag & (1 << i)) == 0 && interrupt.InterruptName.Contains("Idle") == false)
        //            //{
        //            //    Debug.Log(string.Format("开始中断检测 {0} cur {1} next {2} [start {3} end {4}]", interrupt.InterruptName, _actionKey, tempNextKey, interrupt.DetectionStartTime, interrupt.DetectionEndTime));
        //            //}
        //            _actionInterruptFlag |= (1 << i);
        //        }
        //        else
        //        {
        //            //if ((_actionInterruptFlag & (1 << i)) == 1 && interrupt.InterruptName.Contains("Idle") == false)
        //            //{
        //            //    Debug.Log(string.Format("结束中断检测 {0} cur {1} next {2} [start {3} end {4}]", interrupt.InterruptName, _actionKey, tempNextKey, interrupt.DetectionStartTime, interrupt.DetectionEndTime));
        //            //}
        //            _actionInterruptFlag &= ~(1 << i);
        //        }

        //        if (InterruptEnabled(i))
        //        {
        //            if (ProcessActionInterrupt(interrupt))
        //                return;
        //        }
        //    }
        //    //return false;
        //    //ProcessActionInterruptList(_actionKey, GetNextKey((int) (delta*1000)));
        //}


        public bool ProcessActionInterruptList(int preKey, int nextKey)
        {
            if (_queuedInterrupt != null)
            {
                return(false);
            }

            // check the action interrupts
            if (_activeActionData.InterruptList.Count == 0)
            {
                return(false);
            }

            int iCount = _activeActionData.InterruptList.Count;

            for (int i = 0; i < iCount; i++)
            {
                ActionInterrupt interrupt = _activeActionData.InterruptList[i];
                //if (interrupt.ke)

                if ((preKey >= interrupt.DetectionStartTime || nextKey >= interrupt.DetectionStartTime) &&
                    (preKey <= interrupt.DetectionEndTime || nextKey <= interrupt.DetectionEndTime))
                {
                    if ((_actionInterruptFlag & (1 << i)) == 0 && interrupt.InterruptName.Contains("Idle") == false)
                    {
                        Debug.Log(string.Format("开始中断检测 {0} cur {1} next {2} [start {3} end {4}]", interrupt.InterruptName, _actionKey, tempNextKey, interrupt.DetectionStartTime, interrupt.DetectionEndTime));
                    }
                    _actionInterruptFlag |= (1 << i);
                }
                else
                {
                    if ((_actionInterruptFlag & (1 << i)) == 1 && interrupt.InterruptName.Contains("Idle") == false)
                    {
                        Debug.Log(string.Format("结束中断检测 {0} cur {1} next {2} [start {3} end {4}]", interrupt.InterruptName, _actionKey, tempNextKey, interrupt.DetectionStartTime, interrupt.DetectionEndTime));
                    }
                    _actionInterruptFlag &= ~(1 << i);
                }
                //if (/*interrupt.DetectionStartTime != 0 &&*/ interrupt.DetectionStartTime > preKey &&
                //    interrupt.DetectionStartTime <= nextKey)
                //{
                //    if ((_actionInterruptFlag & (1 << i)) == 0)
                //    {
                //        Debug.Log(string.Format("开始中断检测 {0} cur {1} next {2} [start {3} end {4}]", interrupt.InterruptName, _actionKey, tempNextKey, interrupt.DetectionStartTime, interrupt.DetectionEndTime));
                //    }
                //    _actionInterruptFlag |= (1 << i);
                //}

                //if (/*interrupt.DetectionEndTime != 200 &&*/ interrupt.DetectionEndTime > preKey &&
                //    interrupt.DetectionEndTime <= nextKey)
                //{

                //    if ((_actionInterruptFlag & (1 << i)) == 1)
                //    {
                //        Debug.Log(string.Format("结束中断检测 {0} cur {1} next {2} [start {3} end {4}]", interrupt.InterruptName, _actionKey, tempNextKey, interrupt.DetectionStartTime, interrupt.DetectionEndTime));
                //    }

                //    _actionInterruptFlag &= ~(1 << i);
                //}

                if (InterruptEnabled(i))
                {
                    if (ProcessActionInterrupt(interrupt))
                    {
                        return(true);
                    }

                    //Debug.Log(string.Format("{0} key {1} next {2}", interrupt.InterruptName, _actionKey, nextKey));
                }
            }
            return(false);
        }
예제 #10
0
파일: ActionStatus.cs 프로젝트: tsuixl/act
 //private string beforName = string.Empty;
 /// <summary>
 /// 重置中断标记
 /// </summary>
 void ResetInterruptList()
 {
     _actionInterruptFlag = 0;
     _queuedInterrupt = null;
     // copy the action request enabled/disabled flags.
     //for (int i = 0; i < _activeActionData.InterruptList.Count; i++)
     //{
     //    ActionInterrupt actionInterrupt = _activeActionData.InterruptList[i];
     //    _actionInterruptFlag |= (1 << i);
     //    //if (actionInterrupt.InputEnable)
     //    //    _actionInterruptFlag |= (1 << i);
     //}
 }
예제 #11
0
파일: ActionStatus.cs 프로젝트: tsuixl/act
        /// <summary>
        /// 等待中断处理程序
        /// </summary>
        /// <param name="deltaTime">当前帧间隔时间</param>
        /// <returns></returns>
        bool ProcessQueuedInterrupt(int deltaTime)
        {
            if (_queuedInterrupt == null)
                return false;

            //  时间是否满足
            if (!CheckTime(deltaTime))
                return false;

            //  误差时间,下一帧切换, 动画播放时长 - 中断时间.
            int nextActionTime = _actionTime + deltaTime - _queuedInterruptTime;
            ChangeAction(_queuedInterrupt.ActionID, nextActionTime);
            _queuedInterrupt = null;

            return true;
        }
예제 #12
0
파일: ActionStatus.cs 프로젝트: tsuixl/act
        /// <summary>
        /// 处理中断
        /// </summary>
        /// <param name="interrupt"></param>
        /// <returns></returns>
        bool ProcessActionInterrupt(ActionInterrupt interrupt)
        {
            if (!CheckActionInterrupt(interrupt))
                return false;

            return LinkAction(interrupt);
        }
예제 #13
0
파일: ActionStatus.cs 프로젝트: tsuixl/act
        /// <summary>
        /// 处理中断
        /// 立即模式 立即由切换Action.
        /// 等待完成 等待动画播放完成后执行.
        /// </summary>
        /// <param name="interrupt"></param>
        /// <returns></returns>
        bool LinkAction(ActionInterrupt interrupt)
        {
            if (ActionHelp.GetActionIndex(_actionGroupData, interrupt.ActionID) == -1)
            {
                Debug.LogError(string.Format("Can't find ActionID {0}", interrupt.ActionID.ToString()));
                return false;
            }

            bool connectImmediately = interrupt.ConnectMode == ActionInterruptConnectMode.Immediately;
            if (interrupt.ConnectMode == ActionInterruptConnectMode.WaitFinish)
            {
                //  中断触发的时机是当前动画播放完成
                int actualQueuedTime = interrupt.ConnectTime <= 100 ?
                    _activeActionData.AnimTime * interrupt.ConnectTime / 100 :	// [0-100] AnimTime
                    _activeActionData.AnimTime + _activeActionData.PoseTime * (interrupt.ConnectTime - 100) / 100;

                if (actualQueuedTime <= _actionTime)
                    connectImmediately = true;

                _queuedInterrupt = interrupt;
                _queuedInterruptTime = actualQueuedTime;
            }

            //  立即中断到指定动画
            if (connectImmediately || interrupt.ConnectMode == ActionInterruptConnectMode.Immediately)
            {
                ChangeAction(interrupt.ActionID, 0);
            }

            return true;
        }
예제 #14
0
파일: ActionStatus.cs 프로젝트: tsuixl/act
        /// <summary>
        /// 检测中断条件
        /// </summary>
        /// <param name="interrupt">true 触发中断,否则不处理.</param>
        /// <returns></returns>
        bool CheckActionInterrupt(ActionInterrupt interrupt)
        {
            //  检测中断条件 (与)
            if (interrupt.ConditionType == ConditionType.And)
            {
                for (int i = 0; i < interrupt.Conditions.Count; i++)
                {
                    if (interrupt.Conditions[i].Check(_ownerUnit) == false)
                        return false;
                }

                return true;
            }
            //  检测中断条件 (或)
            else
            {
                for (int i = 0; i < interrupt.Conditions.Count; i++)
                {
                    if (interrupt.Conditions[i].Check(_ownerUnit))
                    {
                        if (interrupt.ActionID == "W10020")
                        {
                            Debug.Log(string.Format("中断成功 {0} key {1} next key {2} State {3} Interrupt {4} Frame {5}", interrupt.InterruptName, _actionKey, tempNextKey,
                                InputManager.Instance.GetKeycodeState(GameInputType.Attack).State, _actionInterruptFlag, Time.frameCount));
                            //Debug.log
                        }

                        return true;
                    }
                    //else
                    //    Debug.Log(string.Format("中断失败 {0} key {1} next key {2}", interrupt.InterruptName, _actionKey, tempNextKey));
                }
                return false;
            }
        }
예제 #15
0
    void Test_Action_0()
    {
        ActionGroupData data = new ActionGroupData
        {
            GroupNum      = 0,
            RoleId        = 1003,
            StartupAction = "N0000",
            ActionDatas   = new List <ActionData>()
        };

        ActionInterrupt interrupt;

        //  站立
        ActionData action = null;

        action = new ActionData
        {
            AnimId              = "N0000",
            AnimTime            = 900,
            BlendTime           = 100,
            CanMove             = false,
            DefaultLinkActionId = "N0000",
            MoveSpeed           = 0,
            Name = "Idle"
        };
        data.ActionDatas.Add(action);
        action.AnimSlotList.Add(new AnimSlotData()
        {
            Animation = "m_z_stand_f", Weight = 1, UseDir = false, Start = 0, End = 100
        });
        // Interrupt
        interrupt = new ActionInterrupt
        {
            ActionID           = "N0030",
            ConditionType      = ConditionType.Or,
            ConnectTime        = 100,
            DetectionStartTime = 0,
            DetectionEndTime   = 200,
            InterruptName      = "Idle => 战斗跑步"
        };
        interrupt.Conditions.Add(new InputCondition(InputState.KeyPressing, GameInputType.Move));
        action.InterruptList.Add(interrupt);


        interrupt = new ActionInterrupt()
        {
            ActionID           = "W10010",
            ConditionType      = ConditionType.Or,
            ConnectTime        = 100,
            DetectionStartTime = 0,
            DetectionEndTime   = 200,
            InterruptName      = "Idle => 普攻1",
            ConnectMode        = ActionInterruptConnectMode.Immediately
        };
        interrupt.Conditions.Add(new InputCondition(InputState.KeyDown, GameInputType.Attack));
        interrupt.Conditions.Add(new InputCondition(InputState.KeyRelease, GameInputType.Attack));
        action.InterruptList.Add(interrupt);


        //  跑步
        action = new ActionData
        {
            AnimId              = "N0030",
            AnimTime            = 600,
            BlendTime           = 100,
            CanMove             = true,
            DefaultLinkActionId = "N0030",
            MoveSpeed           = 500,
            Name = "战斗跑步"
        };
        data.ActionDatas.Add(action);
        action.AnimSlotList.Add(new AnimSlotData()
        {
            Animation = "m_z_runfront_01", Weight = 1, UseDir = false, Start = 0, End = 100
        });

        interrupt = new ActionInterrupt
        {
            ActionID           = "N0000",
            ConditionType      = ConditionType.Or,
            ConnectTime        = 100,
            DetectionStartTime = 0,
            DetectionEndTime   = 200,
            InterruptName      = "战斗跑步 => Idle"
        };
        interrupt.Conditions.Add(new InputCondition(InputState.KeyRelease, GameInputType.Move));
        action.InterruptList.Add(interrupt);


        interrupt = new ActionInterrupt()
        {
            ActionID           = "W10010",
            ConditionType      = ConditionType.Or,
            ConnectTime        = 100,
            DetectionStartTime = 0,
            DetectionEndTime   = 200,
            InterruptName      = "战斗跑步 => 普攻1",
            ConnectMode        = ActionInterruptConnectMode.Immediately
        };
        interrupt.Conditions.Add(new InputCondition(InputState.KeyDown, GameInputType.Attack));
        interrupt.Conditions.Add(new InputCondition(InputState.KeyRelease, GameInputType.Attack));
        action.InterruptList.Add(interrupt);


        //  普攻1
        action = new ActionData()
        {
            AnimId              = "W10010",
            AnimTime            = 200,
            BlendTime           = 100,
            CanMove             = false,
            DefaultLinkActionId = "W10015",
            MoveSpeed           = 0,
            Name     = "普攻1",
            PoseTime = 50,
        };
        data.ActionDatas.Add(action);
        action.AnimSlotList.Add(new AnimSlotData()
        {
            Animation = "m_z_p_01a", Weight = 1, UseDir = false, Start = 18, End = 100
        });
        action.EventArgses.Add(new EffectEventArgs()
        {
            ResourcePath = "Assets/LocalResources/Actor/Effect/fx_my_p_01.prefab",
            BindingType  = EffectBindingType.BindingOnwer,
            Time         = 20,
            LifeTime     = 500,
            PositionY    = 110,
            //LocalOffset
        });


        action.EventArgses.Add(new VelocityEventArgs()
        {
            Time      = 20,
            VelocityZ = 550,
        });

        action.EventArgses.Add(new VelocityEventArgs()
        {
            Time      = 70,
            VelocityZ = 0,
        });


        interrupt                    = new ActionInterrupt();
        interrupt.ActionID           = "W10020";
        interrupt.ConditionType      = ConditionType.Or;
        interrupt.ConnectMode        = ActionInterruptConnectMode.WaitFinish;
        interrupt.DetectionStartTime = 60;
        interrupt.DetectionEndTime   = 200;
        interrupt.ConnectTime        = 100;
        interrupt.InterruptName      = "普攻1 => 普攻2";
        //interrupt.Conditions.Add(new InputCondition(InputState.KeyRelease, GameInputType.Attack));
        interrupt.Conditions.Add(new InputCondition(InputState.KeyDown, GameInputType.Attack));
        action.InterruptList.Add(interrupt);


        //  普攻1 收僵
        action = new ActionData()
        {
            AnimId              = "W10015",
            AnimTime            = 300,
            BlendTime           = 100,
            CanMove             = false,
            DefaultLinkActionId = "N0000",
            MoveSpeed           = 0,
            Name = "普攻1[收僵]",
        };
        data.ActionDatas.Add(action);
        action.AnimSlotList.Add(new AnimSlotData()
        {
            Animation = "m_z_p_01b", Weight = 1, UseDir = false, Start = 0, End = 100
        });


        //  普攻2

        action = new ActionData()
        {
            AnimId              = "W10020",
            AnimTime            = 200,
            BlendTime           = 100,
            CanMove             = false,
            DefaultLinkActionId = "W10025",
            MoveSpeed           = 0,
            Name     = "普攻2",
            PoseTime = 100,
        };
        data.ActionDatas.Add(action);
        action.AnimSlotList.Add(new AnimSlotData()
        {
            Animation = "m_z_p_02a", Weight = 1, UseDir = false, Start = 0, End = 100
        });

        interrupt                    = new ActionInterrupt();
        interrupt.ActionID           = "W10030";
        interrupt.ConditionType      = ConditionType.Or;
        interrupt.ConnectMode        = ActionInterruptConnectMode.WaitFinish;
        interrupt.DetectionStartTime = 60;
        interrupt.DetectionEndTime   = 200;
        interrupt.ConnectTime        = 100;
        interrupt.InterruptName      = "普攻2 => 普攻3";
        //interrupt.Conditions.Add(new InputCondition(InputState.KeyRelease, GameInputType.Attack));
        interrupt.Conditions.Add(new InputCondition(InputState.KeyDown, GameInputType.Attack));
        action.InterruptList.Add(interrupt);

        action.EventArgses.Add(new EffectEventArgs()
        {
            ResourcePath = "Assets/LocalResources/Actor/Effect/fx_my_p_02.prefab",
            BindingType  = EffectBindingType.BindingOnwer,
            Time         = 50,
            LifeTime     = 500,
            PositionY    = 120,
            //LocalOffset
        });



        //  普攻2 收僵
        action = new ActionData()
        {
            AnimId              = "W10025",
            AnimTime            = 300,
            BlendTime           = 100,
            CanMove             = false,
            DefaultLinkActionId = "N0000",
            MoveSpeed           = 0,
            Name = "普攻2[收僵]",
        };
        data.ActionDatas.Add(action);
        action.AnimSlotList.Add(new AnimSlotData()
        {
            Animation = "m_z_p_02b", Weight = 1, UseDir = false, Start = 0, End = 100
        });


        //  普攻3

        action = new ActionData()
        {
            AnimId              = "W10030",
            AnimTime            = 600,
            BlendTime           = 0,
            CanMove             = false,
            DefaultLinkActionId = "W10035",
            MoveSpeed           = 0,
            Name     = "普攻3",
            PoseTime = 0,
        };
        data.ActionDatas.Add(action);
        action.AnimSlotList.Add(new AnimSlotData()
        {
            Animation = "m_z_p_03a", Weight = 1, UseDir = false, Start = 0, End = 100
        });

        interrupt                    = new ActionInterrupt();
        interrupt.ActionID           = "W10040";
        interrupt.ConditionType      = ConditionType.Or;
        interrupt.ConnectMode        = ActionInterruptConnectMode.WaitFinish;
        interrupt.DetectionStartTime = 60;
        interrupt.DetectionEndTime   = 200;
        interrupt.ConnectTime        = 100;
        interrupt.InterruptName      = "普攻3 => 普攻4";
        //interrupt.Conditions.Add(new InputCondition(InputState.KeyRelease, GameInputType.Attack));
        interrupt.Conditions.Add(new InputCondition(InputState.KeyDown, GameInputType.Attack));
        action.InterruptList.Add(interrupt);

        action.EventArgses.Add(new EffectEventArgs()
        {
            ResourcePath = "Assets/LocalResources/Actor/Effect/fx_my_p_03.prefab",
            BindingType  = EffectBindingType.BindingOnwer,
            Time         = 30,
            LifeTime     = 500,
            PositionY    = 150,
            //LocalOffset
        });

        //  普攻3 收僵

        action = new ActionData()
        {
            AnimId              = "W10035",
            AnimTime            = 600,
            BlendTime           = 0,
            CanMove             = false,
            DefaultLinkActionId = "N0000",
            MoveSpeed           = 0,
            Name     = "普攻3 收僵",
            PoseTime = 0,
        };
        data.ActionDatas.Add(action);
        action.AnimSlotList.Add(new AnimSlotData()
        {
            Animation = "m_z_p_03b", Weight = 1, UseDir = false, Start = 0, End = 100
        });



        //  普攻4 - 01

        action = new ActionData()
        {
            AnimId              = "W10040",
            AnimTime            = 500,
            BlendTime           = 100,
            CanMove             = false,
            DefaultLinkActionId = "W10043",
            MoveSpeed           = 0,
            Name     = "普攻4 - 01",
            PoseTime = 0,
        };
        data.ActionDatas.Add(action);
        action.AnimSlotList.Add(new AnimSlotData()
        {
            Animation = "m_z_p_04", Weight = 1, UseDir = false, Start = 0, End = 29
        });

        action.EventArgses.Add(new EffectEventArgs()
        {
            ResourcePath = "Assets/LocalResources/Actor/Effect/fx_my_p_04.prefab",
            BindingType  = EffectBindingType.BindingOnwer,
            Time         = 20,
            LifeTime     = 500,
            PositionY    = 120,
            //LocalOffset
        });

        action.EventArgses.Add(new EffectEventArgs()
        {
            ResourcePath = "Assets/LocalResources/Actor/Effect/fx_my_p_04.prefab",
            BindingType  = EffectBindingType.BindingOnwer,
            Time         = 60,
            LifeTime     = 500,
            PositionY    = 140,
            //LocalOffset
        });


        //  普攻4 - 02

        action = new ActionData()
        {
            AnimId              = "W10043",
            AnimTime            = 200,
            BlendTime           = 100,
            CanMove             = false,
            DefaultLinkActionId = "W10046",
            MoveSpeed           = 0,
            Name     = "普攻4 - 02",
            PoseTime = 100,
        };
        data.ActionDatas.Add(action);
        action.AnimSlotList.Add(new AnimSlotData()
        {
            Animation = "m_z_p_04", Weight = 1, UseDir = false, Start = 29, End = 66
        });


        action.EventArgses.Add(new EffectEventArgs()
        {
            ResourcePath = "Assets/LocalResources/Actor/Effect/fx_my_p_04b.prefab",
            BindingType  = EffectBindingType.BindingOnwer,
            Time         = 20,
            LifeTime     = 500,
            PositionY    = 100,
            //LocalOffset
        });



        //  普攻4 - 收僵

        action = new ActionData()
        {
            AnimId              = "W10046",
            AnimTime            = 400,
            BlendTime           = 100,
            CanMove             = false,
            DefaultLinkActionId = "N0000",
            MoveSpeed           = 0,
            Name     = "普攻4 - 02",
            PoseTime = 0,
        };
        data.ActionDatas.Add(action);
        action.AnimSlotList.Add(new AnimSlotData()
        {
            Animation = "m_z_p_04", Weight = 1, UseDir = false, Start = 66, End = 100
        });



        _GroupDatas.Add(data);
    }