From 15caede85aac9b68b75610f5ebcdd74d58041e6f Mon Sep 17 00:00:00 2001 From: dsc Date: Fri, 25 Feb 2011 03:14:57 -0800 Subject: [PATCH] Creeps now drop l3wtz! --- data/loadlist.yaml | 1 + data/types/levels.yaml | 4 +- data/types/loots.yaml | 9 ++++ data/types/units.yaml | 2 + src/ezl/index.cjs | 6 +- src/ezl/struct/index.cjs | 7 +++ src/ezl/struct/namedtuple.cjs | 98 ++++++++++++++++++++++++++++++++++++++++ src/tanks/inventory/index.cjs | 6 ++- src/tanks/inventory/loot.cjs | 59 ++++++++++++++++++++++++ src/tanks/mixins/index.cjs | 3 +- src/tanks/mixins/lootable.cjs | 44 ++++++++++++++++++ src/tanks/mixins/meronomic.cjs | 2 +- src/tanks/thing/item.cjs | 2 +- src/tanks/thing/tank.cjs | 4 ++ 14 files changed, 238 insertions(+), 9 deletions(-) create mode 100644 data/types/loots.yaml create mode 100644 src/ezl/struct/index.cjs create mode 100644 src/ezl/struct/namedtuple.cjs create mode 100644 src/tanks/inventory/loot.cjs create mode 100644 src/tanks/mixins/lootable.cjs diff --git a/data/loadlist.yaml b/data/loadlist.yaml index b5336e9..6fd0eed 100644 --- a/data/loadlist.yaml +++ b/data/loadlist.yaml @@ -2,6 +2,7 @@ - types/bullets - types/items # - types/weapons +- types/loots - types/units - types/levels # - types/player diff --git a/data/types/levels.yaml b/data/types/levels.yaml index 7aa014e..af501f8 100644 --- a/data/types/levels.yaml +++ b/data/types/levels.yaml @@ -68,8 +68,8 @@ types: # align: 2 # loc: [425,125] items: - - type: rockets - loc: [325,275] + # - type: rockets + # loc: [325,275] - type: nitro loc: [325,25] diff --git a/data/types/loots.yaml b/data/types/loots.yaml new file mode 100644 index 0000000..ae7c9fe --- /dev/null +++ b/data/types/loots.yaml @@ -0,0 +1,9 @@ +name: loots +defaults: + symbol: tanks/inventory/loot.LootTable +types: + rich: + items: + - 0.1 super_armor + - 0.2 rockets + - 0.3 nitro diff --git a/data/types/units.yaml b/data/types/units.yaml index 11a9432..15c7596 100644 --- a/data/types/units.yaml +++ b/data/types/units.yaml @@ -3,6 +3,7 @@ defaults: symbol: tanks/thing/thing.Thing level: 1 projectile: normal + lootTable : '' stats: hp : 1 # health move : 1.0 # move speed (squares/sec) @@ -70,6 +71,7 @@ types: desc: A very green tank. tags: [ 'tank' ] symbol: tanks/thing/tank.Tank + lootTable : rich stats: hp : 1 move : 0.75 diff --git a/src/ezl/index.cjs b/src/ezl/index.cjs index bca3143..e79dc84 100644 --- a/src/ezl/index.cjs +++ b/src/ezl/index.cjs @@ -3,12 +3,12 @@ //#ensure "functional/to-function" //#ensure "jquery" //#ensure "Y" -var Y = require('Y').Y; - -Y.extend(exports, { +require('Y').Y.core +.extend(exports, { 'math' : require('ezl/math'), 'loc' : require('ezl/loc'), 'mixins' : require('ezl/mixins'), + 'struct' : require('ezl/struct'), 'util' : require('ezl/util'), 'loop' : require('ezl/loop'), diff --git a/src/ezl/struct/index.cjs b/src/ezl/struct/index.cjs new file mode 100644 index 0000000..a3427d5 --- /dev/null +++ b/src/ezl/struct/index.cjs @@ -0,0 +1,7 @@ +var Y = require('Y').Y +, namedtuple = require('ezl/struct/namedtuple') +; +Y.core.extend(exports, { + 'namedtuple' : namedtuple, + 'NamedTuple' : namedtuple.NamedTuple +}); diff --git a/src/ezl/struct/namedtuple.cjs b/src/ezl/struct/namedtuple.cjs new file mode 100644 index 0000000..a508ea4 --- /dev/null +++ b/src/ezl/struct/namedtuple.cjs @@ -0,0 +1,98 @@ +var Y = require('Y').Y +, + +NamedTuple = +exports['NamedTuple'] = +new Y.Class('NamedTuple', [], { + __fields__ : [], + + __static__ : { + fromObject : function tupleFromObject(o){ + var NamedTupleType = this; + + if (!o) + return new NamedTupleType(); + + var fields = NamedTupleType.prototype.__fields__ + , values = fields.reduce(function(vals, name){ + vals.push( o[name] ); + return vals; + }, []) + ; + return NamedTupleType.instantiate(values); + } + }, + + + /** + * @param {*} values... Values with which to populate the NamedTuple. They will also map to attribute names as specified by the call to create(). + * @return {this} + */ + init : function initNamedTuple(){ + var args = arguments + , L = args.length + , fL = this.__fields__.length + ; + + if ( fL < L ) + throw new Error(this.className+' only accepts '+fL+' arguments, but '+L+' given!'); + + for (var i=0; i