Add tank catalog with USDZ models and tank selection
Introduce TankDefinition/TankCatalog loaded from Tanks.json, bundle the Drachengas USDZ tank models, add tank selection and preview views, and update the AR experience, editor and project views to use the catalog. Includes tests for catalog loading and model selection. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@ -16,9 +16,13 @@ protocol ARProjectPersisting: AnyObject {
|
||||
var tank: Tank { get }
|
||||
var worldMap: ARWorldMap? { get }
|
||||
var tankTransform: [Float]? { get }
|
||||
var savedMeasurements: [Measurement] { get }
|
||||
var savedPipeRoute: PipeRoute { get }
|
||||
|
||||
func saveWorldMap(_ data: Data)
|
||||
func saveTankTransform(_ transform: [Float])
|
||||
func saveMeasurements(_ measurements: [Measurement])
|
||||
func savePipeRoute(_ route: PipeRoute)
|
||||
func clearTankTransform()
|
||||
func savePhoto(_ imageData: Data, date: Date, coordinate: CLLocationCoordinate2D?)
|
||||
}
|
||||
@ -38,6 +42,16 @@ final class ProjectPersistenceAdapter: ARProjectPersisting {
|
||||
var worldMap: ARWorldMap? { project.worldMap }
|
||||
var tankTransform: [Float]? { project.tankTransform }
|
||||
|
||||
var savedMeasurements: [Measurement] {
|
||||
guard let data = project.measurementsData else { return [] }
|
||||
return (try? JSONDecoder().decode([Measurement].self, from: data)) ?? []
|
||||
}
|
||||
|
||||
var savedPipeRoute: PipeRoute {
|
||||
guard let data = project.pipeRouteData else { return PipeRoute() }
|
||||
return (try? JSONDecoder().decode(PipeRoute.self, from: data)) ?? PipeRoute()
|
||||
}
|
||||
|
||||
func saveWorldMap(_ data: Data) {
|
||||
project.worldMapData = data
|
||||
try? modelContext.save()
|
||||
@ -48,6 +62,16 @@ final class ProjectPersistenceAdapter: ARProjectPersisting {
|
||||
try? modelContext.save()
|
||||
}
|
||||
|
||||
func saveMeasurements(_ measurements: [Measurement]) {
|
||||
project.measurementsData = try? JSONEncoder().encode(measurements)
|
||||
try? modelContext.save()
|
||||
}
|
||||
|
||||
func savePipeRoute(_ route: PipeRoute) {
|
||||
project.pipeRouteData = try? JSONEncoder().encode(route)
|
||||
try? modelContext.save()
|
||||
}
|
||||
|
||||
func clearTankTransform() {
|
||||
project.tankTransform = nil
|
||||
try? modelContext.save()
|
||||
|
||||
Reference in New Issue
Block a user