From 73edf03fa0547d04f326f0dad0727c682b1966f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20B=C3=B6ckelmann?= Date: Thu, 9 May 2024 13:33:26 +0200 Subject: [PATCH] Load Itemgroups --- app/storage/loader/GameModelLoader.js | 7 +++ app/storage/loader/GameModelLoader.ts | 12 +++-- app/storage/loader/ItemLoader.ts | 46 +++++++++++++++++++ app/storage/storing/ItemgroupStorage.js | 1 - app/storage/storing/ItemgroupStorage.ts | 1 - .../game-model/inventory/AbstractItemGroup.ts | 2 + .../game-model/inventory/ConcreteItemGroup.ts | 2 + .../game-model/inventory/ItemgroupType.ts | 4 ++ .../parser/itemParser/ItemgroupParser.ts | 8 ++++ testModel/items/Clothing/Clothing.json | 3 +- testModel/items/Clothing/Hose/Hose.json | 4 +- .../items/Clothing/Oberteil/Oberteil.json | 4 +- testModel/items/Inventory/Inventory.json | 3 +- 13 files changed, 87 insertions(+), 10 deletions(-) create mode 100644 app/storage/loader/ItemLoader.ts create mode 100644 src/app/project/game-model/inventory/ItemgroupType.ts create mode 100644 src/app/project/parser/itemParser/ItemgroupParser.ts diff --git a/app/storage/loader/GameModelLoader.js b/app/storage/loader/GameModelLoader.js index 7b10263..1ff3639 100644 --- a/app/storage/loader/GameModelLoader.js +++ b/app/storage/loader/GameModelLoader.js @@ -7,6 +7,7 @@ const ModelComponentFileDirectory_1 = require("../ModelComponentFileDirectory"); const ScriptAccountLoader_1 = require("./ScriptAccountLoader"); const GamesystemLoader_1 = require("./GamesystemLoader"); const CharacterLoader_1 = require("./CharacterLoader"); +const ItemLoader_1 = require("./ItemLoader"); class GameModelLoader { constructor(gameModelDir) { this.gameModelDir = gameModelDir; @@ -16,6 +17,7 @@ class GameModelLoader { const storedScriptAccounts = this.loadScriptAccountComponents(); const storedGamesystems = this.loadGamesystems(); const storedCharacters = this.loadCharacters(); + const storedItemgroupsd = this.loadItemgroups(); return new StoredGameModel_1.StoredGameModel(gameModelName, storedScriptAccounts, storedGamesystems, storedCharacters, [], []); } loadScriptAccountComponents() { @@ -33,6 +35,11 @@ class GameModelLoader { const characterLoader = new CharacterLoader_1.CharacterLoader(characterDir); return characterLoader.loadCharacters(); } + loadItemgroups() { + const itemgroupDir = path.join(this.gameModelDir, ModelComponentFileDirectory_1.ModelComponentFileDirectory.ITEMGROUP_DIR_NAME); + const itemgroupLoader = new ItemLoader_1.ItemLoader(itemgroupDir); + return itemgroupLoader.loadItemgroups(); + } } exports.GameModelLoader = GameModelLoader; //# sourceMappingURL=GameModelLoader.js.map \ No newline at end of file diff --git a/app/storage/loader/GameModelLoader.ts b/app/storage/loader/GameModelLoader.ts index 170a147..fc46748 100644 --- a/app/storage/loader/GameModelLoader.ts +++ b/app/storage/loader/GameModelLoader.ts @@ -6,6 +6,7 @@ import {ModelComponentFileDirectory} from "../ModelComponentFileDirectory"; import {ScriptAccountLoader} from "./ScriptAccountLoader"; import {GamesystemLoader} from "./GamesystemLoader"; import {CharacterLoader} from "./CharacterLoader"; +import {ItemLoader} from "./ItemLoader"; export class GameModelLoader { gameModelDir: string @@ -21,8 +22,9 @@ export class GameModelLoader { const storedScriptAccounts = this.loadScriptAccountComponents(); const storedGamesystems = this.loadGamesystems(); const storedCharacters = this.loadCharacters() + const storedItemgroups = this.loadItemgroups() - return new StoredGameModel(gameModelName, storedScriptAccounts, storedGamesystems, storedCharacters, [], []); + return new StoredGameModel(gameModelName, storedScriptAccounts, storedGamesystems, storedCharacters, storedItemgroups, []); } private loadScriptAccountComponents() { @@ -44,7 +46,9 @@ export class GameModelLoader { } - - - + private loadItemgroups() { + const itemgroupDir = path.join(this.gameModelDir, ModelComponentFileDirectory.ITEMGROUP_DIR_NAME); + const itemgroupLoader = new ItemLoader(itemgroupDir); + return itemgroupLoader.loadItemgroups(); + } } diff --git a/app/storage/loader/ItemLoader.ts b/app/storage/loader/ItemLoader.ts new file mode 100644 index 0000000..6e84368 --- /dev/null +++ b/app/storage/loader/ItemLoader.ts @@ -0,0 +1,46 @@ +import {StoreComponent} from "../StoreComponent"; +import {FileUtils} from "../FileUtils"; +import * as fs from "node:fs"; +import * as path from "node:path"; +import {ModelComponentType} from "../../../src/app/project/game-model/ModelComponentType"; + +export class ItemLoader { + + itemDir: string + + constructor(itemDir: string) { + this.itemDir = itemDir; + } + + loadItemgroups(): StoreComponent[] { + return this.loadItemgroupsRecursively(this.itemDir); + } + + private loadItemgroupsRecursively(currentDir: string): StoreComponent[] { + let loadedItemgroups : StoreComponent[] = [] + const itemgroupFiles = FileUtils.listFilesInDirectory(currentDir); + + itemgroupFiles.forEach(itemgroupFile => { + if(fs.lstatSync(itemgroupFile).isDirectory()) { + const childgroup = this.loadItemgroupsRecursively(itemgroupFile); + loadedItemgroups = loadedItemgroups.concat(childgroup); + } else if(path.basename(itemgroupFile).endsWith(".json") && this.fileRepresentsItemgroup(itemgroupFile)){ + const loadedItemgroup = this.loadSingleItemgroup(itemgroupFile)!; + loadedItemgroups.push(loadedItemgroup) + } + }) + return loadedItemgroups; + } + + private loadSingleItemgroup(itemgroupFile: string): StoreComponent | undefined { + if(itemgroupFile.endsWith(".json")) { + const data = fs.readFileSync(itemgroupFile, "utf-8"); + return new StoreComponent(data, itemgroupFile, ModelComponentType.ITEMGROUP); + } + return undefined + } + + private fileRepresentsItemgroup(file: string): boolean { + return path.basename(path.dirname(file)) === path.parse(path.basename(file)).name; + } +} diff --git a/app/storage/storing/ItemgroupStorage.js b/app/storage/storing/ItemgroupStorage.js index 3d6a0e1..2851c97 100644 --- a/app/storage/storing/ItemgroupStorage.js +++ b/app/storage/storing/ItemgroupStorage.js @@ -19,7 +19,6 @@ class ItemgroupStorage { const completeFileName = path.join(this.itemgroupDir, file); const itemgroupDirectory = path.join(...itemgroup.fileName.split("/").slice(0, -1)); const completeItemgroupDirectory = path.join(this.itemgroupDir, itemgroupDirectory); - console.log(completeItemgroupDirectory); FileUtils_1.FileUtils.prepareDirectoryFroWriting(completeItemgroupDirectory); fs.writeFileSync(completeFileName + ".json", itemgroup.jsonString, "utf-8"); } diff --git a/app/storage/storing/ItemgroupStorage.ts b/app/storage/storing/ItemgroupStorage.ts index 3049f7e..84f7fdd 100644 --- a/app/storage/storing/ItemgroupStorage.ts +++ b/app/storage/storing/ItemgroupStorage.ts @@ -24,7 +24,6 @@ export class ItemgroupStorage { const itemgroupDirectory = path.join(... itemgroup.fileName.split("/").slice(0, -1)) const completeItemgroupDirectory = path.join(this.itemgroupDir, itemgroupDirectory) - console.log(completeItemgroupDirectory) FileUtils.prepareDirectoryFroWriting(completeItemgroupDirectory); fs.writeFileSync(completeFileName + ".json", itemgroup.jsonString, "utf-8") } diff --git a/src/app/project/game-model/inventory/AbstractItemGroup.ts b/src/app/project/game-model/inventory/AbstractItemGroup.ts index 5141f5a..cc95cb0 100644 --- a/src/app/project/game-model/inventory/AbstractItemGroup.ts +++ b/src/app/project/game-model/inventory/AbstractItemGroup.ts @@ -1,9 +1,11 @@ import {ItemGroup} from "./ItemGroup"; import {ItemGroupCharacteristic} from "./ItemgroupCharacteristic"; +import {ItemgroupType} from "./ItemgroupType"; export class AbstractItemGroup extends ItemGroup { children: ItemGroup[] = []; + itemgroupType = ItemgroupType.ABSTRACT addChildItemgroup(itemGroup: ItemGroup) { this.children.push(itemGroup) diff --git a/src/app/project/game-model/inventory/ConcreteItemGroup.ts b/src/app/project/game-model/inventory/ConcreteItemGroup.ts index 21e6682..5ad4710 100644 --- a/src/app/project/game-model/inventory/ConcreteItemGroup.ts +++ b/src/app/project/game-model/inventory/ConcreteItemGroup.ts @@ -1,10 +1,12 @@ import {ItemGroup} from "./ItemGroup"; import {Item} from "./Item"; import {ItemGroupCharacteristic} from "./ItemgroupCharacteristic"; +import {ItemgroupType} from "./ItemgroupType"; export class ConcreteItemGroup extends ItemGroup { items: Item[] = []; + itemgroupType = ItemgroupType.CONCRETE addItem(item: Item, parentItemgroups: ItemGroup[]) { if(this.findItemByName(item.componentName) == undefined) { diff --git a/src/app/project/game-model/inventory/ItemgroupType.ts b/src/app/project/game-model/inventory/ItemgroupType.ts new file mode 100644 index 0000000..f1ca933 --- /dev/null +++ b/src/app/project/game-model/inventory/ItemgroupType.ts @@ -0,0 +1,4 @@ +export enum ItemgroupType { + CONCRETE, + ABSTRACT +} diff --git a/src/app/project/parser/itemParser/ItemgroupParser.ts b/src/app/project/parser/itemParser/ItemgroupParser.ts new file mode 100644 index 0000000..36b509d --- /dev/null +++ b/src/app/project/parser/itemParser/ItemgroupParser.ts @@ -0,0 +1,8 @@ +import {ItemGroup} from "../../game-model/inventory/ItemGroup"; + +export class ItemgroupParser { + + private parsedItemgroups: ItemGroup[] = [] + + +} diff --git a/testModel/items/Clothing/Clothing.json b/testModel/items/Clothing/Clothing.json index 845e3dd..e3e3412 100644 --- a/testModel/items/Clothing/Clothing.json +++ b/testModel/items/Clothing/Clothing.json @@ -7,5 +7,6 @@ "characteristicDescription": "" } ], - "manuallyInheritedItems": [] + "manuallyInheritedItems": [], + "itemgroupType": 1 } \ No newline at end of file diff --git a/testModel/items/Clothing/Hose/Hose.json b/testModel/items/Clothing/Hose/Hose.json index cacc167..2b39d60 100644 --- a/testModel/items/Clothing/Hose/Hose.json +++ b/testModel/items/Clothing/Hose/Hose.json @@ -3,6 +3,7 @@ "componentDescription": "", "itemGroupCharacteristics": [], "manuallyInheritedItems": [], + "itemgroupType": 0, "parentGroup": { "componentName": "Clothing", "componentDescription": "", @@ -12,6 +13,7 @@ "characteristicDescription": "" } ], - "manuallyInheritedItems": [] + "manuallyInheritedItems": [], + "itemgroupType": 1 } } \ No newline at end of file diff --git a/testModel/items/Clothing/Oberteil/Oberteil.json b/testModel/items/Clothing/Oberteil/Oberteil.json index 00be2b1..2173a00 100644 --- a/testModel/items/Clothing/Oberteil/Oberteil.json +++ b/testModel/items/Clothing/Oberteil/Oberteil.json @@ -3,6 +3,7 @@ "componentDescription": "", "itemGroupCharacteristics": [], "manuallyInheritedItems": [], + "itemgroupType": 0, "parentGroup": { "componentName": "Clothing", "componentDescription": "", @@ -12,6 +13,7 @@ "characteristicDescription": "" } ], - "manuallyInheritedItems": [] + "manuallyInheritedItems": [], + "itemgroupType": 1 } } \ No newline at end of file diff --git a/testModel/items/Inventory/Inventory.json b/testModel/items/Inventory/Inventory.json index 7b72ad9..01b3765 100644 --- a/testModel/items/Inventory/Inventory.json +++ b/testModel/items/Inventory/Inventory.json @@ -18,5 +18,6 @@ } ] } - ] + ], + "itemgroupType": 1 } \ No newline at end of file