inventory-window
Version:
a GUI window for interactively manipulating an inventory of itempiles
77 lines (61 loc) • 3.27 kB
JavaScript
;
const InventoryWindow = require('./');
const Inventory = require('inventory');
const ItemPile = require('itempile');
const ever = require('ever');
const inv = new Inventory(5, 5);
inv.give(new ItemPile('diamond', 1));
inv.give(new ItemPile('emerald', 64));
inv.give(new ItemPile('emerald', 32));
inv.give(new ItemPile('emerald', 32));
for (let i = 0; i < 10; ++i) {
inv.give(new ItemPile('stick', 64));
}
inv.array[15] = new ItemPile('grass', 3); // block
inv.array[17] = new ItemPile('pick', 2, {damage:20});
inv.array[18] = new ItemPile('stick', 0);
inv.array[19] = new ItemPile('pick', 1, {damage:50});
inv.array[20] = new ItemPile('stick', 2);
inv.array[21] = new ItemPile('stick', 16);
inv.array[22] = new ItemPile('stick', 32);
inv.array[24] = new ItemPile('diamond', Infinity);
console.log(inv+'');
console.log(inv.size());
// a few simple images for testing
const images = {
diamond: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAKUlEQVQ4y2NgGAX4wf///8GYIs1kG0KRAeiaqWIASYYMAwOoEo1DBgAANn6AgLPwDSsAAAAASUVORK5CYII=',
emerald: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAJ0lEQVQ4y2NgGAX4wX8opEgz2YZQZMB/LJBiA0gyZBgYQJVoHDIAAHr/Vaux9NNYAAAAAElFTkSuQmCC',
stick: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAI0lEQVQ4y2NgGFlgb73j/0Jv9f8UaQbRo5pHNeMEFGkeUAAAmkJGZ284PasAAAAASUVORK5CYII=',
pick: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAATUlEQVQ4y2NgGMzgPxZMvOb//zExyYagY3IMAYO99Y7/C73VyTMEphlEk2wAmmYGkgzAopl4A3BoJs4APJqRY4dszQy00QwCFGkeUAAAq91xekLx2vsAAAAASUVORK5CYII=',
grass_top: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAYElEQVQ4y61TwREAIAiy/cdyGqao3qWIXQ8flgGimfmYhh1OAuQsvahAPQOoFCACUFkR5K2+wxbQMMyZApXxrJUZ8TIFBoRoCl8UdL2QHpSLpBanf+F1hJcCNP2AugckXwA2yZhbyqZNAAAAAElFTkSuQmCC',
grass_side: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAdElEQVQ4y2NgOMz4n+ElEB/Gg1/iEcMpQchQGJ6ZZvyfEL4zxRsrG4QZkAXRJfEZBOMzEKsYF2bAZiqxhqG4gFgb0dUyEGsjLgsYSAk0bAHOgCt0yXYBqWHBQIwGggmJWMXY1DFQEoUYLiAmMIkKA0IGIfMBkw04/LuclggAAAAASUVORK5CYII='
};
const item_images = {
diamond: images.diamond,
emerald: images.emerald,
stick: images.stick,
pick: images.pick,
grass: {top:images.grass_top, front:images.grass_side, left:images.grass_side}
//grass: [images.grass_top, null, images.grass_side, images.grass_side] # arrays work too
};
const ucfirst = (s) => s.substr(0, 1).toUpperCase() + s.substring(1);
InventoryWindow.defaultGetTexture = (pile) => item_images[pile.item];
InventoryWindow.defaultGetMaxDamage = (pile) => 80;
InventoryWindow.defaultGetTooltip = (pile) => ucfirst(pile.item);
const w = new InventoryWindow({
inventory: inv
});
const container = w.createContainer();
console.log(container);
document.body.appendChild(container);
ever(document.body).on('contextmenu', (ev) => ev.preventDefault());
w.setSelected(7);
window.w = w;
const w2 = new InventoryWindow({
inventory: inv,
allowDrop: false});
document.body.appendChild(w2.createContainer());
const inv3 = new Inventory(4, 4);
const w3 = new InventoryWindow({inventory: inv3, linkedInventory:inv});
w.linkedInventory = inv3; // go both ways
document.body.appendChild(w3.createContainer());