Adds ShieldGenerator item.
authordsc <david.schoonover@gmail.com>
Sat, 26 Mar 2011 13:36:49 +0000 (06:36 -0700)
committerdsc <david.schoonover@gmail.com>
Sat, 26 Mar 2011 13:36:49 +0000 (06:36 -0700)
15 files changed:
data/types/items.yaml
data/types/levels.yaml
data/types/loots.yaml
src/tanks/index.js
src/tanks/inventory/bag.cjs
src/tanks/inventory/inventory.cjs
src/tanks/inventory/loot.cjs
src/tanks/item/index.cjs [new file with mode: 0644]
src/tanks/item/item.cjs [moved from src/tanks/thing/item.cjs with 100% similarity]
src/tanks/item/shieldgen.cjs [new file with mode: 0644]
src/tanks/map/level.cjs
src/tanks/mixins/inventoried.cjs
src/tanks/thing/index.cjs
src/tanks/thing/player.cjs
src/tanks/thing/shield.cjs

index df1816b..b11c909 100644 (file)
@@ -1,6 +1,6 @@
 name: items
 defaults:
-    symbol: tanks/thing/item.Item
+    symbol: tanks/item/item.Item
     desc: ''
     # projectile: 'normal'
     passives: []
@@ -50,3 +50,9 @@ types:
         art:
             map_icon: '/img/items/rockets-bg-25x25.png'
             inv_icon: '/img/items/rockets-50x50.png'
+    shield_gen:
+        name: Shield Generator
+        desc: 'Generates four rotating shield spheres, each of which absorbs one impact.'
+        tags: [ 'armor' ]
+        symbol: tanks/item/shieldgen.ShieldGenerator
+    
index 537e832..c970003 100644 (file)
@@ -143,8 +143,8 @@ types:
             align: 2
             loc: [775,325]
         items:
-          # - type: rockets # right next to start
-          #   loc: [325,475]
+          - type: shield_gen # right next to start
+            loc: [325,475]
           - type: rockets
             loc: [75,275]
           - type: nitro
index ae7c9fe..7c7f835 100644 (file)
@@ -4,6 +4,7 @@ defaults:
 types:
     rich:
         items:
+            - 0.2 shield_gen
             - 0.1 super_armor
-            - 0.2 rockets
             - 0.3 nitro
+            - 0.1 rockets
index 45a6a5d..c33e71e 100644 (file)
@@ -15,6 +15,7 @@ tanks = {
     'fx'        : require('tanks/fx'),
     'mixins'    : require('tanks/mixins'),
     'inventory' : require('tanks/inventory'),
+    'item'      : require('tanks/item'),
     'map'       : require('tanks/map'),
     'thing'     : require('tanks/thing'),
     'ui'        : require('tanks/ui'),
index f7ff703..87ad289 100644 (file)
@@ -2,7 +2,7 @@ var Y   = require('Y').Y
 
 ,   evt = require('evt')
 
-,   Item      = require('tanks/thing/item').Item
+,   Item      = require('tanks/item/item').Item
 ,   Container = require('tanks/inventory/container').Container
 ,   ContainerUI = require('tanks/ui/containerui').ContainerUI
 ,
index c772d34..335dc3a 100644 (file)
@@ -7,7 +7,7 @@ var Y = require('Y').Y
 ,   Container     = container.Container
 ,   ContainerItem = container.ContainerItem
 ,   ContainerMeta = container.ContainerMeta
-,   Item          = require('tanks/thing/item').Item
+,   Item          = require('tanks/item/item').Item
 ,   Bag           = require('tanks/inventory/bag').Bag
 ,   BagBag        = require('tanks/inventory/bagbag').BagBag
 ,   EquipSlot     = require('tanks/inventory/equipslot').EquipSlot
index c1dd74d..35bdebf 100644 (file)
@@ -1,7 +1,7 @@
 var Y = require('Y').Y
 ,   evt = require('evt')
 ,   Speciated = require('ezl/mixins/speciated').Speciated
-,   Item = require('tanks/thing/item').Item
+,   Item = require('tanks/item/item').Item
 ,
 
 /**
diff --git a/src/tanks/item/index.cjs b/src/tanks/item/index.cjs
new file mode 100644 (file)
index 0000000..36ed43c
--- /dev/null
@@ -0,0 +1,8 @@
+var Y = require('Y').Y
+,   item   = require('tanks/item/item')
+,   sg     = require('tanks/item/shieldgen')
+;
+Y.core.extend(exports, {
+    'Item'            : item.Item,
+    'ShieldGenerator' : sg.ShieldGenerator
+});
diff --git a/src/tanks/item/shieldgen.cjs b/src/tanks/item/shieldgen.cjs
new file mode 100644 (file)
index 0000000..0911bd6
--- /dev/null
@@ -0,0 +1,81 @@
+var Y = require('Y').Y
+,   Rect      = require('ezl/shape').Rect
+,   Circle    = require('ezl/shape').Circle
+,   HtmlLayer = require('ezl/layer/html').HtmlLayer
+
+,   Item      = require('tanks/item/item').Item
+,   Shield    = require('tanks/thing/shield').Shield
+
+,   SQRT_TWO = Math.sqrt(2)
+,   TWO_PI   = 2 * Math.PI
+,
+
+ShieldGenerator =
+exports['ShieldGenerator'] =
+Item.subclass('ShieldGenerator', {
+    colors: {
+        bg    : '#FF6458',
+        body  : '#0A9CFF',
+        shine : '#195FBC'
+    },
+    
+    spheres: 4,
+    
+    
+    init : function initShieldGenerator(){
+        Item.init.call(this);
+        this.colors = Y.extend({}, this.colors);
+        
+    },
+    
+    onAcquired : function onAcquired(evt, container){
+        Item.fn.onAcquired.call(this, evt, container);
+        
+        for (var i=0, di = 1/this.spheres; i<1; i += di) {
+            // Component.init will add it to the owner's bookkeeping
+            Shield.create('shield', this.owner, i * TWO_PI);
+        }
+    },
+    
+    render : function render(parent){
+        this.remove();
+        var loc = this.loc
+        ,   icon = (this.art||{}).map_icon
+        ,   d = this.width, r = d * 0.4
+        ;
+        
+        if ( icon )
+            this.shape = new HtmlLayer(null, null, '<img src="'+icon+'"/>')
+                .size(this.width, this.height);
+        else {
+            this.shape = new Rect(this.width, this.height)
+                .fill(this.colors.bg)
+                // .stroke('#1C625B', 5.0)
+                ;
+            
+            this.body = new Circle(r)
+                    .appendTo( this.shape )
+                    .origin('50%', '50%')
+                    // .position(0, 0)
+                    .position('50%', '50%')
+                    .fill(this.colors.body)
+                ;
+            
+            // this.shine = new Circle(r)
+            //     .position(r,r)
+            //     .fill(this.colors.shine)
+            //     .eraseCircle(r*0.2,-r*1.5, 1.1*d*SQRT_TWO)
+            //     .appendTo( this.body );
+        }
+        
+        this.shape
+            .origin('50%', '50%')
+            .position(loc.x, loc.y)
+            .appendTo( parent );
+        this.shape.layer.attr('title', ''+loc);
+        
+        return this;
+    }
+    
+})
+;
index 05c8f79..a0e0b53 100644 (file)
@@ -12,7 +12,7 @@ var Y          = require('Y').Y
 ,   Map        = require('tanks/map/pathing/map').Map
 ,   Thing      = require('tanks/thing/thing').Thing
 ,   Tank       = require('tanks/thing/tank').Tank
-,   Item       = require('tanks/thing/item').Item
+,   Item       = require('tanks/item/item').Item
 ,   Player     = require('tanks/thing/player').Player
 ,   Wall       = require('tanks/map/wall').Wall
 ,
index 80f784c..103477d 100644 (file)
@@ -3,7 +3,7 @@ var Y        = require('Y').Y
 ,   deepcopy = require('Y/types/object').deepcopy
 
 ,   Mixin = require('evt').Mixin
-,   Item  = require('tanks/thing/item').Item
+,   Item  = require('tanks/item/item').Item
 
 ,   kNull = op.K(null)
 ,
index 004c378..e1b534d 100644 (file)
@@ -1,7 +1,6 @@
 var Y = require('Y').Y
 ,   bullet    = require('tanks/thing/bullet')
 ,   component = require('tanks/thing/component')
-,   item      = require('tanks/thing/item')
 ,   player    = require('tanks/thing/player')
 ,   shield    = require('tanks/thing/shield')
 ,   tank      = require('tanks/thing/tank')
@@ -10,7 +9,6 @@ var Y = require('Y').Y
 Y.core.extend(exports, {
        'Bullet'    : bullet.Bullet,
        'Component' : component.Component,
-       'Item'      : item.Item,
        'Player'    : player.Player,
        'Shield'    : shield.Shield,
        'Tank'      : tank.Tank,
index aefeea3..af6c56d 100644 (file)
@@ -8,7 +8,6 @@ var Y           = require('Y').Y
 ,   Tank        = require('tanks/thing/tank').Tank
 ,   Inventory   = require('tanks/inventory/inventory').Inventory
 ,   Inventoried = require('tanks/mixins/inventoried').Inventoried
-,   Shield = require('tanks/thing/shield').Shield
 ,
 
 
@@ -51,14 +50,6 @@ Tank.subclass('Player', {
         $('#viewport')
             .bind('mousedown', this.mousedown)
             .bind('mouseup',   this.mouseup);
-        
-        var self = this;
-        this.game.on('ready', function(){
-            for (var i=0; i<1; i += 0.25) {
-                // Component.init will add it to the owner's bookkeeping
-                Shield.create('shield', self, i * 2*Math.PI);
-            }
-        });
     },
     
     destroy : function destroy(){
@@ -72,12 +63,6 @@ Tank.subclass('Player', {
         return Tank.fn.destroy.call(this);
     },
     
-    setReplay : function setReplay(replay){
-        this.replayMode = true;
-        this.replay     = replay
-        this.nextMove   = replay.shift();
-    },
-    
     activeKeys : null,
     shift : false, ctrl : false, meta : false, alt : false,
     leftMouse : false, middleMouse : false, rightMouse : false,
index 3a74f7d..7d3ed53 100644 (file)
@@ -91,9 +91,9 @@ Component.subclass('Shield', {
         this.shine = new Circle(r)
             .position(r,r)
             .fill(this.colors.shine)
-            // .eraseCircle(-r,-r, d*SQRT_TWO)
             .eraseCircle(r*0.2,-r*1.5, 1.1*d*SQRT_TWO)
             .appendTo( this.shape );
+        
         return this;
     }
 })