inventory-items-2 #44
@ -11,7 +11,7 @@
|
||||
</mat-expansion-panel-header>
|
||||
|
||||
<div class="panel-actions">
|
||||
<button mat-raised-button color="warn" (click)="deleteInheritedItemgroup(itemgroup)">Delete</button>
|
||||
<button mat-raised-button color="warn" [disabled]="automaticallyInheritedItemgroups.includes(itemgroup)" (click)="deleteInheritedItemgroup(itemgroup)">Delete</button>
|
||||
</div>
|
||||
</mat-expansion-panel>
|
||||
</mat-accordion>
|
||||
|
@ -4,6 +4,7 @@ import {ItemGroup} from "../../../project/game-model/inventory/ItemGroup";
|
||||
import {GameModel} from "../../../project/game-model/GameModel";
|
||||
import {MatDialog} from "@angular/material/dialog";
|
||||
import {ItemgroupInheritorComponent} from "./itemgroup-inheritor/itemgroup-inheritor.component";
|
||||
import {ItemgroupUtilities} from "../../../project/game-model/utils/ItemgroupUtilities";
|
||||
|
||||
@Component({
|
||||
selector: 'app-item-editor',
|
||||
@ -35,4 +36,8 @@ export class ItemEditorComponent {
|
||||
deleteInheritedItemgroup(itemgroup: ItemGroup) {
|
||||
this.item!.inheritedGroups = this.item!.inheritedGroups.filter(group => group.componentName !== itemgroup.componentName);
|
||||
}
|
||||
|
||||
get automaticallyInheritedItemgroups() {
|
||||
return ItemgroupUtilities.findItemgroupPathToItem(this.item!.componentName, this.gameModel!.itemgroups);
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,20 @@
|
||||
import {GameModel} from "../GameModel";
|
||||
import {ItemGroup} from "../inventory/ItemGroup";
|
||||
import {AbstractItemGroup} from "../inventory/AbstractItemGroup";
|
||||
import {ConcreteItemGroup} from "../inventory/ConcreteItemGroup";
|
||||
|
||||
export class ItemgroupUtilities {
|
||||
|
||||
public static findItemgroupPathToItem(searchedItemName: string, itemgroups: ItemGroup[]): ItemGroup[] {
|
||||
for(let i=0; i<itemgroups.length; i++) {
|
||||
const found_path = this.findItemgroupPathToItemRecursive(itemgroups[i], searchedItemName, []);
|
||||
if(found_path.length > 0) {
|
||||
return found_path;
|
||||
}
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
public static findItemgroupPathToItemgroup(searchedItemgroupName: string, itemgroups: ItemGroup[]): ItemGroup[] {
|
||||
for(let i=0; i<itemgroups.length; i++) {
|
||||
const found_path = this.findItemgroupPathToItemgroupRecursive(itemgroups[i], searchedItemgroupName, []);
|
||||
@ -34,4 +45,23 @@ export class ItemgroupUtilities {
|
||||
}
|
||||
}
|
||||
|
||||
private static findItemgroupPathToItemRecursive(root: ItemGroup, searchedItemName: string, path: ItemGroup[]): ItemGroup[] {
|
||||
path.push(root);
|
||||
|
||||
if(root instanceof ConcreteItemGroup) {
|
||||
const searchedItem = root.items.find(item => item.componentName === searchedItemName)
|
||||
if(searchedItem != undefined) {
|
||||
return path;
|
||||
}
|
||||
} else if(root instanceof AbstractItemGroup) {
|
||||
for(let i=0; i<root.children.length; i++) {
|
||||
const found_path = this.findItemgroupPathToItemRecursive(root.children[i], searchedItemName, path.concat());
|
||||
if(found_path.length > 0) {
|
||||
return found_path;
|
||||
}
|
||||
}
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user