From 7cb02030d9a80c6a855571f0089ed9ce6df5a983 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20B=C3=B6ckelmann?= Date: Fri, 19 Apr 2024 17:52:50 +0200 Subject: [PATCH] Generate only symmetric isolated states --- ...IsolatedSymmetricTemplateStateGenerator.ts | 27 +++++++++++++++++++ .../ProductTemplateSystem.ts | 8 ++++++ 2 files changed, 35 insertions(+) create mode 100644 src/app/project/game-model/gamesystems/productSystemGenerator/IsolatedSymmetricTemplateStateGenerator.ts diff --git a/src/app/project/game-model/gamesystems/productSystemGenerator/IsolatedSymmetricTemplateStateGenerator.ts b/src/app/project/game-model/gamesystems/productSystemGenerator/IsolatedSymmetricTemplateStateGenerator.ts new file mode 100644 index 0000000..d0032ec --- /dev/null +++ b/src/app/project/game-model/gamesystems/productSystemGenerator/IsolatedSymmetricTemplateStateGenerator.ts @@ -0,0 +1,27 @@ +import {IsolatedTemplateStateGenerator} from "./IsolatedTemplateStateGenerator"; +import {ProductGenerationData} from "./ProductGenerationData"; +import {ProductGeneratorResult} from "./ProductGeneratorResult"; +import {ProductState} from "../states/ProductState"; + +export class IsolatedSymmetricTemplateStateGenerator extends IsolatedTemplateStateGenerator{ + + + protected generateBinaryIsolatedProductStates(leftSystemData: ProductGenerationData, rightSystemData: ProductGenerationData): ProductGeneratorResult { + const generatedProductStates: ProductState[] = [] + leftSystemData.states.forEach(leftState => { + if(leftState.outgoingTransitions.length == 0 && leftState.incomingTransitions.length == 0) { + rightSystemData.states.forEach(rightState => { + if(leftState.equals(rightState) && rightState.outgoingTransitions.length == 0 && rightState.incomingTransitions.length == 0) { + const leftConditions = this.getStateConditions(leftState, true); + const rightConditions = this.getStateConditions(rightState, true); + + if(!this.contradictCombinedConditions(leftConditions, rightConditions)) { + this.generateBinaryProductState(leftState, rightState, generatedProductStates); + } + } + }) + } + }) + return new ProductGeneratorResult(generatedProductStates, []); + } +} diff --git a/src/app/project/game-model/templates/productGamesystem/ProductTemplateSystem.ts b/src/app/project/game-model/templates/productGamesystem/ProductTemplateSystem.ts index 62816c4..23b7783 100644 --- a/src/app/project/game-model/templates/productGamesystem/ProductTemplateSystem.ts +++ b/src/app/project/game-model/templates/productGamesystem/ProductTemplateSystem.ts @@ -11,6 +11,9 @@ import { SymmetricProductTemplateGenerator } from "../../gamesystems/productSystemGenerator/SymmetricProductTemplateGenerator"; import {IsolatedTemplateStateGenerator} from "../../gamesystems/productSystemGenerator/IsolatedTemplateStateGenerator"; +import { + IsolatedSymmetricTemplateStateGenerator +} from "../../gamesystems/productSystemGenerator/IsolatedSymmetricTemplateStateGenerator"; export class ProductTemplateSystem extends ProductGamesystem implements TemplateGamesystem{ @@ -29,6 +32,11 @@ export class ProductTemplateSystem extends ProductGamesystem implements Template if(this.symmetric) { const symmetricGenerator = new SymmetricProductTemplateGenerator(this, templateElement); symmetricGenerator.generateFromChildsystems() + + if(this.generateIsolatedStates) { + const isolatedTemplateStateGenerator = new IsolatedSymmetricTemplateStateGenerator(this, templateElement); + isolatedTemplateStateGenerator.generateFromChildsystems(); + } } else { const productTemplateGenerator = new TemplateProductSystemGenerator(this, templateElement); productTemplateGenerator.generateFromChildsystems()