|
const stateStruct = { |
|
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 } |
|
}, |
|
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; } |
|
}; |
|
|