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 ItemInventory _itemInventory;
\r
25 public AlarmCounter Counter { get; }
\r
27 public ItemInfo(ItemMaster itemMaster, ItemInventory itemInventory)
\r
29 _itemMaster = itemMaster;
\r
30 _itemInventory = itemInventory;
\r
31 Counter = new AlarmCounter(() => _itemInventory.Count) {Margin = 5};
\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 _itemInventory.Clear();
\r
50 foreach (var entry in json)
\r
52 var id = (int)entry.api_id;
\r
55 _itemInventory[id] = new ItemStatus(id)
\r
57 Spec = _itemMaster[(int)entry.api_slotitem_id],
\r
58 Level = entry.api_level() ? (int)entry.api_level : 0,
\r
59 Alv = entry.api_alv() ? (int)entry.api_alv : 0
\r
64 public void InspectCreateItem(dynamic json)
\r
67 if (json.api_slot_item())
\r
69 InspectSlotItem(json.api_slot_item);
\r
71 else if (json.api_get_items())
\r
73 InspectSlotItem(json.api_get_items);
\r
77 public void InspectGetShip(dynamic json)
\r
79 if (json.api_slotitem == null) // まるゆにはスロットがない
\r
81 InspectSlotItem(json.api_slotitem);
\r
84 public void InspectDestroyItem(string request, dynamic json)
\r
86 var values = HttpUtility.ParseQueryString(request);
\r
87 DeleteItems(values["api_slotitem_ids"].Split(',').Select(int.Parse).ToArray());
\r
90 public void InspectRemodelSlot(dynamic json)
\r
92 if (json.api_after_slot())
\r
93 InspectSlotItem(json.api_after_slot);
\r
94 if (!json.api_use_slot_id())
\r
96 DeleteItems((int[])json.api_use_slot_id);
\r
99 private void DeleteItems(IEnumerable<int> ids)
\r
101 _itemInventory.Remove(ids);
\r
104 public ItemSpec GetSpecByItemId(int id) => _itemMaster[id];
\r
106 public string GetName(int id) => GetStatus(id).Spec.Name;
\r
108 public ItemStatus GetStatus(int id)
\r
110 return _itemInventory[id];
\r
113 public void ClearHolder()
\r
115 foreach (var item in _itemInventory.AllItems)
\r
116 item.Holder = new ShipStatus();
\r
119 public ItemStatus[] ItemList => _itemInventory.AllItems.ToArray();
\r
121 public string GetUseItemName(int id) => _itemMaster.GetUseItemName(id);
\r
123 public void InjectItemSpec(IEnumerable<ItemSpec> specs)
\r
125 foreach (var spec in specs)
\r
126 _itemMaster[spec.Id] = spec;
\r
129 public ItemStatus[] InjectItems(IEnumerable<int> itemIds)
\r
131 var id = _itemInventory.MaxId + 1;
\r
132 return itemIds.Select(itemId =>
\r
134 var spec = _itemMaster[itemId];
\r
137 spec = new ItemSpec {Id = itemId};
\r
138 _itemMaster[itemId] = spec;
\r
140 var item = new ItemStatus {Id = id++, Spec = spec};
\r
141 _itemInventory.Add(item);
\r