From 42388de905498340bdb3940cb763df58830c0534 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20B=C3=B6ckelmann?= Date: Sun, 14 Apr 2024 12:25:23 +0200 Subject: [PATCH] Generate States and Transition Template Specific --- .../ProductSystemGenerator.ts | 30 ++++++++--- .../TemplateProductSystemGenerator.ts | 54 +++++++++++++++++++ .../ProductTemplateSystem.ts | 4 +- 3 files changed, 80 insertions(+), 8 deletions(-) create mode 100644 src/app/project/game-model/gamesystems/productSystemGenerator/TemplateProductSystemGenerator.ts diff --git a/src/app/project/game-model/gamesystems/productSystemGenerator/ProductSystemGenerator.ts b/src/app/project/game-model/gamesystems/productSystemGenerator/ProductSystemGenerator.ts index a9b3eab..816533b 100644 --- a/src/app/project/game-model/gamesystems/productSystemGenerator/ProductSystemGenerator.ts +++ b/src/app/project/game-model/gamesystems/productSystemGenerator/ProductSystemGenerator.ts @@ -8,6 +8,7 @@ import {ProductGeneratorResult} from "./ProductGeneratorResult"; import {Gamesystem} from "../Gamesystem"; import {ProductGenerationData} from "./ProductGenerationData"; import {ProductTransition} from "../transitions/ProductTransition"; +import {SimpleTemplateTransition} from "../../templates/simpleGamesystem/SimpleTemplateTransition"; export class ProductSystemGenerator { productGamesystem: ProductGamesystem @@ -109,8 +110,8 @@ export class ProductSystemGenerator { protected generateBinaryProductTransition(startingState: ProductState, endingState: ProductState, usedTransition: Transition, generatedTransitions: ProductTransition[]) { const transition = new ProductTransition(startingState, endingState); - transition.scriptAccountActions = [... usedTransition.scriptAccountActions]; - transition.scriptAccountConditions = [... usedTransition.scriptAccountConditions]; + transition.scriptAccountActions = [... this.getTransitionActions(usedTransition)]; + transition.scriptAccountConditions = [... this.getTransitionConditions(usedTransition)]; if(generatedTransitions.find(generatedTransition => generatedTransition.startingState.equals(startingState) && generatedTransition.endingState.equals(endingState)) == undefined) { generatedTransitions.push(transition) @@ -118,13 +119,13 @@ export class ProductSystemGenerator { } protected generateBinaryProductTransitionMulti(startingState: ProductState, endingState: ProductState, leftTransition: Transition, rightTransition: Transition, generatedTransitions: ProductTransition[]) { - const leftConditions = leftTransition.scriptAccountConditions; - const rightConditions = rightTransition.scriptAccountConditions; + const leftConditions = this.getTransitionConditions(leftTransition) + const rightConditions = this.getTransitionConditions(rightTransition) if(!this.contradictCombinedConditions(leftConditions, rightConditions)) { const transition = new ProductTransition(startingState, endingState) - transition.scriptAccountActions = this.generateCombinedActions(leftTransition.scriptAccountActions, rightTransition.scriptAccountActions); - transition.scriptAccountConditions = this.generateCombinedConditions(leftTransition.scriptAccountConditions, rightTransition.scriptAccountConditions); + transition.scriptAccountActions = this.generateCombinedActions(this.getTransitionActions(leftTransition), this.getTransitionActions(rightTransition)); + transition.scriptAccountConditions = this.generateCombinedConditions(this.getTransitionConditions(leftTransition), this.getTransitionConditions(rightTransition)); if(generatedTransitions.find(generatedTransition => generatedTransition.startingState.equals(startingState) && generatedTransition.endingState.equals(endingState)) == undefined) { generatedTransitions.push(transition) @@ -133,7 +134,10 @@ export class ProductSystemGenerator { } protected generateBinaryProductState(leftState: State, rightState: State, generatedStates: ProductState[]): ProductState | undefined { - const combinedStateConditions: ScriptAccountCondition[] = leftState.conditions.concat(rightState.conditions); + const leftConditions = this.getStateConditions(leftState) + const rightConditions = this.getStateConditions(rightState) + + const combinedStateConditions: ScriptAccountCondition[] = leftConditions.concat(rightConditions) for(let i=0; i) { + return transition.scriptAccountConditions; + } + + protected getTransitionActions(transition: Transition) { + return transition.scriptAccountActions; + } + + protected getStateConditions(state: State) { + return state.conditions; + } + } diff --git a/src/app/project/game-model/gamesystems/productSystemGenerator/TemplateProductSystemGenerator.ts b/src/app/project/game-model/gamesystems/productSystemGenerator/TemplateProductSystemGenerator.ts new file mode 100644 index 0000000..9a7915d --- /dev/null +++ b/src/app/project/game-model/gamesystems/productSystemGenerator/TemplateProductSystemGenerator.ts @@ -0,0 +1,54 @@ +import {ProductSystemGenerator} from "./ProductSystemGenerator"; +import {ProductGeneratorResult} from "./ProductGeneratorResult"; +import {TemplateElement} from "../../templates/TemplateElement"; +import {ProductTemplateSystem} from "../../templates/productGamesystem/ProductTemplateSystem"; +import {ProductState} from "../states/ProductState"; +import {Transition} from "../transitions/Transition"; +import {ProductTransition} from "../transitions/ProductTransition"; +import {State} from "../states/State"; +import {SimpleTemplateTransition} from "../../templates/simpleGamesystem/SimpleTemplateTransition"; +import {state, transition} from "@angular/animations"; +import {ScriptAccountCondition} from "../conditions/ScriptAccountCondition"; +import {SimpleTemplateState} from "../../templates/simpleGamesystem/SimpleTemplateState"; + +export class TemplateProductSystemGenerator extends ProductSystemGenerator { + + templateElement: TemplateElement + + + constructor(productGamesystem: ProductTemplateSystem, templateElement: TemplateElement) { + super(productGamesystem); + this.templateElement = templateElement; + } + + protected assignGeneratedStatesAndTransitions(generationResult: ProductGeneratorResult) { + const productTemplateSystem = this.productGamesystem as ProductTemplateSystem + productTemplateSystem.transitionMap.set(this.templateElement, generationResult.transitions) + productTemplateSystem.stateMap.set(this.templateElement, generationResult.states) + } + + protected getTransitionConditions(transition: Transition) { + if(transition instanceof SimpleTemplateTransition) { + return transition.conditionMap.get(this.templateElement)! + } else { + return transition.scriptAccountConditions; + } + } + + protected getTransitionActions(transition: Transition) { + if(transition instanceof SimpleTemplateTransition) { + return transition.actionMap.get(this.templateElement)! + } else { + return transition.scriptAccountActions; + } + } + + + protected getStateConditions(state: State): ScriptAccountCondition[] { + if(state instanceof SimpleTemplateState) { + return state.conditionMap.get(this.templateElement)! + } else { + return state.conditions + } + } +} diff --git a/src/app/project/game-model/templates/productGamesystem/ProductTemplateSystem.ts b/src/app/project/game-model/templates/productGamesystem/ProductTemplateSystem.ts index 6db77cc..e6957fd 100644 --- a/src/app/project/game-model/templates/productGamesystem/ProductTemplateSystem.ts +++ b/src/app/project/game-model/templates/productGamesystem/ProductTemplateSystem.ts @@ -6,6 +6,7 @@ import {ProductTransition} from "../../gamesystems/transitions/ProductTransition import {SimpleGamesystem} from "../../gamesystems/SimpleGamesystem"; import {GameModel} from "../../GameModel"; import {TemplateType} from "../TemplateType"; +import {TemplateProductSystemGenerator} from "../../gamesystems/productSystemGenerator/TemplateProductSystemGenerator"; export class ProductTemplateSystem extends ProductGamesystem implements TemplateGamesystem{ @@ -20,7 +21,8 @@ export class ProductTemplateSystem extends ProductGamesystem implements Template } addTemplateElement(templateElement: TemplateElement): void { - + const productTemplateGenerator = new TemplateProductSystemGenerator(this, templateElement); + productTemplateGenerator.generateFromChildsystems() } } -- 2.34.1