Consider state conditions in product transition generation
All checks were successful
E2E Testing / test (push) Successful in 1m29s
All checks were successful
E2E Testing / test (push) Successful in 1m29s
This commit is contained in:
parent
b488049c28
commit
777cf9bc1d
@ -7,6 +7,7 @@ import {SimpleState} from "./states/SimpleState";
|
||||
import {SimpleGamesystem} from "./SimpleGamesystem";
|
||||
import {GameModel} from "../GameModel";
|
||||
import {ProductStateTrainer} from "../../../../e2e/game-model/gamesystems/productGamesystems/ProductStateTrainer";
|
||||
import {ScriptAccountCondition} from "./conditions/ScriptAccountCondition";
|
||||
|
||||
export class ProductGamesystem extends Gamesystem<ProductState, ProductTransition> {
|
||||
|
||||
@ -99,20 +100,34 @@ export class ProductGamesystem extends Gamesystem<ProductState, ProductTransitio
|
||||
for(let i=0; i<leftState.outgoingTransitions.length; i++) {
|
||||
for(let j=0; j<rightState.outgoingTransitions.length; j++) {
|
||||
const startingState = productGamesystem.generateBinaryProductState(leftState, rightState, left_temp);
|
||||
const endingState_right = productGamesystem.generateBinaryProductState(leftState, rightState.outgoingTransitions[j].endingState, left_temp);
|
||||
const transition_right = productGamesystem.createTransition(startingState, endingState_right)!;
|
||||
|
||||
const endingState_left = productGamesystem.generateBinaryProductState(leftState.outgoingTransitions[i].endingState, rightState, left_temp);
|
||||
const transition_left = productGamesystem.createTransition(startingState, endingState_left)!;
|
||||
if(startingState != undefined) {
|
||||
const endingState_right = productGamesystem.generateBinaryProductState(leftState, rightState.outgoingTransitions[j].endingState, left_temp);
|
||||
if(endingState_right != undefined) {
|
||||
const transition_right = productGamesystem.createTransition(startingState, endingState_right)!;
|
||||
}
|
||||
|
||||
const endingState_left = productGamesystem.generateBinaryProductState(leftState.outgoingTransitions[i].endingState, rightState, left_temp);
|
||||
if(endingState_left != undefined) {
|
||||
const transition_left = productGamesystem.createTransition(startingState, endingState_left)!;
|
||||
}
|
||||
|
||||
|
||||
const endingState_left_right = productGamesystem.generateBinaryProductState(leftState.outgoingTransitions[i].endingState, rightState.outgoingTransitions[j].endingState, left_temp);
|
||||
if(endingState_left_right != undefined) {
|
||||
const transition_left_right = productGamesystem.createTransition(startingState, endingState_left_right)!;
|
||||
}
|
||||
}
|
||||
|
||||
const endingState_left_right = productGamesystem.generateBinaryProductState(leftState.outgoingTransitions[i].endingState, rightState.outgoingTransitions[j].endingState, left_temp);
|
||||
const transition_left_right = productGamesystem.createTransition(startingState, endingState_left_right)!;
|
||||
}
|
||||
|
||||
if(rightState.outgoingTransitions.length == 0) {
|
||||
const startingState = productGamesystem.generateBinaryProductState(leftState, rightState, left_temp);
|
||||
const endingState = productGamesystem.generateBinaryProductState(leftState.outgoingTransitions[i].endingState, rightState, left_temp);
|
||||
const transition = productGamesystem.createTransition(startingState, endingState);
|
||||
|
||||
if(startingState != undefined && endingState != undefined) {
|
||||
const transition = productGamesystem.createTransition(startingState, endingState);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -120,11 +135,17 @@ export class ProductGamesystem extends Gamesystem<ProductState, ProductTransitio
|
||||
for(let j=0; j<rightState.outgoingTransitions.length; j++) {
|
||||
const startingState = productGamesystem.generateBinaryProductState(leftState, rightState, left_temp);
|
||||
const endingState = productGamesystem.generateBinaryProductState(leftState, rightState.outgoingTransitions[j].endingState, left_temp);
|
||||
const transition = productGamesystem.createTransition(startingState, endingState);
|
||||
|
||||
if(startingState != undefined && endingState != undefined) {
|
||||
const transition = productGamesystem.createTransition(startingState, endingState);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
return productGamesystem;
|
||||
}
|
||||
|
||||
@ -146,6 +167,17 @@ export class ProductGamesystem extends Gamesystem<ProductState, ProductTransitio
|
||||
|
||||
let productInitial = true;
|
||||
binary_productState.innerStates.forEach(innerState => productInitial = productInitial && innerState.initial)
|
||||
binary_productState!.initial = productInitial
|
||||
|
||||
const combinedStateConditions: ScriptAccountCondition[] = leftInnerState.conditions.concat(rightInnerState.conditions)
|
||||
const conditionsContradicting = false
|
||||
for(let i=0; i<combinedStateConditions.length; i++) {
|
||||
for(let j=0; j<combinedStateConditions.length; j++) {
|
||||
if(combinedStateConditions[i].isContradicting(combinedStateConditions[j])) {
|
||||
return undefined
|
||||
}
|
||||
}
|
||||
}
|
||||
return binary_productState!;
|
||||
}
|
||||
|
||||
|
80
testModel/gamesystems/Weathersystem/Season.json
Normal file
80
testModel/gamesystems/Weathersystem/Season.json
Normal file
@ -0,0 +1,80 @@
|
||||
{
|
||||
"componentName": "Season",
|
||||
"componentDescription": "Ein simples Gamesystem zur Modellierung verschiedener Jahreszeiten und deren Übergänge",
|
||||
"states": [
|
||||
{
|
||||
"initial": true,
|
||||
"conditions": [
|
||||
{
|
||||
"scriptAccount": "Temperature",
|
||||
"minValue": 0,
|
||||
"maxValue": "10"
|
||||
}
|
||||
],
|
||||
"stateLabel": "Frühling",
|
||||
"stateDescription": ""
|
||||
},
|
||||
{
|
||||
"initial": false,
|
||||
"conditions": [
|
||||
{
|
||||
"scriptAccount": "Temperature",
|
||||
"minValue": "10",
|
||||
"maxValue": "30"
|
||||
}
|
||||
],
|
||||
"stateLabel": "Sommer",
|
||||
"stateDescription": ""
|
||||
},
|
||||
{
|
||||
"initial": false,
|
||||
"conditions": [
|
||||
{
|
||||
"scriptAccount": "Temperature",
|
||||
"minValue": "10",
|
||||
"maxValue": "20"
|
||||
}
|
||||
],
|
||||
"stateLabel": "Herbst",
|
||||
"stateDescription": ""
|
||||
},
|
||||
{
|
||||
"initial": false,
|
||||
"conditions": [
|
||||
{
|
||||
"scriptAccount": "Temperature",
|
||||
"minValue": "-10",
|
||||
"maxValue": "10"
|
||||
}
|
||||
],
|
||||
"stateLabel": "Winter",
|
||||
"stateDescription": ""
|
||||
}
|
||||
],
|
||||
"transitions": [
|
||||
{
|
||||
"scriptAccountActions": [],
|
||||
"scriptAccountConditions": [],
|
||||
"startingState": "Frühling",
|
||||
"endingState": "Sommer"
|
||||
},
|
||||
{
|
||||
"scriptAccountActions": [],
|
||||
"scriptAccountConditions": [],
|
||||
"startingState": "Sommer",
|
||||
"endingState": "Herbst"
|
||||
},
|
||||
{
|
||||
"scriptAccountActions": [],
|
||||
"scriptAccountConditions": [],
|
||||
"startingState": "Herbst",
|
||||
"endingState": "Winter"
|
||||
},
|
||||
{
|
||||
"scriptAccountActions": [],
|
||||
"scriptAccountConditions": [],
|
||||
"startingState": "Winter",
|
||||
"endingState": "Frühling"
|
||||
}
|
||||
]
|
||||
}
|
@ -3,7 +3,7 @@
|
||||
"componentDescription": "A small Gamesystem about local weather events",
|
||||
"states": [
|
||||
{
|
||||
"initial": false,
|
||||
"initial": true,
|
||||
"conditions": [],
|
||||
"stateLabel": "Sonne",
|
||||
"stateDescription": ""
|
||||
|
Loading…
Reference in New Issue
Block a user