Skip to content

@ue-too/board / index / RotateControlStateMachine

類別: RotateControlStateMachine

定義於: packages/board/src/camera/camera-mux/animation-and-lock/rotation-control-state-machine.ts:128

State machine controlling rotation input flow and animations.

備註

This state machine manages the lifecycle of rotation operations:

  • User input handling: Accepts or blocks user rotation gestures based on state
  • Animation control: Manages smooth rotate-to animations
  • Object tracking: Supports locking camera to follow objects with rotation

State transitions:

  • ACCEPTING_USER_INPUTTRANSITION: Start animation (initateTransition)
  • ACCEPTING_USER_INPUTLOCKED_ON_OBJECT: Lock to object (lockedOnObjectRotate...)
  • TRANSITIONACCEPTING_USER_INPUT: User input interrupts animation
  • LOCKED_ON_OBJECTACCEPTING_USER_INPUT: Unlock (unlock event)

Helper methods simplify event dispatching without memorizing event names.

範例

typescript
const stateMachine = createDefaultRotateControlStateMachine(cameraRig);

// User rotates - accepted in ACCEPTING_USER_INPUT state
const result = stateMachine.notifyRotateByInput(Math.PI / 4);

// Start animation - transitions to TRANSITION state
stateMachine.notifyRotateToAnimationInput(Math.PI);

// User input now blocked while animating

參閱

createDefaultRotateControlStateMachine for factory function

Extends

建構函式

建構函式

new RotateControlStateMachine(states, initialState, context): RotateControlStateMachine

定義於: packages/board/src/camera/camera-mux/animation-and-lock/rotation-control-state-machine.ts:134

參數

states

Record<RotateControlStates, State<RotateEventPayloadMapping, BaseContext, RotateControlStates, RotateControlOutputMapping>>

initialState

RotateControlStates

context

BaseContext

回傳

RotateControlStateMachine

覆寫了

TemplateStateMachine< RotateEventPayloadMapping, BaseContext, RotateControlStates, RotateControlOutputMapping >.constructor

屬性

_context

protected _context: BaseContext

定義於: packages/being/dist/interface.d.ts:384

繼承自

TemplateStateMachine._context


_currentState

protected _currentState: RotateControlStates | "INITIAL" | "TERMINAL"

定義於: packages/being/dist/interface.d.ts:382

繼承自

TemplateStateMachine._currentState


_happensCallbacks

protected _happensCallbacks: (args, context) => void[]

定義於: packages/being/dist/interface.d.ts:387

參數

args

["userRotateByInput", RotateByInputEventPayload] | ["userRotateToInput", RotateToInputEventPayload] | ["transitionRotateByInput", RotateByInputEventPayload] | ["transitionRotateToInput", RotateToInputEventPayload] | ["lockedOnObjectRotateByInput", RotateByInputEventPayload] | ["lockedOnObjectRotateToInput", RotateToInputEventPayload] | ["unlock"] | ["initateTransition"] | [string, unknown]

context

BaseContext

回傳

void

繼承自

TemplateStateMachine._happensCallbacks


_initialState

protected _initialState: RotateControlStates

定義於: packages/being/dist/interface.d.ts:389

繼承自

TemplateStateMachine._initialState


_stateChangeCallbacks

protected _stateChangeCallbacks: StateChangeCallback<RotateControlStates>[]

定義於: packages/being/dist/interface.d.ts:386

繼承自

TemplateStateMachine._stateChangeCallbacks


_states

protected _states: Record<States, State<EventPayloadMapping, Context, States, EventOutputMapping>>

定義於: packages/being/dist/interface.d.ts:383

繼承自

TemplateStateMachine._states


_statesArray

protected _statesArray: RotateControlStates[]

定義於: packages/being/dist/interface.d.ts:385

繼承自

TemplateStateMachine._statesArray


_timeouts

protected _timeouts: number | undefined

定義於: packages/being/dist/interface.d.ts:388

繼承自

KmtInputStateMachineWebWorkerProxy._timeouts

存取器

currentState

Getter 簽章

get currentState(): States | "INITIAL" | "TERMINAL"

定義於: packages/being/dist/interface.d.ts:399

回傳

States | "INITIAL" | "TERMINAL"

繼承自

TemplateStateMachine.currentState


possibleStates

Getter 簽章

get possibleStates(): States[]

定義於: packages/being/dist/interface.d.ts:401

回傳

States[]

繼承自

TemplateStateMachine.possibleStates


states

Getter 簽章

get states(): Record<States, State<EventPayloadMapping, Context, States, EventOutputMapping>>

定義於: packages/being/dist/interface.d.ts:402

回傳

Record<States, State<EventPayloadMapping, Context, States, EventOutputMapping>>

繼承自

TemplateStateMachine.states

方法

happens()

呼叫簽章

happens<K>(...args): EventResult<RotateControlStates, K extends keyof RotateControlOutputMapping ? RotateControlOutputMapping[K<K>] : void>

定義於: packages/being/dist/interface.d.ts:395

型別參數
K

K extends keyof RotateEventPayloadMapping

參數
args

...EventArgs<RotateEventPayloadMapping, K>

回傳

EventResult<RotateControlStates, K extends keyof RotateControlOutputMapping ? RotateControlOutputMapping[K<K>] : void>

繼承自

TemplateStateMachine.happens

呼叫簽章

happens<K>(...args): EventResult<RotateControlStates, unknown>

定義於: packages/being/dist/interface.d.ts:396

型別參數
K

K extends string

參數
args

...EventArgs<RotateEventPayloadMapping, K>

回傳

EventResult<RotateControlStates, unknown>

繼承自

TemplateStateMachine.happens


initateTransition()

initateTransition(): void

定義於: packages/board/src/camera/camera-mux/animation-and-lock/rotation-control-state-machine.ts:185

Initiates transition to TRANSITION state.

回傳

void

備註

Forces state change to begin animation or transition sequence. Called when starting programmatic camera movements.


notifyRotateByInput()

notifyRotateByInput(diff): EventResult<RotateControlStates, RotateControlOutputEvent>

定義於: packages/board/src/camera/camera-mux/animation-and-lock/rotation-control-state-machine.ts:160

Notifies the state machine of user rotation input.

參數

diff

number

Rotation angle delta in radians

回傳

EventResult<RotateControlStates, RotateControlOutputEvent>

Event handling result with output event

備註

Dispatches userRotateByInput event. Accepted in ACCEPTING_USER_INPUT and TRANSITION states, where it may transition back to ACCEPTING_USER_INPUT (user interrupting animation).


notifyRotateToAnimationInput()

notifyRotateToAnimationInput(target): EventResult<RotateControlStates, RotateControlOutputEvent>

定義於: packages/board/src/camera/camera-mux/animation-and-lock/rotation-control-state-machine.ts:174

Initiates a rotation animation to a target angle.

參數

target

number

Target rotation angle in radians

回傳

EventResult<RotateControlStates, RotateControlOutputEvent>

Event handling result

備註

Dispatches transitionRotateToInput event, starting a rotation animation. Transitions to TRANSITION state where animation updates occur.


onHappens()

onHappens(callback): void

定義於: packages/being/dist/interface.d.ts:398

參數

callback

(args, context) => void

回傳

void

繼承自

TemplateStateMachine.onHappens


onStateChange()

onStateChange(callback): void

定義於: packages/being/dist/interface.d.ts:397

參數

callback

StateChangeCallback<RotateControlStates>

回傳

void

繼承自

TemplateStateMachine.onStateChange


reset()

reset(): void

定義於: packages/being/dist/interface.d.ts:391

回傳

void

繼承自

TemplateStateMachine.reset


setContext()

setContext(context): void

定義於: packages/being/dist/interface.d.ts:400

參數

context

BaseContext

回傳

void

繼承自

TemplateStateMachine.setContext


start()

start(): void

定義於: packages/being/dist/interface.d.ts:392

回傳

void

繼承自

TemplateStateMachine.start


switchTo()

switchTo(state): void

定義於: packages/being/dist/interface.d.ts:394

參數

state

RotateControlStates | "INITIAL" | "TERMINAL"

回傳

void

繼承自

TemplateStateMachine.switchTo


wrapup()

wrapup(): void

定義於: packages/being/dist/interface.d.ts:393

回傳

void

繼承自

TemplateStateMachine.wrapup