template-systems #41
@ -46,11 +46,15 @@ export class Character extends ModelComponent implements TemplateElement {
 | 
			
		||||
      if(gamesystem instanceof SimpleTemplateGamesystem) {
 | 
			
		||||
        this.characterRelationGamesystems.push(gamesystem);
 | 
			
		||||
        gamesystem.addTemplateElement(this);
 | 
			
		||||
        console.log("Should have been added")
 | 
			
		||||
        console.log(this.characterRelationGamesystems)
 | 
			
		||||
        this.characterRelations.forEach(characterRelation => {
 | 
			
		||||
          characterRelation.addCharacterRelationSystem(gamesystem)
 | 
			
		||||
        })
 | 
			
		||||
      } else if(gamesystem instanceof ProductTemplateSystem) {
 | 
			
		||||
        this.characterRelationGamesystems.push(gamesystem);
 | 
			
		||||
        gamesystem.addTemplateElement(this);
 | 
			
		||||
        this.characterRelations.forEach(characterRelation => {
 | 
			
		||||
          characterRelation.addCharacterRelationSystem(gamesystem)
 | 
			
		||||
        })
 | 
			
		||||
 | 
			
		||||
        if(!recursiveCall) {
 | 
			
		||||
          gamesystem.innerGamesystems.forEach(innerGamesystem => this.addAsymetricCharacterRelationGamesystem(innerGamesystem, true))
 | 
			
		||||
 | 
			
		||||
@ -1,14 +1,32 @@
 | 
			
		||||
import {TemplateElement} from "../templates/TemplateElement";
 | 
			
		||||
import {Character} from "./Character";
 | 
			
		||||
import {ProductTemplateSystem} from "../templates/productGamesystem/ProductTemplateSystem";
 | 
			
		||||
import {Gamesystem} from "../gamesystems/Gamesystem";
 | 
			
		||||
import {SimpleTemplateGamesystem} from "../templates/simpleGamesystem/SimpleTemplateGamesystem";
 | 
			
		||||
import {TemplateType} from "../templates/TemplateType";
 | 
			
		||||
 | 
			
		||||
export class CharacterRelation implements TemplateElement{
 | 
			
		||||
 | 
			
		||||
  firstCharacter: Character
 | 
			
		||||
  secondCharacter: Character
 | 
			
		||||
 | 
			
		||||
  characterRelationGamesystems: ProductTemplateSystem[] = []
 | 
			
		||||
 | 
			
		||||
  constructor(firstCharacter: Character, secondCharacter: Character) {
 | 
			
		||||
    this.firstCharacter = firstCharacter;
 | 
			
		||||
    this.secondCharacter = secondCharacter;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  addCharacterRelationSystem(gamesystem: Gamesystem<any, any>) {
 | 
			
		||||
    if((gamesystem instanceof SimpleTemplateGamesystem || gamesystem instanceof ProductTemplateSystem) && this.isGamesystemCharacterRelationSpecific(gamesystem.componentName)) {
 | 
			
		||||
       const templateGamesystem = new ProductTemplateSystem(gamesystem.componentName, gamesystem.componentDescription, TemplateType.CHARACTER_RELATION);
 | 
			
		||||
       templateGamesystem.addChildGamesystem(gamesystem);
 | 
			
		||||
       templateGamesystem.addChildGamesystem(gamesystem);
 | 
			
		||||
       this.characterRelationGamesystems.push(templateGamesystem);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private isGamesystemCharacterRelationSpecific(gamesystemName: string) {
 | 
			
		||||
    return this.characterRelationGamesystems.find(gamesystem => gamesystem.componentName === gamesystemName) != undefined
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -59,12 +59,12 @@ export class ProductSystemGenerator {
 | 
			
		||||
            if(startingState != undefined) {
 | 
			
		||||
              const endingState_right = this.generateBinaryProductState(leftState, rightState.outgoingTransitions[j].endingState, generatedProductStates);
 | 
			
		||||
              if(endingState_right != undefined) {
 | 
			
		||||
                this.generateBinaryProductTransition(startingState, endingState_right, rightState.outgoingTransitions[j], generatedProductTransitions);
 | 
			
		||||
                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)
 | 
			
		||||
                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);
 | 
			
		||||
@ -79,7 +79,7 @@ export class ProductSystemGenerator {
 | 
			
		||||
            const endingState = this.generateBinaryProductState(leftState.outgoingTransitions[i].endingState, rightState, generatedProductStates);
 | 
			
		||||
 | 
			
		||||
            if(startingState != undefined && endingState != undefined) {
 | 
			
		||||
              this.generateBinaryProductTransition(startingState, endingState, leftState.outgoingTransitions[i], generatedProductTransitions)
 | 
			
		||||
              this.generateBinaryProductTransition(startingState, endingState, leftState.outgoingTransitions[i], generatedProductTransitions, true)
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
@ -91,7 +91,7 @@ export class ProductSystemGenerator {
 | 
			
		||||
            const endingState = this.generateBinaryProductState(leftState, rightState.outgoingTransitions[j].endingState, generatedProductStates);
 | 
			
		||||
 | 
			
		||||
            if(startingState != undefined && endingState != undefined) {
 | 
			
		||||
              this.generateBinaryProductTransition(startingState, endingState, rightState.outgoingTransitions[j], generatedProductTransitions);
 | 
			
		||||
              this.generateBinaryProductTransition(startingState, endingState, rightState.outgoingTransitions[j], generatedProductTransitions, false);
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -108,10 +108,10 @@ export class ProductSystemGenerator {
 | 
			
		||||
    this.productGamesystem.transitions = generationResult.transitions;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  protected generateBinaryProductTransition(startingState: ProductState, endingState: ProductState, usedTransition: Transition<any>, generatedTransitions: ProductTransition[]) {
 | 
			
		||||
  protected generateBinaryProductTransition(startingState: ProductState, endingState: ProductState, usedTransition: Transition<any>, generatedTransitions: ProductTransition[], leftSystem: boolean) {
 | 
			
		||||
    const transition = new ProductTransition(startingState, endingState);
 | 
			
		||||
    transition.scriptAccountActions = [... this.getTransitionActions(usedTransition)];
 | 
			
		||||
    transition.scriptAccountConditions = [... this.getTransitionConditions(usedTransition)];
 | 
			
		||||
    transition.scriptAccountActions = [... this.getTransitionActions(usedTransition, leftSystem)];
 | 
			
		||||
    transition.scriptAccountConditions = [... this.getTransitionConditions(usedTransition, leftSystem)];
 | 
			
		||||
 | 
			
		||||
    if(generatedTransitions.find(generatedTransition => generatedTransition.startingState.equals(startingState) && generatedTransition.endingState.equals(endingState)) == undefined) {
 | 
			
		||||
      generatedTransitions.push(transition)
 | 
			
		||||
@ -119,13 +119,13 @@ export class ProductSystemGenerator {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  protected generateBinaryProductTransitionMulti(startingState: ProductState, endingState: ProductState, leftTransition: Transition<any>, rightTransition: Transition<any>, generatedTransitions: ProductTransition[]) {
 | 
			
		||||
    const leftConditions = this.getTransitionConditions(leftTransition)
 | 
			
		||||
    const rightConditions = this.getTransitionConditions(rightTransition)
 | 
			
		||||
    const leftConditions = this.getTransitionConditions(leftTransition, true)
 | 
			
		||||
    const rightConditions = this.getTransitionConditions(rightTransition, false)
 | 
			
		||||
 | 
			
		||||
    if(!this.contradictCombinedConditions(leftConditions, rightConditions)) {
 | 
			
		||||
      const transition = new ProductTransition(startingState, endingState)
 | 
			
		||||
      transition.scriptAccountActions = this.generateCombinedActions(this.getTransitionActions(leftTransition), this.getTransitionActions(rightTransition));
 | 
			
		||||
      transition.scriptAccountConditions = this.generateCombinedConditions(this.getTransitionConditions(leftTransition), this.getTransitionConditions(rightTransition));
 | 
			
		||||
      transition.scriptAccountActions = this.generateCombinedActions(this.getTransitionActions(leftTransition, true), this.getTransitionActions(rightTransition, false));
 | 
			
		||||
      transition.scriptAccountConditions = this.generateCombinedConditions(this.getTransitionConditions(leftTransition, true), this.getTransitionConditions(rightTransition, false));
 | 
			
		||||
 | 
			
		||||
      if(generatedTransitions.find(generatedTransition => generatedTransition.startingState.equals(startingState) && generatedTransition.endingState.equals(endingState)) == undefined) {
 | 
			
		||||
        generatedTransitions.push(transition)
 | 
			
		||||
@ -134,8 +134,8 @@ export class ProductSystemGenerator {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  protected generateBinaryProductState(leftState: State<any>, rightState: State<any>, generatedStates: ProductState[]): ProductState | undefined {
 | 
			
		||||
    const leftConditions = this.getStateConditions(leftState)
 | 
			
		||||
    const rightConditions = this.getStateConditions(rightState)
 | 
			
		||||
    const leftConditions = this.getStateConditions(leftState, true)
 | 
			
		||||
    const rightConditions = this.getStateConditions(rightState, false)
 | 
			
		||||
 | 
			
		||||
    const combinedStateConditions: ScriptAccountCondition[] = leftConditions.concat(rightConditions)
 | 
			
		||||
    for(let i=0; i<combinedStateConditions.length; i++) {
 | 
			
		||||
@ -231,15 +231,15 @@ export class ProductSystemGenerator {
 | 
			
		||||
    return false;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  protected getTransitionConditions(transition: Transition<any>) {
 | 
			
		||||
  protected getTransitionConditions(transition: Transition<any>, leftSystem: boolean) {
 | 
			
		||||
    return transition.scriptAccountConditions;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  protected getTransitionActions(transition: Transition<any>) {
 | 
			
		||||
  protected getTransitionActions(transition: Transition<any>, leftSystem: boolean) {
 | 
			
		||||
    return transition.scriptAccountActions;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  protected getStateConditions(state: State<any>) {
 | 
			
		||||
  protected getStateConditions(state: State<any>, leftSystem: boolean) {
 | 
			
		||||
    return state.conditions;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -10,6 +10,8 @@ import {SimpleTemplateTransition} from "../../templates/simpleGamesystem/SimpleT
 | 
			
		||||
import {state, transition} from "@angular/animations";
 | 
			
		||||
import {ScriptAccountCondition} from "../conditions/ScriptAccountCondition";
 | 
			
		||||
import {SimpleTemplateState} from "../../templates/simpleGamesystem/SimpleTemplateState";
 | 
			
		||||
import {Character} from "../../characters/Character";
 | 
			
		||||
import {CharacterRelation} from "../../characters/CharacterRelation";
 | 
			
		||||
 | 
			
		||||
export class TemplateProductSystemGenerator extends ProductSystemGenerator {
 | 
			
		||||
 | 
			
		||||
@ -27,16 +29,18 @@ export class TemplateProductSystemGenerator extends ProductSystemGenerator {
 | 
			
		||||
    productTemplateSystem.stateMap.set(this.templateElement, generationResult.states)
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  protected getTransitionConditions(transition: Transition<any>) {
 | 
			
		||||
    if(transition instanceof SimpleTemplateTransition) {
 | 
			
		||||
      return transition.conditionMap.get(this.templateElement)!
 | 
			
		||||
    } else {
 | 
			
		||||
      return transition.scriptAccountConditions;
 | 
			
		||||
  protected getTransitionConditions(transition: Transition<any>, leftSystem: boolean) {
 | 
			
		||||
    const templateElement = this.determineTemplateElement(leftSystem)!;
 | 
			
		||||
    if(transition instanceof SimpleTemplateTransition && transition.conditionMap.has(templateElement)) {
 | 
			
		||||
      return transition.conditionMap.get(templateElement)!
 | 
			
		||||
    }
 | 
			
		||||
    return transition.scriptAccountConditions;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  protected getTransitionActions(transition: Transition<any>) {
 | 
			
		||||
    if(transition instanceof SimpleTemplateTransition) {
 | 
			
		||||
  protected getTransitionActions(transition: Transition<any>, leftSystem: boolean) {
 | 
			
		||||
    const templateElement = this.determineTemplateElement(leftSystem)!;
 | 
			
		||||
 | 
			
		||||
    if(transition instanceof SimpleTemplateTransition && transition.actionMap.has(templateElement)) {
 | 
			
		||||
      return transition.actionMap.get(this.templateElement)!
 | 
			
		||||
    } else {
 | 
			
		||||
      return transition.scriptAccountActions;
 | 
			
		||||
@ -44,11 +48,20 @@ export class TemplateProductSystemGenerator extends ProductSystemGenerator {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  protected getStateConditions(state: State<any>): ScriptAccountCondition[] {
 | 
			
		||||
    if(state instanceof  SimpleTemplateState) {
 | 
			
		||||
  protected getStateConditions(state: State<any>, leftSystem: boolean): ScriptAccountCondition[] {
 | 
			
		||||
    const templateElement = this.determineTemplateElement(leftSystem)!
 | 
			
		||||
    if(state instanceof  SimpleTemplateState && state.conditionMap.has(templateElement)) {
 | 
			
		||||
      return state.conditionMap.get(this.templateElement)!
 | 
			
		||||
    } else {
 | 
			
		||||
      return state.conditions
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private determineTemplateElement(leftSystem: boolean) {
 | 
			
		||||
    if(this.templateElement instanceof Character) {
 | 
			
		||||
      return this.templateElement;
 | 
			
		||||
    } else if(this.templateElement instanceof CharacterRelation) {
 | 
			
		||||
      return leftSystem ? this.templateElement.firstCharacter : this.templateElement.secondCharacter;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user