smolworld / src /js /state.js
p3nGu1nZz's picture
✨ Refactor physics module; add math utilities and event handling classes; update state structure for 3D entities
7ffaa9e
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; }
};