main #48
@ -9,9 +9,9 @@
 | 
			
		||||
          <mat-panel-title>{{itemgroup.componentName}}</mat-panel-title>
 | 
			
		||||
          <mat-panel-description>{{itemgroup.componentDescription}}</mat-panel-description>
 | 
			
		||||
        </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