From c4e613d78c661d299208661153bd8abe0e9a4086 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20B=C3=B6ckelmann?= Date: Sat, 20 Apr 2024 07:30:41 +0200 Subject: [PATCH 1/9] Introduce Items and Basic ItemOverview --- src/app/app.component.html | 6 +++- src/app/app.component.ts | 5 +++ src/app/app.module.ts | 8 +++-- src/app/project/game-model/GameModel.ts | 16 ++++++++- .../project/game-model/ModelComponentType.ts | 4 +-- .../ModelComponentTypeUtillities.ts | 5 ++- src/app/project/game-model/inventory/Item.ts | 10 ++++++ .../game-model/inventory/ItemProperty.ts | 10 ++++++ .../game-model/inventory/ItemQuality.ts | 9 +++++ .../inventory-item-overview.component.html | 8 +++++ .../inventory-item-overview.component.scss | 14 ++++++++ .../inventory-item-overview.component.spec.ts | 23 +++++++++++++ .../inventory-item-overview.component.ts | 34 +++++++++++++++++++ .../script-account-overview.component.html | 2 +- 14 files changed, 146 insertions(+), 8 deletions(-) create mode 100644 src/app/project/game-model/inventory/Item.ts create mode 100644 src/app/project/game-model/inventory/ItemProperty.ts create mode 100644 src/app/project/game-model/inventory/ItemQuality.ts create mode 100644 src/app/side-overviews/inventory-item-overview/inventory-item-overview.component.html create mode 100644 src/app/side-overviews/inventory-item-overview/inventory-item-overview.component.scss create mode 100644 src/app/side-overviews/inventory-item-overview/inventory-item-overview.component.spec.ts create mode 100644 src/app/side-overviews/inventory-item-overview/inventory-item-overview.component.ts diff --git a/src/app/app.component.html b/src/app/app.component.html index 0626929..49c523d 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -1,11 +1,13 @@
+ (click)="openScriptAccountsOverview()">analytics +
@@ -23,11 +25,13 @@ +
+
diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 3ad2831..8244f20 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -254,6 +254,11 @@ export class AppComponent implements OnInit{ this.drawer!.open() } + openContentOverview(contentType: ModelComponentType) { + this.openContent = contentType; + this.drawer!.open(); + } + protected readonly ModelComponentType = ModelComponentType; closeContentOverview() { diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 34970f6..63ff30b 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -82,6 +82,9 @@ import { import { StateInitialCellComponent } from "./editor/gamesystem-editor/state-editor/simple-state-editor/state-initial-cell/state-initial-cell.component"; +import { + InventoryItemOverviewComponent +} from "./side-overviews/inventory-item-overview/inventory-item-overview.component"; // AoT requires an exported function for factories const httpLoaderFactory = (http: HttpClient): TranslateHttpLoader => new TranslateHttpLoader(http, './assets/i18n/', '.json'); @@ -107,7 +110,8 @@ const httpLoaderFactory = (http: HttpClient): TranslateHttpLoader => new Transl CharacterOverviewComponent, CharacterEditorComponent, TemplateSpecificatorComponent, - StateInitialCellComponent + StateInitialCellComponent, + InventoryItemOverviewComponent ], imports: [ BrowserModule, @@ -170,7 +174,7 @@ const httpLoaderFactory = (http: HttpClient): TranslateHttpLoader => new Transl MatExpansionPanel, MatExpansionPanelTitle, MatCardTitle, - MatExpansionPanelHeader + MatExpansionPanelHeader, ], providers: [], bootstrap: [AppComponent] diff --git a/src/app/project/game-model/GameModel.ts b/src/app/project/game-model/GameModel.ts index 295b6bb..ae2b906 100644 --- a/src/app/project/game-model/GameModel.ts +++ b/src/app/project/game-model/GameModel.ts @@ -11,6 +11,7 @@ import {SimpleTemplateGamesystem} from "./templates/simpleGamesystem/SimpleTempl import {ProductTemplateSystem} from "./templates/productGamesystem/ProductTemplateSystem"; import {ProductTemplateCreator} from "./templates/productGamesystem/ProductTemplateCreator"; import {CharacterRelation} from "./characters/CharacterRelation"; +import {Item} from "./inventory/Item"; export class GameModel { gameModelName: string @@ -18,9 +19,13 @@ export class GameModel { gamesystems: Gamesystem[] = []; scriptAccounts: ScriptAccount[] = []; characters: Character[] = [] + inventoryItems: Item[] = [] constructor(gameModelName: string) { this.gameModelName = gameModelName; + + this.createInventoryItem("Item 1") + this.createInventoryItem("Item 2") } addGamesystem(gamesystem: Gamesystem) { @@ -101,7 +106,12 @@ export class GameModel { return simpleGamesystem; } - + createInventoryItem(itemName: string) { + if(itemName != undefined) { + const item = new Item(itemName, "", ModelComponentType.CHARACTER); + this.inventoryItems.push(item); + } + } createGamesystem(gamesystemName: string, parentGamesystemName: string | undefined, templateType: TemplateType | undefined) { if(gamesystemName != undefined && this.findGamesystem(gamesystemName) == undefined) { @@ -156,6 +166,10 @@ export class GameModel { } } + removeItem(item: Item) { + this.inventoryItems = this.inventoryItems.filter(i => i.componentName === item.componentName) + } + findGamesystem(gamesystemName: string) { const gamesystemQueue : Gamesystem, Transition>[] = []; this.gamesystems.forEach(gamesystem => gamesystemQueue.push(gamesystem)); diff --git a/src/app/project/game-model/ModelComponentType.ts b/src/app/project/game-model/ModelComponentType.ts index 14eaf8b..4baebb9 100644 --- a/src/app/project/game-model/ModelComponentType.ts +++ b/src/app/project/game-model/ModelComponentType.ts @@ -1,6 +1,6 @@ export enum ModelComponentType { SCRIPTACCOUNT, GAMESYTEM, - CHARACTER - + CHARACTER, + ITEM } diff --git a/src/app/project/game-model/ModelComponentTypeUtillities.ts b/src/app/project/game-model/ModelComponentTypeUtillities.ts index aa736fd..a2bdc40 100644 --- a/src/app/project/game-model/ModelComponentTypeUtillities.ts +++ b/src/app/project/game-model/ModelComponentTypeUtillities.ts @@ -5,7 +5,8 @@ export class ModelComponentTypeUtillities { switch (modelComponentType) { case ModelComponentType.SCRIPTACCOUNT: return "ScriptAccounts"; case ModelComponentType.GAMESYTEM: return "Gamesystems"; - case ModelComponentType.CHARACTER: return "Characters" + case ModelComponentType.CHARACTER: return "Characters"; + case ModelComponentType.ITEM: return "Items"; default: return "Undefined"; } } @@ -15,6 +16,7 @@ export class ModelComponentTypeUtillities { case ModelComponentType.SCRIPTACCOUNT: return "ScriptAccount"; case ModelComponentType.GAMESYTEM: return "Gamesystem"; case ModelComponentType.CHARACTER: return "Character" + case ModelComponentType.ITEM: return "Item" default: return "Undefined"; } } @@ -24,6 +26,7 @@ export class ModelComponentTypeUtillities { case "gamesystem": return ModelComponentType.GAMESYTEM; case "scriptaccount": return ModelComponentType.SCRIPTACCOUNT; case "character": return ModelComponentType.CHARACTER + case "item": return ModelComponentType.ITEM } } } diff --git a/src/app/project/game-model/inventory/Item.ts b/src/app/project/game-model/inventory/Item.ts new file mode 100644 index 0000000..3aec112 --- /dev/null +++ b/src/app/project/game-model/inventory/Item.ts @@ -0,0 +1,10 @@ +import {ItemProperty} from "./ItemProperty"; +import {ItemQuality} from "./ItemQuality"; +import {ModelComponent} from "../ModelComponent"; + +export class Item extends ModelComponent { + + possible_qualities: ItemQuality[] = [] + itemProperties: ItemProperty[] = [] + +} diff --git a/src/app/project/game-model/inventory/ItemProperty.ts b/src/app/project/game-model/inventory/ItemProperty.ts new file mode 100644 index 0000000..4fb219a --- /dev/null +++ b/src/app/project/game-model/inventory/ItemProperty.ts @@ -0,0 +1,10 @@ +export class ItemProperty { + propertyName: string + property: number + + + constructor(propertyName: string, property: number) { + this.propertyName = propertyName; + this.property = property; + } +} diff --git a/src/app/project/game-model/inventory/ItemQuality.ts b/src/app/project/game-model/inventory/ItemQuality.ts new file mode 100644 index 0000000..ba59077 --- /dev/null +++ b/src/app/project/game-model/inventory/ItemQuality.ts @@ -0,0 +1,9 @@ +export class ItemQuality { + quality_step: number + quality_propertes: ItemQuality[] = [] + + + constructor(quality_step: number) { + this.quality_step = quality_step; + } +} diff --git a/src/app/side-overviews/inventory-item-overview/inventory-item-overview.component.html b/src/app/side-overviews/inventory-item-overview/inventory-item-overview.component.html new file mode 100644 index 0000000..16c4e63 --- /dev/null +++ b/src/app/side-overviews/inventory-item-overview/inventory-item-overview.component.html @@ -0,0 +1,8 @@ + + + inventory_2{{item.componentName}} + + diff --git a/src/app/side-overviews/inventory-item-overview/inventory-item-overview.component.scss b/src/app/side-overviews/inventory-item-overview/inventory-item-overview.component.scss new file mode 100644 index 0000000..41ac5cd --- /dev/null +++ b/src/app/side-overviews/inventory-item-overview/inventory-item-overview.component.scss @@ -0,0 +1,14 @@ +.item { + min-height: 1.8em !important; + height: 1.8em !important; +} + +.icon { + margin-right: 10px; + color: #ccffff; + align-content: baseline; +} + +.selected-item { + background-color: #8696b6; +} diff --git a/src/app/side-overviews/inventory-item-overview/inventory-item-overview.component.spec.ts b/src/app/side-overviews/inventory-item-overview/inventory-item-overview.component.spec.ts new file mode 100644 index 0000000..4681b34 --- /dev/null +++ b/src/app/side-overviews/inventory-item-overview/inventory-item-overview.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { InventoryItemOverviewComponent } from './inventory-item-overview.component'; + +describe('InventoryItemOverviewComponent', () => { + let component: InventoryItemOverviewComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [InventoryItemOverviewComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(InventoryItemOverviewComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/side-overviews/inventory-item-overview/inventory-item-overview.component.ts b/src/app/side-overviews/inventory-item-overview/inventory-item-overview.component.ts new file mode 100644 index 0000000..f1b2cf0 --- /dev/null +++ b/src/app/side-overviews/inventory-item-overview/inventory-item-overview.component.ts @@ -0,0 +1,34 @@ +import {Component, EventEmitter, Input, Output} from '@angular/core'; +import {GameModel} from "../../project/game-model/GameModel"; +import {Item} from "../../project/game-model/inventory/Item"; +import {MatActionList, MatListItem} from "@angular/material/list"; +import {MatIcon} from "@angular/material/icon"; +import {NgForOf} from "@angular/common"; +import {ScriptAccount} from "../../project/game-model/scriptAccounts/ScriptAccount"; + +@Component({ + selector: 'app-inventory-item-overview', + templateUrl: './inventory-item-overview.component.html', + styleUrl: './inventory-item-overview.component.scss' +}) +export class InventoryItemOverviewComponent { + + @Input() gameModel: GameModel | undefined; + @Output() openItemEditor = new EventEmitter(); + + + selectedItem: Item | undefined + + onOpenItemEditor(item: Item) { + this.openItemEditor.emit(item) + } + + + selectItem(item: Item) { + if(this.selectedItem != undefined && this.selectedItem!.componentName === item.componentName) { + this.selectedItem = undefined + } else { + this.selectedItem = item + } + } +} diff --git a/src/app/side-overviews/script-account-overview/script-account-overview.component.html b/src/app/side-overviews/script-account-overview/script-account-overview.component.html index 797174b..8781cb1 100644 --- a/src/app/side-overviews/script-account-overview/script-account-overview.component.html +++ b/src/app/side-overviews/script-account-overview/script-account-overview.component.html @@ -3,6 +3,6 @@ (dblclick)="onOpenScriptAccount(scriptAccount)" (click)="selectScriptAccount(scriptAccount)" [ngClass]="selectedScriptAccount === scriptAccount ?'selected-item':''" (contextmenu)="selectScriptAccount(scriptAccount)"> - inventory_2{{scriptAccount.componentName}} + analytics{{scriptAccount.componentName}} From eaa526d4c67bc61323cae639e30414839f57114a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20B=C3=B6ckelmann?= Date: Sat, 20 Apr 2024 07:41:51 +0200 Subject: [PATCH 2/9] Introduce Inventory-Item Editor --- src/app/app.component.html | 2 +- src/app/app.module.ts | 128 +++++++++--------- .../character-editor.component.ts | 2 +- src/app/editor/editor.component.html | 8 +- src/app/editor/editor.component.ts | 9 ++ .../inventory-item-editor.component.html | 1 + .../inventory-item-editor.component.scss | 0 .../inventory-item-editor.component.spec.ts | 23 ++++ .../inventory-item-editor.component.ts | 18 +++ src/app/project/game-model/GameModel.ts | 2 +- 10 files changed, 124 insertions(+), 69 deletions(-) create mode 100644 src/app/editor/inventory-item-editor/inventory-item-editor.component.html create mode 100644 src/app/editor/inventory-item-editor/inventory-item-editor.component.scss create mode 100644 src/app/editor/inventory-item-editor/inventory-item-editor.component.spec.ts create mode 100644 src/app/editor/inventory-item-editor/inventory-item-editor.component.ts diff --git a/src/app/app.component.html b/src/app/app.component.html index 49c523d..83a3954 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -31,7 +31,7 @@ - +
diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 63ff30b..218e124 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -85,6 +85,7 @@ import { import { InventoryItemOverviewComponent } from "./side-overviews/inventory-item-overview/inventory-item-overview.component"; +import {InventoryItemEditorComponent} from "./editor/inventory-item-editor/inventory-item-editor.component"; // AoT requires an exported function for factories const httpLoaderFactory = (http: HttpClient): TranslateHttpLoader => new TranslateHttpLoader(http, './assets/i18n/', '.json'); @@ -113,69 +114,70 @@ const httpLoaderFactory = (http: HttpClient): TranslateHttpLoader => new Transl StateInitialCellComponent, InventoryItemOverviewComponent ], - imports: [ - BrowserModule, - FormsModule, - HttpClientModule, - CoreModule, - SharedModule, - TranslateModule.forRoot({ - loader: { - provide: TranslateLoader, - useFactory: httpLoaderFactory, - deps: [HttpClient] - } - }), - BrowserAnimationsModule, - MatIcon, - MatToolbar, - MatButton, - MatFormField, - MatInput, - MatDrawerContainer, - MatDrawer, - MatIconButton, - MatMenuTrigger, - MatMenu, - MatMenuItem, - MatListItem, - MatActionList, - MatTabGroup, - MatTab, - MatTabLabel, - MatLabel, - MatFormField, - ReactiveFormsModule, - MatError, - MatDialogTitle, - MatDialogContent, - MatDialogActions, - MatMiniFabButton, - MatTreeModule, - MatTable, - MatColumnDef, - MatHeaderCell, - MatHeaderCellDef, - MatCellDef, - MatCell, - MatHeaderRow, - MatRow, - MatHeaderRowDef, - MatRowDef, - MatCheckbox, - MatSelect, - MatOption, - MatHint, - MatTooltip, - MatCard, - MatCardContent, - MatCardHeader, - MatAccordion, - MatExpansionPanel, - MatExpansionPanelTitle, - MatCardTitle, - MatExpansionPanelHeader, - ], + imports: [ + BrowserModule, + FormsModule, + HttpClientModule, + CoreModule, + SharedModule, + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: httpLoaderFactory, + deps: [HttpClient] + } + }), + BrowserAnimationsModule, + MatIcon, + MatToolbar, + MatButton, + MatFormField, + MatInput, + MatDrawerContainer, + MatDrawer, + MatIconButton, + MatMenuTrigger, + MatMenu, + MatMenuItem, + MatListItem, + MatActionList, + MatTabGroup, + MatTab, + MatTabLabel, + MatLabel, + MatFormField, + ReactiveFormsModule, + MatError, + MatDialogTitle, + MatDialogContent, + MatDialogActions, + MatMiniFabButton, + MatTreeModule, + MatTable, + MatColumnDef, + MatHeaderCell, + MatHeaderCellDef, + MatCellDef, + MatCell, + MatHeaderRow, + MatRow, + MatHeaderRowDef, + MatRowDef, + MatCheckbox, + MatSelect, + MatOption, + MatHint, + MatTooltip, + MatCard, + MatCardContent, + MatCardHeader, + MatAccordion, + MatExpansionPanel, + MatExpansionPanelTitle, + MatCardTitle, + MatExpansionPanelHeader, + InventoryItemEditorComponent, + ], providers: [], bootstrap: [AppComponent] }) diff --git a/src/app/editor/character-editor/character-editor.component.ts b/src/app/editor/character-editor/character-editor.component.ts index 9c1a072..291f361 100644 --- a/src/app/editor/character-editor/character-editor.component.ts +++ b/src/app/editor/character-editor/character-editor.component.ts @@ -1,4 +1,4 @@ -import {Component, Input} from '@angular/core'; +import {Component, Input, OnInit} from '@angular/core'; import {Character} from "../../project/game-model/characters/Character"; import {GameModel} from "../../project/game-model/GameModel"; import {MatDialog} from "@angular/material/dialog"; diff --git a/src/app/editor/editor.component.html b/src/app/editor/editor.component.html index 23be637..e856a70 100644 --- a/src/app/editor/editor.component.html +++ b/src/app/editor/editor.component.html @@ -16,9 +16,11 @@ [scriptAccounts]="gameModel!.scriptAccounts"> - + [gameModel]="gameModel!"> + + diff --git a/src/app/editor/editor.component.ts b/src/app/editor/editor.component.ts index 50f44b9..b69cdbf 100644 --- a/src/app/editor/editor.component.ts +++ b/src/app/editor/editor.component.ts @@ -7,6 +7,7 @@ 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"; +import {Item} from "../project/game-model/inventory/Item"; @Component({ @@ -27,6 +28,7 @@ export class EditorComponent { } else { this.activeTab = this.gameModelComponents.findIndex(component => component.componentName === gameModelComponent.componentName); } + console.log(gameModelComponent) } closeGameModelComponent(gameModelComponent: ModelComponent) { @@ -57,4 +59,11 @@ export class EditorComponent { return modelComponent as Character return undefined; } + + convertModelComponentToItem(modelComponent: ModelComponent) { + if(modelComponent instanceof Item) { + return modelComponent as Item + } + return undefined + } } diff --git a/src/app/editor/inventory-item-editor/inventory-item-editor.component.html b/src/app/editor/inventory-item-editor/inventory-item-editor.component.html new file mode 100644 index 0000000..bf9d162 --- /dev/null +++ b/src/app/editor/inventory-item-editor/inventory-item-editor.component.html @@ -0,0 +1 @@ +

inventory-item-editor works!

diff --git a/src/app/editor/inventory-item-editor/inventory-item-editor.component.scss b/src/app/editor/inventory-item-editor/inventory-item-editor.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/editor/inventory-item-editor/inventory-item-editor.component.spec.ts b/src/app/editor/inventory-item-editor/inventory-item-editor.component.spec.ts new file mode 100644 index 0000000..f06b796 --- /dev/null +++ b/src/app/editor/inventory-item-editor/inventory-item-editor.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { InventoryItemEditorComponent } from './inventory-item-editor.component'; + +describe('InventoryItemEditorComponent', () => { + let component: InventoryItemEditorComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [InventoryItemEditorComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(InventoryItemEditorComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/editor/inventory-item-editor/inventory-item-editor.component.ts b/src/app/editor/inventory-item-editor/inventory-item-editor.component.ts new file mode 100644 index 0000000..d9e8076 --- /dev/null +++ b/src/app/editor/inventory-item-editor/inventory-item-editor.component.ts @@ -0,0 +1,18 @@ +import {Component, Input} from '@angular/core'; +import {Character} from "../../project/game-model/characters/Character"; +import {GameModel} from "../../project/game-model/GameModel"; +import {Item} from "../../project/game-model/inventory/Item"; + +@Component({ + selector: 'app-inventory-item-editor', + standalone: true, + imports: [], + templateUrl: './inventory-item-editor.component.html', + styleUrl: './inventory-item-editor.component.scss' +}) +export class InventoryItemEditorComponent { + + @Input() item: Item | undefined; + @Input() gameModel: GameModel | undefined; + +} diff --git a/src/app/project/game-model/GameModel.ts b/src/app/project/game-model/GameModel.ts index ae2b906..3c4030d 100644 --- a/src/app/project/game-model/GameModel.ts +++ b/src/app/project/game-model/GameModel.ts @@ -108,7 +108,7 @@ export class GameModel { createInventoryItem(itemName: string) { if(itemName != undefined) { - const item = new Item(itemName, "", ModelComponentType.CHARACTER); + const item = new Item(itemName, "", ModelComponentType.ITEM); this.inventoryItems.push(item); } } From f70328e3322a038f48a50eff1a40b8384cc35311 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20B=C3=B6ckelmann?= Date: Sat, 20 Apr 2024 07:59:24 +0200 Subject: [PATCH 3/9] Visualize ItemProperties in Editor --- src/app/app.module.ts | 8 ++- .../inventory-item-editor.component.html | 9 ++- .../inventory-item-editor.component.ts | 3 +- .../item-property-editor.component.html | 64 +++++++++++++++++++ .../item-property-editor.component.scss | 57 +++++++++++++++++ .../item-property-editor.component.spec.ts | 23 +++++++ .../item-property-editor.component.ts | 33 ++++++++++ src/app/project/game-model/inventory/Item.ts | 6 ++ .../game-model/inventory/ItemProperty.ts | 4 +- 9 files changed, 201 insertions(+), 6 deletions(-) create mode 100644 src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.html create mode 100644 src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.scss create mode 100644 src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.spec.ts create mode 100644 src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.ts diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 218e124..99f725d 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -86,6 +86,9 @@ import { InventoryItemOverviewComponent } from "./side-overviews/inventory-item-overview/inventory-item-overview.component"; import {InventoryItemEditorComponent} from "./editor/inventory-item-editor/inventory-item-editor.component"; +import { + ItemPropertyEditorComponent +} from "./editor/inventory-item-editor/item-property-editor/item-property-editor.component"; // AoT requires an exported function for factories const httpLoaderFactory = (http: HttpClient): TranslateHttpLoader => new TranslateHttpLoader(http, './assets/i18n/', '.json'); @@ -112,7 +115,9 @@ const httpLoaderFactory = (http: HttpClient): TranslateHttpLoader => new Transl CharacterEditorComponent, TemplateSpecificatorComponent, StateInitialCellComponent, - InventoryItemOverviewComponent + InventoryItemOverviewComponent, + InventoryItemEditorComponent, + ItemPropertyEditorComponent ], imports: [ BrowserModule, @@ -176,7 +181,6 @@ const httpLoaderFactory = (http: HttpClient): TranslateHttpLoader => new Transl MatExpansionPanelTitle, MatCardTitle, MatExpansionPanelHeader, - InventoryItemEditorComponent, ], providers: [], bootstrap: [AppComponent] diff --git a/src/app/editor/inventory-item-editor/inventory-item-editor.component.html b/src/app/editor/inventory-item-editor/inventory-item-editor.component.html index bf9d162..5219992 100644 --- a/src/app/editor/inventory-item-editor/inventory-item-editor.component.html +++ b/src/app/editor/inventory-item-editor/inventory-item-editor.component.html @@ -1 +1,8 @@ -

inventory-item-editor works!

+ + + Item Characteristics + + + + + diff --git a/src/app/editor/inventory-item-editor/inventory-item-editor.component.ts b/src/app/editor/inventory-item-editor/inventory-item-editor.component.ts index d9e8076..f642cd0 100644 --- a/src/app/editor/inventory-item-editor/inventory-item-editor.component.ts +++ b/src/app/editor/inventory-item-editor/inventory-item-editor.component.ts @@ -2,11 +2,10 @@ import {Component, Input} from '@angular/core'; import {Character} from "../../project/game-model/characters/Character"; import {GameModel} from "../../project/game-model/GameModel"; import {Item} from "../../project/game-model/inventory/Item"; +import {MatCard, MatCardContent, MatCardHeader} from "@angular/material/card"; @Component({ selector: 'app-inventory-item-editor', - standalone: true, - imports: [], templateUrl: './inventory-item-editor.component.html', styleUrl: './inventory-item-editor.component.scss' }) diff --git a/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.html b/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.html new file mode 100644 index 0000000..5fe9335 --- /dev/null +++ b/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.html @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Name + {{itemProperty.propertyName}} + +
+

{{element.propertyDescription}}

+
+
Characteristic +

{{itemProperty.property}}

+
+ + + +
diff --git a/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.scss b/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.scss new file mode 100644 index 0000000..f4b8648 --- /dev/null +++ b/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.scss @@ -0,0 +1,57 @@ +table { + width: 100%; +} + +tr.example-detail-row { + height: 0; +} + +tr.example-element-row:not(.example-expanded-row):hover { + background: #545456 +} + +tr.example-element-row:not(.example-expanded-row):active { + background: #545456; +} + +.example-element-row td { + border-bottom-width: 0; +} +.example-element-diagram { + min-width: 80px; + border: 2px solid black; + padding: 8px; + font-weight: lighter; + margin: 8px 0; + height: 104px; +} + +.example-element-symbol { + font-weight: bold; + font-size: 40px; + line-height: normal; +} + +.example-element-description { + padding: 16px; +} + +.example-element-description-attribution { + opacity: 0.5; +} + +.mat-column-edit, .mat-column-delete, .mat-column-expand { + width: 32px; +} + +.long-form { + width: 100%; +} + +.mat-error { + color: red; +} + +.warning-icon { + margin-right: 5px; +} diff --git a/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.spec.ts b/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.spec.ts new file mode 100644 index 0000000..7343da8 --- /dev/null +++ b/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ItemPropertyEditorComponent } from './item-property-editor.component'; + +describe('ItemPropertyEditorComponent', () => { + let component: ItemPropertyEditorComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ItemPropertyEditorComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(ItemPropertyEditorComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.ts b/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.ts new file mode 100644 index 0000000..eb88c61 --- /dev/null +++ b/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.ts @@ -0,0 +1,33 @@ +import {Component, Input, OnInit} from '@angular/core'; +import {Item} from "../../../project/game-model/inventory/Item"; +import {MatTableDataSource} from "@angular/material/table"; +import {ItemProperty} from "../../../project/game-model/inventory/ItemProperty"; +import {animate, state, style, transition, trigger} from "@angular/animations"; + +@Component({ + selector: 'app-item-property-editor', + templateUrl: './item-property-editor.component.html', + styleUrl: './item-property-editor.component.scss', + animations: [ + trigger('detailExpand', [ + state('collapsed,void', style({height: '0px', minHeight: '0'})), + state('expanded', style({height: '*'})), + transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')), + ]), + ], +}) +export class ItemPropertyEditorComponent implements OnInit{ + + @Input() item: Item | undefined + editedItemProperty: ItemProperty | undefined + expandedElement: ItemProperty | undefined + + displayedColumns: string[] = ['name', 'property'] + columnsToDisplayWithExpand = [...this.displayedColumns, 'expand']; + + datasource: MatTableDataSource = new MatTableDataSource(); + + ngOnInit() { + this.datasource.data = this.item!.itemProperties + } +} diff --git a/src/app/project/game-model/inventory/Item.ts b/src/app/project/game-model/inventory/Item.ts index 3aec112..3d87ac0 100644 --- a/src/app/project/game-model/inventory/Item.ts +++ b/src/app/project/game-model/inventory/Item.ts @@ -1,10 +1,16 @@ import {ItemProperty} from "./ItemProperty"; import {ItemQuality} from "./ItemQuality"; import {ModelComponent} from "../ModelComponent"; +import {ModelComponentType} from "../ModelComponentType"; export class Item extends ModelComponent { possible_qualities: ItemQuality[] = [] itemProperties: ItemProperty[] = [] + + constructor(componentName: string, componentDescription: string, type: ModelComponentType) { + super(componentName, componentDescription, type); + this.itemProperties.push(new ItemProperty("Weight", "Some Weights", 10)) + } } diff --git a/src/app/project/game-model/inventory/ItemProperty.ts b/src/app/project/game-model/inventory/ItemProperty.ts index 4fb219a..e710c2d 100644 --- a/src/app/project/game-model/inventory/ItemProperty.ts +++ b/src/app/project/game-model/inventory/ItemProperty.ts @@ -1,10 +1,12 @@ export class ItemProperty { propertyName: string + propertyDescription: string property: number - constructor(propertyName: string, property: number) { + constructor(propertyName: string, propertyDescription: string, property: number) { this.propertyName = propertyName; + this.propertyDescription = propertyDescription; this.property = property; } } From eb42ebb7e35afd893246b014a070163da40afff3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20B=C3=B6ckelmann?= Date: Sat, 20 Apr 2024 08:03:25 +0200 Subject: [PATCH 4/9] Delete ItemProperties of Item --- .../item-property-editor.component.html | 10 +++++----- .../item-property-editor.component.ts | 7 ++++++- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.html b/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.html index 5fe9335..a528c05 100644 --- a/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.html +++ b/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.html @@ -18,7 +18,7 @@ - Characteristic + Value

{{itemProperty.property}}

@@ -30,14 +30,14 @@ -
+ --> - - + + - --> + diff --git a/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.ts b/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.ts index eb88c61..987fefa 100644 --- a/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.ts +++ b/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.ts @@ -22,7 +22,7 @@ export class ItemPropertyEditorComponent implements OnInit{ editedItemProperty: ItemProperty | undefined expandedElement: ItemProperty | undefined - displayedColumns: string[] = ['name', 'property'] + displayedColumns: string[] = ['name', 'property', 'delete'] columnsToDisplayWithExpand = [...this.displayedColumns, 'expand']; datasource: MatTableDataSource = new MatTableDataSource(); @@ -30,4 +30,9 @@ export class ItemPropertyEditorComponent implements OnInit{ ngOnInit() { this.datasource.data = this.item!.itemProperties } + + deleteItemProperty(itemProperty: ItemProperty) { + this.item!.itemProperties = this.item!.itemProperties.filter(property => property.propertyName !== itemProperty.propertyName) + this.datasource.data = this.item!.itemProperties + } } From 704150d9997db24502f224c9752f5b4110b0f73e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20B=C3=B6ckelmann?= Date: Sat, 20 Apr 2024 08:12:34 +0200 Subject: [PATCH 5/9] Edit ItemProperties of Item --- .../item-property-editor.component.html | 27 ++++++++++++++----- .../item-property-editor.component.ts | 19 ++++++++++++- 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.html b/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.html index a528c05..ddae7b8 100644 --- a/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.html +++ b/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.html @@ -3,6 +3,10 @@ Name {{itemProperty.propertyName}} + + Name + + @@ -10,7 +14,11 @@
-

{{element.propertyDescription}}

+

{{element.propertyDescription}}

+ + Description + +
@@ -20,17 +28,22 @@ Value -

{{itemProperty.property}}

+

{{itemProperty.property}}

+ + Value + +
- + diff --git a/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.ts b/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.ts index 987fefa..82eb657 100644 --- a/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.ts +++ b/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.ts @@ -3,6 +3,7 @@ import {Item} from "../../../project/game-model/inventory/Item"; import {MatTableDataSource} from "@angular/material/table"; import {ItemProperty} from "../../../project/game-model/inventory/ItemProperty"; import {animate, state, style, transition, trigger} from "@angular/animations"; +import {MatSnackBar} from "@angular/material/snack-bar"; @Component({ selector: 'app-item-property-editor', @@ -22,11 +23,14 @@ export class ItemPropertyEditorComponent implements OnInit{ editedItemProperty: ItemProperty | undefined expandedElement: ItemProperty | undefined - displayedColumns: string[] = ['name', 'property', 'delete'] + displayedColumns: string[] = ['name', 'property', 'edit', 'delete'] columnsToDisplayWithExpand = [...this.displayedColumns, 'expand']; datasource: MatTableDataSource = new MatTableDataSource(); + constructor(private snackbar: MatSnackBar) { + } + ngOnInit() { this.datasource.data = this.item!.itemProperties } @@ -35,4 +39,17 @@ export class ItemPropertyEditorComponent implements OnInit{ this.item!.itemProperties = this.item!.itemProperties.filter(property => property.propertyName !== itemProperty.propertyName) this.datasource.data = this.item!.itemProperties } + + editItemProperty(itemProperty: ItemProperty) { + this.editedItemProperty = itemProperty + } + + finishEditing() { + if(this.editedItemProperty!.propertyName.length < 1) { + this.snackbar.open("PropertyName cannout be empty", "", {duration: 2000}); + } else { + this.editedItemProperty = undefined + } + + } } From 9dc5418d6457a2e6f43da80a9105af8ce26eea14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20B=C3=B6ckelmann?= Date: Sat, 20 Apr 2024 08:15:18 +0200 Subject: [PATCH 6/9] Add New ItemProperties --- .../item-property-editor.component.html | 4 +--- .../item-property-editor/item-property-editor.component.ts | 6 ++++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.html b/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.html index ddae7b8..c39b808 100644 --- a/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.html +++ b/src/app/editor/inventory-item-editor/item-property-editor/item-property-editor.component.html @@ -23,8 +23,6 @@ - - Value @@ -54,7 +52,7 @@ - + + - +