From: dsc Date: Sat, 26 Mar 2011 13:36:49 +0000 (-0700) Subject: Adds ShieldGenerator item. X-Git-Url: http://git.less.ly:3516/?a=commitdiff_plain;h=47b297719162b184f6e8bd83b037d086dcfc7b91;p=tanks.git Adds ShieldGenerator item. --- diff --git a/data/types/items.yaml b/data/types/items.yaml index df1816b..b11c909 100644 --- a/data/types/items.yaml +++ b/data/types/items.yaml @@ -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 + diff --git a/data/types/levels.yaml b/data/types/levels.yaml index 537e832..c970003 100644 --- a/data/types/levels.yaml +++ b/data/types/levels.yaml @@ -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 diff --git a/data/types/loots.yaml b/data/types/loots.yaml index ae7c9fe..7c7f835 100644 --- a/data/types/loots.yaml +++ b/data/types/loots.yaml @@ -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 diff --git a/src/tanks/index.js b/src/tanks/index.js index 45a6a5d..c33e71e 100644 --- a/src/tanks/index.js +++ b/src/tanks/index.js @@ -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'), diff --git a/src/tanks/inventory/bag.cjs b/src/tanks/inventory/bag.cjs index f7ff703..87ad289 100644 --- a/src/tanks/inventory/bag.cjs +++ b/src/tanks/inventory/bag.cjs @@ -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 , diff --git a/src/tanks/inventory/inventory.cjs b/src/tanks/inventory/inventory.cjs index c772d34..335dc3a 100644 --- a/src/tanks/inventory/inventory.cjs +++ b/src/tanks/inventory/inventory.cjs @@ -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 diff --git a/src/tanks/inventory/loot.cjs b/src/tanks/inventory/loot.cjs index c1dd74d..35bdebf 100644 --- a/src/tanks/inventory/loot.cjs +++ b/src/tanks/inventory/loot.cjs @@ -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 index 0000000..36ed43c --- /dev/null +++ b/src/tanks/item/index.cjs @@ -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/thing/item.cjs b/src/tanks/item/item.cjs similarity index 100% rename from src/tanks/thing/item.cjs rename to src/tanks/item/item.cjs diff --git a/src/tanks/item/shieldgen.cjs b/src/tanks/item/shieldgen.cjs new file mode 100644 index 0000000..0911bd6 --- /dev/null +++ b/src/tanks/item/shieldgen.cjs @@ -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, '') + .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; + } + +}) +; diff --git a/src/tanks/map/level.cjs b/src/tanks/map/level.cjs index 05c8f79..a0e0b53 100644 --- a/src/tanks/map/level.cjs +++ b/src/tanks/map/level.cjs @@ -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 , diff --git a/src/tanks/mixins/inventoried.cjs b/src/tanks/mixins/inventoried.cjs index 80f784c..103477d 100644 --- a/src/tanks/mixins/inventoried.cjs +++ b/src/tanks/mixins/inventoried.cjs @@ -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) , diff --git a/src/tanks/thing/index.cjs b/src/tanks/thing/index.cjs index 004c378..e1b534d 100644 --- a/src/tanks/thing/index.cjs +++ b/src/tanks/thing/index.cjs @@ -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, diff --git a/src/tanks/thing/player.cjs b/src/tanks/thing/player.cjs index aefeea3..af6c56d 100644 --- a/src/tanks/thing/player.cjs +++ b/src/tanks/thing/player.cjs @@ -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, diff --git a/src/tanks/thing/shield.cjs b/src/tanks/thing/shield.cjs index 3a74f7d..7d3ed53 100644 --- a/src/tanks/thing/shield.cjs +++ b/src/tanks/thing/shield.cjs @@ -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; } })