ok
This commit is contained in:
125
EMERGENCY_SYSTEMS_RECOVERY/InventorySystem.js
Normal file
125
EMERGENCY_SYSTEMS_RECOVERY/InventorySystem.js
Normal file
@@ -0,0 +1,125 @@
|
||||
class InventorySystem {
|
||||
constructor(scene) {
|
||||
this.scene = scene;
|
||||
|
||||
// Data structure: Array of slots
|
||||
// Each slot: { type: 'wood', count: 5 } or null
|
||||
this.slots = new Array(9).fill(null);
|
||||
this.maxStack = 99;
|
||||
|
||||
// Generate tool icons if missing
|
||||
if (typeof TextureGenerator !== 'undefined') {
|
||||
TextureGenerator.createToolSprites(this.scene);
|
||||
}
|
||||
|
||||
// Initial items
|
||||
this.addItem('axe', 1); // 🪓 Sekira
|
||||
this.addItem('pickaxe', 1); // ⛏️ Kramp
|
||||
this.addItem('hoe', 1);
|
||||
this.addItem('watering_can', 1); // 💧 Zalivalka
|
||||
this.addItem('seeds', 5); // Zmanjšano število semen
|
||||
this.addItem('arrow_silver', 10); // ➶ Silver arrows for werewolf hunting
|
||||
// Removed default wood/stone so player has to gather them
|
||||
|
||||
this.gold = 0;
|
||||
}
|
||||
|
||||
addItem(type, count) {
|
||||
// Unlock in Collection
|
||||
if (this.scene.collectionSystem) {
|
||||
this.scene.collectionSystem.unlock(type);
|
||||
}
|
||||
|
||||
// 1. Try to stack
|
||||
for (let i = 0; i < this.slots.length; i++) {
|
||||
if (this.slots[i] && this.slots[i].type === type) {
|
||||
const space = this.maxStack - this.slots[i].count;
|
||||
if (space > 0) {
|
||||
const toAdd = Math.min(space, count);
|
||||
this.slots[i].count += toAdd;
|
||||
count -= toAdd;
|
||||
if (count === 0) break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 2. Empty slots
|
||||
if (count > 0) {
|
||||
for (let i = 0; i < this.slots.length; i++) {
|
||||
if (!this.slots[i]) {
|
||||
const toAdd = Math.min(this.maxStack, count);
|
||||
this.slots[i] = { type: type, count: toAdd };
|
||||
count -= toAdd;
|
||||
if (count === 0) break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.updateUI();
|
||||
|
||||
return count === 0; // True if everything added
|
||||
}
|
||||
|
||||
removeItem(type, count) {
|
||||
for (let i = 0; i < this.slots.length; i++) {
|
||||
if (this.slots[i] && this.slots[i].type === type) {
|
||||
if (this.slots[i].count >= count) {
|
||||
this.slots[i].count -= count;
|
||||
if (this.slots[i].count === 0) this.slots[i] = null;
|
||||
this.updateUI();
|
||||
return true;
|
||||
} else {
|
||||
count -= this.slots[i].count;
|
||||
this.slots[i] = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
this.updateUI();
|
||||
this.updateUI();
|
||||
return false; // Not enough items
|
||||
}
|
||||
|
||||
getItemCount(type) {
|
||||
let total = 0;
|
||||
for (const slot of this.slots) {
|
||||
if (slot && slot.type === type) {
|
||||
total += slot.count;
|
||||
}
|
||||
}
|
||||
return total;
|
||||
}
|
||||
|
||||
addGold(amount) {
|
||||
this.gold += amount;
|
||||
this.updateUI();
|
||||
}
|
||||
|
||||
updateUI() {
|
||||
const uiScene = this.scene.scene.get('UIScene');
|
||||
if (!uiScene || !uiScene.goldText) {
|
||||
// UIScene not ready yet, skip update
|
||||
return;
|
||||
}
|
||||
uiScene.updateInventory(this.slots);
|
||||
if (uiScene.updateGold) uiScene.updateGold(this.gold);
|
||||
}
|
||||
|
||||
hasItem(type, count) {
|
||||
let total = 0;
|
||||
for (const slot of this.slots) {
|
||||
if (slot && slot.type === type) {
|
||||
total += slot.count;
|
||||
}
|
||||
}
|
||||
return total >= count;
|
||||
}
|
||||
|
||||
/**
|
||||
* Alias for addItem() - for simple crafting system compatibility
|
||||
* @param {string} itemKey - Item type/key
|
||||
* @param {number} quantity - Amount to add
|
||||
*/
|
||||
addItemToInventory(itemKey, quantity) {
|
||||
return this.addItem(itemKey, quantity);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user