inventory-items #42
@ -8,6 +8,7 @@ import {ModelComponentFileDirectory} from "./storage/ModelComponentFileDirectory
|
|||||||
import {GamesystemStorage} from "./storage/storing/GamesystemStorage";
|
import {GamesystemStorage} from "./storage/storing/GamesystemStorage";
|
||||||
import {Character} from "../src/app/project/game-model/characters/Character";
|
import {Character} from "../src/app/project/game-model/characters/Character";
|
||||||
import {CharacterStorage} from "./storage/storing/CharacterStorage";
|
import {CharacterStorage} from "./storage/storing/CharacterStorage";
|
||||||
|
import {ItemStorage} from "./storage/storing/ItemStorage";
|
||||||
|
|
||||||
let win: BrowserWindow | null = null;
|
let win: BrowserWindow | null = null;
|
||||||
const args = process.argv.slice(1),
|
const args = process.argv.slice(1),
|
||||||
@ -247,6 +248,9 @@ function recieveGameModelToStore(gameModel: StoredGameModel) {
|
|||||||
|
|
||||||
const characterStorage = new CharacterStorage(path.join(projectDirectory, ModelComponentFileDirectory.CHARACTER_DIR_NAME))
|
const characterStorage = new CharacterStorage(path.join(projectDirectory, ModelComponentFileDirectory.CHARACTER_DIR_NAME))
|
||||||
characterStorage.storeCharacters(gameModel.storedCharacters)
|
characterStorage.storeCharacters(gameModel.storedCharacters)
|
||||||
|
|
||||||
|
const itemStorage = new ItemStorage(path.join(projectDirectory, ModelComponentFileDirectory.ITEM_DIR_NAME))
|
||||||
|
itemStorage.storeItem(gameModel.storedItems);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*function deleteComponent(component: DeleteModel) {
|
/*function deleteComponent(component: DeleteModel) {
|
||||||
|
@ -7,4 +7,5 @@ exports.ModelComponentFileDirectory = ModelComponentFileDirectory;
|
|||||||
ModelComponentFileDirectory.SCRIPTACCOUNT_DIR_NAME = "script-accounts";
|
ModelComponentFileDirectory.SCRIPTACCOUNT_DIR_NAME = "script-accounts";
|
||||||
ModelComponentFileDirectory.GAMESYSTEM_DIR_NAME = "gamesystems";
|
ModelComponentFileDirectory.GAMESYSTEM_DIR_NAME = "gamesystems";
|
||||||
ModelComponentFileDirectory.CHARACTER_DIR_NAME = "characters";
|
ModelComponentFileDirectory.CHARACTER_DIR_NAME = "characters";
|
||||||
|
ModelComponentFileDirectory.ITEM_DIR_NAME = "items";
|
||||||
//# sourceMappingURL=ModelComponentFileDirectory.js.map
|
//# sourceMappingURL=ModelComponentFileDirectory.js.map
|
@ -2,4 +2,5 @@ export class ModelComponentFileDirectory {
|
|||||||
public static SCRIPTACCOUNT_DIR_NAME = "script-accounts"
|
public static SCRIPTACCOUNT_DIR_NAME = "script-accounts"
|
||||||
public static GAMESYSTEM_DIR_NAME = "gamesystems";
|
public static GAMESYSTEM_DIR_NAME = "gamesystems";
|
||||||
public static CHARACTER_DIR_NAME = "characters";
|
public static CHARACTER_DIR_NAME = "characters";
|
||||||
|
public static ITEM_DIR_NAME = "items";
|
||||||
}
|
}
|
||||||
|
@ -2,11 +2,12 @@
|
|||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.StoredGameModel = void 0;
|
exports.StoredGameModel = void 0;
|
||||||
class StoredGameModel {
|
class StoredGameModel {
|
||||||
constructor(gameModelName, storedScriptAccounts, storedGamesystems, storedCharacters) {
|
constructor(gameModelName, storedScriptAccounts, storedGamesystems, storedCharacters, storedItems) {
|
||||||
this.gameModelName = gameModelName;
|
this.gameModelName = gameModelName;
|
||||||
this.storedGamesystems = storedGamesystems;
|
this.storedGamesystems = storedGamesystems;
|
||||||
this.storedScriptAccounts = storedScriptAccounts;
|
this.storedScriptAccounts = storedScriptAccounts;
|
||||||
this.storedCharacters = storedCharacters;
|
this.storedCharacters = storedCharacters;
|
||||||
|
this.storedItems = storedItems;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
exports.StoredGameModel = StoredGameModel;
|
exports.StoredGameModel = StoredGameModel;
|
||||||
|
@ -6,13 +6,15 @@ export class StoredGameModel {
|
|||||||
storedGamesystems: StoreComponent[]
|
storedGamesystems: StoreComponent[]
|
||||||
storedScriptAccounts: StoreComponent[]
|
storedScriptAccounts: StoreComponent[]
|
||||||
storedCharacters: StoreComponent[]
|
storedCharacters: StoreComponent[]
|
||||||
|
storedItems: StoreComponent[]
|
||||||
|
|
||||||
|
|
||||||
constructor(gameModelName: string, storedScriptAccounts: StoreComponent[], storedGamesystems: StoreComponent[],
|
constructor(gameModelName: string, storedScriptAccounts: StoreComponent[], storedGamesystems: StoreComponent[],
|
||||||
storedCharacters: StoreComponent[]) {
|
storedCharacters: StoreComponent[], storedItems: StoreComponent[]) {
|
||||||
this.gameModelName = gameModelName;
|
this.gameModelName = gameModelName;
|
||||||
this.storedGamesystems = storedGamesystems;
|
this.storedGamesystems = storedGamesystems;
|
||||||
this.storedScriptAccounts = storedScriptAccounts;
|
this.storedScriptAccounts = storedScriptAccounts;
|
||||||
this.storedCharacters = storedCharacters;
|
this.storedCharacters = storedCharacters;
|
||||||
|
this.storedItems = storedItems;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ class GameModelLoader {
|
|||||||
const storedScriptAccounts = this.loadScriptAccountComponents();
|
const storedScriptAccounts = this.loadScriptAccountComponents();
|
||||||
const storedGamesystems = this.loadGamesystems();
|
const storedGamesystems = this.loadGamesystems();
|
||||||
const storedCharacters = this.loadCharacters();
|
const storedCharacters = this.loadCharacters();
|
||||||
return new StoredGameModel_1.StoredGameModel(gameModelName, storedScriptAccounts, storedGamesystems, storedCharacters);
|
return new StoredGameModel_1.StoredGameModel(gameModelName, storedScriptAccounts, storedGamesystems, storedCharacters, []);
|
||||||
}
|
}
|
||||||
loadScriptAccountComponents() {
|
loadScriptAccountComponents() {
|
||||||
const scriptAccountDir = path.join(this.gameModelDir, ModelComponentFileDirectory_1.ModelComponentFileDirectory.SCRIPTACCOUNT_DIR_NAME);
|
const scriptAccountDir = path.join(this.gameModelDir, ModelComponentFileDirectory_1.ModelComponentFileDirectory.SCRIPTACCOUNT_DIR_NAME);
|
||||||
|
@ -22,7 +22,7 @@ export class GameModelLoader {
|
|||||||
const storedGamesystems = this.loadGamesystems();
|
const storedGamesystems = this.loadGamesystems();
|
||||||
const storedCharacters = this.loadCharacters()
|
const storedCharacters = this.loadCharacters()
|
||||||
|
|
||||||
return new StoredGameModel(gameModelName, storedScriptAccounts, storedGamesystems, storedCharacters);
|
return new StoredGameModel(gameModelName, storedScriptAccounts, storedGamesystems, storedCharacters, []);
|
||||||
}
|
}
|
||||||
|
|
||||||
private loadScriptAccountComponents() {
|
private loadScriptAccountComponents() {
|
||||||
|
33
app/storage/storing/ItemStorage.ts
Normal file
33
app/storage/storing/ItemStorage.ts
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
import {FileUtils} from "../FileUtils";
|
||||||
|
import {StoreComponent} from "../StoreComponent";
|
||||||
|
import * as path from "node:path";
|
||||||
|
import * as fs from "node:fs";
|
||||||
|
|
||||||
|
export class ItemStorage {
|
||||||
|
private itemDir: string
|
||||||
|
|
||||||
|
constructor(itemDir: string) {
|
||||||
|
this.itemDir = itemDir;
|
||||||
|
FileUtils.prepareDirectoryFroWriting(this.itemDir);
|
||||||
|
}
|
||||||
|
|
||||||
|
storeItem(storedItems: StoreComponent[]) {
|
||||||
|
this.persistDeletedItems(storedItems);
|
||||||
|
storedItems.forEach(item => this.storeSingleItem(item))
|
||||||
|
}
|
||||||
|
|
||||||
|
private persistDeletedItems(existingItems: StoreComponent[]) {
|
||||||
|
const itemFiles = FileUtils.listFilesInDirectory(this.itemDir);
|
||||||
|
itemFiles.forEach(itemFile => {
|
||||||
|
const itemFileName = path.parse(path.basename(itemFile)).name
|
||||||
|
if(existingItems.find(item => item.fileName === itemFileName) == undefined) {
|
||||||
|
fs.unlinkSync(itemFile)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
private storeSingleItem(item: StoreComponent) {
|
||||||
|
const completeItemFile = path.join(this.itemDir, item.fileName + ".json");
|
||||||
|
fs.writeFileSync(completeItemFile, item.jsonString, 'utf-8')
|
||||||
|
}
|
||||||
|
}
|
@ -27,6 +27,7 @@ import {CharacterParser} from "./project/parser/characterParser/CharacterParser"
|
|||||||
import {TemplateType} from "./project/game-model/templates/TemplateType";
|
import {TemplateType} from "./project/game-model/templates/TemplateType";
|
||||||
import {TemplateTypeUtilities} from "./project/game-model/templates/TemplateTypeUtilities";
|
import {TemplateTypeUtilities} from "./project/game-model/templates/TemplateTypeUtilities";
|
||||||
import {SimpleTemplateGamesystem} from "./project/game-model/templates/simpleGamesystem/SimpleTemplateGamesystem";
|
import {SimpleTemplateGamesystem} from "./project/game-model/templates/simpleGamesystem/SimpleTemplateGamesystem";
|
||||||
|
import {ItemSerializer} from "./project/serializer/ItemSerializer";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-root',
|
selector: 'app-root',
|
||||||
@ -231,7 +232,11 @@ export class AppComponent implements OnInit{
|
|||||||
const storedScriptAccounts = ScriptAccountSerializer.serializeScriptAccounts(this.gameModel.scriptAccounts)
|
const storedScriptAccounts = ScriptAccountSerializer.serializeScriptAccounts(this.gameModel.scriptAccounts)
|
||||||
const storedGamesystems: StoreComponent[] = GamesystemSerializer.serializeGamesystems(this.gameModel.gamesystems)
|
const storedGamesystems: StoreComponent[] = GamesystemSerializer.serializeGamesystems(this.gameModel.gamesystems)
|
||||||
const storedCharacters: StoreComponent[] = CharacterSerializer.serializeCharacters(this.gameModel.characters)
|
const storedCharacters: StoreComponent[] = CharacterSerializer.serializeCharacters(this.gameModel.characters)
|
||||||
const storeModel = new StoredGameModel(this.gameModel.gameModelName, storedScriptAccounts, storedGamesystems, storedCharacters)
|
const storedItems: StoreComponent[] = ItemSerializer.serializeItems(this.gameModel.inventoryItems);
|
||||||
|
|
||||||
|
console.log(this.gameModel.inventoryItems)
|
||||||
|
const storeModel = new StoredGameModel(this.gameModel.gameModelName, storedScriptAccounts,
|
||||||
|
storedGamesystems, storedCharacters, storedItems)
|
||||||
|
|
||||||
if(this.electronService.isElectron) {
|
if(this.electronService.isElectron) {
|
||||||
this.electronService.ipcRenderer.send('save-model', storeModel)
|
this.electronService.ipcRenderer.send('save-model', storeModel)
|
||||||
|
38
src/app/project/serializer/ItemSerializer.ts
Normal file
38
src/app/project/serializer/ItemSerializer.ts
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
import {Item} from "../game-model/inventory/Item";
|
||||||
|
import {StoreComponent} from "../../../../app/storage/StoreComponent";
|
||||||
|
import {SerializeConstants} from "./SerializeConstants";
|
||||||
|
import {ItemQuality} from "../game-model/inventory/ItemQuality";
|
||||||
|
import {ItemPropertyDescription} from "../game-model/inventory/ItemPropertyDescription";
|
||||||
|
import {ItemProperty} from "../game-model/inventory/ItemProperty";
|
||||||
|
|
||||||
|
export class ItemSerializer {
|
||||||
|
|
||||||
|
public static serializeItems(items: Item[]): StoreComponent[] {
|
||||||
|
const storedItems: StoreComponent[] = []
|
||||||
|
items.forEach(item => storedItems.push(this.serializeSingleItem(item)))
|
||||||
|
return storedItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static serializeSingleItem(item: Item): StoreComponent {
|
||||||
|
const fileName = item.componentName;
|
||||||
|
const componentType = item.type;
|
||||||
|
const jsonString = JSON.stringify(item,(key, value) => {
|
||||||
|
if(key === 'perQualityProperties') {
|
||||||
|
return value;
|
||||||
|
} else if(key == 'quality_propertes') {
|
||||||
|
return value.map((prop: ItemProperty) => ({
|
||||||
|
...prop,
|
||||||
|
propertyDescription: undefined
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(key === 'unsaved' || key === 'type') {
|
||||||
|
return undefined;
|
||||||
|
} else {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}, SerializeConstants.JSON_INDENT)
|
||||||
|
|
||||||
|
return new StoreComponent(jsonString, fileName, componentType);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user