issue-15 #21
@ -5,17 +5,18 @@ import {ProductGamesystem} from "../../game-model/gamesystems/ProductGamesystem"
 | 
				
			|||||||
import {SimpleGamesystem} from "../../game-model/gamesystems/SimpleGamesystem";
 | 
					import {SimpleGamesystem} from "../../game-model/gamesystems/SimpleGamesystem";
 | 
				
			||||||
import {StateParser} from "./StateParser";
 | 
					import {StateParser} from "./StateParser";
 | 
				
			||||||
import {ScriptAccount} from "../../game-model/scriptAccounts/ScriptAccount";
 | 
					import {ScriptAccount} from "../../game-model/scriptAccounts/ScriptAccount";
 | 
				
			||||||
 | 
					import {TransitionParser} from "./TransitionParser";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class GamesystemParser {
 | 
					export class GamesystemParser {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  parsedParentGamesystems: ParsedParentGamesystems[] = []
 | 
					  private parsedParentGamesystems: ParsedParentGamesystems[] = []
 | 
				
			||||||
  parsedGamesystems: Gamesystem<any, any>[] = []
 | 
					  private parsedGamesystems: Gamesystem<any, any>[] = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private stateParser: StateParser
 | 
					  private scriptAccounts: ScriptAccount[]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  constructor(scriptAccounts: ScriptAccount[]) {
 | 
					  constructor(scriptAccounts: ScriptAccount[]) {
 | 
				
			||||||
    this.stateParser = new StateParser(scriptAccounts)
 | 
					    this.scriptAccounts = scriptAccounts;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -40,8 +41,12 @@ export class GamesystemParser {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  parseSimpleGamesystem(gamesystemData: any): SimpleGamesystem {
 | 
					  parseSimpleGamesystem(gamesystemData: any): SimpleGamesystem {
 | 
				
			||||||
    const simpleGamesystem = new SimpleGamesystem(gamesystemData.componentName, gamesystemData.componentDescription)
 | 
					    const simpleGamesystem = new SimpleGamesystem(gamesystemData.componentName, gamesystemData.componentDescription)
 | 
				
			||||||
    const states = this.stateParser.parseStates(gamesystemData)
 | 
					
 | 
				
			||||||
    simpleGamesystem.states = states
 | 
					    const stateParser = new StateParser(this.scriptAccounts);
 | 
				
			||||||
 | 
					    simpleGamesystem.states = stateParser.parseStates(gamesystemData.states)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const transitionParser = new TransitionParser(simpleGamesystem.states, this.scriptAccounts)
 | 
				
			||||||
 | 
					    simpleGamesystem.transitions = transitionParser.parseTransitions(gamesystemData.transitions)
 | 
				
			||||||
    return simpleGamesystem
 | 
					    return simpleGamesystem
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@ import {max, min} from "rxjs";
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
export class ScriptAccountConditionParser {
 | 
					export class ScriptAccountConditionParser {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  scriptAccounts: ScriptAccount[]
 | 
					  private scriptAccounts: ScriptAccount[]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  constructor(scriptAccounts: ScriptAccount[]) {
 | 
					  constructor(scriptAccounts: ScriptAccount[]) {
 | 
				
			||||||
@ -22,7 +22,7 @@ export class ScriptAccountConditionParser {
 | 
				
			|||||||
    return conditions
 | 
					    return conditions
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  parseSingleCondition(conditionData: any): ScriptAccountCondition | undefined{
 | 
					  private parseSingleCondition(conditionData: any): ScriptAccountCondition | undefined{
 | 
				
			||||||
    const referencedScriptAccount = this.findScriptAccountByName(conditionData.scriptAccount);
 | 
					    const referencedScriptAccount = this.findScriptAccountByName(conditionData.scriptAccount);
 | 
				
			||||||
    if(referencedScriptAccount != undefined) {
 | 
					    if(referencedScriptAccount != undefined) {
 | 
				
			||||||
      const minValue = conditionData.minValue;
 | 
					      const minValue = conditionData.minValue;
 | 
				
			||||||
@ -33,7 +33,7 @@ export class ScriptAccountConditionParser {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  findScriptAccountByName(scriptAccountName: string) {
 | 
					  private findScriptAccountByName(scriptAccountName: string) {
 | 
				
			||||||
    return this.scriptAccounts.find(scriptAccount => scriptAccount.componentName === scriptAccountName);
 | 
					    return this.scriptAccounts.find(scriptAccount => scriptAccount.componentName === scriptAccountName);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -12,10 +12,10 @@ export class StateParser {
 | 
				
			|||||||
      this.conditionParser = new ScriptAccountConditionParser(scriptAccounts)
 | 
					      this.conditionParser = new ScriptAccountConditionParser(scriptAccounts)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public  parseStates(gamesystemData: any): SimpleState[] {
 | 
					    public  parseStates(stateData: any): SimpleState[] {
 | 
				
			||||||
      const parsedStates: SimpleState[] = []
 | 
					      const parsedStates: SimpleState[] = []
 | 
				
			||||||
      for(let i=0; i<gamesystemData.states.length; i++) {
 | 
					      for(let i=0; i<stateData.length; i++) {
 | 
				
			||||||
        parsedStates.push(this.parseState(gamesystemData.states[i]))
 | 
					        parsedStates.push(this.parseState(stateData[i]))
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      return parsedStates;
 | 
					      return parsedStates;
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										46
									
								
								src/app/project/parser/gamesystemParser/TransitionParser.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								src/app/project/parser/gamesystemParser/TransitionParser.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,46 @@
 | 
				
			|||||||
 | 
					import {SimpleState} from "../../game-model/gamesystems/states/SimpleState";
 | 
				
			||||||
 | 
					import {ScriptAccountConditionParser} from "./ScriptAccountConditionParser";
 | 
				
			||||||
 | 
					import {ScriptAccount} from "../../game-model/scriptAccounts/ScriptAccount";
 | 
				
			||||||
 | 
					import {SimpleTransition} from "../../game-model/gamesystems/transitions/SimpleTransition";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export class TransitionParser {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private states: SimpleState[]
 | 
				
			||||||
 | 
					  private conditionParser: ScriptAccountConditionParser
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  constructor(states: SimpleState[], scriptAccounts: ScriptAccount[]) {
 | 
				
			||||||
 | 
					    this.states = states;
 | 
				
			||||||
 | 
					    this.conditionParser = new ScriptAccountConditionParser(scriptAccounts);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public parseTransitions(transitionData: any): SimpleTransition[] {
 | 
				
			||||||
 | 
					    const transitions: SimpleTransition[] = []
 | 
				
			||||||
 | 
					    for(let i=0; i<transitionData.length; i++) {
 | 
				
			||||||
 | 
					      const parsedTransition = this.parseSingleTransition(transitionData[i]);
 | 
				
			||||||
 | 
					      if(parsedTransition != undefined) {
 | 
				
			||||||
 | 
					        transitions.push(parsedTransition)
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return transitions
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private parseSingleTransition(transitionData: any): SimpleTransition | undefined{
 | 
				
			||||||
 | 
					    const startingState = this.findStateByLabel(transitionData.startingState)
 | 
				
			||||||
 | 
					    const endingState = this.findStateByLabel(transitionData.endingState);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if(startingState == undefined || endingState == undefined) {
 | 
				
			||||||
 | 
					      return undefined
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const simpleTransition = new SimpleTransition(startingState, endingState)
 | 
				
			||||||
 | 
					    simpleTransition.scriptAccountConditions = this.conditionParser.parseStoredConditions(transitionData.scriptAccountConditions)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return simpleTransition;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private findStateByLabel(stateLabel: string) {
 | 
				
			||||||
 | 
					    return this.states.find(state => state.stateLabel === stateLabel);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user