symetric-template-relation-systems #38
@ -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<leftState.outgoingTransitions.length; i++) {
|
||||
for(let j=0; j<rightState.outgoingTransitions.length; j++) {
|
||||
const startingState = this.generateBinaryProductState(leftState, rightState, generatedProductStates);
|
||||
if(startingState != undefined && leftState.outgoingTransitions[i].endingState.equals(rightState.outgoingTransitions[j].endingState)) {
|
||||
const endingState_left_right = this.generateBinaryProductState(leftState.outgoingTransitions[i].endingState, rightState.outgoingTransitions[j].endingState, generatedProductStates);
|
||||
if(endingState_left_right != undefined) {
|
||||
this.generateBinaryProductTransitionMulti(startingState, endingState_left_right, leftState.outgoingTransitions[i], rightState.outgoingTransitions[j], generatedProductTransitions);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
return new ProductGeneratorResult(generatedProductStates, generatedProductTransitions);
|
||||
}
|
||||
|
||||
}
|
@ -33,75 +33,6 @@ export class TemplateProductSystemGenerator extends ProductSystemGenerator {
|
||||
console.log("Template: ", generationResult.transitions.length)
|
||||
}
|
||||
|
||||
protected generateFromBinaryChildsystems(leftSystemData: ProductGenerationData, rightSystemData: ProductGenerationData): ProductGeneratorResult {
|
||||
const generatedProductStates: ProductState[] = []
|
||||
const generatedProductTransitions: ProductTransition[] = []
|
||||
|
||||
leftSystemData.states.forEach(leftState => {
|
||||
rightSystemData.states.forEach(rightState => {
|
||||
for(let i=0; i<leftState.outgoingTransitions.length; i++) {
|
||||
for(let j=0; j<rightState.outgoingTransitions.length; j++) {
|
||||
const startingState = this.generateBinaryProductState(leftState, rightState, generatedProductStates);
|
||||
|
||||
if(startingState != undefined) {
|
||||
|
||||
if(!(this.productGamesystem as ProductTemplateSystem).symmetric) {
|
||||
const endingState_right = this.generateBinaryProductState(leftState, rightState.outgoingTransitions[j].endingState, generatedProductStates);
|
||||
if(endingState_right != undefined) {
|
||||
this.generateBinaryProductTransition(startingState, endingState_right, rightState.outgoingTransitions[j], generatedProductTransitions, false);
|
||||
}
|
||||
|
||||
const endingState_left = this.generateBinaryProductState(leftState.outgoingTransitions[i].endingState, rightState, generatedProductStates);
|
||||
if(endingState_left != undefined) {
|
||||
this.generateBinaryProductTransition(startingState, endingState_left, leftState.outgoingTransitions[i], generatedProductTransitions, true)
|
||||
}
|
||||
}
|
||||
|
||||
const endingState_left_right = this.generateBinaryProductState(leftState.outgoingTransitions[i].endingState, rightState.outgoingTransitions[j].endingState, generatedProductStates);
|
||||
if(endingState_left_right != undefined) {
|
||||
if((this.productGamesystem as ProductTemplateSystem).symmetric) {
|
||||
if(leftState.equals(rightState) && leftState.outgoingTransitions[i].endingState.equals(rightState.outgoingTransitions[j].endingState)) {
|
||||
this.generateBinaryProductTransitionMulti(startingState, endingState_left_right, leftState.outgoingTransitions[i], rightState.outgoingTransitions[j], generatedProductTransitions);
|
||||
} else {
|
||||
console.log(startingState , endingState_left_right)
|
||||
}
|
||||
} else {
|
||||
this.generateBinaryProductTransitionMulti(startingState, endingState_left_right, leftState.outgoingTransitions[i], rightState.outgoingTransitions[j], generatedProductTransitions);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(rightState.outgoingTransitions.length == 0 && !(this.productGamesystem as ProductTemplateSystem).symmetric) {
|
||||
const startingState = this.generateBinaryProductState(leftState, rightState, generatedProductStates);
|
||||
const endingState = this.generateBinaryProductState(leftState.outgoingTransitions[i].endingState, rightState, generatedProductStates);
|
||||
|
||||
if(startingState != undefined && endingState != undefined) {
|
||||
this.generateBinaryProductTransition(startingState, endingState, leftState.outgoingTransitions[i], generatedProductTransitions, true)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(leftState.outgoingTransitions.length == 0 && !(this.productGamesystem as ProductTemplateSystem).symmetric) {
|
||||
for(let j=0; j<rightState.outgoingTransitions.length; j++) {
|
||||
const startingState = this.generateBinaryProductState(leftState, rightState, generatedProductStates);
|
||||
const endingState = this.generateBinaryProductState(leftState, rightState.outgoingTransitions[j].endingState, generatedProductStates);
|
||||
|
||||
if(startingState != undefined && endingState != undefined) {
|
||||
this.generateBinaryProductTransition(startingState, endingState, rightState.outgoingTransitions[j], generatedProductTransitions, false);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
return new ProductGeneratorResult(generatedProductStates, generatedProductTransitions);
|
||||
}
|
||||
|
||||
protected getTransitionConditions(transition: Transition<any>, leftSystem: boolean) {
|
||||
const templateElement = this.determineTemplateElement(leftSystem)!;
|
||||
if(transition instanceof SimpleTemplateTransition && transition.conditionMap.has(templateElement)) {
|
||||
|
@ -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 {
|
||||
if(this.symmetric) {
|
||||
const symmetricGenerator = new SymmetricProductTemplateGenerator(this, templateElement);
|
||||
symmetricGenerator.generateFromChildsystems()
|
||||
} else {
|
||||
const productTemplateGenerator = new TemplateProductSystemGenerator(this, templateElement);
|
||||
productTemplateGenerator.generateFromChildsystems()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user