ConceptCreator/src/app/app.component.ts

207 lines
8.0 KiB
TypeScript
Raw Normal View History

import {Component, NgZone, OnInit, ViewChild} from '@angular/core';
import {MatDrawerContainer} from "@angular/material/sidenav";
import {EditorComponent} from "./editor/editor.component";
import {
ScriptAccountOverviewComponent
} from "./side-overviews/script-account-overview/script-account-overview.component";
2024-01-27 15:25:32 +01:00
import {MatDialog} from "@angular/material/dialog";
import {DeleteConfirmationDialogComponent} from "./delete-confirmation-dialog/delete-confirmation-dialog.component";
2024-02-06 20:21:52 +01:00
import {GamescriptOverviewComponent} from "./side-overviews/gamescript-overview/gamescript-overview.component";
2024-03-20 09:26:14 +01:00
import {ProjectService} from "./project/project.service";
import {ModelComponentType} from "./project/game-model/ModelComponentType";
import {ModelComponentTypeUtillities} from "./project/game-model/ModelComponentTypeUtillities";
import {ScriptAccount} from "./project/game-model/scriptAccounts/ScriptAccount";
import {Gamesystem} from "./project/game-model/gamesystems/Gamesystem";
import {ModelComponent} from "./project/game-model/ModelComponent";
import {GameModel} from "./project/game-model/GameModel";
2024-01-26 23:07:40 +01:00
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit{
openContent : ModelComponentType | undefined = undefined;
@ViewChild('drawer') drawer: MatDrawerContainer|undefined
@ViewChild('editor') editor: EditorComponent|undefined
@ViewChild('scriptAccountOverview') scriptAccountOverview: ScriptAccountOverviewComponent | undefined
2024-02-06 20:21:52 +01:00
@ViewChild('gamesystemOverview') gamesystemOverview: GamescriptOverviewComponent | undefined
gameModel: GameModel | undefined
2024-03-20 09:26:14 +01:00
constructor(private zone: NgZone,
private dialog: MatDialog,
private projectService: ProjectService
2024-01-26 23:07:40 +01:00
) {
}
2024-02-10 10:11:07 +01:00
onContextMenuMessageRecieved(message: string) {
if(message == "edit") {
this.onEditModelComponent();
} else if(message == "delete") {
this.onDeleteModelComponent();
} else if(message.startsWith("new")) {
const splittedMessage = message.split("-");
const modelComponentType = ModelComponentTypeUtillities.fromString(splittedMessage[1]);
if(modelComponentType != undefined) {
this.onCreateModelComponent(modelComponentType);
} else {
console.log("[ERROR] [App-Component] Unknown Context-Menu Command!")
}
}
}
private onEditModelComponent() {
2024-02-10 10:17:21 +01:00
switch (this.openContent!) {
case ModelComponentType.SCRIPTACCOUNT: {
if(this.scriptAccountOverview!.selectedScriptAccount != undefined) {
this.editor!.openGameModelComponent(this.scriptAccountOverview!.selectedScriptAccount);
}
} break;
case ModelComponentType.GAMESYTEM: {
if(this.gamesystemOverview!.selectedGamesystem != undefined) {
2024-03-20 09:26:14 +01:00
const gamesystem = this.projectService!.gameModel!.findGamesystem(this.gamesystemOverview!.selectedGamesystemName!);
2024-02-10 10:17:21 +01:00
this.editor!.openGameModelComponent(gamesystem!);
}
} break
2024-02-10 10:11:07 +01:00
}
}
private onDeleteModelComponent() {
const affectedModelComponent = this.getSelectedModelComponent();
console.log("Affected ModelComponent: ", affectedModelComponent)
2024-02-10 10:11:07 +01:00
const dialogRef = this.dialog.open(DeleteConfirmationDialogComponent, {data: affectedModelComponent, minWidth: "400px"});
dialogRef.afterClosed().subscribe(res => {
if(res != undefined && res) {
if(affectedModelComponent instanceof ScriptAccount) {
2024-03-20 09:26:14 +01:00
this.projectService!.gameModel!.removeScriptAccount(affectedModelComponent);
//this.electronService.ipcRenderer.send('delete-component', new DeleteModel(affectedModelComponent.componentName, ModelComponentType.SCRIPTACCOUNT))
} else if(affectedModelComponent instanceof Gamesystem) {
2024-03-20 09:26:14 +01:00
//this.gameModel!.removeGamesystem(affectedModelComponent);
//this.electronService.ipcRenderer.send('delete-component', new DeleteModel(affectedModelComponent.componentName, ModelComponentType.GAMESYTEM))
this.gamesystemOverview!.refresh()
2024-02-10 10:11:07 +01:00
}
}
})
}
private onCreateModelComponent(modelComponentType: ModelComponentType) {
switch (modelComponentType) {
case ModelComponentType.SCRIPTACCOUNT: this.onCreateNewScriptAccount(); break
case ModelComponentType.GAMESYTEM: this.onCreateNewGamesystem(); break
}
}
private onCreateNewScriptAccount() {
2024-03-20 09:26:14 +01:00
const createdScriptAccount = this.projectService!.gameModel!.createScriptAccount("New ScriptAccount");
2024-02-10 10:11:07 +01:00
if(createdScriptAccount != undefined) {
this.editor?.openGameModelComponent(createdScriptAccount);
} else {
console.log("[DEBUG] [App-Component] ScriptAccount could not be created (Name not unique)");
}
}
private onCreateNewGamesystem() {
let parentGamesystemName = undefined
if(this.openContent != ModelComponentType.GAMESYTEM) {
this.openGamesystemsOverview();
} else {
parentGamesystemName = this.gamesystemOverview!.selectedGamesystemName;
}
2024-03-20 09:26:14 +01:00
const createdGamesystem = this.projectService!.gameModel!.createGamesystem("New Gamesystem", parentGamesystemName);
if(createdGamesystem != undefined) {
this.gamesystemOverview!.refresh();
this.editor?.openGameModelComponent(createdGamesystem);
}
2024-02-10 10:11:07 +01:00
}
2024-01-27 15:25:32 +01:00
private getSelectedModelComponent(): ModelComponent | undefined {
if(this.openContent == ModelComponentType.SCRIPTACCOUNT) {
if(this.scriptAccountOverview != undefined) {
return this.scriptAccountOverview!.selectedScriptAccount;
} else {
console.log("[WARN] [App.component] ScriptAccountOverview is undefined")
}
} else if(this.openContent == ModelComponentType.GAMESYTEM){
if(this.gamesystemOverview != undefined) {
return this.gamesystemOverview!.getSelectedGamesystem()
} else {
console.log("[WARN] [App.component] GamesystemOverview is undefined")
}
2024-01-27 15:25:32 +01:00
}
return undefined;
}
ngOnInit() {
2024-03-20 09:26:14 +01:00
this.gameModel = this.projectService.gameModel
2024-02-17 08:45:22 +01:00
/*this.gameModel = new GameModel("No More");
2024-02-10 10:11:07 +01:00
this.gameModel.createScriptAccount("Temperature");
this.gameModel.createScriptAccount("Luftfeuchtigkeit");
const weather = new SimpleGamesystem("Weather");
const season = new SimpleGamesystem("Season");
2024-02-10 12:21:31 +01:00
const springState = season.createState("Spring", "Spring, also known as springtime, is one of the four temperate seasons, succeeding winter and preceding summer.");
const summerState = season.createState("Summer", "Summer is the hottest and brightest of the four temperate seasons, occurring after spring and before autumn. ");
2024-02-10 17:07:24 +01:00
const sunnyState = weather.createState("Sunny", "The sun is shining. No clouds, no rain, no storm.");
const rainingState = weather.createState("Raining", "It rains")
2024-02-10 12:21:31 +01:00
season.createTransition(springState!, summerState!);
2024-02-10 17:07:24 +01:00
weather.createTransition(sunnyState!, rainingState!);
const weather_season = new ProductGamesystem("Weather-Season");
weather_season.addChildGamesystem(weather);
weather_season.addChildGamesystem(season);
weather_season.createState([springState!, sunnyState!]);
2024-02-17 08:45:22 +01:00
this.gameModel.addGamesystem(weather_season);*/
}
openScriptAccountsOverview() {
this.openContent = ModelComponentType.SCRIPTACCOUNT
this.drawer!.open();
}
2024-02-06 20:21:52 +01:00
openGamesystemsOverview() {
this.openContent = ModelComponentType.GAMESYTEM;
this.drawer!.open();
}
protected readonly ModelComponentType = ModelComponentType;
closeContentOverview() {
this.drawer!.close();
this.openContent = undefined;
}
protected readonly ModelComponentTypeUtillities = ModelComponentTypeUtillities;
openModelComponent(modelComponent: ModelComponent) {
if(this.editor != undefined) {
this.editor.openGameModelComponent(modelComponent);
} else {
console.log("[WARN] [App.Component] Editor is undefined")
}
}
onModelNameUpdate() {
if(this.openContent == ModelComponentType.GAMESYTEM) {
2024-02-10 10:11:07 +01:00
this.gamesystemOverview!.refresh();
}
}
2024-03-18 17:33:24 +01:00
resetSelection() {
if(this.gamesystemOverview != undefined) {
this.gamesystemOverview.resetSelectedGamesystem()
}
}
2024-01-26 23:07:40 +01:00
}