Files
Owen/src/states/StateFactory.js
Kaj Kowalski 734da64b98 Refactor code for consistency and readability
- Updated import statements to use consistent formatting across files.
- Adjusted method definitions and class constructors for uniform spacing and style.
- Simplified promise handling and error messages in state handlers.
- Enhanced state transition logic in various state handlers.
- Improved quirk animation handling in WaitStateHandler.
- Streamlined animation loading and caching mechanisms in AnimationLoader.
- Updated Vite configuration for aliasing.
2025-05-24 01:27:50 +02:00

87 lines
2.4 KiB
JavaScript

/**
* @fileoverview State factory for creating state handlers
* @module states
*/
import { WaitStateHandler } from './WaitStateHandler.js'
import { ReactStateHandler } from './ReactStateHandler.js'
import { TypeStateHandler } from './TypeStateHandler.js'
import { SleepStateHandler } from './SleepStateHandler.js'
import { States } from '../constants.js'
/**
* Factory for creating state handlers using dependency injection
* @class
*/
export class StateFactory {
/**
* Create a state factory
*/
constructor () {
/**
* Registry of state handler classes
* @type {Map<string, Function>}
* @private
*/
this.stateHandlers = new Map()
// Register default state handlers
this.registerStateHandler(States.WAIT, WaitStateHandler)
this.registerStateHandler(States.REACT, ReactStateHandler)
this.registerStateHandler(States.TYPE, TypeStateHandler)
this.registerStateHandler(States.SLEEP, SleepStateHandler)
}
/**
* Register a state handler class
* @param {string} stateName - The name of the state
* @param {Function} handlerClass - The handler class constructor
* @returns {void}
*/
registerStateHandler (stateName, handlerClass) {
this.stateHandlers.set(stateName, handlerClass)
}
/**
* Create a state handler instance
* @param {string} stateName - The name of the state
* @param {OwenAnimationContext} context - The animation context
* @returns {StateHandler} The created state handler
* @throws {Error} If state handler is not registered
*/
createStateHandler (stateName, context) {
const HandlerClass = this.stateHandlers.get(stateName)
if (!HandlerClass) {
throw new Error(`No handler registered for state: ${stateName}`)
}
return new HandlerClass(context)
}
/**
* Get all available state names
* @returns {string[]} Array of registered state names
*/
getAvailableStates () {
return Array.from(this.stateHandlers.keys())
}
/**
* Check if a state is registered
* @param {string} stateName - The state name to check
* @returns {boolean} True if registered, false otherwise
*/
isStateRegistered (stateName) {
return this.stateHandlers.has(stateName)
}
/**
* Unregister a state handler
* @param {string} stateName - The state name to unregister
* @returns {boolean} True if removed, false if not found
*/
unregisterStateHandler (stateName) {
return this.stateHandlers.delete(stateName)
}
}