1 // Copyright (C) 2013, 2014, 2015 Kazuhiro Fujieda <fujieda@users.osdn.me>
\r
3 // Licensed under the Apache License, Version 2.0 (the "License");
\r
4 // you may not use this file except in compliance with the License.
\r
5 // You may obtain a copy of the License at
\r
7 // http://www.apache.org/licenses/LICENSE-2.0
\r
9 // Unless required by applicable law or agreed to in writing, software
\r
10 // distributed under the License is distributed on an "AS IS" BASIS,
\r
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
12 // See the License for the specific language governing permissions and
\r
13 // limitations under the License.
\r
15 using System.Collections.Generic;
\r
17 using KancolleSniffer.Util;
\r
19 namespace KancolleSniffer.Model
\r
21 public class ItemInfo
\r
23 private readonly ItemMaster _itemMaster;
\r
24 private readonly ItemInventry _itemInventry;
\r
25 public AlarmCounter Counter { get; }
\r
27 public ItemInfo(ItemMaster itemMaster, ItemInventry itemInventry)
\r
29 _itemMaster = itemMaster;
\r
30 _itemInventry = itemInventry;
\r
31 Counter = new AlarmCounter(() => _itemInventry.Count) {Margin = 10};
\r
34 public void InspectBasic(dynamic json)
\r
36 Counter.Max = (int)json.api_max_slotitem;
\r
39 public void InspectMaster(dynamic json)
\r
41 _itemMaster.InspectMaster(json);
\r
44 public void InspectSlotItem(dynamic json, bool full = false)
\r
47 json = new[] {json};
\r
49 _itemInventry.Clear();
\r
50 foreach (var entry in json)
\r
52 var id = (int)entry.api_id;
\r
53 _itemInventry[id] = new ItemStatus(id)
\r
55 Spec = _itemMaster[(int)entry.api_slotitem_id],
\r
56 Level = entry.api_level() ? (int)entry.api_level : 0,
\r
57 Alv = entry.api_alv() ? (int)entry.api_alv : 0
\r
62 public void InspectCreateItem(dynamic json)
\r
64 if (!json.IsDefined("api_slot_item"))
\r
66 InspectSlotItem(json.api_slot_item);
\r
69 public void InspectGetShip(dynamic json)
\r
71 if (json.api_slotitem == null) // まるゆにはスロットがない
\r
73 InspectSlotItem(json.api_slotitem);
\r
76 public void InspectDestroyItem(string request, dynamic json)
\r
78 var values = HttpUtility.ParseQueryString(request);
\r
79 DeleteItems(values["api_slotitem_ids"].Split(',').Select(int.Parse).ToArray());
\r
82 public void InspectRemodelSlot(dynamic json)
\r
84 if (json.api_after_slot())
\r
85 InspectSlotItem(json.api_after_slot);
\r
86 if (!json.api_use_slot_id())
\r
88 DeleteItems((int[])json.api_use_slot_id);
\r
91 public void DeleteItems(IEnumerable<ItemStatus> items)
\r
93 DeleteItems(items.Select(item => item.Id));
\r
96 private void DeleteItems(IEnumerable<int> ids)
\r
98 _itemInventry.Remove(ids);
\r
101 public ItemSpec GetSpecByItemId(int id) => _itemMaster[id];
\r
103 public string GetName(int id) => GetStatus(id).Spec.Name;
\r
105 public ItemStatus GetStatus(int id)
\r
107 return _itemInventry[id];
\r
110 public void ClearHolder()
\r
112 foreach (var item in _itemInventry.AllItems)
\r
113 item.Holder = new ShipStatus();
\r
116 public ItemStatus[] ItemList => _itemInventry.AllItems.ToArray();
\r
118 public string GetUseItemName(int id) => _itemMaster.GetUseItemName(id);
\r
120 public void InjectItemSpec(IEnumerable<ItemSpec> specs)
\r
122 foreach (var spec in specs)
\r
123 _itemMaster[spec.Id] = spec;
\r
126 public ItemStatus[] InjectItems(IEnumerable<int> itemIds)
\r
128 var id = _itemInventry.MaxId + 1;
\r
129 return itemIds.Select(itemId =>
\r
131 var spec = _itemMaster[itemId];
\r
134 spec = new ItemSpec {Id = itemId};
\r
135 _itemMaster[itemId] = spec;
\r
137 var item = new ItemStatus {Id = id++, Spec = spec};
\r
138 _itemInventry.Add(item);
\r