43 lines
1.5 KiB
Swift
43 lines
1.5 KiB
Swift
//
|
|
// TankDefinition.swift
|
|
// GasTankAR
|
|
//
|
|
// Created by Dennis Nemec on 14.09.26.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
/// Eine im Katalog (`Tanks.json`) hinterlegte Tank-Variante. Verbindet die
|
|
/// Identität eines Tanks (Größe, Farbe, Aufstellungsart) mit dem Pfad zum
|
|
/// 3D-Modell. Die Anzeigenamen werden separat gepflegt (siehe `TankCatalog`).
|
|
nonisolated struct TankDefinition: Codable, Hashable, Identifiable {
|
|
let size: TankSize
|
|
let color: TankColor
|
|
let placement: TankPlacement
|
|
/// Pfad bzw. Dateiname des 3D-Modells im App-Bundle (z. B. `DG-2700_wh.usdz`).
|
|
let modelPath: String
|
|
/// X-Koordinate der Domschachtmitte im lokalen Modellraum (Meter).
|
|
/// Aus der oberen Schachtkante: (kleinstes X + größtes X) / 2.
|
|
/// Die Tank-Längsachse der gelieferten USDZ-Modelle liegt auf X.
|
|
let domeCenterX: Float
|
|
|
|
/// Stabile Identität aus der Kombination der Auswahlmerkmale.
|
|
var id: String { "\(size.rawValue)_\(color.rawValue)_\(placement.rawValue)" }
|
|
|
|
/// Ressourcenname ohne Dateiendung, wie ihn RealityKit/SceneKit zum Laden
|
|
/// aus dem Bundle erwarten (z. B. `DG-2700_wh`).
|
|
var modelResourceName: String {
|
|
(modelPath as NSString).deletingPathExtension
|
|
}
|
|
|
|
/// Dateiendung des Modells (z. B. `usdz`).
|
|
var modelFileExtension: String {
|
|
(modelPath as NSString).pathExtension
|
|
}
|
|
|
|
/// Entspricht diese Definition der getroffenen Tank-Auswahl?
|
|
func matches(_ tank: Tank) -> Bool {
|
|
size == tank.size && color == tank.color && placement == tank.placement
|
|
}
|
|
}
|