File size: 5,612 Bytes
7b453e7
 
 
 
 
 
 
 
 
 
7e312e3
7ffaa9e
 
 
 
7b453e7
 
 
 
 
 
 
7e312e3
 
 
 
 
7b453e7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7ffaa9e
 
 
 
 
 
 
 
 
 
7b453e7
 
 
 
 
 
 
 
 
 
 
 
7e312e3
 
 
 
 
 
 
 
 
 
7b453e7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7e312e3
 
 
 
7b453e7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7e312e3
 
 
 
 
 
 
 
 
7b453e7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
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; }
};