From 909e2f5c46bb6d71c869509ebe6b8c79d9aff49d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20B=C3=B6ckelmann?= Date: Fri, 19 Apr 2024 16:55:30 +0200 Subject: [PATCH] Remove unreachable states when generating symmetric-product-template --- .../SymmetricProductTemplateGenerator.ts | 34 +++++++++ .../TemplateProductSystemGenerator.ts | 69 ------------------- .../ProductTemplateSystem.ts | 13 +++- 3 files changed, 45 insertions(+), 71 deletions(-) create mode 100644 src/app/project/game-model/gamesystems/productSystemGenerator/SymmetricProductTemplateGenerator.ts diff --git a/src/app/project/game-model/gamesystems/productSystemGenerator/SymmetricProductTemplateGenerator.ts b/src/app/project/game-model/gamesystems/productSystemGenerator/SymmetricProductTemplateGenerator.ts new file mode 100644 index 0000000..848aa04 --- /dev/null +++ b/src/app/project/game-model/gamesystems/productSystemGenerator/SymmetricProductTemplateGenerator.ts @@ -0,0 +1,34 @@ +import {TemplateProductSystemGenerator} from "./TemplateProductSystemGenerator"; +import {ProductGenerationData} from "./ProductGenerationData"; +import {ProductGeneratorResult} from "./ProductGeneratorResult"; +import {ProductState} from "../states/ProductState"; +import {ProductTransition} from "../transitions/ProductTransition"; +import {ProductTemplateSystem} from "../../templates/productGamesystem/ProductTemplateSystem"; + +export class SymmetricProductTemplateGenerator extends TemplateProductSystemGenerator { + protected generateFromBinaryChildsystems(leftSystemData: ProductGenerationData, rightSystemData: ProductGenerationData): ProductGeneratorResult { + const generatedProductStates: ProductState[] = [] + const generatedProductTransitions: ProductTransition[] = [] + + leftSystemData.states.forEach(leftState => { + rightSystemData.states.forEach(rightState => { + if(leftState.equals(rightState)) { + for(let i=0; i { - rightSystemData.states.forEach(rightState => { - for(let i=0; i, leftSystem: boolean) { const templateElement = this.determineTemplateElement(leftSystem)!; if(transition instanceof SimpleTemplateTransition && transition.conditionMap.has(templateElement)) { diff --git a/src/app/project/game-model/templates/productGamesystem/ProductTemplateSystem.ts b/src/app/project/game-model/templates/productGamesystem/ProductTemplateSystem.ts index 02a50ce..4193ecd 100644 --- a/src/app/project/game-model/templates/productGamesystem/ProductTemplateSystem.ts +++ b/src/app/project/game-model/templates/productGamesystem/ProductTemplateSystem.ts @@ -7,6 +7,9 @@ import {SimpleGamesystem} from "../../gamesystems/SimpleGamesystem"; import {GameModel} from "../../GameModel"; import {TemplateType} from "../TemplateType"; import {TemplateProductSystemGenerator} from "../../gamesystems/productSystemGenerator/TemplateProductSystemGenerator"; +import { + SymmetricProductTemplateGenerator +} from "../../gamesystems/productSystemGenerator/SymmetricProductTemplateGenerator"; export class ProductTemplateSystem extends ProductGamesystem implements TemplateGamesystem{ @@ -22,8 +25,14 @@ export class ProductTemplateSystem extends ProductGamesystem implements Template } addTemplateElement(templateElement: TemplateElement): void { - const productTemplateGenerator = new TemplateProductSystemGenerator(this, templateElement); - productTemplateGenerator.generateFromChildsystems() + if(this.symmetric) { + const symmetricGenerator = new SymmetricProductTemplateGenerator(this, templateElement); + symmetricGenerator.generateFromChildsystems() + } else { + const productTemplateGenerator = new TemplateProductSystemGenerator(this, templateElement); + productTemplateGenerator.generateFromChildsystems() + } + } }