auto-git:

[change] src/controls/control-surface.ts
This commit is contained in:
2026-04-23 02:35:27 +02:00
parent 71f83c54e1
commit 593bb500ec

View File

@@ -1395,6 +1395,11 @@ export function getControlEffectResolutionKey(effect: ControlEffect): string {
switch (effect.type) {
case "setProjectTimePaused":
return `state:projectTimePaused:${getControlTargetRefKey(effect.target)}`;
case "activateCameraRigOverride":
case "clearCameraRigOverride":
return `state:cameraRigOverride:${getControlTargetRefKey(
createProjectGlobalControlTargetRef()
)}`;
case "setActorPresence":
return `state:actorPresence:${getControlTargetRefKey(effect.target)}`;
case "playActorAnimation":
@@ -1515,6 +1520,16 @@ export function cloneControlEffect<TEffect extends ControlEffect>(
target: cloneControlTargetRef(effect.target),
paused: effect.paused
} as TEffect;
case "activateCameraRigOverride":
return {
type: "activateCameraRigOverride",
target: cloneControlTargetRef(effect.target)
} as TEffect;
case "clearCameraRigOverride":
return {
type: "clearCameraRigOverride",
target: cloneControlTargetRef(effect.target)
} as TEffect;
case "setActorPresence":
return {
type: "setActorPresence",
@@ -1668,6 +1683,12 @@ export function cloneRuntimeResolvedDiscreteControlState<
value: state.value,
source: state.source
}) as TState;
case "cameraRigOverride":
return createResolvedCameraRigOverrideState({
target: state.target,
entityId: state.entityId,
source: state.source
}) as TState;
case "actorPresence":
return createResolvedActorPresenceState({
target: state.target,
@@ -1813,6 +1834,9 @@ export function areControlEffectsEqual(
switch (left.type) {
case "setProjectTimePaused":
return left.paused === (right as SetProjectTimePausedControlEffect).paused;
case "activateCameraRigOverride":
case "clearCameraRigOverride":
return true;
case "setActorPresence":
return left.active === (right as SetActorPresenceControlEffect).active;
case "playActorAnimation":
@@ -1880,6 +1904,10 @@ export function getControlEffectLabel(effect: ControlEffect): string {
switch (effect.type) {
case "setProjectTimePaused":
return "Set Project Time Paused";
case "activateCameraRigOverride":
return "Activate Camera Rig Override";
case "clearCameraRigOverride":
return "Clear Camera Rig Override";
case "setActorPresence":
return "Set Actor Presence";
case "playActorAnimation":
@@ -1938,6 +1966,8 @@ function formatTargetKindLabel(
kind: ControlEntityTargetKind | ControlInteractionTargetKind
): string {
switch (kind) {
case "cameraRig":
return "Camera Rig";
case "pointLight":
return "Point Light";
case "spotLight":
@@ -1953,6 +1983,10 @@ export function formatControlEffectValue(effect: ControlEffect): string {
switch (effect.type) {
case "setProjectTimePaused":
return effect.paused ? "Paused" : "Running";
case "activateCameraRigOverride":
return "Activate";
case "clearCameraRigOverride":
return "Return to Normal";
case "setActorPresence":
return effect.active ? "Present" : "Hidden";
case "playActorAnimation":
@@ -1997,6 +2031,7 @@ export function applyControlEffectToResolvedState(
source: RuntimeResolvedControlSource
): RuntimeResolvedControlState {
const nextResolved = cloneRuntimeResolvedControlState(resolved);
const globalTarget = createProjectGlobalControlTargetRef();
switch (effect.type) {
case "setProjectTimePaused":
@@ -2009,6 +2044,26 @@ export function applyControlEffectToResolvedState(
})
);
return nextResolved;
case "activateCameraRigOverride":
upsertResolvedDiscreteState(
nextResolved,
createResolvedCameraRigOverrideState({
target: globalTarget,
entityId: effect.target.entityId,
source
})
);
return nextResolved;
case "clearCameraRigOverride":
upsertResolvedDiscreteState(
nextResolved,
createResolvedCameraRigOverrideState({
target: globalTarget,
entityId: null,
source
})
);
return nextResolved;
case "setActorPresence":
upsertResolvedDiscreteState(
nextResolved,