product-template-systems #33
@ -157,8 +157,13 @@ export class AppComponent implements OnInit{
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    //const createdGamesystem = this.gameModel!.createGamesystem("New Gamesystem", parentGamesystemName, templateType);
 | 
			
		||||
    const createdGamesystem = this.gameModel!.createSimpleGamesystem("New Gamesystem", templateType)
 | 
			
		||||
    let createdGamesystem;
 | 
			
		||||
    if(parentGamesystemName == undefined) {
 | 
			
		||||
      createdGamesystem = this.gameModel?.createSimpleGamesystem("New Gamesystem", templateType);
 | 
			
		||||
    } else {
 | 
			
		||||
      createdGamesystem = this.gameModel!.createSimpleGamesystemWithParent("New Gamesystem", parentGamesystemName, templateType)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if(createdGamesystem != undefined) {
 | 
			
		||||
      this.gamesystemOverview!.refresh();
 | 
			
		||||
      this.editor?.openGameModelComponent(createdGamesystem);
 | 
			
		||||
 | 
			
		||||
@ -8,6 +8,8 @@ import {Character} from "./characters/Character";
 | 
			
		||||
import {ModelComponentType} from "./ModelComponentType";
 | 
			
		||||
import {TemplateType} from "./templates/TemplateType";
 | 
			
		||||
import {SimpleTemplateGamesystem} from "./templates/simpleGamesystem/SimpleTemplateGamesystem";
 | 
			
		||||
import {ProductTemplateSystem} from "./templates/productGamesystem/ProductTemplateSystem";
 | 
			
		||||
import {ProductTemplateCreator} from "./templates/productGamesystem/ProductTemplateCreator";
 | 
			
		||||
 | 
			
		||||
export class GameModel {
 | 
			
		||||
  gameModelName: string
 | 
			
		||||
@ -47,7 +49,7 @@ export class GameModel {
 | 
			
		||||
    return undefined;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  createSimpleGamesystem(gamesystemName: string, templateType: TemplateType | undefined) {
 | 
			
		||||
  createSimpleGamesystem(gamesystemName: string, templateType: TemplateType | undefined, pushToTop: boolean = true) {
 | 
			
		||||
    if(gamesystemName != undefined && this.findGamesystem(gamesystemName) == undefined) {
 | 
			
		||||
      let simpleGamesystem: SimpleGamesystem
 | 
			
		||||
 | 
			
		||||
@ -57,12 +59,48 @@ export class GameModel {
 | 
			
		||||
        simpleGamesystem = new SimpleTemplateGamesystem(gamesystemName, "", templateType)
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if(pushToTop) {
 | 
			
		||||
        this.gamesystems.push(simpleGamesystem)
 | 
			
		||||
      }
 | 
			
		||||
      return simpleGamesystem;
 | 
			
		||||
    }
 | 
			
		||||
    return undefined;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  createSimpleGamesystemWithParent(gamesystemName: string, parentGamesystemName: string, templateType: TemplateType | undefined) {
 | 
			
		||||
    const simpleGamesystem = this.createSimpleGamesystem(gamesystemName, templateType, false)!;
 | 
			
		||||
 | 
			
		||||
    const parentGamesystem = this.findGamesystem(parentGamesystemName)
 | 
			
		||||
    if(parentGamesystem == undefined) {return undefined}
 | 
			
		||||
 | 
			
		||||
    let parentProductGamesystem: ProductGamesystem;
 | 
			
		||||
    if(parentGamesystem instanceof SimpleTemplateGamesystem) {
 | 
			
		||||
      parentProductGamesystem = ProductTemplateCreator.constructTemplateFromSimpleGamesystem(parentGamesystem,  this, templateType!)
 | 
			
		||||
    } else if(parentGamesystem instanceof SimpleGamesystem) {
 | 
			
		||||
      if(simpleGamesystem instanceof SimpleTemplateGamesystem) {
 | 
			
		||||
        parentProductGamesystem = ProductTemplateCreator.constructTemplateFromSimpleGamesystem(parentGamesystem, this, templateType!)
 | 
			
		||||
      } else {
 | 
			
		||||
        console.log("Test")
 | 
			
		||||
        parentProductGamesystem = ProductGamesystem.constructFromSimpleGamesystem(parentGamesystem, this);
 | 
			
		||||
        console.log(this.gamesystems)
 | 
			
		||||
      }
 | 
			
		||||
    } else {
 | 
			
		||||
      if(simpleGamesystem instanceof SimpleTemplateGamesystem) {
 | 
			
		||||
        parentProductGamesystem = ProductTemplateCreator.convertProductToTemplate(parentGamesystem as ProductGamesystem, this, templateType!)
 | 
			
		||||
      } else {
 | 
			
		||||
        parentProductGamesystem = parentGamesystem as ProductGamesystem
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    parentProductGamesystem.addChildGamesystem(simpleGamesystem);
 | 
			
		||||
    simpleGamesystem.parentGamesystem = parentProductGamesystem;
 | 
			
		||||
 | 
			
		||||
    return simpleGamesystem;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  createGamesystem(gamesystemName: string, parentGamesystemName: string | undefined, templateType: TemplateType | undefined) {
 | 
			
		||||
    if(gamesystemName != undefined && this.findGamesystem(gamesystemName) == undefined) {
 | 
			
		||||
      const simpleGamesystem = new SimpleGamesystem(gamesystemName, "");
 | 
			
		||||
@ -142,6 +180,8 @@ export class GameModel {
 | 
			
		||||
 | 
			
		||||
      if(currentGamesystem instanceof SimpleTemplateGamesystem  && currentGamesystem.templateType === templateType) {
 | 
			
		||||
        requestedTemplates.push(currentGamesystem)
 | 
			
		||||
      } else if(currentGamesystem instanceof ProductTemplateSystem && currentGamesystem.templateType === templateType) {
 | 
			
		||||
        requestedTemplates.push(currentGamesystem)
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if(currentGamesystem instanceof ProductGamesystem) {
 | 
			
		||||
 | 
			
		||||
@ -9,6 +9,8 @@ import {GameModel} from "../GameModel";
 | 
			
		||||
import {ScriptAccountCondition} from "./conditions/ScriptAccountCondition";
 | 
			
		||||
import {ScriptAccountAction} from "./actions/ScriptAccountAction";
 | 
			
		||||
import {ProductSystemGenerator} from "./productSystemGenerator/ProductSystemGenerator";
 | 
			
		||||
import {TemplateType} from "../templates/TemplateType";
 | 
			
		||||
import {ProductTemplateSystem} from "../templates/productGamesystem/ProductTemplateSystem";
 | 
			
		||||
 | 
			
		||||
export class ProductGamesystem extends Gamesystem<ProductState, ProductTransition> {
 | 
			
		||||
 | 
			
		||||
@ -16,25 +18,28 @@ export class ProductGamesystem extends Gamesystem<ProductState, ProductTransitio
 | 
			
		||||
 | 
			
		||||
  static constructFromSimpleGamesystem(simpleGamesystem: SimpleGamesystem, gameModel: GameModel) {
 | 
			
		||||
    const productGamesystem = new ProductGamesystem(simpleGamesystem.componentName, simpleGamesystem.componentDescription);
 | 
			
		||||
    productGamesystem.constructHierarchyFromSimpleGamesystem(simpleGamesystem, gameModel);
 | 
			
		||||
    return productGamesystem;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  constructHierarchyFromSimpleGamesystem(simpleGamesystem: SimpleGamesystem, gameModel: GameModel) {
 | 
			
		||||
    const parentGamesystem = simpleGamesystem.parentGamesystem;
 | 
			
		||||
 | 
			
		||||
    if(simpleGamesystem.states.length > 0) {
 | 
			
		||||
      simpleGamesystem.componentName += "(Child)";
 | 
			
		||||
      productGamesystem.addChildGamesystem(simpleGamesystem);
 | 
			
		||||
      simpleGamesystem.parentGamesystem = productGamesystem
 | 
			
		||||
      this.addChildGamesystem(simpleGamesystem);
 | 
			
		||||
      simpleGamesystem.parentGamesystem = this
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    if(parentGamesystem != undefined) {
 | 
			
		||||
      parentGamesystem.removeChildGamesystem(simpleGamesystem);
 | 
			
		||||
      parentGamesystem.addChildGamesystem(productGamesystem);
 | 
			
		||||
      productGamesystem.parentGamesystem = parentGamesystem
 | 
			
		||||
      parentGamesystem.addChildGamesystem(this);
 | 
			
		||||
      this.parentGamesystem = parentGamesystem
 | 
			
		||||
    } else {
 | 
			
		||||
      gameModel.removeGamesystem(simpleGamesystem);
 | 
			
		||||
      gameModel.addGamesystem(productGamesystem);
 | 
			
		||||
      gameModel.addGamesystem(this);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return productGamesystem;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  createState(innerStates: State<any>[]): ProductState | undefined {
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,30 @@
 | 
			
		||||
import {SimpleGamesystem} from "../../gamesystems/SimpleGamesystem";
 | 
			
		||||
import {GameModel} from "../../GameModel";
 | 
			
		||||
import {TemplateType} from "../TemplateType";
 | 
			
		||||
import {ProductTemplateSystem} from "./ProductTemplateSystem";
 | 
			
		||||
import {ProductGamesystem} from "../../gamesystems/ProductGamesystem";
 | 
			
		||||
 | 
			
		||||
export class ProductTemplateCreator {
 | 
			
		||||
  static constructTemplateFromSimpleGamesystem(simpleGamesystem: SimpleGamesystem, gameModel: GameModel, templateType: TemplateType) {
 | 
			
		||||
    const productGamesystem = new ProductTemplateSystem(simpleGamesystem.componentName, simpleGamesystem.componentDescription, templateType);
 | 
			
		||||
    productGamesystem.constructHierarchyFromSimpleGamesystem(simpleGamesystem, gameModel);
 | 
			
		||||
    return productGamesystem;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static convertProductToTemplate(productGamesystem: ProductGamesystem, gameModel: GameModel, templateType: TemplateType) {
 | 
			
		||||
    const productTemplate = new ProductTemplateSystem(productGamesystem.componentName, productGamesystem.componentDescription, templateType);
 | 
			
		||||
    productTemplate.states = productGamesystem.states
 | 
			
		||||
    productTemplate.transitions = productGamesystem.transitions
 | 
			
		||||
    productTemplate.innerGamesystems = productGamesystem.innerGamesystems;
 | 
			
		||||
    productGamesystem.innerGamesystems.forEach(innerGamesystem => innerGamesystem.parentGamesystem = productTemplate);
 | 
			
		||||
 | 
			
		||||
    if(productGamesystem.parentGamesystem == undefined) {
 | 
			
		||||
      gameModel.removeGamesystem(productGamesystem)
 | 
			
		||||
      gameModel.gamesystems.push(productTemplate)
 | 
			
		||||
    } else {
 | 
			
		||||
      productTemplate.parentGamesystem = productGamesystem.parentGamesystem;
 | 
			
		||||
      productGamesystem.parentGamesystem.addChildGamesystem(productTemplate);
 | 
			
		||||
    }
 | 
			
		||||
    return productTemplate;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -3,15 +3,24 @@ import {TemplateGamesystem} from "../TemplateGamesystem";
 | 
			
		||||
import {TemplateElement} from "../TemplateElement";
 | 
			
		||||
import {ProductState} from "../../gamesystems/states/ProductState";
 | 
			
		||||
import {ProductTransition} from "../../gamesystems/transitions/ProductTransition";
 | 
			
		||||
import {SimpleGamesystem} from "../../gamesystems/SimpleGamesystem";
 | 
			
		||||
import {GameModel} from "../../GameModel";
 | 
			
		||||
import {TemplateType} from "../TemplateType";
 | 
			
		||||
 | 
			
		||||
export class ProductTemplateSystem extends ProductGamesystem implements TemplateGamesystem{
 | 
			
		||||
 | 
			
		||||
  stateMap: Map<TemplateElement, ProductState[]> = new Map();
 | 
			
		||||
  transitionMap: Map<TemplateElement, ProductTransition[]> = new Map<TemplateElement, ProductTransition[]>()
 | 
			
		||||
  templateType: TemplateType
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  constructor(gamesystemName: string, gamesystemDescription: string, templateType: TemplateType) {
 | 
			
		||||
    super(gamesystemName, gamesystemDescription);
 | 
			
		||||
    this.templateType = templateType;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  addTemplateElement(templateElement: TemplateElement): void {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user