2 // TPValueCalculator.swift
5 // Created by Hori,Masaki on 2017/09/08.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
12 protocol TPValueCalculator {
14 var value: Int { get }
17 final class ShipTPValueCalculator: TPValueCalculator {
19 static let kinuKaiNi = 487
35 let shipTPValue = shipTypeValue(ShipType(rawValue: ship.master_ship.stype.id))
37 let itemValue = ship.equippedItem.array
38 .compactMap { $0 as? SlotItem }
39 .map { EquipmentTPValueCalculator($0) }
43 let extraItemValue = ship.extraItem.flatMap { EquipmentTPValueCalculator($0) }.flatMap { $0.value } ?? 0
45 return shipTPValue + itemValue + extraItemValue
48 func shipTypeValue(_ shipType: ShipType?) -> Int {
50 if ship.master_ship.id == ShipTPValueCalculator.kinuKaiNi {
55 guard let type = shipType else {
62 case .destroyer: return 5
64 case .lightCruiser: return 2
66 case .aviationCruiser: return 4
68 case .aviationBattleship: return 7
70 case .submarineAircraftCarrier: return 1
72 case .seaplaneTender: return 9
74 case .amphibiousAssaultShip: return 12
76 case .submarineTender: return 7
78 case .trainingCruiser: return 6
80 case .supplyShip: return 15
88 final class EquipmentTPValueCalculator: TPValueCalculator {
90 let slotItem: SlotItem
92 init(_ item: SlotItem) {
99 guard let type = EquipmentType(rawValue: slotItem.master_slotItem.type_2) else {
106 case .landingCraft: return 8
108 case .carire: return 5
110 case .tankShip: return 22
112 case .onigiri: return 1