const stateStruct = { canvas: { width: undefined, height: undefined, ctx: null }, square: { x: 0, y: 0, angle: 0, angularSpeed: 0, angularAcceleration: 0, radius: 100, // Orbit radius orbitAngle: 0, // Current orbit angle velocity: { x: 0, y: 0, z: 0 } // Updated to Vector3-like structure }, performance: { fps: 0 }, system: { inputHandler: null, scene: null, terminal: null, engineStarted: false, currentConfig: null, animationFrameId: null, physics: null }, terminal: { height: 0, isOpen: false, commandHistory: [], inputBuffer: '', cursorVisible: true, cursorTimer: 0, scrollOffset: 0, maxScrollOffset: 0, isDraggingScrollbar: false, lastMouseY: 0 } }; const initialState = { canvas: { width: undefined, height: undefined, ctx: null }, square: { x: 0, y: 0, angle: 0, angularSpeed: 0, angularAcceleration: 0, radius: 100, orbitAngle: 0, velocity: { x: 0, y: 0, z: 0 } }, terminal: { height: 0, isOpen: false, commandHistory: [], inputBuffer: '', cursorVisible: true, cursorTimer: 0, scrollOffset: 0, maxScrollOffset: 0, isDraggingScrollbar: false, lastMouseY: 0 }, performance: { fps: 0 }, system: { inputHandler: null, scene: null, terminal: null, engineStarted: false, currentConfig: null, animationFrameId: null, physics: null } }; export function resetState() { Object.keys(initialState).forEach(key => { Object.assign(stateStruct[key], initialState[key]); }); } export const state = { get canvasWidth() { return stateStruct.canvas.width; }, set canvasWidth(value) { stateStruct.canvas.width = value; }, get canvasHeight() { return stateStruct.canvas.height; }, set canvasHeight(value) { stateStruct.canvas.height = value; }, get squareX() { return stateStruct.square.x; }, set squareX(value) { stateStruct.square.x = value; }, get squareY() { return stateStruct.square.y; }, set squareY(value) { stateStruct.square.y = value; }, get angle() { return stateStruct.square.angle; }, set angle(value) { stateStruct.square.angle = value; }, get angularSpeed() { return stateStruct.square.angularSpeed; }, set angularSpeed(value) { stateStruct.square.angularSpeed = value; }, get angularAcceleration() { return stateStruct.square.angularAcceleration; }, set angularAcceleration(value) { stateStruct.square.angularAcceleration = value; }, get velocity() { return stateStruct.square.velocity; }, set velocity(value) { stateStruct.square.velocity = value; }, get fps() { return stateStruct.performance.fps; }, set fps(value) { stateStruct.performance.fps = value; }, get ctx() { return stateStruct.canvas.ctx; }, set ctx(value) { stateStruct.canvas.ctx = value; }, get inputHandler() { return stateStruct.system.inputHandler; }, set inputHandler(value) { stateStruct.system.inputHandler = value; }, get scene() { return stateStruct.system.scene; }, set scene(value) { stateStruct.system.scene = value; }, get terminal() { return stateStruct.system.terminal; }, set terminal(value) { stateStruct.system.terminal = value; }, get terminalHeight() { return stateStruct.terminal.height; }, set terminalHeight(value) { stateStruct.terminal.height = value; }, get terminalOpen() { return stateStruct.terminal.isOpen; }, set terminalOpen(value) { stateStruct.terminal.isOpen = value; }, get commandHistory() { return stateStruct.terminal.commandHistory; }, set commandHistory(value) { stateStruct.terminal.commandHistory = value; }, get inputBuffer() { return stateStruct.terminal.inputBuffer; }, set inputBuffer(value) { stateStruct.terminal.inputBuffer = value; }, get cursorVisible() { return stateStruct.terminal.cursorVisible; }, set cursorVisible(value) { stateStruct.terminal.cursorVisible = value; }, get cursorTimer() { return stateStruct.terminal.cursorTimer; }, set cursorTimer(value) { stateStruct.terminal.cursorTimer = value; }, get scrollOffset() { return stateStruct.terminal.scrollOffset; }, set scrollOffset(value) { stateStruct.terminal.scrollOffset = value; }, get maxScrollOffset() { return stateStruct.terminal.maxScrollOffset; }, set maxScrollOffset(value) { stateStruct.terminal.maxScrollOffset = value; }, get isDraggingScrollbar() { return stateStruct.terminal.isDraggingScrollbar; }, set isDraggingScrollbar(value) { stateStruct.terminal.isDraggingScrollbar = value; }, get lastMouseY() { return stateStruct.terminal.lastMouseY; }, set lastMouseY(value) { stateStruct.terminal.lastMouseY = value; }, get engineStarted() { return stateStruct.system.engineStarted; }, set engineStarted(value) { stateStruct.system.engineStarted = value; }, get currentConfig() { return stateStruct.system.currentConfig; }, set currentConfig(value) { stateStruct.system.currentConfig = value; }, get animationFrameId() { return stateStruct.system.animationFrameId; }, set animationFrameId(value) { stateStruct.system.animationFrameId = value; }, get physics() { return stateStruct.system.physics; }, set physics(value) { stateStruct.system.physics = value; } };