76 lines
2.9 KiB
JavaScript
76 lines
2.9 KiB
JavaScript
// Inventory UI
|
|
import { state } from '../core/state.js';
|
|
import { BLOCKS } from '../data/blocks.js';
|
|
import { ITEMS } from '../data/items.js';
|
|
import { TOOLS } from '../data/tools.js';
|
|
import { tex } from '../render/textures.js';
|
|
import { playSound } from '../audio/sound-engine.js';
|
|
import { rebuildHotbar } from './hotbar.js';
|
|
|
|
export function renderInventory() {
|
|
const inventoryGrid = state.inventoryGrid;
|
|
const inv = state.inv;
|
|
const selected = state.selected;
|
|
inventoryGrid.innerHTML = '';
|
|
|
|
// Создаём сетку инвентаря 7x3
|
|
const items = Object.keys(inv).filter(id => inv[id] > 0);
|
|
|
|
// Добавляем пустые слоты для полной сетки
|
|
for (let i = 0; i < 21; i++) {
|
|
const slot = document.createElement('div');
|
|
slot.className = 'inv-slot' + (i < items.length && items[i] === selected ? ' sel' : '');
|
|
|
|
if (i < items.length) {
|
|
const id = items[i];
|
|
if (BLOCKS[id]) {
|
|
slot.style.backgroundImage = `url(${tex[id].toDataURL()})`;
|
|
slot.style.backgroundSize = 'cover';
|
|
} else if (ITEMS[id]) {
|
|
slot.textContent = ITEMS[id].icon;
|
|
} else if (TOOLS[id]) {
|
|
slot.textContent = TOOLS[id].icon;
|
|
} else if (id === 'iron_armor') {
|
|
slot.textContent = '🛡️';
|
|
slot.style.background = 'linear-gradient(135deg, #95a5a6 0%, #7f8c8d 100%)';
|
|
}
|
|
|
|
const count = document.createElement('div');
|
|
count.className = 'inv-count';
|
|
count.textContent = inv[id];
|
|
slot.appendChild(count);
|
|
|
|
slot.onclick = () => {
|
|
playSound('click'); // Звук клика по инвентарю
|
|
state.selected = id;
|
|
// Обновляем список последних предметов
|
|
state.recentItems = state.recentItems.filter(item => item !== id); // Удаляем если уже есть
|
|
state.recentItems.unshift(id); // Добавляем в начало
|
|
state.recentItems = state.recentItems.slice(0, 5); // Оставляем только 5
|
|
rebuildHotbar();
|
|
renderInventory();
|
|
};
|
|
|
|
// Двойной клик для надевания брони
|
|
slot.ondblclick = () => {
|
|
if (id === 'iron_armor' && inv.iron_armor > 0) {
|
|
// Если уже надета броня - снимаем её
|
|
if (state.player.equippedArmor === 'iron_armor') {
|
|
state.player.equippedArmor = null;
|
|
state.player.armor = 0;
|
|
console.log('[ARMOR] Iron armor unequipped');
|
|
} else {
|
|
// Надеваем броню
|
|
state.player.equippedArmor = 'iron_armor';
|
|
state.player.armor = BLOCKS['iron_armor'].armor;
|
|
console.log('[ARMOR] Iron armor equipped - armor:', state.player.armor);
|
|
}
|
|
playSound('click');
|
|
renderInventory();
|
|
}
|
|
};
|
|
}
|
|
|
|
inventoryGrid.appendChild(slot);
|
|
}
|
|
} |