From ea2ff05a52a61edae7e35804ca570ab4cd2a1a42 Mon Sep 17 00:00:00 2001 From: Duong Nguyen Date: Tue, 19 Mar 2013 16:59:20 +0100 Subject: [PATCH] Continued rrefactoring --- BattleCityOnline/src/client/BattleCityGame.js | 45 +++++++++++++++++-- BattleCityOnline/src/client/TileFactory.js | 0 .../src/client/entity/BrickTile.js | 10 +++-- .../src/client/entity/ConcreteTile.js | 10 +++-- BattleCityOnline/src/client/entity/Tile.js | 29 +++++++++--- .../src/client/entity/_ContactAwareMixin.js | 19 ++++++++ .../src/client/entity/_NonBulletMixin.js | 15 +++++++ 7 files changed, 113 insertions(+), 15 deletions(-) create mode 100644 BattleCityOnline/src/client/TileFactory.js create mode 100644 BattleCityOnline/src/client/entity/_ContactAwareMixin.js create mode 100644 BattleCityOnline/src/client/entity/_NonBulletMixin.js diff --git a/BattleCityOnline/src/client/BattleCityGame.js b/BattleCityOnline/src/client/BattleCityGame.js index c598992..4d869a2 100644 --- a/BattleCityOnline/src/client/BattleCityGame.js +++ b/BattleCityOnline/src/client/BattleCityGame.js @@ -5,6 +5,9 @@ define([ "frozen/box2d/BoxGame", "frozen/box2d/RectangleEntity", + "bco-client/entity/BrickTile", + "bco-client/entity/ConcreteTile", + "frozen/plugins/loadImage!script/bco-client/image/bullet_0_up.png", "frozen/plugins/loadImage!script/bco-client/image/bullet_0_down.png", "frozen/plugins/loadImage!script/bco-client/image/bullet_0_left.png", @@ -32,6 +35,9 @@ define([ BoxGame, Rectangle, + BrickTile, + ConcreteTile, + bullet_0_up, bullet_0_down, bullet_0_left, @@ -225,6 +231,7 @@ define([ this.box.resolveCollisions = true; this.box.addContactListener({ beginContact: function (obj1, obj2) { + /*console.log(obj1, obj2) if (obj1.indexOf("bullet_") === 0) { console.log("Fired", arguments); self.entities[obj1].state = "exploded"; @@ -232,6 +239,13 @@ define([ if (obj2.indexOf("tile_") === 0) { self.entities[obj2].state = "dead"; } + }*/ + + if (self.entities[obj1].beginContact) { + self.entities[obj1].beginContact(self.entities[obj2]); + } + if (self.entities[obj2].beginContact) { + self.entities[obj2].beginContact(self.entities[obj1]); } }, endContact: function () { @@ -248,17 +262,31 @@ define([ row.forEach(function(cell, cellIndex) { switch (cell) { case 1: // brick - this._createTile(rowIndex, cellIndex, "brick", "l_t"); + /*this._createTile(rowIndex, cellIndex, "brick", "l_t"); this._createTile(rowIndex, cellIndex, "brick", "r_t"); this._createTile(rowIndex, cellIndex, "brick", "r_b"); - this._createTile(rowIndex, cellIndex, "brick", "l_b"); + this._createTile(rowIndex, cellIndex, "brick", "l_b");*/ + + //TODO: TileFactory + this._addEntity(new BrickTile({ + id: "tile_" + rowIndex + "_" + cellIndex, + x: cellIndex * 16 + 8, + y: rowIndex * 16 + 8 + })); break; case 2: // concrete - this._createTile(rowIndex, cellIndex, "concrete", "l_t"); + /*this._createTile(rowIndex, cellIndex, "concrete", "l_t"); this._createTile(rowIndex, cellIndex, "concrete", "r_t"); this._createTile(rowIndex, cellIndex, "concrete", "r_b"); - this._createTile(rowIndex, cellIndex, "concrete", "l_b"); + this._createTile(rowIndex, cellIndex, "concrete", "l_b");*/ + + //TODO: TileFactory + this._addEntity(new ConcreteTile({ + id: "tile_" + rowIndex + "_" + cellIndex, + x: cellIndex * 16 + 8, + y: rowIndex * 16 + 8 + })); break; case 3: // forrest @@ -274,6 +302,15 @@ define([ this._createWalls(); }, + _addEntity: function (entity) { + this.box.addBody(entity); + + //shims + this.box.bodiesMap[entity.id].GetFixtureList().SetSensor(entity.isSensor); + + this.entities[entity.id] = entity; + }, + _createWalls: function () { var topWall = new Rectangle({ id: "wall_top", diff --git a/BattleCityOnline/src/client/TileFactory.js b/BattleCityOnline/src/client/TileFactory.js new file mode 100644 index 0000000..e69de29 diff --git a/BattleCityOnline/src/client/entity/BrickTile.js b/BattleCityOnline/src/client/entity/BrickTile.js index 1c7a436..7598da5 100644 --- a/BattleCityOnline/src/client/entity/BrickTile.js +++ b/BattleCityOnline/src/client/entity/BrickTile.js @@ -1,13 +1,17 @@ define([ "dojo/_base/declare", - "bco-client/entity/Tile" + "bco-client/entity/Tile", + + "frozen/plugins/loadImage!script/bco-client/image/brick.png" ], function ( declare, - Tile) { + Tile, - return declare([Tile], { + brickTileImage) { + return declare([Tile], { + tileImage: brickTileImage }); }); \ No newline at end of file diff --git a/BattleCityOnline/src/client/entity/ConcreteTile.js b/BattleCityOnline/src/client/entity/ConcreteTile.js index 1c7a436..ef8765d 100644 --- a/BattleCityOnline/src/client/entity/ConcreteTile.js +++ b/BattleCityOnline/src/client/entity/ConcreteTile.js @@ -1,13 +1,17 @@ define([ "dojo/_base/declare", - "bco-client/entity/Tile" + "bco-client/entity/Tile", + + "frozen/plugins/loadImage!script/bco-client/image/concrete.png" ], function ( declare, - Tile) { + Tile, - return declare([Tile], { + concreteTileImage) { + return declare([Tile], { + tileImage: concreteTileImage }); }); \ No newline at end of file diff --git a/BattleCityOnline/src/client/entity/Tile.js b/BattleCityOnline/src/client/entity/Tile.js index 2ad348b..0b31ad5 100644 --- a/BattleCityOnline/src/client/entity/Tile.js +++ b/BattleCityOnline/src/client/entity/Tile.js @@ -1,21 +1,40 @@ define([ "dojo/_base/declare", - "frozen/box2d/RectangleEntity" + "frozen/box2d/RectangleEntity", + + "bco-client/entity/_ContactAwareMixin", + "bco-client/entity/_NonBulletMixin", ], function ( declare, - RectangleEntity) { + RectangleEntity, + + _ContactAwareMixin, + _NonBulletMixin) { - return declare([RectangleEntity], { - halfWidth: 4, - halfHeight: 4, + return declare([RectangleEntity, _ContactAwareMixin, _NonBulletMixin], { + halfWidth: 8, + halfHeight: 8, + restitution: 0, friction: 0, + isSensor: true, + staticBody: true, + tileImage: null, + draw: function (ctx) { + ctx.save(); + ctx.drawImage( + this.tileImage, + (this.x-this.halfWidth) * this.scale, + (this.y-this.halfHeight) * this.scale + ); + + ctx.restore(); } }); }); \ No newline at end of file diff --git a/BattleCityOnline/src/client/entity/_ContactAwareMixin.js b/BattleCityOnline/src/client/entity/_ContactAwareMixin.js new file mode 100644 index 0000000..9ed077f --- /dev/null +++ b/BattleCityOnline/src/client/entity/_ContactAwareMixin.js @@ -0,0 +1,19 @@ +define([ + "dojo/_base/declare" +], function ( + declare) { + + return declare([], { + beginContact: function (aa, bb) { + + }, + + endContact: function (aa, bb) { + + }, + + postSolve: function (aa, bb) { + + } + }); +}); \ No newline at end of file diff --git a/BattleCityOnline/src/client/entity/_NonBulletMixin.js b/BattleCityOnline/src/client/entity/_NonBulletMixin.js new file mode 100644 index 0000000..94b6d6e --- /dev/null +++ b/BattleCityOnline/src/client/entity/_NonBulletMixin.js @@ -0,0 +1,15 @@ +define([ + "dojo/_base/declare" +], function ( + declare) { + + return declare([], { + beginContact: function (other) { + console.log(other); + }, + + onHit: function () { + + } + }); +}); \ No newline at end of file