Makes DTOs implement Codable instead of just Encodable and Decodable.

Adds MonsterDocument to load/save .monster files.
This commit is contained in:
2021-04-08 17:54:50 -07:00
committed by headhunter45
parent cc963f547f
commit e741d4fb33
7 changed files with 114 additions and 24 deletions

View File

@@ -17,7 +17,7 @@ private enum LanguageDTOCodingKeys: String, CodingKey {
case speaks = "speaks"
}
extension LanguageDTO: Decodable {
extension LanguageDTO: Codable {
init(from decoder: Decoder) throws {
@@ -25,9 +25,6 @@ extension LanguageDTO: Decodable {
self.name = (try? container.decode(String.self, forKey: .name)) ?? ""
self.speaks = (try? container.decode(Bool.self, forKey: .speaks)) ?? false
}
}
extension LanguageDTO: Encodable {
func encode(to encoder: Encoder) throws {

View File

@@ -69,6 +69,70 @@ struct MonsterDTO {
var doubleColumns: Bool
var separationPoint: Int
var damage: [DamageTypeDTO] // TODO: figure this out
init() {
self.abilities = []
self.actions = []
self.alignment = ""
self.armorName = ""
self.blind = false
self.blindsight = 0
self.burrowSpeed = 0
self.chaPoints = 0
self.climbSpeed = 0
self.conPoints = 0
self.conditions = []
self.cr = ""
self.customCr = ""
self.customHP = false
self.customProf = 0
self.customSpeed = false
self.damage = []
self.damageTypes = []
self.darkvision = 0
self.dexPoints = 0
self.doubleColumns = false
self.flySpeed = 0
self.hitDice = 0
self.hover = false
self.hpText = ""
self.intPoints = 0
self.isLair = false
self.isLegendary = false
self.isRegional = false
self.lairs = []
self.languages = []
self.legendaries = []
self.lairDescription = ""
self.legendaryDescription = ""
self.lairDescriptionEnd = ""
self.name = ""
self.natArmorBonus = 0
self.otherArmorDesc = ""
self.reactions = []
self.regionals = []
self.regionalDescription = ""
self.regionalDescriptionEnd = ""
self.size = ""
self.speed = 0
self.skills = []
self.sthrows = []
self.strPoints = 0
self.swimSpeed = 0
self.speedDesc = ""
self.shortName = ""
self.specialDamage = []
self.shieldBonus = 0
self.separationPoint = 0
self.type = ""
self.tag = ""
self.telepathy = 0
self.truesight = 0
self.tremorsense = 0
self.understandsBut = ""
self.wisPoints = 0
}
}
enum MonsterDTOCodingKeys: String, CodingKey {
@@ -135,7 +199,7 @@ enum MonsterDTOCodingKeys: String, CodingKey {
case damage = "damage"
}
extension MonsterDTO: Decodable {
extension MonsterDTO: Codable {
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: MonsterDTOCodingKeys.self)
self.name = (try? container.decode(String.self, forKey: .name)) ?? "Imported Monster"
@@ -207,9 +271,6 @@ extension MonsterDTO: Decodable {
self.damageTypes = (try? container.decode([DamageTypeDTO].self, forKey: .damageTypes)) ?? []
self.languages = (try? container.decode([LanguageDTO].self, forKey: .languages)) ?? []
}
}
extension MonsterDTO: Encodable {
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: MonsterDTOCodingKeys.self)
@@ -266,7 +327,7 @@ extension MonsterDTO: Encodable {
try container.encode(self.isRegional, forKey: .isRegional)
try container.encode(self.regionalDescription, forKey: .regionalDescription)
try container.encode(self.regionalDescriptionEnd, forKey: .regionalDescriptionEnd)
// try container.encode(self.properties, forKey: .properties)
try container.encode([] as [TraitDTO], forKey: .properties)
try container.encode(self.lairs, forKey: .lairs)
try container.encode(self.regionals, forKey: .regionals)
try container.encode(self.specialDamage, forKey: .specialDamage)

View File

@@ -0,0 +1,37 @@
//
// Document.swift
// MonsterCards
//
// Created by Tom Hicks on 4/7/21.
//
import UIKit
import SceneKit
class MonsterDocument: UIDocument {
var monsterDTO: MonsterDTO?
var error: Error?
override func contents(forType typeName: String) throws -> Any {
let encoder = JSONEncoder()
do {
let data = try encoder.encode(monsterDTO)
return data
} catch {
return Data()
}
}
override func load(fromContents contents: Any, ofType typeName: String?) throws {
let decoder = JSONDecoder()
do {
let data = contents as! Data
monsterDTO = try decoder.decode(MonsterDTO.self, from: data)
} catch {
monsterDTO = MonsterDTO()
}
}
}

View File

@@ -17,7 +17,7 @@ private enum SavingThrowDTOCodingKeys: String, CodingKey {
case order = "order"
}
extension SavingThrowDTO: Decodable {
extension SavingThrowDTO: Codable {
init(from decoder: Decoder) throws {
@@ -25,9 +25,6 @@ extension SavingThrowDTO: Decodable {
self.name = (try? container.decode(String.self, forKey: .name)) ?? ""
self.order = (try? container.decode(Int.self, forKey: .order)) ?? 0
}
}
extension SavingThrowDTO: Encodable {
func encode(to encoder: Encoder) throws {

View File

@@ -19,7 +19,7 @@ private enum SkillDTOCodingKeys: String, CodingKey {
case note = "note"
}
extension SkillDTO: Decodable {
extension SkillDTO: Codable {
init(from decoder: Decoder) throws {
@@ -28,9 +28,6 @@ extension SkillDTO: Decodable {
self.note = (try? container.decode(String.self, forKey: .note)) ?? ""
self.stat = (try? container.decode(String.self, forKey: .stat)) ?? ""
}
}
extension SkillDTO: Encodable {
func encode(to encoder: Encoder) throws {

View File

@@ -19,7 +19,7 @@ private enum TraitDTOCodingKeys: String, CodingKey {
case desc = "desc"
}
extension TraitDTO: Decodable {
extension TraitDTO: Codable {
init(from decoder: Decoder) throws {
@@ -28,9 +28,6 @@ extension TraitDTO: Decodable {
self.note = (try? container.decode(String.self, forKey: .note)) ?? ""
self.desc = (try? container.decode(String.self, forKey: .desc)) ?? ""
}
}
extension TraitDTO: Encodable {
func encode(to encoder: Encoder) throws {