hackedvoxels-inventory-window
Version:
a GUI window for interactively manipulating an inventory of itempiles
71 lines (56 loc) • 3.07 kB
text/coffeescript
InventoryWindow = require './'
Inventory = require 'inventory'
ItemPile = require 'itempile'
ever = require 'ever'
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 i in [0...10]
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
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='
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
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
w = new InventoryWindow
inventory: inv
container = w.createContainer()
console.log container
document.body.appendChild(container)
ever(document.body).on 'contextmenu', (ev) -> ev.preventDefault()
w.setSelected 7
window.w = w
w2 = new InventoryWindow
inventory: inv
allowDrop: false
document.body.appendChild(w2.createContainer())
inv3 = new Inventory(4, 4)
w3 = new InventoryWindow {inventory: inv3, linkedInventory:inv}
w.linkedInventory = inv3 # go both ways
document.body.appendChild(w3.createContainer())