Example #1
0
            public Fleet(KCB.api_get_member.ApiDataDeck json, MasterData.Mission masterMission)
            {
                Name          = json.api_name;
                Num           = json.api_id;
                MissionNum    = (int)json.api_mission[1];
                MissionFinish = _epoch.AddMilliseconds(json.api_mission[2]).ToLocalTime();

                var mission = masterMission.GetMissionInfo(MissionNum);

                if (mission == null)
                {
                    MissionName   = "";
                    MissionDetail = "";
                }
                else
                {
                    MissionName   = mission.Name;
                    MissionDetail = mission.Detail;
                }


                List <int> shipList = new List <int>();

                foreach (var ship in json.api_ship)
                {
                    if (ship == -1)
                    {
                        continue;
                    }

                    shipList.Add(ship);
                }
                Member = shipList;
            }
Example #2
0
        /// <summary>
        /// 遠征開始しました
        /// </summary>
        /// <param name="req"></param>
        public void StartMission(IDictionary <string, string> req, MasterData.Mission masterMission)
        {
            /*
             *[api_mission_id] Value:[5]
             *   [api_deck_id] Value:[3]
             */

            //TODO 遠征開始したのでUIを更新する
        }
Example #3
0
        /// <summary>
        /// 艦隊情報を更新。生JSON受け
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        public bool UpdateDeck(string JSON, MasterData.Mission masterMission)
        {
            var json = JsonConvert.DeserializeObject <KCB.api_get_member.Deck>(JSON);

            if (json.api_result != 1)
            {
                return(false);
            }

            return(UpdateDeck(json.api_data, masterMission));
        }
Example #4
0
            /// <summary>
            ///
            /// </summary>
            /// <param name="_name">艦隊名</param>
            /// <param name="_num">艦隊番号(1-4)</param>
            /// <param name="_missionNum">遠征番号</param>
            /// <param name="_order">艦隊内序列(1-6)</param>
            /// <param name="masterMission"></param>
            public ShipDeckData(string _name, int _num, int _missionNum, int _order, MasterData.Mission masterMission)
            {
                Name = _name; Num = _num; MissionNum = _missionNum; Order = _order;

                var mission = masterMission.GetMissionInfo(MissionNum);

                if (mission == null)
                {
                    MissionName = "";
                }
                else
                {
                    MissionName = mission.Name;
                }
            }
Example #5
0
        /// <summary>
        /// 艦隊一覧が更新されたので艦隊メンバーハッシュを更新
        /// </summary>
        /// <param name="masterMission">任務マスター</param>
        void UpdateShipDeckDataList(MasterData.Mission masterMission)
        {
            _deckMember.Clear();
            lock (_deck)
            {
                foreach (var it in _deck)
                {
                    Debug.WriteLine("Deck:" + it.ToString());

                    for (int n = 0; n < it.Member.Count; n++)
                    {
                        _deckMember[it.Member[n]] = new ShipDeckData(it.Name, it.Num, it.MissionNum, n + 1, masterMission);
                    }
                }
            }
        }
Example #6
0
        /// <summary>
        /// 艦隊情報を更新。member/ship3 port対応
        /// 一分艦隊の情報だけ降ってくる場合はまだ非対応。
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        public bool UpdateDeck(List <KCB.api_get_member.ApiDataDeck> json, MasterData.Mission masterMission)
        {
            lock (_deck)
            {
                _deck.Clear();
                foreach (var item in json)
                {
                    _deck.Add(new Fleet(item, masterMission));

                    //第一艦隊の秘書官が旗艦
                    if (item.api_id == 1)
                    {
                        Secretary = item.api_ship[0];
                        Debug.WriteLine("SecretaryShip:" + Secretary.ToString());
                    }
                }
                _deck.Sort();
            }

            UpdateShipDeckDataList(masterMission);

            return(true);
        }
Example #7
0
        /// <summary>
        /// プリセット編成を読み込む
        /// /kcsapi/api_req_hensei/preset_select
        /// </summary>
        /// <param name="req"></param>
        /// <param name="responseJson"></param>
        public void LoadPresetDeck(IDictionary <string, string> req, string responseJson, MasterData.Mission masterMission)
        {
            KCB.api_req_hensei.PresetSelect json = JsonConvert.DeserializeObject <KCB.api_req_hensei.PresetSelect>(responseJson);

            if (json.api_result != 1)
            {
                return;
            }

            int deck_id   = int.Parse(req["api_deck_id"]);
            int preset_no = int.Parse(req["api_preset_no"]);

            lock (_deck)
            {
                var target = _deck[deck_id - 1];

                target.Member.Clear();
                target.Name = json.api_data.api_name;
                if (deck_id == 1)
                {
                    Secretary = json.api_data.api_ship[0];
                }

                foreach (var it in json.api_data.api_ship)
                {
                    if (it > 0)
                    {
                        target.Member.Add(it);
                    }
                }
            }

            UpdateShipDeckDataList(masterMission);
        }
Example #8
0
        /// <summary>
        /// 艦隊メンバー変更
        /// /kcsapi/api_req_hensei/change
        /// </summary>
        /// <param name="req">リクエスト</param>
        /// <param name="memberShip">艦隊メンバー情報</param>
        public void ChangeDeckMember(IDictionary <string, string> req, Ship memberShip, MasterData.Mission masterMission)
        {
            //操作する艦隊番号(1-4)
            string deck_id_s = req["api_id"];
            //投入/削除する位置(0-5) -1で旗艦以外全員外す
            string ship_index_s = req["api_ship_idx"];
            //メンバー(-1で該当位置のメンバー削除)
            string ship_id_s = req["api_ship_id"];

            int deck_id    = int.Parse(deck_id_s);
            int ship_index = int.Parse(ship_index_s);
            int ship_id    = int.Parse(ship_id_s);

            Debug.WriteLine(string.Format("Deck:{0} Order:{1} Ship:{2}", deck_id, ship_index, ship_id));

            //deckの操作を開始するのでlockする
            lock (_deck)
            {
                if (ship_id > 0)
                {
                    //メンバーを入れ替える

                    //秘書艦入れ替えた場合
                    if (deck_id == 1 && ship_index == 0)
                    {
                        Debug.WriteLine(string.Format("Change secretary {0} -> {1}", Secretary, ship_id));
                        Secretary = ship_id;
                    }

                    //既に艦隊にいる艦娘の場合は書き換える。
                    ShipDeckData ship1 = GetShipDeckData(ship_id);
                    if (ship1 != null)
                    {
                        //指定した船が現在いる場所を取得
                        int deck  = ship1.Num;
                        int order = ship1.Order - 1;
                        Debug.WriteLine(string.Format("OldDeck:{0} OldOrder:{1}", deck, order));
                        Debug.WriteLine(string.Format("ShipDeck{0}.Count:{1} ShipIndex:{2}",
                                                      deck_id - 1, _deck[deck_id - 1].Member.Count, ship_index));

                        if (_deck[deck_id - 1].Member.Count > ship_index)
                        {
                            //挿入先が既に存在していれば、入れ替え
                            int          currentShipId = _deck[deck_id - 1].Member[ship_index];
                            ShipDeckData ship2         = GetShipDeckData(currentShipId);

                            int ndeck  = ship2.Num;
                            int norder = ship2.Order - 1;
                            Debug.WriteLine(string.Format("SwapMember ndeck:{0} norder:{1} currentShipId:{2}",
                                                          ndeck, norder, currentShipId));

                            //Fleetを入れ替え
                            _deck[deck_id - 1].Member[ship_index] = _deck[deck - 1].Member[order];
                            _deck[deck - 1].Member[order]         = currentShipId;
                        }
                        else
                        {
                            //指定した艦隊に追加

                            //挿入先が空白なので、挿入元から指定情報を削除
                            Debug.WriteLine(string.Format("Removeat deck{0} order:{1}", deck - 1, order));
                            _deck[deck - 1].Member.RemoveAt(order);

                            //挿入先へ艦娘IDを挿入
                            Debug.WriteLine(string.Format("Insert deck{0} index:{1} id:{2}", deck_id - 1, ship_index, ship_id));
                            _deck[deck_id - 1].Member.Insert(ship_index, ship_id);
                        }
                    }
                    else
                    {
                        //新規参入

                        //すでにある場所へ挿入する場合
                        if (_deck[deck_id - 1].Member.Count > ship_index)
                        {
                            int currentShipId = _deck[deck_id - 1].Member[ship_index];
                            _deck[deck_id - 1].Member[ship_index] = ship_id;
                        }
                        else
                        {
                            //何もいない場所へ挿入する場合
                            _deck[deck_id - 1].Member.Insert(ship_index, ship_id);
                        }
                    }
                }
                else
                {
                    //メンバーを削除
                    if (ship_index >= 0)
                    {
                        _removeShip(ship_index, deck_id);
                    }
                    else
                    {
                        //旗艦以外全員外す
                        if (_deck[deck_id - 1].Member.Count > 1)
                        {
                            int member = _deck[deck_id - 1].Member.Count - 1;

                            //後ろから消す
                            for (int idx = member; idx > 0; idx--)
                            {
                                _removeShip(idx, deck_id);
                            }
                        }
                    }
                }
            }//lock

            //deckが更新されたので反映させる
            UpdateShipDeckDataList(masterMission);
        }