Files
Gas-Tank-AR-App/GasTankAR/Model/TankDefinition.swift
2026-11-07 18:38:35 +01:00

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
}
}