Update sequence labels and add compatibility check in ProjectSchedulePane

This commit is contained in:
2026-04-15 00:07:52 +02:00
parent 1c22b8c4f8
commit 6bfb25ed6d
2 changed files with 21 additions and 5 deletions

View File

@@ -458,7 +458,7 @@ export function ProjectSequencerPane({
</select> </select>
</label> </label>
<label className="form-field"> <label className="form-field">
<span className="label">Sequence</span> <span className="label">Held Sequence</span>
<select <select
className="select-input" className="select-input"
value={selectedRoutine.sequenceId ?? ""} value={selectedRoutine.sequenceId ?? ""}
@@ -471,7 +471,7 @@ export function ProjectSequencerPane({
) )
} }
> >
<option value="">Inline Routine Effects</option> <option value="">This Clip (inline held steps)</option>
{compatibleHeldSequences.map((sequence) => ( {compatibleHeldSequences.map((sequence) => (
<option key={sequence.id} value={sequence.id}> <option key={sequence.id} value={sequence.id}>
{sequence.title} {sequence.title}
@@ -487,6 +487,14 @@ export function ProjectSequencerPane({
</div> </div>
) : null} ) : null}
{selectedRoutine.sequenceId === null && {selectedRoutine.sequenceId === null &&
compatibleHeldSequences.length === 0 ? (
<div className="material-summary">
No compatible held project sequences are authored for this
target yet. Use the Sequences panel to author held steps, or
keep this clip on its own inline held controls.
</div>
) : null}
{selectedRoutine.sequenceId === null &&
selectedRoutine.target.kind === "actor" ? ( selectedRoutine.target.kind === "actor" ? (
<> <>
<label className="form-field"> <label className="form-field">

View File

@@ -10,6 +10,8 @@ import {
type ProjectScheduleTargetOption type ProjectScheduleTargetOption
} from "../scheduler/project-schedule-control-options"; } from "../scheduler/project-schedule-control-options";
import { import {
getProjectSequenceHeldSteps,
getProjectSequenceImpulseSteps,
getSequenceStepLabel, getSequenceStepLabel,
type SequenceStep type SequenceStep
} from "../sequencer/project-sequence-steps"; } from "../sequencer/project-sequence-steps";
@@ -156,8 +158,8 @@ export function ProjectSequencesPanel({
> >
<span className="outliner-item__title">{sequence.title}</span> <span className="outliner-item__title">{sequence.title}</span>
<span className="outliner-item__meta"> <span className="outliner-item__meta">
{sequence.steps.length} step {getProjectSequenceHeldSteps(sequence).length} held ·{" "}
{sequence.steps.length === 1 ? "" : "s"} {getProjectSequenceImpulseSteps(sequence).length} impulse
</span> </span>
</button> </button>
<button <button
@@ -186,6 +188,10 @@ export function ProjectSequencesPanel({
</div> </div>
) : ( ) : (
<div className="form-section"> <div className="form-section">
<div className="material-summary">
Held steps are resolved by sequencer timeline clips. Impulse steps
can be started immediately from interaction links.
</div>
<label className="form-field"> <label className="form-field">
<span className="label">Title</span> <span className="label">Title</span>
<input <input
@@ -206,7 +212,9 @@ export function ProjectSequencesPanel({
<div className="label">Steps</div> <div className="label">Steps</div>
{selectedSequence.steps.length === 0 ? ( {selectedSequence.steps.length === 0 ? (
<div className="outliner-empty"> <div className="outliner-empty">
Add held control, impulse control, or dialogue steps. Add held control, impulse control, or dialogue steps. Interaction
links can only run sequences that contain at least one impulse
step.
</div> </div>
) : ( ) : (
<div className="outliner-list"> <div className="outliner-list">