Add night background settings to project time configurations

This commit is contained in:
2026-04-12 14:31:32 +02:00
parent 2276201b7e
commit 4872b964e7

View File

@@ -6,6 +6,8 @@ export const DEFAULT_PROJECT_SUNRISE_TIME_OF_DAY_HOURS = 6.5 as const;
export const DEFAULT_PROJECT_SUNSET_TIME_OF_DAY_HOURS = 18.5 as const;
export const DEFAULT_PROJECT_DAWN_DURATION_HOURS = 1.5 as const;
export const DEFAULT_PROJECT_DUSK_DURATION_HOURS = 1.5 as const;
export const DEFAULT_PROJECT_NIGHT_BACKGROUND_ENVIRONMENT_INTENSITY =
0.35 as const;
export type ProjectTimePhase = "dawn" | "dusk" | "night";
@@ -18,6 +20,11 @@ export interface ProjectTimePhaseProfile {
lightIntensityFactor: number;
}
export interface ProjectTimeNightBackgroundSettings {
assetId: string | null;
environmentIntensity: number;
}
export interface ProjectTimeSettings {
startDayNumber: number;
startTimeOfDayHours: number;
@@ -29,6 +36,7 @@ export interface ProjectTimeSettings {
dawn: ProjectTimePhaseProfile;
dusk: ProjectTimePhaseProfile;
night: ProjectTimePhaseProfile;
nightBackground: ProjectTimeNightBackgroundSettings;
}
export function normalizeProjectStartDayNumber(dayNumber: number): number {
@@ -87,6 +95,13 @@ export function createDefaultProjectTimePhaseProfile(
}
}
export function createDefaultProjectTimeNightBackgroundSettings(): ProjectTimeNightBackgroundSettings {
return {
assetId: null,
environmentIntensity: DEFAULT_PROJECT_NIGHT_BACKGROUND_ENVIRONMENT_INTENSITY
};
}
export function cloneProjectTimePhaseProfile(
profile: ProjectTimePhaseProfile
): ProjectTimePhaseProfile {
@@ -100,6 +115,15 @@ export function cloneProjectTimePhaseProfile(
};
}
export function cloneProjectTimeNightBackgroundSettings(
settings: ProjectTimeNightBackgroundSettings
): ProjectTimeNightBackgroundSettings {
return {
assetId: settings.assetId,
environmentIntensity: settings.environmentIntensity
};
}
export function areProjectTimePhaseProfilesEqual(
left: ProjectTimePhaseProfile,
right: ProjectTimePhaseProfile
@@ -114,6 +138,16 @@ export function areProjectTimePhaseProfilesEqual(
);
}
export function areProjectTimeNightBackgroundSettingsEqual(
left: ProjectTimeNightBackgroundSettings,
right: ProjectTimeNightBackgroundSettings
): boolean {
return (
left.assetId === right.assetId &&
left.environmentIntensity === right.environmentIntensity
);
}
export function createDefaultProjectTimeSettings(): ProjectTimeSettings {
return {
startDayNumber: DEFAULT_PROJECT_START_DAY_NUMBER,
@@ -125,7 +159,8 @@ export function createDefaultProjectTimeSettings(): ProjectTimeSettings {
duskDurationHours: DEFAULT_PROJECT_DUSK_DURATION_HOURS,
dawn: createDefaultProjectTimePhaseProfile("dawn"),
dusk: createDefaultProjectTimePhaseProfile("dusk"),
night: createDefaultProjectTimePhaseProfile("night")
night: createDefaultProjectTimePhaseProfile("night"),
nightBackground: createDefaultProjectTimeNightBackgroundSettings()
};
}
@@ -142,7 +177,10 @@ export function cloneProjectTimeSettings(
duskDurationHours: settings.duskDurationHours,
dawn: cloneProjectTimePhaseProfile(settings.dawn),
dusk: cloneProjectTimePhaseProfile(settings.dusk),
night: cloneProjectTimePhaseProfile(settings.night)
night: cloneProjectTimePhaseProfile(settings.night),
nightBackground: cloneProjectTimeNightBackgroundSettings(
settings.nightBackground
)
};
}
@@ -160,6 +198,10 @@ export function areProjectTimeSettingsEqual(
left.duskDurationHours === right.duskDurationHours &&
areProjectTimePhaseProfilesEqual(left.dawn, right.dawn) &&
areProjectTimePhaseProfilesEqual(left.dusk, right.dusk) &&
areProjectTimePhaseProfilesEqual(left.night, right.night)
areProjectTimePhaseProfilesEqual(left.night, right.night) &&
areProjectTimeNightBackgroundSettingsEqual(
left.nightBackground,
right.nightBackground
)
);
}