2024-01-02 20:17:10 -06:00
|
|
|
import { Vector3Tuple } from 'three';
|
|
|
|
|
import { asset } from './asset';
|
2024-02-07 10:02:00 -06:00
|
|
|
import { fetchCdonLz4 } from './fetchCdonLz4';
|
2024-01-02 20:17:10 -06:00
|
|
|
|
|
|
|
|
export type ModelDefinitions = Record<number, ModelDefinition>;
|
2024-01-09 18:35:42 -06:00
|
|
|
|
|
|
|
|
export interface ModelArmor {
|
|
|
|
|
thickness: Record<number, number>;
|
|
|
|
|
spaced?: number[];
|
|
|
|
|
}
|
|
|
|
|
|
2024-01-28 20:56:49 -06:00
|
|
|
export interface BoundingBox {
|
2024-01-28 20:45:50 -06:00
|
|
|
min: Vector3Tuple;
|
|
|
|
|
max: Vector3Tuple;
|
|
|
|
|
}
|
2024-01-02 20:17:10 -06:00
|
|
|
interface ModelDefinition {
|
2024-01-09 18:35:42 -06:00
|
|
|
armor: ModelArmor;
|
2024-01-02 20:17:10 -06:00
|
|
|
turretOrigin: Vector3Tuple;
|
2024-01-03 18:52:22 -06:00
|
|
|
turretRotation?: InitialTurretRotation;
|
2024-01-02 20:17:10 -06:00
|
|
|
turrets: Record<number, TurretModelDefinition>;
|
2024-02-08 10:58:03 -06:00
|
|
|
tracks: Record<number, TrackDefinition>;
|
2024-01-28 20:45:50 -06:00
|
|
|
boundingBox: BoundingBox;
|
2024-01-02 20:17:10 -06:00
|
|
|
}
|
2024-02-08 10:58:03 -06:00
|
|
|
interface TrackDefinition {
|
|
|
|
|
thickness: number;
|
|
|
|
|
origin: Vector3Tuple;
|
|
|
|
|
}
|
2024-01-03 18:52:22 -06:00
|
|
|
export interface InitialTurretRotation {
|
|
|
|
|
yaw: number;
|
|
|
|
|
pitch: number;
|
|
|
|
|
roll: number;
|
|
|
|
|
}
|
2024-01-02 20:17:10 -06:00
|
|
|
interface TurretModelDefinition {
|
2024-01-28 20:45:50 -06:00
|
|
|
boundingBox: BoundingBox;
|
2024-01-09 18:35:42 -06:00
|
|
|
armor: ModelArmor;
|
2024-01-02 20:17:10 -06:00
|
|
|
model: number;
|
|
|
|
|
gunOrigin: Vector3Tuple;
|
|
|
|
|
guns: Record<number, GunModelDefinition>;
|
2024-01-03 13:07:45 -06:00
|
|
|
yaw?: YawLimits;
|
|
|
|
|
}
|
|
|
|
|
export interface YawLimits {
|
|
|
|
|
min: number;
|
|
|
|
|
max: number;
|
2024-01-02 20:17:10 -06:00
|
|
|
}
|
|
|
|
|
interface GunModelDefinition {
|
2024-01-09 18:35:42 -06:00
|
|
|
armor: ModelArmor;
|
2024-01-16 08:40:27 -06:00
|
|
|
barrelThickness: number;
|
2024-01-02 20:17:10 -06:00
|
|
|
model: number;
|
2024-01-03 13:07:45 -06:00
|
|
|
pitch: PitchLimits;
|
|
|
|
|
}
|
|
|
|
|
export interface PitchLimits {
|
|
|
|
|
min: number;
|
|
|
|
|
max: number;
|
2024-01-02 20:17:10 -06:00
|
|
|
|
2024-01-03 13:07:45 -06:00
|
|
|
front?: { min: number; max: number; range: number };
|
|
|
|
|
back?: { min: number; max: number; range: number };
|
|
|
|
|
transition?: number;
|
2024-01-02 20:17:10 -06:00
|
|
|
}
|
|
|
|
|
|
2024-02-07 10:02:00 -06:00
|
|
|
export const modelDefinitions = fetchCdonLz4<ModelDefinitions>(
|
|
|
|
|
asset('definitions/models.cdon.lz4'),
|
2024-02-05 13:33:23 -06:00
|
|
|
);
|