diff --git a/src/app/app.component.html b/src/app/app.component.html index 836a9d0..c8c374d 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -32,7 +32,9 @@ - +
diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 4675df6..d66da66 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -84,6 +84,7 @@ import { } from "./editor/gamesystem-editor/state-editor/simple-state-editor/state-initial-cell/state-initial-cell.component"; import {ItemOverviewComponent} from "./side-overviews/item-overview/item-overview.component"; import {ItemGroupEditorComponent} from "./editor/items/item-group-editor/item-group-editor.component"; +import {ItemEditorComponent} from "./editor/items/item-editor/item-editor.component"; // AoT requires an exported function for factories const httpLoaderFactory = (http: HttpClient): TranslateHttpLoader => new TranslateHttpLoader(http, './assets/i18n/', '.json'); @@ -111,7 +112,8 @@ const httpLoaderFactory = (http: HttpClient): TranslateHttpLoader => new Transl TemplateSpecificatorComponent, StateInitialCellComponent, ItemOverviewComponent, - ItemGroupEditorComponent + ItemGroupEditorComponent, + ItemEditorComponent ], imports: [ BrowserModule, diff --git a/src/app/editor/editor.component.html b/src/app/editor/editor.component.html index 669de3c..90d41ee 100644 --- a/src/app/editor/editor.component.html +++ b/src/app/editor/editor.component.html @@ -21,5 +21,6 @@ + diff --git a/src/app/editor/editor.component.ts b/src/app/editor/editor.component.ts index 9f5576d..2b31b33 100644 --- a/src/app/editor/editor.component.ts +++ b/src/app/editor/editor.component.ts @@ -8,6 +8,7 @@ import {Transition} from "../project/game-model/gamesystems/transitions/Transiti import {ModelComponentType} from "../project/game-model/ModelComponentType"; import {Character} from "../project/game-model/characters/Character"; import {ItemGroup} from "../project/game-model/inventory/ItemGroup"; +import {Item} from "../project/game-model/inventory/Item"; @Component({ @@ -65,4 +66,11 @@ export class EditorComponent { } return undefined; } + + convertModelComponentToItem(modelComponent: ModelComponent) { + if(modelComponent instanceof Item) { + return modelComponent as Item; + } + return undefined; + } } diff --git a/src/app/editor/items/item-editor/item-editor.component.html b/src/app/editor/items/item-editor/item-editor.component.html new file mode 100644 index 0000000..75719cb --- /dev/null +++ b/src/app/editor/items/item-editor/item-editor.component.html @@ -0,0 +1 @@ +

item-editor works!

diff --git a/src/app/editor/items/item-editor/item-editor.component.scss b/src/app/editor/items/item-editor/item-editor.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/editor/items/item-editor/item-editor.component.spec.ts b/src/app/editor/items/item-editor/item-editor.component.spec.ts new file mode 100644 index 0000000..a1e4546 --- /dev/null +++ b/src/app/editor/items/item-editor/item-editor.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ItemEditorComponent } from './item-editor.component'; + +describe('ItemEditorComponent', () => { + let component: ItemEditorComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ItemEditorComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(ItemEditorComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/editor/items/item-editor/item-editor.component.ts b/src/app/editor/items/item-editor/item-editor.component.ts new file mode 100644 index 0000000..f360f3a --- /dev/null +++ b/src/app/editor/items/item-editor/item-editor.component.ts @@ -0,0 +1,12 @@ +import {Component, Input} from '@angular/core'; +import {Item} from "../../../project/game-model/inventory/Item"; + +@Component({ + selector: 'app-item-editor', + templateUrl: './item-editor.component.html', + styleUrl: './item-editor.component.scss' +}) +export class ItemEditorComponent { + + @Input() item: Item | undefined +} diff --git a/src/app/side-overviews/item-overview/item-overview.component.ts b/src/app/side-overviews/item-overview/item-overview.component.ts index eb207fe..3ae9aa0 100644 --- a/src/app/side-overviews/item-overview/item-overview.component.ts +++ b/src/app/side-overviews/item-overview/item-overview.component.ts @@ -7,6 +7,7 @@ import {ConcreteItemGroup} from "../../project/game-model/inventory/ConcreteItem import {ModelComponent} from "../../project/game-model/ModelComponent"; import {ModelComponentType} from "../../project/game-model/ModelComponentType"; import {ItemGroup} from "../../project/game-model/inventory/ItemGroup"; +import {Item} from "../../project/game-model/inventory/Item"; interface FlatNode { expandable: boolean, @@ -24,6 +25,7 @@ export class ItemOverviewComponent implements OnInit{ @Input() gameModel: GameModel | undefined @Output() openItemgroupEmitter: EventEmitter = new EventEmitter(); + @Output() onOpenItemEditor: EventEmitter = new EventEmitter(); private _transformer = (node: ModelComponent, level: number) => { if(node instanceof AbstractItemGroup) { @@ -31,14 +33,14 @@ export class ItemOverviewComponent implements OnInit{ expandable: !!node.children && node.children.length > 0, name: node.componentName, level: level, - type: ModelComponentType.ITEMGROUP + type: ModelComponentType.ITEMGROUP, }; } else if(node instanceof ConcreteItemGroup) { return { expandable: !!node.items && node.items.length > 0, name: node.componentName, level: level, - type: ModelComponentType.ITEMGROUP + type: ModelComponentType.ITEMGROUP, } } else { return { @@ -94,6 +96,28 @@ export class ItemOverviewComponent implements OnInit{ if(itemGroup) { this.openItemgroupEmitter.emit(itemGroup); } + } else if(node.type == ModelComponentType.ITEM) { + const item = this.searchItemByName(node.name); + if(item !== undefined) { + this.onOpenItemEditor.emit(item); + } } } + + private searchItemByName(itemName: string): Item | undefined { + let groupQueue: ItemGroup[] = this.gameModel!.itemgroups.concat(); + while(groupQueue.length > 0) { + const currentGroup = groupQueue.shift()!; + + if(currentGroup instanceof AbstractItemGroup) { + groupQueue = groupQueue.concat(currentGroup.children); + } else if(currentGroup instanceof ConcreteItemGroup) { + const searchResult = currentGroup.items.find(item => item.componentName === itemName); + if(searchResult != undefined) { + return searchResult; + } + } + } + return undefined; + } }