auto-git:
[change] src/scheduler/project-schedule-control-options.ts
This commit is contained in:
@@ -2,8 +2,11 @@ import type { ProjectDocument, ProjectScene } from "../document/scene-document";
|
|||||||
import { getScenePathLabel, getScenePaths } from "../document/paths";
|
import { getScenePathLabel, getScenePaths } from "../document/paths";
|
||||||
import {
|
import {
|
||||||
createActiveSceneControlTargetRef,
|
createActiveSceneControlTargetRef,
|
||||||
|
createActivateCameraRigOverrideControlEffect,
|
||||||
createFollowActorPathControlEffect,
|
createFollowActorPathControlEffect,
|
||||||
createActorControlTargetRef,
|
createActorControlTargetRef,
|
||||||
|
createCameraRigControlTargetRef,
|
||||||
|
createClearCameraRigOverrideControlEffect,
|
||||||
createInteractionControlTargetRef,
|
createInteractionControlTargetRef,
|
||||||
createLightControlTargetRef,
|
createLightControlTargetRef,
|
||||||
createModelInstanceControlTargetRef,
|
createModelInstanceControlTargetRef,
|
||||||
@@ -36,6 +39,8 @@ import { getSortedEntityDisplayLabels } from "../entities/entity-labels";
|
|||||||
import { listProjectNpcActors } from "../entities/npc-actor-registry";
|
import { listProjectNpcActors } from "../entities/npc-actor-registry";
|
||||||
|
|
||||||
export const PROJECT_SCHEDULE_EFFECT_OPTION_IDS = [
|
export const PROJECT_SCHEDULE_EFFECT_OPTION_IDS = [
|
||||||
|
"camera.activate",
|
||||||
|
"camera.clear",
|
||||||
"actor.present",
|
"actor.present",
|
||||||
"actor.hidden",
|
"actor.hidden",
|
||||||
"actor.playAnimation",
|
"actor.playAnimation",
|
||||||
@@ -105,18 +110,29 @@ export interface ProjectScheduleTargetOption {
|
|||||||
const PROJECT_SCHEDULE_GROUP_ORDER: Record<string, number> = {
|
const PROJECT_SCHEDULE_GROUP_ORDER: Record<string, number> = {
|
||||||
Project: 0,
|
Project: 0,
|
||||||
"Scene Lighting": 1,
|
"Scene Lighting": 1,
|
||||||
Actors: 2,
|
"Camera Rigs": 2,
|
||||||
"Model Instances": 3,
|
Actors: 3,
|
||||||
"Sound Emitters": 4,
|
"Model Instances": 4,
|
||||||
Interactions: 5,
|
"Sound Emitters": 5,
|
||||||
Lights: 6,
|
Interactions: 6,
|
||||||
Other: 7
|
Lights: 7,
|
||||||
|
Other: 8
|
||||||
};
|
};
|
||||||
|
|
||||||
const PROJECT_SCHEDULE_EFFECT_OPTIONS: Record<
|
const PROJECT_SCHEDULE_EFFECT_OPTIONS: Record<
|
||||||
ProjectScheduleEffectOptionId,
|
ProjectScheduleEffectOptionId,
|
||||||
ProjectScheduleEffectOption
|
ProjectScheduleEffectOption
|
||||||
> = {
|
> = {
|
||||||
|
"camera.activate": {
|
||||||
|
id: "camera.activate",
|
||||||
|
label: "Activate Camera Override",
|
||||||
|
valueKind: "none"
|
||||||
|
},
|
||||||
|
"camera.clear": {
|
||||||
|
id: "camera.clear",
|
||||||
|
label: "Clear Camera Override",
|
||||||
|
valueKind: "none"
|
||||||
|
},
|
||||||
"actor.present": {
|
"actor.present": {
|
||||||
id: "actor.present",
|
id: "actor.present",
|
||||||
label: "Present",
|
label: "Present",
|
||||||
@@ -415,6 +431,19 @@ export function listProjectScheduleTargetOptions(
|
|||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case "cameraRig": {
|
||||||
|
const target = createCameraRigControlTargetRef(entity.id);
|
||||||
|
|
||||||
|
pushOption({
|
||||||
|
key: getControlTargetRefKey(target),
|
||||||
|
target,
|
||||||
|
label,
|
||||||
|
subtitle: getSceneTargetSubtitle(scene),
|
||||||
|
groupLabel: "Camera Rigs",
|
||||||
|
defaults: {}
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
case "interactable": {
|
case "interactable": {
|
||||||
const target = createInteractionControlTargetRef("interactable", entity.id);
|
const target = createInteractionControlTargetRef("interactable", entity.id);
|
||||||
|
|
||||||
@@ -518,6 +547,13 @@ export function listProjectScheduleEffectOptions(
|
|||||||
return options;
|
return options;
|
||||||
}
|
}
|
||||||
case "entity":
|
case "entity":
|
||||||
|
if (targetOption.target.entityKind === "cameraRig") {
|
||||||
|
return [
|
||||||
|
PROJECT_SCHEDULE_EFFECT_OPTIONS["camera.activate"],
|
||||||
|
PROJECT_SCHEDULE_EFFECT_OPTIONS["camera.clear"]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
if (targetOption.target.entityKind === "soundEmitter") {
|
if (targetOption.target.entityKind === "soundEmitter") {
|
||||||
return [
|
return [
|
||||||
PROJECT_SCHEDULE_EFFECT_OPTIONS["sound.play"],
|
PROJECT_SCHEDULE_EFFECT_OPTIONS["sound.play"],
|
||||||
@@ -553,6 +589,9 @@ export function getProjectSequenceControlStepClassForEffectOptionId(
|
|||||||
effectOptionId: ProjectScheduleEffectOptionId
|
effectOptionId: ProjectScheduleEffectOptionId
|
||||||
): "held" | "impulse" {
|
): "held" | "impulse" {
|
||||||
switch (effectOptionId) {
|
switch (effectOptionId) {
|
||||||
|
case "camera.activate":
|
||||||
|
case "camera.clear":
|
||||||
|
return "held";
|
||||||
case "model.playAnimation":
|
case "model.playAnimation":
|
||||||
case "model.stopAnimation":
|
case "model.stopAnimation":
|
||||||
case "sound.play":
|
case "sound.play":
|
||||||
@@ -587,6 +626,10 @@ export function getProjectScheduleEffectOptionId(
|
|||||||
throw new Error(
|
throw new Error(
|
||||||
"Project time pause is intentionally not exposed in the schedule editor because a scheduler routine cannot safely pause its own project clock."
|
"Project time pause is intentionally not exposed in the schedule editor because a scheduler routine cannot safely pause its own project clock."
|
||||||
);
|
);
|
||||||
|
case "activateCameraRigOverride":
|
||||||
|
return "camera.activate";
|
||||||
|
case "clearCameraRigOverride":
|
||||||
|
return "camera.clear";
|
||||||
case "setActorPresence":
|
case "setActorPresence":
|
||||||
return effect.active ? "actor.present" : "actor.hidden";
|
return effect.active ? "actor.present" : "actor.hidden";
|
||||||
case "playActorAnimation":
|
case "playActorAnimation":
|
||||||
@@ -633,6 +676,18 @@ export function createProjectScheduleEffectFromOption(options: {
|
|||||||
const { targetOption } = options;
|
const { targetOption } = options;
|
||||||
|
|
||||||
switch (options.effectOptionId) {
|
switch (options.effectOptionId) {
|
||||||
|
case "camera.activate":
|
||||||
|
return createActivateCameraRigOverrideControlEffect({
|
||||||
|
target: createCameraRigControlTargetRef(
|
||||||
|
(targetOption.target as ReturnType<typeof createCameraRigControlTargetRef>).entityId
|
||||||
|
)
|
||||||
|
});
|
||||||
|
case "camera.clear":
|
||||||
|
return createClearCameraRigOverrideControlEffect({
|
||||||
|
target: createCameraRigControlTargetRef(
|
||||||
|
(targetOption.target as ReturnType<typeof createCameraRigControlTargetRef>).entityId
|
||||||
|
)
|
||||||
|
});
|
||||||
case "actor.present":
|
case "actor.present":
|
||||||
return createSetActorPresenceControlEffect({
|
return createSetActorPresenceControlEffect({
|
||||||
target: createActorControlTargetRef(
|
target: createActorControlTargetRef(
|
||||||
|
|||||||
Reference in New Issue
Block a user