OSDN Git Service

関数名を変更
[kcd/KCD.git] / KCD / DeckBuilder.swift
1 //
2 //  DeckBuilder.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2017/07/14.
6 //  Copyright © 2017年 Hori,Masaki. All rights reserved.
7 //
8
9 import Cocoa
10
11 final class DeckBuilder {
12     
13     private let structure: DeckBuilderStructure
14     
15     init() {
16         
17         structure = DeckBuilder.build()
18     }
19     
20     func openDeckBuilder() {
21         
22         // use for encodeURIComponent() of Javascript
23         let characterSet = CharacterSet.alphanumerics.union(CharacterSet(charactersIn: "-_.!~*'()"))
24         
25         let desc = structure.deckDescription
26         
27         Debug.excute(level: .debug) { print(desc as Any) }
28         
29         let ss = "http://kancolle-calc.net/deckbuilder.html?predeck="
30         
31         if let param = desc.addingPercentEncoding(withAllowedCharacters: characterSet),
32             let url = URL(string: ss + param) {
33             
34             NSWorkspace.shared.open(url)
35         }
36     }
37     
38     private static func build() -> DeckBuilderStructure {
39         
40         let fleets = ServerDataStore.default
41             .decksSortedById()
42             .map(buildDeck)
43         let hqLv = ServerDataStore.default.basic()?.level
44         
45         return DeckBuilderStructure(hqLv: hqLv, fleets: fleets)
46     }
47     
48     private static func buildDeck(deck: Deck) -> DBFleet {
49         
50         let ships = deck[0...5].map(buildShip)
51         
52         return DBFleet(ships: ships)
53     }
54     
55     private static func buildShip(ship: Ship) -> DBShip {
56         
57         let items = ship
58             .equippedItem
59             .flatMap { $0 as? SlotItem }
60             .flatMap(buildItem)
61         let exItem = ship.extraItem.map(buildItem)
62         
63         return DBShip(id: ship.master_ship.id,
64                       lv: ship.lv,
65                       luck: ship.lucky_0,
66                       items: items,
67                       exItem: exItem)
68     }
69     
70     private static func buildItem(item: SlotItem) -> DBItem {
71         
72         return DBItem(id: item.master_slotItem.id,
73                       lv: item.level != 0 ? item.level : nil,
74                       aLv: item.alv != 0 ? item.alv : nil)
75     }
76 }