import {SimpleGamesystem} from "../../gamesystems/SimpleGamesystem"; import {SimpleState} from "../../gamesystems/states/SimpleState"; import {SimpleTransition} from "../../gamesystems/transitions/SimpleTransition"; import {ScriptAccount} from "../../scriptAccounts/ScriptAccount"; import {ScriptAccountCondition} from "../../gamesystems/conditions/ScriptAccountCondition"; import {ScriptAccountAction} from "../../gamesystems/actions/ScriptAccountAction"; export class SimpleGamesystemParser { static parseSimpleGamesystem(jsonObject: any, scriptAccounts: ScriptAccount[] = []) : SimpleGamesystem { const gamesystemName = jsonObject.componentName; const gamesystemDescription = jsonObject.componentDescription; const simpleStates = SimpleGamesystemParser.parseSimpleStates(jsonObject, scriptAccounts) const simpleTransitions = SimpleGamesystemParser.parseSimpleTransitions(jsonObject, simpleStates, scriptAccounts); const gamesystem = new SimpleGamesystem(gamesystemName, gamesystemDescription); gamesystem.states = simpleStates; gamesystem.transitions = simpleTransitions; return gamesystem; } static parseSimpleStates(jsonObject: any, scriptAccounts: ScriptAccount[] = []): SimpleState[] { const states: SimpleState[] = []; for(let i=0; i scriptAccount.componentName === conditions[j].scriptAccount) if(searchedScriptAccount != undefined) { const scriptAccountCondition = ScriptAccountCondition.constructScriptAccountCondition(searchedScriptAccount, conditions[j].minValue, conditions[j].maxValue) state.conditions.push(scriptAccountCondition!) } } states.push(state); } return states; } static parseSimpleTransitions(jsonObject: any, states: SimpleState[], scriptAccounts: ScriptAccount[]): SimpleTransition[] { const transitions: SimpleTransition[] = []; for(let i=0; i state.stateLabel === startingStateLabel); const endingState = states.find(state => state.stateLabel === endingStateLabel); const actions: ScriptAccountAction[] = [] for(let j=0; j scriptAccount.componentName === scriptAccountName) if(referencedScriptAccount != undefined) { const scriptAccountAction = new ScriptAccountAction(referencedScriptAccount!, jsonObject.transitions[i].scriptAccountActions[j].changingValue) actions.push(scriptAccountAction) } } const conditions: ScriptAccountCondition[] = []; for(let j=0; j scriptAccount.componentName === scriptAccountName) if(referencedScriptAccount != undefined) { const minValue = jsonObject.transitions[i].scriptAccountConditions[j].minValue const maxValue = jsonObject.transitions[i].scriptAccountConditions[j].maxValue const scriptAccountCondition = ScriptAccountCondition.constructScriptAccountCondition(referencedScriptAccount, minValue, maxValue) conditions.push(scriptAccountCondition!) } } if(startingState != undefined && endingState != undefined) { const simpleTransition = new SimpleTransition(startingState, endingState); simpleTransition.scriptAccountActions = actions; simpleTransition.scriptAccountConditions = conditions; transitions.push(simpleTransition); } else { console.error("Starting or Ending State are not defined!", startingState, endingState) } } return transitions; } }