116 lines
3.4 KiB
JavaScript
116 lines
3.4 KiB
JavaScript
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
|
|
// 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;
|
|
}
|
|
}
|