This commit is contained in:
		
							parent
							
								
									3c9efa1bd5
								
							
						
					
					
						commit
						4868495e70
					
				@ -61,7 +61,7 @@ import {
 | 
				
			|||||||
  ProductStateEditorComponent
 | 
					  ProductStateEditorComponent
 | 
				
			||||||
} from "./editor/gamesystem-editor/state-editor/product-state-editor/product-state-editor.component";
 | 
					} from "./editor/gamesystem-editor/state-editor/product-state-editor/product-state-editor.component";
 | 
				
			||||||
import {MatTooltip} from "@angular/material/tooltip";
 | 
					import {MatTooltip} from "@angular/material/tooltip";
 | 
				
			||||||
import {MatCard, MatCardContent} from "@angular/material/card";
 | 
					import {MatCard, MatCardContent, MatCardHeader, MatCardTitle} from "@angular/material/card";
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
    ScriptaccountActionEditorComponent
 | 
					    ScriptaccountActionEditorComponent
 | 
				
			||||||
} from "./editor/gamesystem-editor/transition-editor/scriptaccount-action-editor/scriptaccount-action-editor.component";
 | 
					} from "./editor/gamesystem-editor/transition-editor/scriptaccount-action-editor/scriptaccount-action-editor.component";
 | 
				
			||||||
@ -70,6 +70,10 @@ import {
 | 
				
			|||||||
} from "./editor/gamesystem-editor/scriptaccount-condition-editor/scriptaccount-condition-editor.component";
 | 
					} from "./editor/gamesystem-editor/scriptaccount-condition-editor/scriptaccount-condition-editor.component";
 | 
				
			||||||
import {CharacterOverviewComponent} from "./side-overviews/character-overview/character-overview.component";
 | 
					import {CharacterOverviewComponent} from "./side-overviews/character-overview/character-overview.component";
 | 
				
			||||||
import {CharacterEditorComponent} from "./editor/character-editor/character-editor.component";
 | 
					import {CharacterEditorComponent} from "./editor/character-editor/character-editor.component";
 | 
				
			||||||
 | 
					import {MatAccordion, MatExpansionPanel, MatExpansionPanelTitle} from "@angular/material/expansion";
 | 
				
			||||||
 | 
					import {
 | 
				
			||||||
 | 
					  TemplateSpecificatorComponent
 | 
				
			||||||
 | 
					} from "./editor/gamesystem-editor/template-specificator/template-specificator.component";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// AoT requires an exported function for factories
 | 
					// AoT requires an exported function for factories
 | 
				
			||||||
const httpLoaderFactory = (http: HttpClient): TranslateHttpLoader =>  new TranslateHttpLoader(http, './assets/i18n/', '.json');
 | 
					const httpLoaderFactory = (http: HttpClient): TranslateHttpLoader =>  new TranslateHttpLoader(http, './assets/i18n/', '.json');
 | 
				
			||||||
@ -93,7 +97,8 @@ const httpLoaderFactory = (http: HttpClient): TranslateHttpLoader =>  new Transl
 | 
				
			|||||||
    ScriptaccountActionEditorComponent,
 | 
					    ScriptaccountActionEditorComponent,
 | 
				
			||||||
    ScriptaccountConditionEditorComponent,
 | 
					    ScriptaccountConditionEditorComponent,
 | 
				
			||||||
    CharacterOverviewComponent,
 | 
					    CharacterOverviewComponent,
 | 
				
			||||||
    CharacterEditorComponent
 | 
					    CharacterEditorComponent,
 | 
				
			||||||
 | 
					    TemplateSpecificatorComponent
 | 
				
			||||||
  ],
 | 
					  ],
 | 
				
			||||||
  imports: [
 | 
					  imports: [
 | 
				
			||||||
    BrowserModule,
 | 
					    BrowserModule,
 | 
				
			||||||
@ -150,7 +155,12 @@ const httpLoaderFactory = (http: HttpClient): TranslateHttpLoader =>  new Transl
 | 
				
			|||||||
    MatHint,
 | 
					    MatHint,
 | 
				
			||||||
    MatTooltip,
 | 
					    MatTooltip,
 | 
				
			||||||
    MatCard,
 | 
					    MatCard,
 | 
				
			||||||
    MatCardContent
 | 
					    MatCardContent,
 | 
				
			||||||
 | 
					    MatCardHeader,
 | 
				
			||||||
 | 
					    MatAccordion,
 | 
				
			||||||
 | 
					    MatExpansionPanel,
 | 
				
			||||||
 | 
					    MatExpansionPanelTitle,
 | 
				
			||||||
 | 
					    MatCardTitle
 | 
				
			||||||
  ],
 | 
					  ],
 | 
				
			||||||
  providers: [],
 | 
					  providers: [],
 | 
				
			||||||
  bootstrap: [AppComponent]
 | 
					  bootstrap: [AppComponent]
 | 
				
			||||||
 | 
				
			|||||||
@ -1 +1,16 @@
 | 
				
			|||||||
<p>character-editor works!</p>
 | 
					<mat-card>
 | 
				
			||||||
 | 
					  <mat-card-header>
 | 
				
			||||||
 | 
					    <mat-card-title>Characterspecific Gamesystems</mat-card-title>
 | 
				
			||||||
 | 
					  </mat-card-header>
 | 
				
			||||||
 | 
					  <mat-card-content>
 | 
				
			||||||
 | 
					    <mat-accordion>
 | 
				
			||||||
 | 
					      <mat-expansion-panel *ngFor="let templateSystem of character!.characterSpecificTemplateSystems">
 | 
				
			||||||
 | 
					        <mat-expansion-panel-header>
 | 
				
			||||||
 | 
					          <mat-panel-title>{{templateSystem.componentName}}</mat-panel-title>
 | 
				
			||||||
 | 
					        </mat-expansion-panel-header>
 | 
				
			||||||
 | 
					        <app-gamesystem-editor [gamesystem]="templateSystem" [scriptAccounts]="gameModel!.scriptAccounts"></app-gamesystem-editor>
 | 
				
			||||||
 | 
					      </mat-expansion-panel>
 | 
				
			||||||
 | 
					    </mat-accordion>
 | 
				
			||||||
 | 
					    <button mat-stroked-button class="specify-btn" (click)="openTemplateSpecificator()">Specify Templatesystem</button>
 | 
				
			||||||
 | 
					  </mat-card-content>
 | 
				
			||||||
 | 
					</mat-card>
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					.specify-btn {
 | 
				
			||||||
 | 
					  width: 100%;
 | 
				
			||||||
 | 
					  margin-top: 10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,4 +1,11 @@
 | 
				
			|||||||
import { Component } from '@angular/core';
 | 
					import {Component, Input} from '@angular/core';
 | 
				
			||||||
 | 
					import {Character} from "../../project/game-model/characters/Character";
 | 
				
			||||||
 | 
					import {GameModel} from "../../project/game-model/GameModel";
 | 
				
			||||||
 | 
					import {MatDialog} from "@angular/material/dialog";
 | 
				
			||||||
 | 
					import {
 | 
				
			||||||
 | 
					  TemplateSpecificatorComponent
 | 
				
			||||||
 | 
					} from "../gamesystem-editor/template-specificator/template-specificator.component";
 | 
				
			||||||
 | 
					import {TemplateType} from "../../project/game-model/templates/TemplateType";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Component({
 | 
					@Component({
 | 
				
			||||||
  selector: 'app-character-editor',
 | 
					  selector: 'app-character-editor',
 | 
				
			||||||
@ -7,4 +14,19 @@ import { Component } from '@angular/core';
 | 
				
			|||||||
})
 | 
					})
 | 
				
			||||||
export class CharacterEditorComponent {
 | 
					export class CharacterEditorComponent {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @Input() character: Character | undefined;
 | 
				
			||||||
 | 
					  @Input() gameModel: GameModel | undefined;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  constructor(private dialog: MatDialog) {
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  openTemplateSpecificator() {
 | 
				
			||||||
 | 
					    const dialogRef = this.dialog.open(TemplateSpecificatorComponent, {data: this.gameModel?.getTemplateSystems(TemplateType.CHARACTER), minWidth: "400px"});
 | 
				
			||||||
 | 
					    dialogRef.afterClosed().subscribe(res => {
 | 
				
			||||||
 | 
					      if(res != undefined) {
 | 
				
			||||||
 | 
					        this.character!.addCharacterSpecificSimpleTemplatesystem(res);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -14,7 +14,10 @@
 | 
				
			|||||||
                                [gamesystem]="convertModelComponentToGamesystem(modelComponent)"
 | 
					                                [gamesystem]="convertModelComponentToGamesystem(modelComponent)"
 | 
				
			||||||
                                (onOpenGamesystemEditor)="openGameModelComponent($event)"
 | 
					                                (onOpenGamesystemEditor)="openGameModelComponent($event)"
 | 
				
			||||||
                                [scriptAccounts]="gameModel!.scriptAccounts"></app-gamesystem-editor>
 | 
					                                [scriptAccounts]="gameModel!.scriptAccounts"></app-gamesystem-editor>
 | 
				
			||||||
    <app-character-editor *ngIf="modelComponent.type === ModelComponentType.CHARACTER">
 | 
					    <app-character-editor *ngIf="modelComponent.type === ModelComponentType.CHARACTER"
 | 
				
			||||||
 | 
					                                [character]="convertModelComponentToCharacter(modelComponent)"
 | 
				
			||||||
 | 
					                                [gameModel]="gameModel!"
 | 
				
			||||||
 | 
					    >
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    </app-character-editor>
 | 
					    </app-character-editor>
 | 
				
			||||||
  </mat-tab>
 | 
					  </mat-tab>
 | 
				
			||||||
 | 
				
			|||||||
@ -6,6 +6,7 @@ import {Gamesystem} from "../project/game-model/gamesystems/Gamesystem";
 | 
				
			|||||||
import {State} from "../project/game-model/gamesystems/states/State";
 | 
					import {State} from "../project/game-model/gamesystems/states/State";
 | 
				
			||||||
import {Transition} from "../project/game-model/gamesystems/transitions/Transition";
 | 
					import {Transition} from "../project/game-model/gamesystems/transitions/Transition";
 | 
				
			||||||
import {ModelComponentType} from "../project/game-model/ModelComponentType";
 | 
					import {ModelComponentType} from "../project/game-model/ModelComponentType";
 | 
				
			||||||
 | 
					import {Character} from "../project/game-model/characters/Character";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Component({
 | 
					@Component({
 | 
				
			||||||
@ -50,4 +51,10 @@ export class EditorComponent {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  protected readonly ModelComponentType = ModelComponentType;
 | 
					  protected readonly ModelComponentType = ModelComponentType;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  convertModelComponentToCharacter(modelComponent: ModelComponent) {
 | 
				
			||||||
 | 
					    if(modelComponent instanceof Character)
 | 
				
			||||||
 | 
					      return modelComponent as Character
 | 
				
			||||||
 | 
					    return undefined;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					<p>template-specificator works!</p>
 | 
				
			||||||
@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					import { ComponentFixture, TestBed } from '@angular/core/testing';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { TemplateSpecificatorComponent } from './template-specificator.component';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					describe('TemplateSpecificatorComponent', () => {
 | 
				
			||||||
 | 
					  let component: TemplateSpecificatorComponent;
 | 
				
			||||||
 | 
					  let fixture: ComponentFixture<TemplateSpecificatorComponent>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  beforeEach(async () => {
 | 
				
			||||||
 | 
					    await TestBed.configureTestingModule({
 | 
				
			||||||
 | 
					      imports: [TemplateSpecificatorComponent]
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					    .compileComponents();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    fixture = TestBed.createComponent(TemplateSpecificatorComponent);
 | 
				
			||||||
 | 
					    component = fixture.componentInstance;
 | 
				
			||||||
 | 
					    fixture.detectChanges();
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  it('should create', () => {
 | 
				
			||||||
 | 
					    expect(component).toBeTruthy();
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					import { Component } from '@angular/core';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Component({
 | 
				
			||||||
 | 
					  selector: 'app-template-specificator',
 | 
				
			||||||
 | 
					  templateUrl: './template-specificator.component.html',
 | 
				
			||||||
 | 
					  styleUrl: './template-specificator.component.scss'
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					export class TemplateSpecificatorComponent {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -133,4 +133,22 @@ export class GameModel {
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  getTemplateSystems(templateType: TemplateType) {
 | 
				
			||||||
 | 
					    const requestedTemplates: Gamesystem<any, any>[] = []
 | 
				
			||||||
 | 
					    const gamesystemQueue: Gamesystem<any, any>[] = this.gamesystems.concat();
 | 
				
			||||||
 | 
					    while(gamesystemQueue.length > 0) {
 | 
				
			||||||
 | 
					      const currentGamesystem = gamesystemQueue.shift()!;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if(currentGamesystem instanceof SimpleTemplateGamesystem && currentGamesystem.templateType === templateType) {
 | 
				
			||||||
 | 
					        requestedTemplates.push(currentGamesystem)
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if(currentGamesystem instanceof ProductGamesystem) {
 | 
				
			||||||
 | 
					        currentGamesystem.innerGamesystems.forEach(innerGamesystem => gamesystemQueue.push(innerGamesystem))
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return requestedTemplates;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user