68 lines
2.1 KiB
JavaScript
68 lines
2.1 KiB
JavaScript
import { SimActionFireTowers, SimActionMoveEnemies, SimActionMoveProjectiles, SimActionSpawnEnemies, SimCommandStartNextWave, SimLevel } from "./index.js";
|
|
export class SimMain {
|
|
_currentLevel;
|
|
_commands = [];
|
|
_actions = [];
|
|
_gdRoot;
|
|
constructor(gdRoot, level) {
|
|
this._gdRoot = gdRoot;
|
|
this._currentLevel = new SimLevel(gdRoot, level);
|
|
this._actions.push(new SimActionMoveEnemies());
|
|
this._actions.push(new SimActionSpawnEnemies());
|
|
this._actions.push(new SimActionFireTowers());
|
|
this._actions.push(new SimActionMoveProjectiles());
|
|
if (true || !this.loadModel()) {
|
|
this.reload();
|
|
}
|
|
this._currentLevel.paused = true;
|
|
}
|
|
get gdRoot() {
|
|
return this._gdRoot;
|
|
}
|
|
get currentLevel() {
|
|
return this._currentLevel;
|
|
}
|
|
executeUntilStep(targetStep) {
|
|
this.executeCommands();
|
|
while (this._currentLevel.currentStep < targetStep) {
|
|
this.executeOneStep();
|
|
this._currentLevel.currentStep += 1;
|
|
}
|
|
}
|
|
executeCommands() {
|
|
const saveModel = false && this._commands.length != 0;
|
|
this._commands.forEach((command) => {
|
|
command.execute();
|
|
});
|
|
this._commands = [];
|
|
if (saveModel) {
|
|
this.saveModel();
|
|
}
|
|
}
|
|
executeOneStep() {
|
|
for (const action of this._actions)
|
|
action.execute(this);
|
|
}
|
|
addCommand(command) {
|
|
this._commands[this._commands.length] = command;
|
|
}
|
|
reload() {
|
|
this._currentLevel = new SimLevel(this._gdRoot, 0);
|
|
this.saveModel();
|
|
this.addCommand(new SimCommandStartNextWave(this._gdRoot, this._currentLevel));
|
|
}
|
|
loadModel() {
|
|
if (!!localStorage.htd) {
|
|
const savedLevel = SimLevel.deserialize(this._gdRoot, localStorage.htd);
|
|
if (!savedLevel)
|
|
return false;
|
|
this._currentLevel = savedLevel;
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
saveModel() {
|
|
localStorage.htd = this._currentLevel.serialize();
|
|
}
|
|
}
|
|
//# sourceMappingURL=SimMain.js.map
|