feat: polish nightdrive road sun and signage
This commit is contained in:
31
src/scene/world/travel-distance.ts
Normal file
31
src/scene/world/travel-distance.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
export interface TravelDistance {
|
||||
advance(deltaSeconds: number, speed: number, roadEnergy: number): number;
|
||||
snapshot(): number;
|
||||
}
|
||||
|
||||
const MAX_FRAME_SECONDS = 0.1;
|
||||
const CRUISE_UNITS_PER_SECOND = 18;
|
||||
const SPEED_UNITS_PER_SECOND = 54;
|
||||
const ENERGY_UNITS_PER_SECOND = 48;
|
||||
|
||||
export function createTravelDistance(): TravelDistance {
|
||||
let distance = 0;
|
||||
|
||||
return {
|
||||
advance(deltaSeconds, speed, roadEnergy) {
|
||||
if (!Number.isFinite(deltaSeconds) || deltaSeconds <= 0) return distance;
|
||||
const dt = Math.min(MAX_FRAME_SECONDS, deltaSeconds);
|
||||
distance += dt * (
|
||||
CRUISE_UNITS_PER_SECOND
|
||||
+ clamp01(speed) * SPEED_UNITS_PER_SECOND
|
||||
+ clamp01(roadEnergy) * ENERGY_UNITS_PER_SECOND
|
||||
);
|
||||
return distance;
|
||||
},
|
||||
snapshot: () => distance,
|
||||
};
|
||||
}
|
||||
|
||||
function clamp01(value: number): number {
|
||||
return Number.isFinite(value) ? Math.min(1, Math.max(0, value)) : 0;
|
||||
}
|
||||
Reference in New Issue
Block a user