5 // Created by Hori,Masaki on 2017/07/14.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
11 final class DeckBuilder {
13 private let structure: DeckBuilderStructure
17 structure = DeckBuilder.build()
20 func openDeckBuilder() {
22 // use for encodeURIComponent() of Javascript
23 let characterSet = CharacterSet.alphanumerics.union(CharacterSet(charactersIn: "-_.!~*'()"))
25 let desc = structure.deckDescription
27 Debug.excute(level: .debug) { print(desc as Any) }
29 let ss = "http://kancolle-calc.net/deckbuilder.html?predeck="
31 if let param = desc.addingPercentEncoding(withAllowedCharacters: characterSet),
32 let url = URL(string: ss + param) {
34 NSWorkspace.shared.open(url)
38 private static func build() -> DeckBuilderStructure {
40 let fleets = ServerDataStore.default
43 let hqLv = ServerDataStore.default.basic()?.level
45 return DeckBuilderStructure(hqLv: hqLv, fleets: fleets)
48 private static func buildDeck(deck: Deck) -> DBFleet {
50 let ships = deck[0..<Deck.maxShipCount].map(buildShip)
52 return DBFleet(ships: ships)
55 private static func buildShip(ship: Ship) -> DBShip {
59 .compactMap { $0 as? SlotItem }
60 .compactMap(buildItem)
61 let exItem = ship.extraItem.map(buildItem)
63 return DBShip(id: ship.master_ship.id,
70 private static func buildItem(item: SlotItem) -> DBItem {
72 return DBItem(id: item.master_slotItem.id,
73 lv: item.level != 0 ? item.level : nil,
74 aLv: item.alv != 0 ? item.alv : nil)