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 var characterSet = CharacterSet.alphanumerics
24 characterSet.insert(charactersIn: "-_.!~*'()")
26 let desc = structure.deckDescription
28 Debug.excute(level: .debug) { print(desc as Any) }
30 let ss = "http://kancolle-calc.net/deckbuilder.html?predeck="
32 if let param = desc.addingPercentEncoding(withAllowedCharacters: characterSet),
33 let url = URL(string: ss + param) {
35 NSWorkspace.shared.open(url)
39 private static func build() -> DeckBuilderStructure {
41 let fleets = ServerDataStore.default
44 let hqLv = ServerDataStore.default.basic()?.level
46 return DeckBuilderStructure(hqLv: hqLv, fleets: fleets)
49 private static func buildDeck(deck: Deck) -> DBFleet {
51 let ships = deck[0...5].map(buildShip)
53 return DBFleet(ships: ships)
56 private static func buildShip(ship: Ship) -> DBShip {
60 .flatMap { $0 as? SlotItem }
62 let exItem = ship.extraItem.map(buildItem)
64 return DBShip(id: ship.master_ship.id,
71 private static func buildItem(item: SlotItem) -> DBItem {
73 return DBItem(id: item.master_slotItem.id,
74 lv: item.level != 0 ? item.level : nil,
75 aLv: item.alv != 0 ? item.alv : nil)