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;
+ }
}