diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index eb7f6e2..30af657 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, MatCardHeader} 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,7 +70,8 @@ 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} from "@angular/material/expansion";
+import {MatAccordion, MatExpansionPanel, MatExpansionPanelHeader} from "@angular/material/expansion";
+import {TemplateCreatorComponent} from "./editor/gamesystem-editor/template-creator/template-creator.component";
// AoT requires an exported function for factories
const httpLoaderFactory = (http: HttpClient): TranslateHttpLoader => new TranslateHttpLoader(http, './assets/i18n/', '.json');
@@ -94,7 +95,8 @@ const httpLoaderFactory = (http: HttpClient): TranslateHttpLoader => new Transl
ScriptaccountActionEditorComponent,
ScriptaccountConditionEditorComponent,
CharacterOverviewComponent,
- CharacterEditorComponent
+ CharacterEditorComponent,
+ TemplateCreatorComponent
],
imports: [
BrowserModule,
@@ -154,7 +156,9 @@ const httpLoaderFactory = (http: HttpClient): TranslateHttpLoader => new Transl
MatCardContent,
MatCardHeader,
MatAccordion,
- MatExpansionPanel
+ MatExpansionPanel,
+ MatCardTitle,
+ MatExpansionPanelHeader
],
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 1bdd02b..4e364f2 100644
--- a/src/app/editor/character-editor/character-editor.component.html
+++ b/src/app/editor/character-editor/character-editor.component.html
@@ -8,5 +8,6 @@
{{gamesystem.componentName}}
+
diff --git a/src/app/editor/character-editor/character-editor.component.ts b/src/app/editor/character-editor/character-editor.component.ts
index cb49801..42e61ff 100644
--- a/src/app/editor/character-editor/character-editor.component.ts
+++ b/src/app/editor/character-editor/character-editor.component.ts
@@ -1,6 +1,9 @@
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 {TemplateCreatorComponent} from "../gamesystem-editor/template-creator/template-creator.component";
+import {TemplateType} from "../../project/game-model/TemplateType";
@Component({
selector: 'app-character-editor',
@@ -11,4 +14,20 @@ export class CharacterEditorComponent {
@Input() character: Character | undefined
@Input() gameModel: GameModel | undefined
+
+ constructor(private dialog: MatDialog) {
+ }
+
+ onOpenTemplateCreator() {
+ const dialogRef = this.dialog.open(TemplateCreatorComponent, {
+ data: this.gameModel!.listGamesystems(TemplateType.CHARACTER),
+ minWidth: "400px"
+ })
+
+ dialogRef.afterClosed().subscribe(res => {
+ if(res != undefined) {
+ this.character!.addCharacterSpecificGamesystem(res)
+ }
+ })
+ }
}
diff --git a/src/app/editor/gamesystem-editor/template-creator/template-creator.component.html b/src/app/editor/gamesystem-editor/template-creator/template-creator.component.html
new file mode 100644
index 0000000..feb02e7
--- /dev/null
+++ b/src/app/editor/gamesystem-editor/template-creator/template-creator.component.html
@@ -0,0 +1,13 @@
+
Specify Gamesystem
+
+
+ Referencesystem
+
+ {{gamesystem.componentName}}
+
+
+
+
+
+
+
diff --git a/src/app/editor/gamesystem-editor/template-creator/template-creator.component.scss b/src/app/editor/gamesystem-editor/template-creator/template-creator.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/editor/gamesystem-editor/template-creator/template-creator.component.spec.ts b/src/app/editor/gamesystem-editor/template-creator/template-creator.component.spec.ts
new file mode 100644
index 0000000..354ea63
--- /dev/null
+++ b/src/app/editor/gamesystem-editor/template-creator/template-creator.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { TemplateCreatorComponent } from './template-creator.component';
+
+describe('TemplateCreatorComponent', () => {
+ let component: TemplateCreatorComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [TemplateCreatorComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(TemplateCreatorComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/editor/gamesystem-editor/template-creator/template-creator.component.ts b/src/app/editor/gamesystem-editor/template-creator/template-creator.component.ts
new file mode 100644
index 0000000..ef9d86a
--- /dev/null
+++ b/src/app/editor/gamesystem-editor/template-creator/template-creator.component.ts
@@ -0,0 +1,26 @@
+import {Component, Inject} from '@angular/core';
+import {MAT_DIALOG_DATA, MatDialogRef, MatDialogTitle} from "@angular/material/dialog";
+import {SimpleTemplateGamesystem} from "../../../project/game-model/gamesystems/SimpleTemplateGamesystem";
+import {FormControl, Validators} from "@angular/forms";
+
+@Component({
+ selector: 'app-template-creator',
+ templateUrl: './template-creator.component.html',
+ styleUrl: './template-creator.component.scss'
+})
+export class TemplateCreatorComponent {
+
+ templateCtrl = new FormControl('', [Validators.required]);
+
+ constructor(@Inject(MAT_DIALOG_DATA) public templateGamesystems: SimpleTemplateGamesystem[],
+ private dialogRef: MatDialogRef) {
+ }
+
+ cancel() {
+ this.dialogRef.close();
+ }
+
+ save() {
+ this.dialogRef.close(this.templateCtrl.value)
+ }
+}
diff --git a/src/app/project/game-model/GameModel.ts b/src/app/project/game-model/GameModel.ts
index dab8a83..2fb19a5 100644
--- a/src/app/project/game-model/GameModel.ts
+++ b/src/app/project/game-model/GameModel.ts
@@ -9,6 +9,7 @@ import {TemplateType} from "./TemplateType";
import {SimpleTemplateGamesystem} from "./gamesystems/SimpleTemplateGamesystem";
export class GameModel {
+
gameModelName: string
gamesystems: Gamesystem[] = [];
@@ -121,4 +122,25 @@ export class GameModel {
}
})
}
+
+ listGamesystems(templateType: TemplateType): SimpleTemplateGamesystem[] {
+ const gamesystemList: SimpleTemplateGamesystem[] = []
+ const gamesystemQueue: Gamesystem[] = this.gamesystems.concat()
+ while(gamesystemQueue.length > 0) {
+ const currentGamesystem = gamesystemQueue.shift()!;
+
+ if(currentGamesystem.templateType === templateType) {
+ gamesystemList.push(currentGamesystem as SimpleTemplateGamesystem)
+ }
+
+ if(currentGamesystem instanceof ProductGamesystem) {
+ currentGamesystem.innerGamesystems.forEach(innerGamesystem => {
+ gamesystemQueue.push(innerGamesystem)
+ })
+ }
+ }
+
+ console.log(gamesystemList)
+ return gamesystemList;
+ }
}
diff --git a/src/app/project/parser/gamesystemParser/GamesystemParser.ts b/src/app/project/parser/gamesystemParser/GamesystemParser.ts
index 959c3dc..029fe25 100644
--- a/src/app/project/parser/gamesystemParser/GamesystemParser.ts
+++ b/src/app/project/parser/gamesystemParser/GamesystemParser.ts
@@ -47,10 +47,11 @@ export class GamesystemParser {
let simpleGamesystem = new SimpleGamesystem(gamesystemData.componentName, gamesystemData.componentDescription)
if(templateType == TemplateType.CHARACTER) {
simpleGamesystem = new SimpleTemplateGamesystem(gamesystemData.componentName, gamesystemData.componentDescription)
+ simpleGamesystem.templateType = TemplateType.CHARACTER
}
const stateParser = new StateParser(this.scriptAccounts);
- simpleGamesystem.states = stateParser.parseStates(gamesystemData.states)
+ simpleGamesystem.states = stateParser.parseStates(gamesystemData.states, templateType)
const transitionParser = new TransitionParser(simpleGamesystem.states, this.scriptAccounts)
simpleGamesystem.transitions = transitionParser.parseTransitions(gamesystemData.transitions)
diff --git a/src/app/project/parser/gamesystemParser/StateParser.ts b/src/app/project/parser/gamesystemParser/StateParser.ts
index 8da602a..fce00ce 100644
--- a/src/app/project/parser/gamesystemParser/StateParser.ts
+++ b/src/app/project/parser/gamesystemParser/StateParser.ts
@@ -2,6 +2,9 @@ import {SimpleState} from "../../game-model/gamesystems/states/SimpleState";
import {ScriptAccount} from "../../game-model/scriptAccounts/ScriptAccount";
import {ScriptAccountCondition} from "../../game-model/gamesystems/conditions/ScriptAccountCondition";
import {ScriptAccountConditionParser} from "./ScriptAccountConditionParser";
+import {TemplateType} from "../../game-model/TemplateType";
+import {SimpleTemplateState} from "../../game-model/gamesystems/states/SimpleTemplateState";
+import {Character} from "../../game-model/characters/Character";
export class StateParser {
@@ -12,23 +15,29 @@ export class StateParser {
this.conditionParser = new ScriptAccountConditionParser(scriptAccounts)
}
- public parseStates(stateData: any): SimpleState[] {
+ public parseStates(stateData: any, templateType: TemplateType): SimpleState[] {
const parsedStates: SimpleState[] = []
for(let i=0; i(stateLabel, stateDescription);
+ }
+
simpleState.initial = initial;
simpleState.conditions = conditions;
diff --git a/testModel/characters/Hicks Haddock.json b/testModel/characters/Hicks Haddock.json
index e11ab14..d70e908 100644
--- a/testModel/characters/Hicks Haddock.json
+++ b/testModel/characters/Hicks Haddock.json
@@ -1,5 +1,32 @@
{
"componentName": "Hicks Haddock",
"componentDescription": "",
- "characterSpecificGamesystems": []
+ "characterSpecificGamesystems": [
+ {
+ "componentName": "Characterstimmung",
+ "componentDescription": "",
+ "states": [
+ {
+ "incomingTransitions": [],
+ "outgoingTransitions": [],
+ "initial": true,
+ "conditions": [],
+ "stateLabel": "Fröhlich",
+ "stateDescription": "",
+ "conditionMap": {}
+ },
+ {
+ "incomingTransitions": [],
+ "outgoingTransitions": [],
+ "initial": false,
+ "conditions": [],
+ "stateLabel": "Wütend",
+ "stateDescription": "",
+ "conditionMap": {}
+ }
+ ],
+ "transitions": [],
+ "templateType": 1
+ }
+ ]
}
\ No newline at end of file