72 lines
1.4 KiB
JavaScript
72 lines
1.4 KiB
JavaScript
import { Component } from '../core/Component.js';
|
|
|
|
export class Inventory extends Component {
|
|
constructor() {
|
|
super('Inventory');
|
|
this.items = []; // Array of item objects
|
|
this.maxSize = 20;
|
|
this.equipped = {
|
|
weapon: null,
|
|
armor: null,
|
|
accessory: null
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Add an item to inventory
|
|
*/
|
|
addItem(item) {
|
|
if (this.items.length < this.maxSize) {
|
|
this.items.push(item);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Remove an item
|
|
*/
|
|
removeItem(itemId) {
|
|
const index = this.items.findIndex(item => item.id === itemId);
|
|
if (index > -1) {
|
|
return this.items.splice(index, 1)[0];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* Equip an item
|
|
*/
|
|
equipItem(itemId, slot) {
|
|
const item = this.items.find(i => i.id === itemId);
|
|
if (!item) return false;
|
|
|
|
// Unequip current item in slot
|
|
if (this.equipped[slot]) {
|
|
this.items.push(this.equipped[slot]);
|
|
}
|
|
|
|
// Equip new item
|
|
this.equipped[slot] = item;
|
|
const index = this.items.indexOf(item);
|
|
if (index > -1) {
|
|
this.items.splice(index, 1);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Unequip an item
|
|
*/
|
|
unequipItem(slot) {
|
|
if (this.equipped[slot]) {
|
|
this.items.push(this.equipped[slot]);
|
|
this.equipped[slot] = null;
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|