OSDN Git Service

Swift4.0にコンバートした
[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         var characterSet = CharacterSet.alphanumerics
24         characterSet.insert(charactersIn: "-_.!~*'()")
25         
26         let desc = structure.deckDescription
27         
28         Debug.excute(level: .debug) { print(desc as Any) }
29         
30         let ss = "http://kancolle-calc.net/deckbuilder.html?predeck="
31         
32         if let param = desc.addingPercentEncoding(withAllowedCharacters: characterSet),
33             let url = URL(string: ss + param) {
34             
35             NSWorkspace.shared.open(url)
36         }
37     }
38     
39     private static func build() -> DeckBuilderStructure {
40         
41         let fleets = ServerDataStore.default
42             .decksSortedById()
43             .map(buildDeck)
44         let hqLv = ServerDataStore.default.basic()?.level
45         
46         return DeckBuilderStructure(hqLv: hqLv, fleets: fleets)
47     }
48     
49     private static func buildDeck(deck: Deck) -> DBFleet {
50         
51         let ships = deck[0...5].map(buildShip)
52         
53         return DBFleet(ships: ships)
54     }
55     
56     private static func buildShip(ship: Ship) -> DBShip {
57         
58         let items = ship
59             .equippedItem
60             .flatMap { $0 as? SlotItem }
61             .flatMap(buildItem)
62         let exItem = ship.extraItem.map(buildItem)
63         
64         return DBShip(id: ship.master_ship.id,
65                       lv: ship.lv,
66                       luck: ship.lucky_0,
67                       items: items,
68                       exItem: exItem)
69     }
70     
71     private static func buildItem(item: SlotItem) -> DBItem {
72         
73         return DBItem(id: item.master_slotItem.id,
74                       lv: item.level != 0 ? item.level : nil,
75                       aLv: item.alv != 0 ? item.alv : nil)
76     }
77 }