diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 7412843..18a1e78 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -61,7 +61,7 @@ import { ProductStateEditorComponent } from "./editor/gamesystem-editor/state-editor/product-state-editor/product-state-editor.component"; import {MatTooltip} from "@angular/material/tooltip"; -import {MatCard, MatCardContent} from "@angular/material/card"; +import {MatCard, MatCardContent, MatCardHeader, MatCardTitle} from "@angular/material/card"; import { ScriptaccountActionEditorComponent } 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"; import {CharacterOverviewComponent} from "./side-overviews/character-overview/character-overview.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 const httpLoaderFactory = (http: HttpClient): TranslateHttpLoader => new TranslateHttpLoader(http, './assets/i18n/', '.json'); @@ -93,7 +97,8 @@ const httpLoaderFactory = (http: HttpClient): TranslateHttpLoader => new Transl ScriptaccountActionEditorComponent, ScriptaccountConditionEditorComponent, CharacterOverviewComponent, - CharacterEditorComponent + CharacterEditorComponent, + TemplateSpecificatorComponent ], imports: [ BrowserModule, @@ -150,7 +155,12 @@ const httpLoaderFactory = (http: HttpClient): TranslateHttpLoader => new Transl MatHint, MatTooltip, MatCard, - MatCardContent + MatCardContent, + MatCardHeader, + MatAccordion, + MatExpansionPanel, + MatExpansionPanelTitle, + MatCardTitle ], providers: [], bootstrap: [AppComponent] diff --git a/src/app/editor/character-editor/character-editor.component.html b/src/app/editor/character-editor/character-editor.component.html index 4750ae3..9fc0955 100644 --- a/src/app/editor/character-editor/character-editor.component.html +++ b/src/app/editor/character-editor/character-editor.component.html @@ -1 +1,16 @@ -

character-editor works!

+ + + Characterspecific Gamesystems + + + + + + {{templateSystem.componentName}} + + + + + + + diff --git a/src/app/editor/character-editor/character-editor.component.scss b/src/app/editor/character-editor/character-editor.component.scss index e69de29..4ce3702 100644 --- a/src/app/editor/character-editor/character-editor.component.scss +++ b/src/app/editor/character-editor/character-editor.component.scss @@ -0,0 +1,4 @@ +.specify-btn { + width: 100%; + margin-top: 10px; +} diff --git a/src/app/editor/character-editor/character-editor.component.ts b/src/app/editor/character-editor/character-editor.component.ts index 23e8438..72bd256 100644 --- a/src/app/editor/character-editor/character-editor.component.ts +++ b/src/app/editor/character-editor/character-editor.component.ts @@ -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({ selector: 'app-character-editor', @@ -7,4 +14,19 @@ import { Component } from '@angular/core'; }) 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); + } + }) + } + } diff --git a/src/app/editor/editor.component.html b/src/app/editor/editor.component.html index b351774..23be637 100644 --- a/src/app/editor/editor.component.html +++ b/src/app/editor/editor.component.html @@ -14,7 +14,10 @@ [gamesystem]="convertModelComponentToGamesystem(modelComponent)" (onOpenGamesystemEditor)="openGameModelComponent($event)" [scriptAccounts]="gameModel!.scriptAccounts"> - + diff --git a/src/app/editor/editor.component.ts b/src/app/editor/editor.component.ts index 887f4d8..50f44b9 100644 --- a/src/app/editor/editor.component.ts +++ b/src/app/editor/editor.component.ts @@ -6,6 +6,7 @@ import {Gamesystem} from "../project/game-model/gamesystems/Gamesystem"; import {State} from "../project/game-model/gamesystems/states/State"; import {Transition} from "../project/game-model/gamesystems/transitions/Transition"; import {ModelComponentType} from "../project/game-model/ModelComponentType"; +import {Character} from "../project/game-model/characters/Character"; @Component({ @@ -50,4 +51,10 @@ export class EditorComponent { } protected readonly ModelComponentType = ModelComponentType; + + convertModelComponentToCharacter(modelComponent: ModelComponent) { + if(modelComponent instanceof Character) + return modelComponent as Character + return undefined; + } } diff --git a/src/app/editor/gamesystem-editor/template-specificator/template-specificator.component.html b/src/app/editor/gamesystem-editor/template-specificator/template-specificator.component.html new file mode 100644 index 0000000..75f749d --- /dev/null +++ b/src/app/editor/gamesystem-editor/template-specificator/template-specificator.component.html @@ -0,0 +1 @@ +

template-specificator works!

diff --git a/src/app/editor/gamesystem-editor/template-specificator/template-specificator.component.scss b/src/app/editor/gamesystem-editor/template-specificator/template-specificator.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/editor/gamesystem-editor/template-specificator/template-specificator.component.spec.ts b/src/app/editor/gamesystem-editor/template-specificator/template-specificator.component.spec.ts new file mode 100644 index 0000000..36c46d3 --- /dev/null +++ b/src/app/editor/gamesystem-editor/template-specificator/template-specificator.component.spec.ts @@ -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; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [TemplateSpecificatorComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(TemplateSpecificatorComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/editor/gamesystem-editor/template-specificator/template-specificator.component.ts b/src/app/editor/gamesystem-editor/template-specificator/template-specificator.component.ts new file mode 100644 index 0000000..df10080 --- /dev/null +++ b/src/app/editor/gamesystem-editor/template-specificator/template-specificator.component.ts @@ -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 { + +} diff --git a/src/app/project/game-model/GameModel.ts b/src/app/project/game-model/GameModel.ts index 99b96ac..a50286f 100644 --- a/src/app/project/game-model/GameModel.ts +++ b/src/app/project/game-model/GameModel.ts @@ -133,4 +133,22 @@ export class GameModel { } }) } + + getTemplateSystems(templateType: TemplateType) { + const requestedTemplates: Gamesystem[] = [] + const gamesystemQueue: Gamesystem[] = 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; + } }