issue-15 #21
@ -2,9 +2,10 @@
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.StoredGameModel = void 0;
|
||||
class StoredGameModel {
|
||||
constructor(gameModelName, loadedModels) {
|
||||
constructor(gameModelName, storedScriptAccounts, storedGamesystems) {
|
||||
this.gameModelName = gameModelName;
|
||||
this.loadedModels = loadedModels;
|
||||
this.storedGamesystems = storedGamesystems;
|
||||
this.storedScriptAccounts = storedScriptAccounts;
|
||||
}
|
||||
}
|
||||
exports.StoredGameModel = StoredGameModel;
|
||||
|
@ -2,11 +2,14 @@ import {StoreComponent} from "./StoreComponent";
|
||||
|
||||
export class StoredGameModel {
|
||||
gameModelName: string
|
||||
loadedModels: StoreComponent[]
|
||||
|
||||
storedGamesystems: StoreComponent[]
|
||||
storedScriptAccounts: StoreComponent[]
|
||||
|
||||
|
||||
constructor(gameModelName: string, loadedModels: StoreComponent[]) {
|
||||
constructor(gameModelName: string, storedScriptAccounts: StoreComponent[], storedGamesystems: StoreComponent[]) {
|
||||
this.gameModelName = gameModelName;
|
||||
this.loadedModels = loadedModels;
|
||||
this.storedGamesystems = storedGamesystems;
|
||||
this.storedScriptAccounts = storedScriptAccounts;
|
||||
}
|
||||
}
|
||||
|
@ -12,13 +12,9 @@ class GameModelLoader {
|
||||
}
|
||||
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;
|
||||
const storedScriptAccounts = this.loadScriptAccountComponents();
|
||||
const storedGamesystems = this.loadGamesystems();
|
||||
return new StoredGameModel_1.StoredGameModel(gameModelName, storedScriptAccounts, storedGamesystems);
|
||||
}
|
||||
loadScriptAccountComponents() {
|
||||
const scriptAccountDir = path.join(this.gameModelDir, ModelComponentFileDirectory_1.ModelComponentFileDirectory.SCRIPTACCOUNT_DIR_NAME);
|
||||
|
@ -16,15 +16,11 @@ export class GameModelLoader {
|
||||
|
||||
loadGameModel(): StoredGameModel {
|
||||
const gameModelName = path.basename(this.gameModelDir)
|
||||
const gameModelComponents: StoreComponent[] = this.loadGameModelComponents();
|
||||
|
||||
return new StoredGameModel(gameModelName, gameModelComponents);
|
||||
}
|
||||
const storedScriptAccounts = this.loadScriptAccountComponents();
|
||||
const storedGamesystems = this.loadGamesystems();
|
||||
|
||||
private loadGameModelComponents(): StoreComponent[] {
|
||||
let gameModelComponents: StoreComponent[] = this.loadScriptAccountComponents()
|
||||
gameModelComponents = gameModelComponents.concat(this.loadGamesystems())
|
||||
return gameModelComponents
|
||||
return new StoredGameModel(gameModelName, storedScriptAccounts, storedGamesystems);
|
||||
}
|
||||
|
||||
private loadScriptAccountComponents() {
|
||||
|
@ -154,23 +154,13 @@ export class AppComponent implements OnInit{
|
||||
onLoadProject(storedGameModel: StoredGameModel) {
|
||||
const gameModel = new GameModel(storedGameModel.gameModelName)
|
||||
|
||||
const scriptAccounts = ScriptAccountParser.parseScriptAccounts(storedGameModel.storedScriptAccounts);
|
||||
|
||||
//const gamesystemParser = new GamesystemParser();
|
||||
storedGameModel.loadedModels.forEach(storedComponent => {
|
||||
switch (storedComponent.componentType) {
|
||||
case ModelComponentType.SCRIPTACCOUNT: {
|
||||
const scriptAccount = ScriptAccountParser.parseScriptAccount(storedComponent);
|
||||
gameModel.addScriptAccount(scriptAccount);
|
||||
} break
|
||||
case ModelComponentType.GAMESYTEM: {
|
||||
//gamesystemParser.parseGamesystem(storedComponent);
|
||||
}
|
||||
}
|
||||
})
|
||||
const gamesystemParser = new GamesystemParser(scriptAccounts);
|
||||
const gamesystems = gamesystemParser.parseStoredGamesystems(storedGameModel.storedGamesystems);
|
||||
|
||||
/*gamesystemParser.computeGamesystemStructure().forEach(topGamesystem => {
|
||||
gameModel.addGamesystem(topGamesystem)
|
||||
})*/
|
||||
gameModel.scriptAccounts = scriptAccounts
|
||||
gameModel.gamesystems = gamesystems
|
||||
|
||||
this.gameModel = gameModel;
|
||||
}
|
||||
|
@ -9,35 +9,25 @@ import {StorageModel} from "./fs/StorageModel";
|
||||
export class GameModel {
|
||||
private readonly _gameModelName: string
|
||||
|
||||
private _gamesystems: Gamesystem<any, any>[] = [];
|
||||
private _scriptAccounts: ScriptAccount[] = [];
|
||||
gamesystems: Gamesystem<any, any>[] = [];
|
||||
scriptAccounts: ScriptAccount[] = [];
|
||||
|
||||
constructor(gameModelName: string) {
|
||||
this._gameModelName = gameModelName;
|
||||
}
|
||||
get gameModelName(): string {
|
||||
return this._gameModelName;
|
||||
}
|
||||
get gamesystems(): Gamesystem<any, any>[] {
|
||||
return this._gamesystems;
|
||||
}
|
||||
get scriptAccounts(): ScriptAccount[] {
|
||||
return this._scriptAccounts;
|
||||
}
|
||||
|
||||
addGamesystem(gamesystem: Gamesystem<any, any>) {
|
||||
if(this.findGamesystem(gamesystem.componentName) == undefined) {
|
||||
this._gamesystems.push(gamesystem);
|
||||
this.gamesystems.push(gamesystem);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
removeGamesystem(gamesystem : Gamesystem<any, any>) {
|
||||
if(gamesystem.parentGamesystem == undefined) {
|
||||
this._gamesystems = this._gamesystems.filter(g => g !== gamesystem);
|
||||
this.gamesystems = this.gamesystems.filter(g => g !== gamesystem);
|
||||
} else {
|
||||
(gamesystem.parentGamesystem as ProductGamesystem).removeChildGamesystem(gamesystem);
|
||||
console.log(gamesystem.parentGamesystem)
|
||||
}
|
||||
}
|
||||
|
||||
@ -77,7 +67,7 @@ export class GameModel {
|
||||
|
||||
removeScriptAccount(scriptAccount: ScriptAccount) {
|
||||
if(scriptAccount != undefined) {
|
||||
this._scriptAccounts = this.scriptAccounts.filter(s => s != scriptAccount);
|
||||
this.scriptAccounts = this.scriptAccounts.filter(s => s != scriptAccount);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3,7 +3,15 @@ import {ScriptAccount} from "../game-model/scriptAccounts/ScriptAccount";
|
||||
|
||||
export class ScriptAccountParser {
|
||||
|
||||
public static parseScriptAccount(storedComponent: StoreComponent): ScriptAccount {
|
||||
public static parseScriptAccounts(storedScriptAccounts: StoreComponent[]): ScriptAccount[] {
|
||||
const scriptAccounts: ScriptAccount[] = []
|
||||
storedScriptAccounts.forEach(scriptAccount => {
|
||||
scriptAccounts.push(this.parseScriptAccount(scriptAccount))
|
||||
})
|
||||
return scriptAccounts;
|
||||
}
|
||||
|
||||
private static parseScriptAccount(storedComponent: StoreComponent): ScriptAccount {
|
||||
console.log("Parse ScriptAccount: ", storedComponent.fileName)
|
||||
const parsedScriptAccount = new ScriptAccount("", "");
|
||||
Object.assign(parsedScriptAccount, JSON.parse(storedComponent.jsonString));
|
||||
|
@ -18,7 +18,16 @@ export class GamesystemParser {
|
||||
this.stateParser = new StateParser(scriptAccounts)
|
||||
}
|
||||
|
||||
public parseGamesystem(storedGamesystem: StoreComponent) {
|
||||
|
||||
public parseStoredGamesystems(storedGamesystems: StoreComponent[]): Gamesystem<any, any>[] {
|
||||
storedGamesystems.forEach(storedGamesystem => {
|
||||
this.parseGamesystem(storedGamesystem)
|
||||
})
|
||||
|
||||
return this.computeGamesystemStructure();
|
||||
}
|
||||
|
||||
private parseGamesystem(storedGamesystem: StoreComponent) {
|
||||
const parsedGamesystemData = JSON.parse(storedGamesystem.jsonString)
|
||||
let parsedSystem: Gamesystem<any, any>
|
||||
if(parsedGamesystemData.childsystems != undefined) {
|
||||
@ -47,7 +56,7 @@ export class GamesystemParser {
|
||||
return productGamesystem;
|
||||
}
|
||||
|
||||
computeGamesystemStructure(): Gamesystem<any, any>[] {
|
||||
private computeGamesystemStructure(): Gamesystem<any, any>[] {
|
||||
const topGamesystems: Gamesystem<any, any>[] = []
|
||||
this.parsedGamesystems.forEach(parsedGamesystem => {
|
||||
const searchedParentsystem = this.findParentsystem(parsedGamesystem.componentName)
|
||||
@ -68,4 +77,5 @@ export class GamesystemParser {
|
||||
}
|
||||
return undefined
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,39 @@
|
||||
import {ScriptAccount} from "../../game-model/scriptAccounts/ScriptAccount";
|
||||
import {ScriptAccountCondition} from "../../game-model/gamesystems/conditions/ScriptAccountCondition";
|
||||
import {max, min} from "rxjs";
|
||||
|
||||
export class ScriptAccountConditionParser {
|
||||
|
||||
scriptAccounts: ScriptAccount[]
|
||||
|
||||
|
||||
constructor(scriptAccounts: ScriptAccount[]) {
|
||||
this.scriptAccounts = scriptAccounts;
|
||||
}
|
||||
|
||||
parseStoredConditions(conditionData: any): ScriptAccountCondition[] {
|
||||
const conditions: ScriptAccountCondition[] = []
|
||||
for(let i=0; i<conditionData.length; i++) {
|
||||
const parsedCondition = this.parseSingleCondition(conditionData[i]);
|
||||
if(parsedCondition != undefined) {
|
||||
conditions.push(parsedCondition)
|
||||
}
|
||||
}
|
||||
return conditions
|
||||
}
|
||||
|
||||
parseSingleCondition(conditionData: any): ScriptAccountCondition | undefined{
|
||||
const referencedScriptAccount = this.findScriptAccountByName(conditionData.scriptAccount);
|
||||
if(referencedScriptAccount != undefined) {
|
||||
const minValue = conditionData.minValue;
|
||||
const maxValue = conditionData.maxValue;
|
||||
return ScriptAccountCondition.constructScriptAccountCondition(referencedScriptAccount, minValue, maxValue);
|
||||
} else {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
findScriptAccountByName(scriptAccountName: string) {
|
||||
return this.scriptAccounts.find(scriptAccount => scriptAccount.componentName === scriptAccountName);
|
||||
}
|
||||
}
|
@ -1,14 +1,15 @@
|
||||
import {SimpleState} from "../../game-model/gamesystems/states/SimpleState";
|
||||
import {ScriptAccount} from "../../game-model/scriptAccounts/ScriptAccount";
|
||||
import {ScriptAccountCondition} from "../../game-model/gamesystems/conditions/ScriptAccountCondition";
|
||||
import {ScriptAccountConditionParser} from "./ScriptAccountConditionParser";
|
||||
|
||||
export class StateParser {
|
||||
|
||||
private scriptAccounts: ScriptAccount[]
|
||||
private conditionParser
|
||||
|
||||
|
||||
constructor(scriptAccounts: ScriptAccount[]) {
|
||||
this.scriptAccounts = scriptAccounts;
|
||||
this.conditionParser = new ScriptAccountConditionParser(scriptAccounts)
|
||||
}
|
||||
|
||||
public parseStates(gamesystemData: any): SimpleState[] {
|
||||
@ -25,8 +26,12 @@ export class StateParser {
|
||||
const stateLabel = stateData.stateLabel
|
||||
const stateDescription = stateData.stateDescription
|
||||
|
||||
const conditions = this.conditionParser.parseStoredConditions(stateData.conditions)
|
||||
|
||||
const simpleState = new SimpleState(stateLabel, stateDescription);
|
||||
simpleState.initial = initial;
|
||||
simpleState.conditions = conditions;
|
||||
|
||||
return simpleState;
|
||||
}
|
||||
|
||||
|
6
testModel/script-accounts/Temperature.json
Normal file
6
testModel/script-accounts/Temperature.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"componentName": "Temperature",
|
||||
"componentDescription": "",
|
||||
"minValue": -50,
|
||||
"maxValue": 50
|
||||
}
|
Loading…
Reference in New Issue
Block a user