Enhance runtime-project-scheduler.ts with resolved held effects and path effect resolution
This commit is contained in:
@@ -29,7 +29,8 @@ import {
|
||||
import {
|
||||
findHeldSequenceControlEffect,
|
||||
getHeldSequenceControlEffects,
|
||||
getProjectScheduleRoutineHeldSteps
|
||||
getProjectScheduleRoutineHeldSteps,
|
||||
getProjectScheduleRoutineResolvedHeldControlEffectsAtMinute
|
||||
} from "../sequencer/project-sequence-steps";
|
||||
import type { ProjectSequenceLibrary } from "../sequencer/project-sequences";
|
||||
|
||||
@@ -431,24 +432,42 @@ export function resolveRuntimeActorScheduleState(options: {
|
||||
activeRoutine,
|
||||
options.sequences
|
||||
);
|
||||
|
||||
const presenceEffect =
|
||||
findHeldSequenceControlEffect(heldSteps, "setActorPresence") ??
|
||||
createSetActorPresenceControlEffect({
|
||||
target: createActorControlTargetRef(options.actorId),
|
||||
active: true
|
||||
});
|
||||
const animationEffect =
|
||||
findHeldSequenceControlEffect(heldSteps, "playActorAnimation");
|
||||
const pathEffect = findHeldSequenceControlEffect(
|
||||
heldSteps,
|
||||
"followActorPath"
|
||||
);
|
||||
const elapsedHours = getProjectScheduleRoutineElapsedHoursAt(
|
||||
activeRoutine,
|
||||
options.dayNumber,
|
||||
options.timeOfDayHours
|
||||
);
|
||||
const resolvedHeldEffects =
|
||||
elapsedHours === null
|
||||
? []
|
||||
: getProjectScheduleRoutineResolvedHeldControlEffectsAtMinute(
|
||||
activeRoutine,
|
||||
options.sequences,
|
||||
elapsedHours * 60
|
||||
);
|
||||
|
||||
const presenceEffect =
|
||||
(resolvedHeldEffects.find(
|
||||
(entry): entry is typeof entry & { effect: SetActorPresenceControlEffect } =>
|
||||
entry.effect.type === "setActorPresence"
|
||||
)?.effect ??
|
||||
findHeldSequenceControlEffect(heldSteps, "setActorPresence")) ??
|
||||
createSetActorPresenceControlEffect({
|
||||
target: createActorControlTargetRef(options.actorId),
|
||||
active: true
|
||||
});
|
||||
const animationEffect =
|
||||
resolvedHeldEffects.find(
|
||||
(entry): entry is typeof entry & { effect: PlayActorAnimationControlEffect } =>
|
||||
entry.effect.type === "playActorAnimation"
|
||||
)?.effect ?? findHeldSequenceControlEffect(heldSteps, "playActorAnimation");
|
||||
const pathEffectEntry = resolvedHeldEffects.find(
|
||||
(entry): entry is typeof entry & { effect: FollowActorPathControlEffect } =>
|
||||
entry.effect.type === "followActorPath"
|
||||
);
|
||||
const pathEffect =
|
||||
pathEffectEntry?.effect ??
|
||||
findHeldSequenceControlEffect(heldSteps, "followActorPath");
|
||||
|
||||
return {
|
||||
actorId: options.actorId,
|
||||
@@ -465,7 +484,10 @@ export function resolveRuntimeActorScheduleState(options: {
|
||||
? null
|
||||
: resolveActorSchedulePathState({
|
||||
effect: pathEffect,
|
||||
elapsedHours,
|
||||
elapsedHours:
|
||||
pathEffectEntry === undefined
|
||||
? elapsedHours
|
||||
: pathEffectEntry.elapsedMinutes / 60,
|
||||
path: options.pathsById?.get(pathEffect.pathId) ?? null
|
||||
})
|
||||
};
|
||||
@@ -519,9 +541,18 @@ function resolveRuntimeScheduledControlRoutines(options: {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (const effect of getHeldSequenceControlEffects(
|
||||
getProjectScheduleRoutineHeldSteps(routine, options.sequences)
|
||||
)) {
|
||||
const elapsedHours = getProjectScheduleRoutineElapsedHoursAt(
|
||||
routine,
|
||||
options.dayNumber,
|
||||
options.timeOfDayHours
|
||||
);
|
||||
const effects = getProjectScheduleRoutineResolvedHeldControlEffectsAtMinute(
|
||||
routine,
|
||||
options.sequences,
|
||||
elapsedHours === null ? null : elapsedHours * 60
|
||||
).map((entry) => cloneControlEffect(entry.effect));
|
||||
|
||||
for (const effect of effects) {
|
||||
const resolutionKey = getControlEffectResolutionKey(effect);
|
||||
|
||||
if (seenResolutionKeys.has(resolutionKey)) {
|
||||
|
||||
Reference in New Issue
Block a user