32 lines
980 B
Swift
32 lines
980 B
Swift
import SwiftUI
|
|
|
|
struct ARProjectTankImage: View {
|
|
let tank: Tank
|
|
@Environment(\.tankCatalog) private var catalog
|
|
@State private var image: UIImage?
|
|
@State private var failed = false
|
|
|
|
var body: some View {
|
|
Group {
|
|
if let image {
|
|
Image(uiImage: image).resizable().scaledToFit()
|
|
} else if failed {
|
|
Image(systemName: "cube.transparent").foregroundStyle(.secondary)
|
|
.accessibilityLabel("Tankvorschau nicht verfügbar")
|
|
} else {
|
|
ProgressView().controlSize(.small)
|
|
}
|
|
}
|
|
.task(id: tank) {
|
|
image = nil
|
|
failed = false
|
|
await Task.yield()
|
|
guard !Task.isCancelled else { return }
|
|
if let definition = catalog.definition(for: tank) {
|
|
image = TankThumbnailRenderer.shared.image(for: definition)
|
|
}
|
|
failed = image == nil
|
|
}
|
|
}
|
|
}
|