mirror of
https://github.com/logsol/chuck.js.git
synced 2026-05-11 10:37:34 +00:00
new system for synchronizing game objects. fixes #74
This commit is contained in:
parent
3ef3a6abf9
commit
07dad646cf
19 changed files with 194 additions and 162 deletions
|
|
@ -45,6 +45,7 @@ function (Parent, Exception, Box2D, Settings, CollisionDetector, Item, Nc, Asser
|
|||
this.createFixtures();
|
||||
this.body.SetActive(false);
|
||||
|
||||
Nc.trigger(Nc.ns.core.game.worldUpdateObjects.add, this);
|
||||
}
|
||||
|
||||
Doll.prototype = Object.create(Parent.prototype);
|
||||
|
|
@ -471,7 +472,16 @@ function (Parent, Exception, Box2D, Settings, CollisionDetector, Item, Nc, Asser
|
|||
}
|
||||
};
|
||||
|
||||
Doll.prototype.setUpdateData = function(update) {
|
||||
|
||||
Parent.prototype.setUpdateData.call(this, update);
|
||||
|
||||
this.setActionState(update.as);
|
||||
this.lookAt(update.laxy.x, update.laxy.y);
|
||||
};
|
||||
|
||||
Doll.prototype.destroy = function() {
|
||||
Nc.trigger(Nc.ns.core.game.worldUpdateObjects.remove, this);
|
||||
Parent.prototype.destroy.call(this);
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,11 @@
|
|||
define([
|
||||
"Lib/Vendor/Box2D",
|
||||
"Lib/Utilities/Exception"
|
||||
"Lib/Utilities/Exception",
|
||||
"Lib/Utilities/Assert",
|
||||
"Lib/Utilities/NotificationCenter"
|
||||
],
|
||||
|
||||
function (Box2D, Exception) {
|
||||
function (Box2D, Exception, Assert, Nc) {
|
||||
|
||||
"use strict";
|
||||
|
||||
|
|
@ -13,6 +15,10 @@ function (Box2D, Exception) {
|
|||
var def = this.getBodyDef();
|
||||
def.userData = this;
|
||||
this.body = physicsEngine.getWorld().CreateBody(def);
|
||||
|
||||
this.ncTokens = (this.ncTokens || []).concat([
|
||||
Nc.on(Nc.ns.client.game.events.destroy, this.destroy, this)
|
||||
]);
|
||||
}
|
||||
|
||||
GameObject.prototype.getBodyDef = function() {
|
||||
|
|
@ -20,11 +26,14 @@ function (Box2D, Exception) {
|
|||
};
|
||||
|
||||
GameObject.prototype.destroy = function() {
|
||||
|
||||
if(this.body instanceof Box2D.Dynamics.b2Body) {
|
||||
this.body.GetWorld().DestroyBody(this.body);
|
||||
} else {
|
||||
throw new Exception("can not destroy body");
|
||||
}
|
||||
|
||||
Nc.off(this.ncTokens);
|
||||
};
|
||||
|
||||
GameObject.prototype.getBody = function() {
|
||||
|
|
@ -34,6 +43,20 @@ function (Box2D, Exception) {
|
|||
GameObject.prototype.getPosition = function() {
|
||||
return this.body.GetPosition().Copy();
|
||||
};
|
||||
|
||||
GameObject.prototype.setUpdateData = function(update) {
|
||||
|
||||
Assert.number(update.p.x, update.p.y);
|
||||
Assert.number(update.a);
|
||||
Assert.number(update.lv.x, update.lv.y);
|
||||
Assert.number(update.av);
|
||||
|
||||
this.body.SetAwake(true);
|
||||
this.body.SetPosition(update.p);
|
||||
this.body.SetAngle(update.a);
|
||||
this.body.SetLinearVelocity(update.lv);
|
||||
this.body.SetAngularVelocity(update.av);
|
||||
};
|
||||
|
||||
return GameObject;
|
||||
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ function (Parent, Box2D, Options, Settings, Exception, Nc, Assert) {
|
|||
this.body.SetBullet(true);
|
||||
}
|
||||
|
||||
Nc.trigger(Nc.ns.core.game.gameObject.add, "animated", this);
|
||||
Nc.trigger(Nc.ns.core.game.worldUpdateObjects.add, this);
|
||||
}
|
||||
|
||||
Item.prototype = Object.create(Parent.prototype);
|
||||
|
|
@ -158,7 +158,7 @@ function (Parent, Box2D, Options, Settings, Exception, Nc, Assert) {
|
|||
};
|
||||
|
||||
Item.prototype.destroy = function() {
|
||||
Nc.trigger(Nc.ns.core.game.gameObject.remove, "animated", this);
|
||||
Nc.trigger(Nc.ns.core.game.worldUpdateObjects.remove, this);
|
||||
Parent.prototype.destroy.call(this);
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -378,7 +378,6 @@ function (Parent, Box2D, Settings, Nc, Assert, Options, ItemSettings) {
|
|||
|
||||
RagDoll.prototype.destroy = function() {
|
||||
|
||||
Nc.trigger(Nc.ns.core.game.gameObject.remove, "animated", this);
|
||||
var world = this.body.GetWorld();
|
||||
|
||||
for (var name in this.limbs) {
|
||||
|
|
|
|||
|
|
@ -138,7 +138,6 @@ function (Parent, RubeLoader, Box2D, Settings, Assert, Nc, RubeDollJson) {
|
|||
|
||||
RubeDoll.prototype.destroy = function() {
|
||||
|
||||
Nc.trigger(Nc.ns.core.game.gameObject.remove, "animated", this);
|
||||
var world = this.body.GetWorld();
|
||||
|
||||
for (var name in this.limbs) {
|
||||
|
|
|
|||
|
|
@ -15,8 +15,6 @@ function (Parent, Box2D, Settings, Exception, Nc, Assert) {
|
|||
this.options = options;
|
||||
Parent.call(this, physicsEngine, uid);
|
||||
this.createPhysicTile(this.options);
|
||||
|
||||
Nc.trigger(Nc.ns.core.game.gameObject.add, "fixed", this);
|
||||
}
|
||||
|
||||
Tile.prototype = Object.create(Parent.prototype);
|
||||
|
|
@ -119,10 +117,6 @@ function (Parent, Box2D, Settings, Exception, Nc, Assert) {
|
|||
Tile.prototype.addVec = function (vs, m1, m2) {
|
||||
return vs.push(new Box2D.Common.Math.b2Vec2(this.mkArg(m1), this.mkArg(m2)));
|
||||
};
|
||||
|
||||
Tile.prototype.destroy = function() {
|
||||
Nc.trigger(Nc.ns.core.game.gameObject.remove, "fixed", this);
|
||||
};
|
||||
|
||||
return Tile;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue