issue-5-product-gamesystems #10
@ -23,5 +23,12 @@ test.describe('Test Create ProductStates', () => {
|
||||
expect(gamesystem.transitions.length).toEqual(5);
|
||||
})
|
||||
|
||||
test("Test simple triple Product State", async () => {
|
||||
const gamesystem = ProductSystemGenerationTrainer.givenTrippleProductSystem();
|
||||
gamesystem.generateFromChildsystems();
|
||||
|
||||
expect(gamesystem.states.length).toEqual(8);
|
||||
expect(gamesystem.transitions.length).toEqual(19)
|
||||
})
|
||||
|
||||
});
|
||||
|
@ -6,12 +6,16 @@ export class ProductSystemGenerationTrainer {
|
||||
static PRODUCTGAMESYSTEMNAME = "ProductGamesystem";
|
||||
static CHILDGAMESYSTEMNAME_LEFT = "Left Child System";
|
||||
static CHILDGAMESYSTEMNAME_RIGHT = "Right Child System";
|
||||
static CHILDGAMESYSTEMNAME_MIDDLE = "Middle Child System";
|
||||
|
||||
static LEFTCHILDSYSTEM_A_NODE_NAME = "A";
|
||||
static LEFTCHILDSYSTEM_B_NODE_NAME = "B";
|
||||
|
||||
static RIGHTCHILDSYSTEM_A_NODE_NAME = "1";
|
||||
static RIGHTCHILDSYSTEM_B_NODE_NAME = "2";
|
||||
|
||||
static MIDDLECHILDSYSTEM_A_NODE_NAME = "Sun";
|
||||
static MIDDLECHILDSYSTEM_B_NODE_NAME = "Rain";
|
||||
static givenSimplestProductSystem() {
|
||||
const productsystem = new ProductGamesystem(ProductSystemGenerationTrainer.PRODUCTGAMESYSTEMNAME);
|
||||
const left_childsystem = new SimpleGamesystem(ProductSystemGenerationTrainer.CHILDGAMESYSTEMNAME_LEFT);
|
||||
@ -26,4 +30,14 @@ export class ProductSystemGenerationTrainer {
|
||||
|
||||
return productsystem;
|
||||
}
|
||||
|
||||
static givenTrippleProductSystem() {
|
||||
const gamesystem = this.givenSimplestProductSystem();
|
||||
const middle_childsystem = new SimpleGamesystem(this.CHILDGAMESYSTEMNAME_MIDDLE);
|
||||
|
||||
middle_childsystem.createTransition(middle_childsystem.createState(ProductSystemGenerationTrainer.MIDDLECHILDSYSTEM_A_NODE_NAME, "")!,
|
||||
middle_childsystem.createState(ProductSystemGenerationTrainer.MIDDLECHILDSYSTEM_B_NODE_NAME, "")!);
|
||||
gamesystem.addChildGamesystem(middle_childsystem);
|
||||
return gamesystem;
|
||||
}
|
||||
}
|
||||
|
@ -65,18 +65,21 @@ export class ProductGamesystem extends Gamesystem<ProductState, ProductTransitio
|
||||
|
||||
generateFromChildsystems() {
|
||||
//Assume that childsystems that are productsystems are already generated
|
||||
let gamesystem: ProductGamesystem = ProductGamesystem.generateFromChildsystems(this.innerGamesystems[0], this.innerGamesystems[1], false);
|
||||
const integratedSystems: Gamesystem<any, any>[] = [this.innerGamesystems[0], this.innerGamesystems[1]];
|
||||
let gamesystem: ProductGamesystem = ProductGamesystem.generateFromChildsystems(this.innerGamesystems[0], this.innerGamesystems[1], false, integratedSystems);
|
||||
|
||||
for(let i=2; i<this.innerGamesystems.length; i++) {
|
||||
gamesystem = ProductGamesystem.generateFromChildsystems(gamesystem, this.innerGamesystems[i], true);
|
||||
integratedSystems.push(this.innerGamesystems[i]);
|
||||
gamesystem = ProductGamesystem.generateFromChildsystems(gamesystem, this.innerGamesystems[i], true, integratedSystems);
|
||||
}
|
||||
this.states = gamesystem.states;
|
||||
this.transitions = gamesystem.transitions;
|
||||
}
|
||||
|
||||
static generateFromChildsystems(leftSystem: Gamesystem<any, any>, rightSystem: Gamesystem<any, any>, left_temp: boolean) {
|
||||
static generateFromChildsystems(leftSystem: Gamesystem<any, any>, rightSystem: Gamesystem<any, any>, left_temp: boolean, integratedSystems: Gamesystem<any, any>[]) {
|
||||
const productGamesystem = new ProductGamesystem("Temporary Gamesystem");
|
||||
productGamesystem.addChildGamesystem(leftSystem);
|
||||
productGamesystem.addChildGamesystem(rightSystem);
|
||||
integratedSystems.forEach(integratedSystem => productGamesystem.addChildGamesystem(integratedSystem));
|
||||
|
||||
leftSystem.states.forEach(leftState => {
|
||||
rightSystem.states.forEach(rightState => {
|
||||
for(let i=0; i<leftState.outgoingTransitions.length; i++) {
|
||||
@ -106,7 +109,6 @@ export class ProductGamesystem extends Gamesystem<ProductState, ProductTransitio
|
||||
const transition = productGamesystem.createTransition(startingState, endingState);
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
})
|
||||
return productGamesystem;
|
||||
|
Loading…
Reference in New Issue
Block a user