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 .flatMap { $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 { return 0 }
59 case .destroyer: return 5
61 case .lightCruiser: return 2
63 case .aviationCruiser: return 4
65 case .aviationBattleship: return 7
67 case .seaplaneTender: return 9
69 case .amphibiousAssaultShip: return 12
71 case .submarineTender: return 7
73 case .trainingCruiser: return 6
75 case .supplyShip: return 15
82 final class EquipmentTPValueCalculator: TPValueCalculator {
84 let slotItem: SlotItem
86 init(_ item: SlotItem) {
93 guard let type = EquipmentType(rawValue: slotItem.master_slotItem.type_2) else { return 0 }
97 case .landingCraft: return 8
99 case .carire: return 5
101 case .tankShip: return 2
103 case .onigiri: return 1