示例#1
0
    IEnumerator _init()
    {
#if UNITY_EDITOR
        Debug.unityLogger.logEnabled = true;
#else
        Debug.unityLogger.logEnabled = false;
#endif


        AssetManager.Instance.InitMode(GameConfigs.LoadAssetMode);
        UIManager.Instance.OpenView(ViewID.PrepareView, null);
        yield return(new WaitForEndOfFrame());

        Debug.Log("跳过版本检测...");
        //UpdateVersionManager.Instance.CheckVersion((bool needUpdate) => {
        //    if (needUpdate) {
        //        MsgBox.SetActive(true);
        //    } else {
        //        UpdateAssetManager.Instance.CheckAsset(() => {
        //            MsgDispatcher.GetInstance().Fire(GameEvents.Msg_DownloadFinish);
        //        });
        //    }
        //});


        // load and parse config data
        MsgDispatcher.GetInstance().Fire(GameEvents.UpdateAsset.ShowUpdateAssetInfo, "加载配置...");
        ConfigManager.Instance.ParseConfigData(AssetManager.Instance.LoadAsset <TextAsset>(GameConfigs.GetConfigPath("DataConfig")).bytes);

        MsgDispatcher.GetInstance().Fire(GameEvents.UpdateAsset.UpdateAssetFinish);


        yield return(null);
    }
        /// <summary>
        /// 将预存的预制件放入冷却列表中,仅CardManager内部使用,产生冷却池变动消息
        /// </summary>
        /// <param name="cardId">要冷却的卡牌的预制件引用</param>
        /// <param name="controlCd">默认值为-1,表示按卡牌cd值进行冷却,设定其他值则按设定值冷却</param>
        private void CooldownCard(string cardId, int controlCd = -1)
        {
            // 如果控制cd的参数值小于等于0,表示按卡牌cd值进行冷却
            if (controlCd <= 0)
            {
                // 读取数据库得到冷却回合数
                int roundAmount = (int)_cardsData[cardId]["cd"];

                // 若卡牌自身的cd值为负数,则直接销毁,并进入弃牌堆
                if (roundAmount < 0)
                {
                    _garbageCards.Add(cardId);
                    return;
                }

                // 初始化BaseCard脚本内剩余回合数的counter
                _cooldownCards.Add(new cdObject(roundAmount, cardId));
            }
            else // 按controlCd值进行冷却
            {
                _cooldownCards.Add(new cdObject(controlCd, cardId));
            }

            // 发送冷却池变动消息
            MsgDispatcher.SendMsg((int)MessageType.CooldownlistChange);
        }
示例#3
0
    /// <summary>
    /// 如果伤害请求优先级相同,则伤害判定流程会特殊一些
    /// </summary>
    public void ExcuteSameTime()
    {
        //CheckWhosTurn(_attacker, _attackedUnit);

        Damage.TakeDamage(_attackedUnit, Damage.GetDamage(_attacker));
        SetInjurer(_attackedUnit); SetInjuredUnit(_attacker);
        MsgDispatcher.SendMsg((int)TriggerType.Damage);
        MsgDispatcher.SendMsg((int)TriggerType.BeDamaged);

        Damage.TakeDamage(_attacker, Damage.GetDamage(_attackedUnit));
        SetInjurer(_attacker); SetInjuredUnit(_attackedUnit);
        MsgDispatcher.SendMsg((int)TriggerType.Damage);
        MsgDispatcher.SendMsg((int)TriggerType.BeDamaged);

        if (_attacker.IsDead())
        {
            SetKiller(_attackedUnit); SetKilledAndDeadUnit(_attacker);
            MsgDispatcher.SendMsg((int)TriggerType.Kill);
            MsgDispatcher.SendMsg((int)TriggerType.Dead);
        }

        if (_attackedUnit.IsDead())
        {
            SetKiller(_attacker); SetKilledAndDeadUnit(_attackedUnit);
            MsgDispatcher.SendMsg((int)TriggerType.Kill);
            MsgDispatcher.SendMsg((int)TriggerType.Dead);
        }
    }
    IEnumerator progress(UnityAction <bool> onComplate)
    {
        //拉取服务器版本
        MsgDispatcher.GetInstance().Fire(GameEvents.UpdateAsset.ShowUpdateAssetInfo, "检测版本号...");

        UnityWebRequest req = UnityWebRequest.Get(GameConfigs.ServerVersionUrl);

        yield return(req.SendWebRequest());

        if (req.isHttpError || req.isNetworkError)
        {
            Debug.LogError(req.error);
            yield break;
        }

        onlineVersion = new System.Version(req.downloadHandler.text);
        curVersion    = new System.Version(Application.version);

        if (onlineVersion != curVersion)
        {
            Debug.LogFormat("当前版本不是最新版本({0}),请及时更新到最新版本({1})", curVersion, onlineVersion);
            IsNeedUpdate = true;
        }

        Debug.Log("版本检测完成!");

        if (onComplate != null)
        {
            onComplate(IsNeedUpdate);
        }

        yield return(null);
    }
 private void Start()
 {
     //创建Trigger实例,传入技能的发动者
     trigger = new TRegeneration(GetComponent <GameUnit.GameUnit>().GetMsgReceiver());
     //注册Trigger进消息中心
     MsgDispatcher.RegisterMsg(trigger, "Regeneration");
 }
示例#6
0
        protected override void TakeRemote()
        {
            var session = paramGetter.GetSession();

            if (session == null)
            {
                ErrorCode = 10000;
                ErrorInfo = "Sessin is null.";
                return;
            }

            switch (_type)
            {
            case NoticeMode.AllService:
            {
                var sessionlist = GameSession.GetAll();
                foreach (var on in sessionlist)
                {
                    if (on.Connected && !on.IsRemote)
                    {
                        MsgData data = new MsgData();
                        data.Type   = MsgType.Notice;
                        data.UserId = on.UserId;

                        var parameters = new Parameters();
                        parameters["Type"]     = NoticeMode.AllService;
                        parameters["ServerID"] = _serverID;
                        parameters["Content"]  = _content;
                        data.Param             = parameters;
                        MsgDispatcher.Push(data);
                    }
                }
            }
            break;

            case NoticeMode.World:
            {
                var cache = new MemoryCacheStruct <ChatUser>();
                var list  = cache.FindAll(t => t.ServerID == _serverID);
                foreach (var v in list)
                {
                    var sess = GameSession.Get(v.UserId);
                    if (sess != null && sess.Connected && !sess.IsRemote)
                    {
                        MsgData data = new MsgData();
                        data.Type   = MsgType.Notice;
                        data.UserId = sess.UserId;

                        var parameters = new Parameters();
                        parameters["Type"]     = NoticeMode.World;
                        parameters["ServerID"] = _serverID;
                        parameters["Content"]  = _content;
                        data.Param             = parameters;
                        MsgDispatcher.Push(data);
                    }
                }
            }
            break;
            }
        }
示例#7
0
 private void Start()
 {
     //创建Trigger实例,传入技能的发动者
     trigger = new TCourage(this.GetCardReceiver(this));
     //注册Trigger进消息中心
     MsgDispatcher.RegisterMsg(trigger, "Courage");
 }
示例#8
0
        public void MsgDispatcherPhysical_ExplicitHandlers()
        {
            MsgDispatcher dispatcher;

            dispatcher = new MsgDispatcher();
            dispatcher.AddPhysical(new MsgHandlerDelegate(OnExplicit1), typeof(_DispatchMsg1), null);
            dispatcher.AddPhysical(new MsgHandlerDelegate(OnExplicit2), typeof(_DispatchMsg2), null);
            dispatcher.AddPhysical(new MsgHandlerDelegate(OnExplicit3), typeof(_DispatchMsg3), null);

            Clear();
            dispatcher.Dispatch(new _DispatchMsg1());
            Thread.Sleep(DispatchWait);
            Assert.IsTrue(onExplicit1);
            Assert.IsFalse(onExplicit2);
            Assert.IsFalse(onExplicit3);

            Clear();
            dispatcher.Dispatch(new _DispatchMsg2());
            Thread.Sleep(DispatchWait);
            Assert.IsFalse(onExplicit1);
            Assert.IsTrue(onExplicit2);
            Assert.IsFalse(onExplicit3);

            Clear();
            dispatcher.Dispatch(new _DispatchMsg3());
            Thread.Sleep(DispatchWait);
            Assert.IsFalse(onExplicit1);
            Assert.IsFalse(onExplicit2);
            Assert.IsTrue(onExplicit3);
        }
示例#9
0
        public void MsgDispatcherLogical_DynamicEP()
        {
            MsgDispatcher dispatcher;
            MsgRouter     router;
            ChannelEP     target;

            dispatcher = new MsgDispatcher();
            router     = new MsgRouter(dispatcher);

            router.Dispatcher.AddTarget(this, "foo", new Munger(), null);
            router.RouterEP = MsgEP.Parse("physical://foo.com/" + Helper.NewGuid().ToString());
            router.Start(IPAddress.Any, null, new IPEndPoint(IPAddress.Any, 0), new IPEndPoint(IPAddress.Any, 0), 5, TimeSpan.FromSeconds(60));
            target = new ChannelEP(Transport.Udp, router.UdpEP);

            try
            {
                Clear();
                router.Transmit(target, new _DispatchMsg1("logical://MungedDynamic"));
                Thread.Sleep(DispatchWait);
                Assert.IsTrue(dispatchDynamic);
            }
            finally
            {
                router.Stop();
            }
        }
示例#10
0
        private void Start()
        {
            // 注册函数响应抽牌信息
            MsgDispatcher.RegisterMsg(
                this.GetMsgReceiver(),
                (int)MessageType.DrawCard,
                canDoExtractAction,
                () => { ExtractCards(); },
                "Extract cards Trigger"
                );

            // 注册函数响应回合结束信息
            MsgDispatcher.RegisterMsg(
                this.GetMsgReceiver(),
                (int)MessageType.EP,
                canDoCoolDownAction,
                HandleCooldownEvent,
                "Cooldown cards Trigger"
                );

            MsgDispatcher.RegisterMsg(
                this.GetMsgReceiver(),
                (int)MessageType.Dead,
                canSendToCoolDownList,
                HandleCardOnMapToCooldown,
                "Map Unit cooldown Trigger"
                );

            ExtractCards(3);
        }
示例#11
0
        public void MsgDispatcherPhysical_MultipleHandlers()
        {
            MsgDispatcher dispatcher;

            try
            {
                new MsgDispatcher().AddTarget(new Target4());
                Assert.Fail("Expected the detection of multiple handlers with the same message type.");
            }
            catch (MsgException)
            {
            }

            try
            {
                dispatcher = new MsgDispatcher();

                dispatcher.AddTarget(new Target2());
                dispatcher.AddPhysical(new MsgHandlerDelegate(OnExplicit1), typeof(_DispatchMsg1), null);
                Assert.Fail("Expected the detection of multiple handlers with the same message type.");
            }
            catch (MsgException)
            {
            }
        }
示例#12
0
        public override void Excute()
        {
            MsgDispatcher.SendMsg((int)MessageType.AnnounceAttack);
            //根据伤害优先级对伤害请求排序
            DamageRequestList = DamageRequest.CaculateDamageRequestList(_Attacker, _AttackedUnit);

            for (int i = 0; i < DamageRequestList.Count; i++)
            {
                //优先级相同并且两方互打的伤害请求作为同时处理
                if (i != DamageRequestList.Count - 1 && DamageRequestList[i].priority == DamageRequestList[i + 1].priority &&
                    DamageRequestList[i]._attacker == DamageRequestList[i + 1]._attackedUnit &&
                    DamageRequestList[i]._attackedUnit == DamageRequestList[i + 1]._attacker)
                {
                    //判断被攻击者的反击距离
                    if (JudgeStrikeBack())
                    {
                        DamageRequestList[i].ExcuteSameTime();
                    }
                    else
                    {
                        DamageRequestList[i].Excute(); //距离不够,无法进行反击
                    }
                    i++;
                }
                else if (!_AttackedUnit.IsDead() && !_Attacker.IsDead() && JudgeStrikeBack()) //符合反击要求
                {
                    DamageRequestList[i].Excute();
                }
                else if (!_AttackedUnit.IsDead() && !_Attacker.IsDead() && !JudgeStrikeBack()) //距离不够,无法进行反击
                {
                    DamageRequestList[i].Excute();
                    i++;
                }
            }
        }
示例#13
0
        public void MsgDispatcherLogical_Multi_Handlers_Grouped()
        {
            Target4A      target1    = new Target4A();
            Target4B      target2    = new Target4B();
            MsgDispatcher dispatcher = new MsgDispatcher();

            // I'm going to test whether the handlers for the two targets
            // were grouped properly in the routing table by sending
            // instances of the two message types to logical://Foo.
            //
            // The message receive counts should match the number
            // of messages sent if grouping worked properly.  If
            // grouping didn't work, we'd expect to see messages
            // routed randomly to one target or the other with
            // messages that aren't handled by each target being
            // dropped.

            dispatcher.AddTarget(target1, null, null, target1);
            dispatcher.AddTarget(target2, null, null, target1);

            for (int i = 0; i < 10; i++)
            {
                dispatcher.Dispatch(new _DispatchMsg1("logical://Foo"));
                dispatcher.Dispatch(new _DispatchMsg2("logical://Foo"));
            }

            Thread.Sleep(1000);

            Assert.AreEqual(10, target1.Count);
            Assert.AreEqual(10, target2.Count);
        }
示例#14
0
 private void Start()
 {
     //创建Trigger实例,传入技能的发动者
     trigger = new TInstantIdea(this.GetUnitReceiver(this));
     //注册Trigger进消息中心
     MsgDispatcher.RegisterMsg(trigger, "Ponder");
 }
示例#15
0
        /// <summary>
        /// 用于将卡牌插入手牌中,会根据参数产生手牌变动消息
        /// </summary>
        /// <param name="cardId">要插入的卡牌的ID</param>
        /// <param name="sendMsg">是否发送手牌变动消息,默认发送,若连续调用请设置false并自己发送消息</param>
        public void InsertIntoHandCard(string cardId, bool sendMsg = true)
        {
            // 实例化卡牌到不可见区域,并绑定脚本再初始化
            GameObject cardInstance = Instantiate(emptyObject);
            JsonData   cardData     = GetCardJsonData(cardId);

            //根据json数据中卡牌分类挂载不同脚本
            if (cardData["type"].ToString().Equals("Order"))
            {
                cardInstance.AddComponent <OrderCard>().Init(cardId, cardData);
            }
            else if (cardData["type"].ToString().Equals("Unit"))
            {
                cardInstance.AddComponent <UnitCard>().Init(cardId, cardData);
            }
            else
            {
                cardInstance.AddComponent <BaseCard>().Init(cardId, cardData);
            }

            // 将实例放入对应位置的list中
            _handcardsInstance.Add(cardInstance);

            // 更新手牌list
            _handcards.Add(cardId);

            if (sendMsg)
            {
                // 发送手牌变动消息
                MsgDispatcher.SendMsg((int)MessageType.HandcardChange);
            }
        }
示例#16
0
 /// <summary>
 /// 广播执行
 /// </summary>
 private void Dispatch()
 {
     if (dispacherQueue.Count > 0)
     {
         lock (locker)
         {
             int count = dispacherQueue.Count;
             for (int i = 0; i < count; i++)
             {
                 MsgDispatcher dispacher = dispacherQueue.Dequeue();
                 Msg           msg       = dispacher.msg;
                 object[]      param     = dispacher.param;
                 if (msg_dic.ContainsKey(msg))
                 {
                     Dictionary <object, MsgRegister> dic = msg_dic[msg];
                     IEnumerator iter = dic.GetEnumerator();
                     while (iter.MoveNext())                                  //迭代器模式
                     {
                         KeyValuePair <object, MsgRegister> pair = (KeyValuePair <object, MsgRegister>)iter.Current;
                         MsgRegister register = pair.Value;
                         register.Invoke(param);
                     }
                 }
             }
         }
     }
 }
示例#17
0
        /// <summary>
        /// 冷却处理函数,响应EP消息,处理卡牌冷却,根据情况产生冷却池变动消息,卡牌堆变动消息
        /// </summary>
        public void HandleCooldownEvent()
        {
            List <cdObject> toRemove = new List <cdObject>();

            for (int i = 0; i < _cooldownCards.Count; i++)
            {
                int leftRounds = _cooldownCards[i].ReduceCd();
                if (leftRounds == 0)
                {
                    toRemove.Add(_cooldownCards[i]);
                }
            }

            for (int i = 0; i < toRemove.Count; i++)
            {
                // 将冷却完毕的id重新放回牌堆
                _cardsSets.Add(toRemove[i].objectId);

                // 将其从冷却列表中移除
                _cooldownCards.Remove(toRemove[i]);
            }

            // 发送冷却池变动消息
            MsgDispatcher.SendMsg((int)MessageType.CooldownlistChange);

            if (toRemove.Count > 0)
            {
                // 发送卡牌堆变动消息
                MsgDispatcher.SendMsg((int)MessageType.CardsetChange);
            }
        }
 void Update()
 {
     if (Input.GetMouseButtonDown(1))
     {
         MsgDispatcher.SendMsg("HelloWorld", "HelloWorld");
     }
 }
示例#19
0
 void Button3Click()
 {
     id = 3;
     if (effect3 == 0)
     {
         effect3 = GameFrameEntry.GetModule <EffectModule>().Show(3, Button3.transform);
     }
     else
     {
         GameFrameEntry.GetModule <EffectModule>().Close(effect3);
         effect3 = 0;
     }
     MsgDispatcher.SendMessage(GlobalEventType.TaskFinish, id);
     if (infoUI == 0)
     {
         GameFrameEntry.GetModule <UIModule>().Show <InfoUI>();
         infoUI = 1;
     }
     else
     {
         GameFrameEntry.GetModule <UIModule>().Close <InfoUI>();
         infoUI = 0;
     }
     Refresh();
 }
示例#20
0
 void Button2Click()
 {
     id = 2;
     GameFrameEntry.GetModule <EffectModule>().Show(2, Button2.transform);
     MsgDispatcher.SendMessage(GlobalEventType.TaskFinish, id);
     Refresh();
 }
示例#21
0
        private int DispatchWait = 250;     // # of milliseconds to wait for messages
        // dispatches to be handled on worker threads

        /// <summary>
        /// Handles the dispatching of a message via a dispatcher and then
        /// waits a bit of time to give the background threads to actually
        /// process the message.
        /// </summary>
        /// <param name="dispatcher"></param>
        /// <param name="msg"></param>
        /// <returns></returns>
        private bool Dispatch(MsgDispatcher dispatcher, Msg msg)
        {
            bool result;

            result = dispatcher.Dispatch(msg);
            Thread.Sleep(DispatchWait);
            return(result);
        }
示例#22
0
 private void RemoveListener()
 {
     MsgDispatcher.UnRegisterMsg((int)ROOM_REPLY.ActorAddReply, OnActorAddReply);
     MsgDispatcher.UnRegisterMsg((int)ROOM_REPLY.ActorRemoveReply, OnActorRemoveReply);
     MsgDispatcher.UnRegisterMsg((int)ROOM_REPLY.ActorMoveReply, OnActorMoveReply);
     MsgDispatcher.UnRegisterMsg((int)ROOM_REPLY.CityAddReply, OnCityAddReply);
     MsgDispatcher.UnRegisterMsg((int)ROOM_REPLY.CityRemoveReply, OnCityRemoveReply);
 }
示例#23
0
 void Button4Click()
 {
     id = 4;
     Button4.transform.DOLocalMoveY(400f, 0.3f).SetLoops(2, LoopType.Yoyo);
     MsgDispatcher.SendMessage(GlobalEventType.TaskFinish, id);
     Refresh();
     ChangeState();
 }
示例#24
0
 public static MsgDispatcher Instance()
 {
     if (_instance == null)
     {
         _instance = new MsgDispatcher();
     }
     return(_instance);
 }
示例#25
0
 /// <summary>
 /// 添加到消息队列
 /// </summary>
 /// <param name="msg"></param>
 /// <param name="param"></param>
 public void Broadcast(Msg msg, object[] param)
 {
     lock (locker)
     {
         MsgDispatcher dispacher = new MsgDispatcher(msg, param);
         dispacherQueue.Enqueue(dispacher);
     }
 }
示例#26
0
        protected internal override void OnEnter(ProcedureOwner procedureOwner)
        {
            base.OnEnter(procedureOwner);
            DBTSDK.AppUserManager.Instance.ShowAntiAddiction(true, 1);
            MsgDispatcher.AddEventListener(GameFramework.GlobalEventType.MainPanel_StartGame, MainPanel_StartGame);

            ShowMainPanelOrStarGame();
        }
示例#27
0
 public static MsgDispatcher GetInstance()
 {
     if (m_Ins == null)
     {
         m_Ins = new MsgDispatcher();
     }
     return(m_Ins);
 }
示例#28
0
        public override void Enter(RoundProcessController roundProcessController)
        {
            base.Enter(roundProcessController);
            MsgDispatcher.SendMsg((int)MessageType.AI);

            Gameplay.Instance().singleBattle.battleState = AI.BattleState.Prepare;
            Gameplay.Instance().singleBattle.Run();
        }
    public static void ProcessMsg(byte[] bytes, int size)
    {
        if (size < 4)
        {
            Debug.Log($"ROOM - ProcessMsg Error - invalid data size:{size}");
            return;
        }

        byte[] recvHeader = new byte[4];
        Array.Copy(bytes, 0, recvHeader, 0, 4);
        byte[] recvData = new byte[size - 4];
        Array.Copy(bytes, 4, recvData, 0, size - 4);

        int msgId = System.BitConverter.ToInt32(recvHeader, 0);

        switch ((ROOM_REPLY)msgId)
        {
        case ROOM_REPLY.PlayerEnterReply:
            PLAYER_ENTER_REPLY(recvData);
            break;

        case ROOM_REPLY.UploadMapReply:
            UPLOAD_MAP_REPLY(recvData);
            break;

        case ROOM_REPLY.DownloadMapReply:
            DOWNLOAD_MAP_REPLY(recvData);
            break;

        case ROOM_REPLY.EnterRoomReply:
            ENTER_ROOM_REPLY(recvData);
            break;

        case ROOM_REPLY.LeaveRoomReply:
            LEAVE_ROOM_REPLY(recvData);
            break;

        case ROOM_REPLY.DownloadCitiesReply:
            DOWNLOAD_CITIES_REPLY(recvData);
            break;

        case ROOM_REPLY.DownloadActorsReply:
            break;

        case ROOM_REPLY.DownloadResCellReply:
            DOWNLOAD_RESCELL_REPLY(recvData);
            break;

        case ROOM_REPLY.ChangeAiRightsReply:
            CHANGE_AI_RIGHTS_REPLY(recvData);
            break;

        default:
            // 通用消息处理器,别的地方要想响应找个消息,应该调用MsgDispatcher.RegisterMsg()来注册消息处理事件
            MsgDispatcher.ProcessMsg(bytes, size);
            break;
        }
    }
示例#30
0
        /// <summary>
        /// AI移动
        /// 一格一格移动处理函数
        /// </summary>
        /// <returns></returns>
        public IEnumerator moveStepByStepAI(Unit unit, List <Vector2> paths, System.Action callback)
        {
            #region 测试一哈 先固定(0.0)为灼烧块,(0.1)为粘滞块
            List <Vector2> vector2s = new List <Vector2>();
            vector2s.Add(new Vector2(0, 0));
            BattleMap.Instance().debuffBM.SetBattleMapBlockBurning(vector2s);
            List <Vector2> vector22s = new List <Vector2>();
            vector22s.Add(new Vector2(1, 1));
            BattleMap.Instance().debuffBM.SetBattleMapBlockRetrad(vector22s);
            #endregion

            Vector2        tempVector;
            BattleMapBlock battleMap;
            bool           isRetire = false;
            for (int i = paths.Count - 2; i >= 0; i--)
            {
                //移除上一步的地图块儿下面的units_on_me
                tempVector = new Vector2((int)paths[i + 1].x, (int)paths[i + 1].y);
                battleMap  = BattleMap.Instance().GetSpecificMapBlock(tempVector);
                battleMap.RemoveUnit(unit);
                //添加当前unit到地图块儿下面的units_on_me内
                tempVector = new Vector2((int)paths[i].x, (int)paths[i].y);
                battleMap  = BattleMap.Instance().GetSpecificMapBlock(tempVector);
                if (i != 0)
                {
                    battleMap.AddUnit(unit);
                }
                else
                {
                    battleMap.AddUnit(unit, false);
                }
                unit.transform.localPosition = Vector3.zero;

                if (battleMap.blockType == EMapBlockType.Burnning)//如果经过灼烧块
                {
                    BattleMap.Instance().debuffBM.UnitEnterBurning(tempVector);
                }
                else if (battleMap.blockType == EMapBlockType.Retire)//如果经过滞留块
                {
                    BattleMap.Instance().debuffBM.UnitEnterRetire(unit, battleMap);
                    unit.nextPos = paths[i];
                    MsgDispatcher.SendMsg((int)MessageType.Aftermove);
                    isRetire = true;
                    break;
                }
                unit.nextPos = paths[i];
                MsgDispatcher.SendMsg((int)MessageType.Move);
                yield return(new WaitForSeconds(0.4f));
            }
            if (isRetire == false)
            {
                MsgDispatcher.SendMsg((int)MessageType.Aftermove);
            }
            if (callback != null)
            {
                callback();
            }
        }
        public AdapterUSB()
        {
            device = new GenericHIDDevice(5824, 1503);
            device.Connected += OnConnected;
            device.Disconnected += OnDisconnected;

            frm = new MsgDispatcher(device);
            frm.WindowState = FormWindowState.Minimized;
            frm.Show();
            frm.Hide();
        }