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