issue-15 #21
17
app/storage/FileUtils.js
Normal file
17
app/storage/FileUtils.js
Normal file
@ -0,0 +1,17 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.FileUtils = void 0;
|
||||
const fs = require("fs");
|
||||
const path = require("node:path");
|
||||
class FileUtils {
|
||||
static listFilesInDirectory(directory) {
|
||||
if (fs.lstatSync(directory).isDirectory()) {
|
||||
return fs.readdirSync(directory).map(fileName => path.join(directory, fileName));
|
||||
}
|
||||
else {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
}
|
||||
exports.FileUtils = FileUtils;
|
||||
//# sourceMappingURL=FileUtils.js.map
|
11
app/storage/ModelComponentFileDirectory.js
Normal file
11
app/storage/ModelComponentFileDirectory.js
Normal file
@ -0,0 +1,11 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.ModelComponentFileDirectory = void 0;
|
||||
class ModelComponentFileDirectory {
|
||||
}
|
||||
exports.ModelComponentFileDirectory = ModelComponentFileDirectory;
|
||||
ModelComponentFileDirectory.SCRIPTACCOUNT_DIR_NAME = "script-accounts";
|
||||
ModelComponentFileDirectory.GAMESYSTEM_DIR_NAME = "gamesystems";
|
||||
ModelComponentFileDirectory.GAMESYSTEM_SIMPLE_DIR_NAME = "simple";
|
||||
ModelComponentFileDirectory.GAMESYSTEM_PRODUCT_DIR_NAME = "product";
|
||||
//# sourceMappingURL=ModelComponentFileDirectory.js.map
|
12
app/storage/StoreComponent.js
Normal file
12
app/storage/StoreComponent.js
Normal file
@ -0,0 +1,12 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.StoreComponent = void 0;
|
||||
class StoreComponent {
|
||||
constructor(jsonString, fileName, componentType) {
|
||||
this.jsonString = jsonString;
|
||||
this.fileName = fileName;
|
||||
this.componentType = componentType;
|
||||
}
|
||||
}
|
||||
exports.StoreComponent = StoreComponent;
|
||||
//# sourceMappingURL=StoreComponent.js.map
|
11
app/storage/StoredGameModel.js
Normal file
11
app/storage/StoredGameModel.js
Normal file
@ -0,0 +1,11 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.StoredGameModel = void 0;
|
||||
class StoredGameModel {
|
||||
constructor(gameModelName, loadedModels) {
|
||||
this.gameModelName = gameModelName;
|
||||
this.loadedModels = loadedModels;
|
||||
}
|
||||
}
|
||||
exports.StoredGameModel = StoredGameModel;
|
||||
//# sourceMappingURL=StoredGameModel.js.map
|
32
app/storage/loader/GameModelLoader.js
Normal file
32
app/storage/loader/GameModelLoader.js
Normal file
@ -0,0 +1,32 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.GameModelLoader = void 0;
|
||||
const StoredGameModel_1 = require("../StoredGameModel");
|
||||
const path = require("node:path");
|
||||
const ModelComponentFileDirectory_1 = require("../ModelComponentFileDirectory");
|
||||
const ScriptAccountLoader_1 = require("./ScriptAccountLoader");
|
||||
class GameModelLoader {
|
||||
constructor(gameModelDir) {
|
||||
this.gameModelDir = gameModelDir;
|
||||
}
|
||||
loadGameModel() {
|
||||
const gameModelName = path.basename(this.gameModelDir);
|
||||
const gameModelComponents = this.loadGameModelComponents();
|
||||
return new StoredGameModel_1.StoredGameModel(gameModelName, gameModelComponents);
|
||||
}
|
||||
loadGameModelComponents() {
|
||||
let gameModelComponents = this.loadScriptAccountComponents();
|
||||
gameModelComponents = gameModelComponents.concat(this.loadGamesystems());
|
||||
return gameModelComponents;
|
||||
}
|
||||
loadScriptAccountComponents() {
|
||||
const scriptAccountDir = path.join(this.gameModelDir, ModelComponentFileDirectory_1.ModelComponentFileDirectory.SCRIPTACCOUNT_DIR_NAME);
|
||||
const scriptAccountLoader = new ScriptAccountLoader_1.ScriptAccountLoader(scriptAccountDir);
|
||||
return scriptAccountLoader.loadScriptAccounts();
|
||||
}
|
||||
loadGamesystems() {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
exports.GameModelLoader = GameModelLoader;
|
||||
//# sourceMappingURL=GameModelLoader.js.map
|
31
app/storage/loader/ScriptAccountLoader.js
Normal file
31
app/storage/loader/ScriptAccountLoader.js
Normal file
@ -0,0 +1,31 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.ScriptAccountLoader = void 0;
|
||||
const StoreComponent_1 = require("../StoreComponent");
|
||||
const FileUtils_1 = require("../FileUtils");
|
||||
const ModelComponentType_1 = require("../../../src/app/project/game-model/ModelComponentType");
|
||||
const fs = require("fs");
|
||||
class ScriptAccountLoader {
|
||||
constructor(scriptAccountDir) {
|
||||
this.scriptAccountDir = scriptAccountDir;
|
||||
}
|
||||
loadScriptAccounts() {
|
||||
const scriptAccountFiles = FileUtils_1.FileUtils.listFilesInDirectory(this.scriptAccountDir);
|
||||
const loadedScriptAccounts = [];
|
||||
scriptAccountFiles.forEach(scriptAccountFile => {
|
||||
const loadedScriptAccount = this.loadScriptAccount(scriptAccountFile);
|
||||
if (loadedScriptAccount != undefined) {
|
||||
loadedScriptAccounts.push(loadedScriptAccount);
|
||||
}
|
||||
});
|
||||
return loadedScriptAccounts;
|
||||
}
|
||||
loadScriptAccount(scriptAccountFile) {
|
||||
if (scriptAccountFile.endsWith(".json")) {
|
||||
const scriptAccountData = fs.readFileSync(scriptAccountFile, 'utf-8');
|
||||
return new StoreComponent_1.StoreComponent(scriptAccountData, scriptAccountFile, ModelComponentType_1.ModelComponentType.SCRIPTACCOUNT);
|
||||
}
|
||||
}
|
||||
}
|
||||
exports.ScriptAccountLoader = ScriptAccountLoader;
|
||||
//# sourceMappingURL=ScriptAccountLoader.js.map
|
16
src/app/project/project.service.spec.ts
Normal file
16
src/app/project/project.service.spec.ts
Normal file
@ -0,0 +1,16 @@
|
||||
import { TestBed } from '@angular/core/testing';
|
||||
|
||||
import { ProjectService } from './project.service';
|
||||
|
||||
describe('ProjectService', () => {
|
||||
let service: ProjectService;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({});
|
||||
service = TestBed.inject(ProjectService);
|
||||
});
|
||||
|
||||
it('should be created', () => {
|
||||
expect(service).toBeTruthy();
|
||||
});
|
||||
});
|
45
src/app/project/project.service.ts
Normal file
45
src/app/project/project.service.ts
Normal file
@ -0,0 +1,45 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import {ElectronService} from "../core/services";
|
||||
import {GameModel} from "./game-model/GameModel";
|
||||
import {StoredGameModel} from "../../../app/storage/StoredGameModel";
|
||||
import {ScriptAccount} from "./game-model/scriptAccounts/ScriptAccount";
|
||||
import {ModelComponentType} from "./game-model/ModelComponentType";
|
||||
import {ScriptAccountParser} from "./parser/ScriptAccountParser";
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
})
|
||||
export class ProjectService {
|
||||
|
||||
gameModel: GameModel = new GameModel("New GameModel")
|
||||
constructor(private electronService: ElectronService) {
|
||||
if(electronService.isElectron) {
|
||||
electronService.ipcRenderer.on('get-project-data', (event: any, message: string) => {
|
||||
this.saveProject();
|
||||
})
|
||||
|
||||
electronService.ipcRenderer.on('open-project', (event: any, loadedProject: StoredGameModel) => {
|
||||
this.loadProject(loadedProject);
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
saveProject() {
|
||||
|
||||
}
|
||||
|
||||
loadProject(storedGameModel: StoredGameModel) {
|
||||
const gameModel = new GameModel(storedGameModel.gameModelName)
|
||||
storedGameModel.loadedModels.forEach(storedComponent => {
|
||||
switch (storedComponent.componentType) {
|
||||
case ModelComponentType.SCRIPTACCOUNT: {
|
||||
const scriptAccount = ScriptAccountParser.parseScriptAccount(storedComponent);
|
||||
gameModel.addScriptAccount(scriptAccount);
|
||||
}
|
||||
}
|
||||
})
|
||||
this.gameModel = gameModel;
|
||||
}
|
||||
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user