From 7402da790a91342554b8a41b97fef44efdecb362 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Sun, 12 Apr 2026 04:33:51 +0200 Subject: [PATCH] Add project time settings functionality in App.tsx --- src/app/App.tsx | 77 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/src/app/App.tsx b/src/app/App.tsx index ab4fdf17..086eeb5e 100644 --- a/src/app/App.tsx +++ b/src/app/App.tsx @@ -3217,6 +3217,72 @@ export function App({ store, initialStatusMessage }: AppProps) { setStatusMessage(`Project renamed to ${normalizedName}.`); }; + const applyProjectTimeSettings = ( + startTimeOfDayHours: number, + dayLengthMinutes: number, + label: string, + successMessage: string + ) => { + const nextTime = { + startTimeOfDayHours, + dayLengthMinutes + }; + + if (areProjectTimeSettingsEqual(editorState.projectDocument.time, nextTime)) { + return; + } + + try { + store.executeCommand( + createSetProjectTimeSettingsCommand({ + label, + time: nextTime + }) + ); + setStatusMessage(successMessage); + } catch (error) { + setStatusMessage(getErrorMessage(error)); + } + }; + + const applyProjectTimeStartTimeOfDay = () => { + try { + const startTimeOfDayHours = normalizeTimeOfDayHours( + readFiniteNumberDraft( + projectTimeStartTimeOfDayDraft, + "Project start time" + ) + ); + + applyProjectTimeSettings( + startTimeOfDayHours, + editorState.projectDocument.time.dayLengthMinutes, + "Set project start time", + `Project time will start at ${formatTimeOfDayHours(startTimeOfDayHours)}.` + ); + } catch (error) { + setStatusMessage(getErrorMessage(error)); + } + }; + + const applyProjectTimeDayLengthMinutes = () => { + try { + const dayLengthMinutes = readPositiveNumberDraft( + projectTimeDayLengthMinutesDraft, + "Project day duration" + ); + + applyProjectTimeSettings( + editorState.projectDocument.time.startTimeOfDayHours, + dayLengthMinutes, + "Set project day length", + `Project time will advance one full day every ${dayLengthMinutes} real minutes.` + ); + } catch (error) { + setStatusMessage(getErrorMessage(error)); + } + }; + const applySceneName = () => { const normalizedName = sceneNameDraft.trim() || "Untitled Scene"; @@ -4172,6 +4238,17 @@ export function App({ store, initialStatusMessage }: AppProps) { setActiveNavigationMode(nextRuntimeScene.navigationMode); }; + const handleRuntimeClockChange = (clock: RuntimeClockState) => { + setRuntimeGlobalState((currentState) => + areRuntimeClockStatesEqual(currentState.clock, clock) + ? currentState + : { + ...currentState, + clock + } + ); + }; + const handleRunnerSceneExitActivated = ( request: RuntimeSceneExitTransitionRequest ) => {