var YFunction = require('Y/types/function').YFunction
, type = require('Y/type')
, core = require('Y/core')
+, delegate = require('Y/delegate')
, op = require('Y/op')
, slice = core.slice
, isFunction = type.isFunction
names = Object.keys(o);
else if ( !isArray(names) )
names = slice.call(arguments, 1);
- core.forEach(names, bindName, o);
+ delegate.forEach(names, bindName, o);
return o;
}
Note: Metaprogramming events cannot depend on Class.
*/
-var Y = require('Y').Y
-, core = require('Y/core')
-, Emitter
-, _Emitter = require('Y/modules/y.event').Emitter
-, PolyEmitter = Emitter = require('Y/modules/y.polyevent').PolyEmitter
-, unwrap = require('Y/types/function').unwrap
+var Y = require('Y').Y
+, core = require('Y/core')
+, Emitter = require('Y/modules/y.event').Emitter
+, PolyEmitter = require('Y/modules/y.polyevent').PolyEmitter
+, unwrap = require('Y/types/function').unwrap
// , isFunction = Y.isFunction
, KNOWN_CLASSES = Class.KNOWN_CLASSES = exports['KNOWN_CLASSES'] = {}
, getDesc = _Object.getOwnPropertyDescriptor
, setDesc = _Object.defineProperty
-, objToString = _Object[P].toString
-, classToString = function toString(){ return this.className+"()"; }
+, objToString = _Object[P].toString
+, classToString = function(){ return "[class "+this.className+"]"; }
+, instanceToString = function(){ return this.className+"()"; }
, classStatics = [ 'instantiate', 'fabricate', 'subclass' ]
, classMagic = [
instance.__id__ = GLOBAL_ID++;
// Perform actions that should only happen once in Constructor
- instance.__emitter__ = new Emitter(instance, cls);
+ instance.__emitter__ = new PolyEmitter(instance, cls);
cls.emit('create', instance, {
'instance' : instance,
prototype[k] = parentMembers[k];
}
- if ( prototype.toString === objToString ) // check SuperClass.fn.toString
- prototype.toString = classToString;
-
NewClass.className = prototype.className = className;
NewClass.prototype = NewClass.fn = prototype;
+ NewClass.toString = classToString;
+ if ( prototype.toString === objToString ) // XXX: check SuperClass.fn.toString
+ prototype.toString = instanceToString;
// Add class emitter
var ParentEmitter = (Parent.__emitter__ ? Parent : ClassFactory)
- , ClassEmitter = NewClass.__emitter__ = new Emitter(NewClass, ParentEmitter)
+ , ClassEmitter = NewClass.__emitter__ = new PolyEmitter(NewClass, ParentEmitter)
, mixins = members.__mixins__ || []
;
// Decorate with emitter methods and
// add metaprogramming data to Class object
Class.__super__ = Object;
-Class.__emitter__ = new Emitter(Class);
+Class.__emitter__ = new PolyEmitter(Class);
Class.fn = Class.prototype;
Class.fn.__class__ = Class.fn.constructor = Class;
Class.fn.__bases__ = Class.__bases__ = Y([ Object ]);
}, this.gameoverDelay);
},
+ tickAnimations : function tickAnimations(animation){
+ var running = animation.tick(ELAPSED, NOW, TICKS);
+ if (!running)
+ animation.remove();
+ return running;
+ },
+
_filterLivingAllies : function filterLivingAllies(unit){
return unit.align === this.playerAlign && !unit.dead;
},
}
},
- tickAnimations : function tickAnimations(animation){
- var running = animation.tick(ELAPSED, NOW, TICKS);
- if (!running)
- animation.remove();
- return running;
- },
-
// *** Agent Management *** //
},
setGame : function setGame(unit){
- if (unit instanceof Event)
+ if (unit instanceof Event) {
+ var evt = unit;
unit = unit.data.instance;
+ }
unit.game = this;
return unit;
},
noteUnit : function noteUnit(unit){
- if (unit instanceof Event)
- unit = unit.trigger;
+ if (unit instanceof Event) {
+ var evt = unit;
+ unit = unit.data.instance || unit.trigger;
+ }
unit.game = this;
if (unit.dead) return unit;
},
addUnit : function addUnit(unit, x,y){
- if (unit instanceof Event)
- unit = unit.trigger;
+ if (unit instanceof Event) {
+ var evt = unit;
+ unit = unit.data.instance || unit.trigger;
+ }
if (unit.dead) return unit;
this._equipSlots.pluck('ui').invoke('refresh');
this.equipSlots = this._equipSlots.end();
+
// instantiate:
// - equip slots (w bookkeeping: equipment, equipBags)
// - belt
+
+ this.owner.game.ui.layer.append('<div class="clearer"/>');
},
return this.bagbag.canAddItem(bag);
},
- checkReqs : function checkReqs(bag){
- return this.bagbag.checkReqs(bag);
+ checkReqs : function checkReqs(item, bag){
+ if (item === undefined)
+ return this.bagbag.checkReqs(bag);
+ else if (bag !== undefined)
+ return this.getBag(bag).checkReqs(item);
+ else
+ return false;
},
/**
var d = evt.data
, oldBag = d.oldBag
;
- this.slots[d.idx].refresh();
+ this.slots.get(d.idx).refresh();
if (oldBag)
- oldBag.ui.slots[d.oldIdx].refresh();
+ oldBag.ui.slots.get(d.oldIdx).refresh();
},
onDrop : function onDrop(evt, ui){
- var item = ui.draggable.data('item')
+ var inv = this.unit.inventory
+ , item = ui.draggable.data('item')
, toIdx = $(evt.target).data('idx')
;
// console.log('onDrop(item='+item+', bag='+this+', toIdx='+toIdx+')', evt);
- this.unit.inventory.moveItem(item, this.container, toIdx);
-
- // Clear flag preventing the drag from activing the item
- setTimeout(function(){ item.dragging = false; }, 250);
+ if ( inv.checkReqs(item, this.container) ) {
+ inv.moveItem(item, this.container, toIdx);
+
+ // Clear flag preventing the drag from activing the item
+ setTimeout(function(){ item.dragging = false; }, 250);
+ } else {
+ var slot = ui.draggable.parent().data('container-slot');
+ slot.refresh();
+ }
},
.item-container .slot { float:left; position:relative; width:50px; height:50px; margin:0.25em; border:1px solid transparent; }
.item-container .slot.drophover { border:1px solid #FFF6AE; }
-#ui { position:absolute; bottom:0; right:0; left:auto; top:auto; }
+#ui { position:absolute; bottom:0; right:0; left:auto; top:auto; width:auto; }
#ui > .bag { position:relative; float:right; margin:0 0 1em 1em; }
#weapon_slot .slot { /* background-image:url(); */ }
#armor_slot .slot {}