Implement GameModel Support for Character Specific Gamesystems
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				E2E Testing / test (push) Successful in 1m42s
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	E2E Testing / test (push) Successful in 1m42s
				
			This commit is contained in:
		
							parent
							
								
									e890d89cc8
								
							
						
					
					
						commit
						28a520a995
					
				@ -1,9 +1,35 @@
 | 
			
		||||
import {ModelComponent} from "../ModelComponent";
 | 
			
		||||
import {ModelComponentType} from "../ModelComponentType";
 | 
			
		||||
import { Gamesystem } from "../gamesystems/Gamesystem";
 | 
			
		||||
import { ProductGamesystem } from "../gamesystems/ProductGamesystem";
 | 
			
		||||
import { ProductTemplateGamesystem } from "../gamesystems/ProductTemplateGamesystem";
 | 
			
		||||
import { SimpleGamesystem } from "../gamesystems/SimpleGamesystem";
 | 
			
		||||
import { SimpleTemplateGamesystem } from "../gamesystems/SimpleTemplateGamesystem";
 | 
			
		||||
 | 
			
		||||
export class Character extends ModelComponent{
 | 
			
		||||
 | 
			
		||||
  characterSpecificGamesystems: Gamesystem<any, any>[] = []
 | 
			
		||||
 | 
			
		||||
  constructor(componentName: string, componentDescription: string) {
 | 
			
		||||
    super(componentName, componentDescription, ModelComponentType.CHARACTER);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  addCharacterSpecificSimpleGamesystem(referenceSystem: SimpleGamesystem) {
 | 
			
		||||
    if(!this.findCharacterSpecificGameystemByName(referenceSystem.componentName)) {
 | 
			
		||||
      const templateGamesystem = new SimpleTemplateGamesystem(referenceSystem);
 | 
			
		||||
      this.characterSpecificGamesystems.push(templateGamesystem)
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  addCharacterSpecificProductTemplateGamesystem(referenceSystem: ProductGamesystem) {
 | 
			
		||||
    if(!this.findCharacterSpecificGameystemByName(referenceSystem.componentName)) {
 | 
			
		||||
      const templateGamesystem = new ProductTemplateGamesystem(referenceSystem);
 | 
			
		||||
      this.characterSpecificGamesystems.push(templateGamesystem)
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  findCharacterSpecificGameystemByName(referenceName: string) {
 | 
			
		||||
    return this.characterSpecificGamesystems.find(gamesystem => gamesystem.componentName === referenceName) != undefined
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,25 @@
 | 
			
		||||
import { ProductGamesystem } from "./ProductGamesystem";
 | 
			
		||||
import { SimpleGamesystem } from "./SimpleGamesystem";
 | 
			
		||||
import { SimpleTemplateGamesystem } from "./SimpleTemplateGamesystem";
 | 
			
		||||
 | 
			
		||||
export class ProductTemplateGamesystem extends ProductGamesystem {
 | 
			
		||||
 | 
			
		||||
  referenceSystem: ProductGamesystem
 | 
			
		||||
 | 
			
		||||
  constructor(referenceSystem: ProductGamesystem) {
 | 
			
		||||
    super(referenceSystem.componentName, referenceSystem.componentDescription)
 | 
			
		||||
    this.referenceSystem = referenceSystem;
 | 
			
		||||
 | 
			
		||||
    this.innerGamesystems = referenceSystem.innerGamesystems.map(innerGamesystem => {
 | 
			
		||||
      if(innerGamesystem instanceof SimpleGamesystem) {
 | 
			
		||||
        return new SimpleTemplateGamesystem(innerGamesystem)
 | 
			
		||||
      } else {
 | 
			
		||||
        return new ProductTemplateGamesystem(innerGamesystem as ProductTemplateGamesystem)
 | 
			
		||||
      }
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    this.generateFromChildsystems();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -1,11 +1,7 @@
 | 
			
		||||
import {Gamesystem} from "./Gamesystem";
 | 
			
		||||
import { SimpleTemplateGamesystem } from "./SimpleTemplateGamesystem";
 | 
			
		||||
import {SimpleState} from "./states/SimpleState";
 | 
			
		||||
import {SimpleTransition} from "./transitions/SimpleTransition";
 | 
			
		||||
import {State} from "./states/State";
 | 
			
		||||
import {Transition} from "./transitions/Transition";
 | 
			
		||||
import {ProductState} from "./states/ProductState";
 | 
			
		||||
import {ProductTransition} from "./transitions/ProductTransition";
 | 
			
		||||
import {ProductGamesystem} from "./ProductGamesystem";
 | 
			
		||||
export class SimpleGamesystem extends Gamesystem<SimpleState, SimpleTransition> {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -55,4 +51,8 @@ export class SimpleGamesystem extends Gamesystem<SimpleState, SimpleTransition>
 | 
			
		||||
 | 
			
		||||
    return updated;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  protected findStateByStateLabel(stateLabel: string) {
 | 
			
		||||
    return this.states.find(state => stateLabel === stateLabel);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,42 @@
 | 
			
		||||
import { SimpleGamesystem } from "./SimpleGamesystem";
 | 
			
		||||
import { ScriptAccountAction } from "./actions/ScriptAccountAction";
 | 
			
		||||
import { ScriptAccountCondition } from "./conditions/ScriptAccountCondition";
 | 
			
		||||
import { SimpleState } from "./states/SimpleState";
 | 
			
		||||
import { SimpleTransition } from "./transitions/SimpleTransition";
 | 
			
		||||
 | 
			
		||||
export class SimpleTemplateGamesystem extends SimpleGamesystem {
 | 
			
		||||
  referenceSystem: SimpleGamesystem
 | 
			
		||||
 | 
			
		||||
  constructor(referenceSystem: SimpleGamesystem) {
 | 
			
		||||
    super(referenceSystem.componentName, referenceSystem.componentDescription)
 | 
			
		||||
    this.referenceSystem = referenceSystem;
 | 
			
		||||
 | 
			
		||||
    this.referenceSystem.states.forEach(state => {
 | 
			
		||||
      const templateState = new SimpleState(state.stateLabel, state.stateDescription)
 | 
			
		||||
      templateState.initial = state.initial;
 | 
			
		||||
      templateState.conditions = state.conditions.map(condition => ScriptAccountCondition.constructScriptAccountCondition(condition.scriptAccount, condition.minValue, condition.maxValue)!)
 | 
			
		||||
 | 
			
		||||
      this.states.push(templateState);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    this.referenceSystem.transitions.forEach(transition => {
 | 
			
		||||
      const startingState = this.findStateByStateLabel(transition.startingState.stateLabel);
 | 
			
		||||
      const endingState = this.findStateByStateLabel(transition.endingState.stateLabel);
 | 
			
		||||
 | 
			
		||||
      const templateTransition = new SimpleTransition(startingState!, endingState!)
 | 
			
		||||
 | 
			
		||||
      templateTransition.scriptAccountConditions = transition.scriptAccountConditions.map(condition =>
 | 
			
		||||
          ScriptAccountCondition.constructScriptAccountCondition(condition.scriptAccount, condition.minValue, condition.maxValue)!)
 | 
			
		||||
 | 
			
		||||
      templateTransition.scriptAccountActions = transition.scriptAccountActions.map(action => {
 | 
			
		||||
        return new ScriptAccountAction(action.scriptAccount, action.changingValue);
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      this.transitions.push(templateTransition);
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user