Update NPC presence handling to use project scheduler

This commit is contained in:
2026-04-14 02:02:11 +02:00
parent d30969b447
commit 3c8508a607

View File

@@ -14779,100 +14779,31 @@ export function App({ store, initialStatusMessage }: AppProps) {
</div>
<div className="form-section">
<div className="label">Presence</div>
<label className="form-field">
<span className="label">Mode</span>
<select
data-testid="npc-presence-mode"
className="select-input"
value={npcPresenceModeDraft}
onChange={(event) => {
const nextMode = event.currentTarget
.value as NpcPresenceMode;
setNpcPresenceModeDraft(nextMode);
scheduleDraftCommit(() => applyNpcChange());
}}
>
{NPC_PRESENCE_MODES.map((mode) => (
<option key={mode} value={mode}>
{mode}
</option>
))}
</select>
</label>
{npcPresenceModeDraft === "timeWindow" ? (
<div className="vector-inputs">
<label className="form-field">
<span className="label">Start Hour</span>
<input
data-testid="npc-presence-start-hour"
className="text-input"
type="number"
step="0.25"
value={npcPresenceStartHourDraft}
onChange={(event) =>
setNpcPresenceStartHourDraft(
event.currentTarget.value
)
}
onBlur={() => applyNpcChange()}
onKeyDown={(event) =>
handleDraftVectorKeyDown(
event,
applyNpcChange
)
}
onKeyUp={(event) =>
handleNumberInputKeyUp(event, applyNpcChange)
}
onPointerUp={(event) =>
handleNumberInputPointerUp(
event,
applyNpcChange
)
}
/>
</label>
<label className="form-field">
<span className="label">End Hour</span>
<input
data-testid="npc-presence-end-hour"
className="text-input"
type="number"
step="0.25"
value={npcPresenceEndHourDraft}
onChange={(event) =>
setNpcPresenceEndHourDraft(
event.currentTarget.value
)
}
onBlur={() => applyNpcChange()}
onKeyDown={(event) =>
handleDraftVectorKeyDown(
event,
applyNpcChange
)
}
onKeyUp={(event) =>
handleNumberInputKeyUp(event, applyNpcChange)
}
onPointerUp={(event) =>
handleNumberInputPointerUp(
event,
applyNpcChange
)
}
/>
</label>
</div>
) : null}
<div className="label">Schedule</div>
<div className="material-summary">
{npcPresenceModeDraft === "always"
? "Always keeps this NPC active in the runner."
: "Time windows use project-global in-game hours and can cross midnight."}
NPC presence is now orchestrated from the project
scheduler instead of this inspector.
</div>
<button
className="toolbar__button toolbar__button--compact"
type="button"
onClick={() => {
setSchedulePaneOpen(true);
const matchingRoutine = Object.values(
editorState.projectDocument.scheduler.routines
).find(
(routine) =>
routine.target.kind === "actor" &&
routine.target.actorId === selectedNpc.actorId
);
setSelectedScheduleRoutineId(
matchingRoutine?.id ?? null
);
}}
>
Open Schedule
</button>
</div>
<div className="form-section">