mirror of
https://github.com/logsol/chuck.js.git
synced 2026-05-11 18:47:35 +00:00
added joints
This commit is contained in:
parent
fa110ff4a8
commit
764220675b
10 changed files with 111 additions and 24 deletions
|
|
@ -1,10 +1,11 @@
|
||||||
define([
|
define([
|
||||||
"Game/Client/Control/Input/XyInput",
|
"Game/Client/Control/Input/XyInput",
|
||||||
"Game/Client/View/DomController",
|
"Game/Client/View/DomController",
|
||||||
"Game/Config/Settings"
|
"Game/Config/Settings",
|
||||||
|
"Lib/Utilities/NotificationCenter"
|
||||||
],
|
],
|
||||||
|
|
||||||
function (Parent, DomController, Settings) {
|
function (Parent, DomController, Settings, NotificationCenter) {
|
||||||
|
|
||||||
function MouseInput() {
|
function MouseInput() {
|
||||||
Parent.call(this);
|
Parent.call(this);
|
||||||
|
|
@ -30,6 +31,14 @@ function (Parent, DomController, Settings) {
|
||||||
|
|
||||||
self.onXyChange(x, y);
|
self.onXyChange(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
canvas.onmousedown = function(e) {
|
||||||
|
|
||||||
|
var x = (((e.clientX - this.offsetLeft) / Settings.STAGE_WIDTH) * 2) - 1;
|
||||||
|
var y = (((Settings.STAGE_HEIGHT - (e.clientY - this.offsetTop)) / Settings.STAGE_HEIGHT) * 2) -1;
|
||||||
|
|
||||||
|
NotificationCenter.trigger("input/onHandAction", x, y);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,11 +12,9 @@ function (NotificationCenter) {
|
||||||
XyInput.prototype.onXyChange = function(x, y) {
|
XyInput.prototype.onXyChange = function(x, y) {
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
NotificationCenter.trigger('onXyChange', x, y);
|
NotificationCenter.trigger('input/onXyChange', x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return XyInput;
|
return XyInput;
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
@ -14,7 +14,8 @@ function (Parent, KeyboardInput, MouseInput, NotificationCenter) {
|
||||||
this.keyboardInput = new KeyboardInput(this);
|
this.keyboardInput = new KeyboardInput(this);
|
||||||
this.xyInput = new MouseInput(this);
|
this.xyInput = new MouseInput(this);
|
||||||
|
|
||||||
NotificationCenter.on("onXyChange", this.setXY, this);
|
NotificationCenter.on("input/onXyChange", this.setXY, this);
|
||||||
|
NotificationCenter.on("input/onHandAction", this.handAction, this);
|
||||||
|
|
||||||
var keys = {
|
var keys = {
|
||||||
w:87,
|
w:87,
|
||||||
|
|
@ -71,6 +72,12 @@ function (Parent, KeyboardInput, MouseInput, NotificationCenter) {
|
||||||
NotificationCenter.trigger('sendGameCommand', 'lookAt', options);
|
NotificationCenter.trigger('sendGameCommand', 'lookAt', options);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
PlayerController.prototype.handAction = function(x, y) {
|
||||||
|
var options = {x:x, y:y};
|
||||||
|
Parent.prototype.handAction.call(this, options);
|
||||||
|
NotificationCenter.trigger("sendGameCommand", "handAction", options);
|
||||||
|
};
|
||||||
|
|
||||||
PlayerController.prototype.update = function () {
|
PlayerController.prototype.update = function () {
|
||||||
this.keyboardInput.update();
|
this.keyboardInput.update();
|
||||||
Parent.prototype.update.call(this);
|
Parent.prototype.update.call(this);
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,6 @@ function (Settings) {
|
||||||
}
|
}
|
||||||
|
|
||||||
DomController.createDebugCanvas = function () {
|
DomController.createDebugCanvas = function () {
|
||||||
console.log('setHERE')
|
|
||||||
var container = DomController.getCanvasContainer();
|
var container = DomController.getCanvasContainer();
|
||||||
if(DomController.debugCanvas) {
|
if(DomController.debugCanvas) {
|
||||||
container.removeChild(DomController.debugCanvas);
|
container.removeChild(DomController.debugCanvas);
|
||||||
|
|
|
||||||
|
|
@ -33,8 +33,11 @@ define(function () {
|
||||||
if(options) this.player.lookAt(options.x, options.y);
|
if(options) this.player.lookAt(options.x, options.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PlayerController.prototype.handAction = function(options) {
|
||||||
|
if (options) this.player.handAction(options.x, options.y);
|
||||||
|
};
|
||||||
|
|
||||||
PlayerController.prototype.update = function () {
|
PlayerController.prototype.update = function () {
|
||||||
//console.log(this._walkingDirectionStatus)
|
|
||||||
if(this._walkingDirectionStatus != 0) {
|
if(this._walkingDirectionStatus != 0) {
|
||||||
this.player.move(this._walkingDirectionStatus);
|
this.player.move(this._walkingDirectionStatus);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,8 @@ function (Parent, Box2D, Settings, CollisionDetector, Item) {
|
||||||
left: [],
|
left: [],
|
||||||
right: []
|
right: []
|
||||||
};
|
};
|
||||||
|
this.holdingJoint = null;
|
||||||
|
this.holdingItem = null;
|
||||||
|
|
||||||
this.createFixtures();
|
this.createFixtures();
|
||||||
this.body.SetActive(false);
|
this.body.SetActive(false);
|
||||||
|
|
@ -201,6 +203,8 @@ function (Parent, Box2D, Settings, CollisionDetector, Item) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Doll.prototype.lookAt = function(x, y) {
|
Doll.prototype.lookAt = function(x, y) {
|
||||||
|
var oldLookDirection = this.lookDirection;
|
||||||
|
|
||||||
this.body.SetAwake(true);
|
this.body.SetAwake(true);
|
||||||
if(x < 0) {
|
if(x < 0) {
|
||||||
this.lookDirection = -1;
|
this.lookDirection = -1;
|
||||||
|
|
@ -210,6 +214,62 @@ function (Parent, Box2D, Settings, CollisionDetector, Item) {
|
||||||
|
|
||||||
this.lookAtXY.x = x;
|
this.lookAtXY.x = x;
|
||||||
this.lookAtXY.y = y;
|
this.lookAtXY.y = y;
|
||||||
|
|
||||||
|
if(oldLookDirection != this.lookDirection) {
|
||||||
|
this.positionHoldingItem();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Doll.prototype.grab = function(x, y) {
|
||||||
|
var item = null;
|
||||||
|
if (this.lookDirection == -1) {
|
||||||
|
item = this.reachableItems.left.shift();
|
||||||
|
} else {
|
||||||
|
item = this.reachableItems.right.shift();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(item) {
|
||||||
|
|
||||||
|
this.holdingItem = item;
|
||||||
|
|
||||||
|
this.positionHoldingItem();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return item;
|
||||||
|
};
|
||||||
|
|
||||||
|
Doll.prototype.positionHoldingItem = function() {
|
||||||
|
if(this.holdingItem) {
|
||||||
|
|
||||||
|
if(this.holdingJoint) {
|
||||||
|
this.body.GetWorld().DestroyJoint(this.holdingJoint);
|
||||||
|
this.holdingJoint = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
var p = this.body.GetPosition();
|
||||||
|
this.holdingItem.body.SetPosition(new Box2D.Common.Math.b2Vec2(
|
||||||
|
p.x + ((this.holdingItem.options.width / Settings.RATIO / 2 + 5 / Settings.RATIO) * this.lookDirection),
|
||||||
|
p.y - (this.holdingItem.options.height / Settings.RATIO / 2)
|
||||||
|
));
|
||||||
|
//this.holdingItem.body.SetAngle(Math.PI * 2 / 180 * 20 * -this.lookDirection);
|
||||||
|
this.holdingItem.body.SetAngle(0);
|
||||||
|
|
||||||
|
var jointDef = new Box2D.Dynamics.Joints.b2WeldJointDef();
|
||||||
|
jointDef.Initialize(this.body, this.holdingItem.body, this.holdingItem.body.GetWorldCenter());
|
||||||
|
|
||||||
|
this.holdingJoint = this.body.GetWorld().CreateJoint(jointDef);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Doll.prototype.throw = function(item, x, y) {
|
||||||
|
this.body.GetWorld().DestroyJoint(this.holdingJoint);
|
||||||
|
this.holdingJoint = null;
|
||||||
|
this.holdingItem = null;
|
||||||
|
|
||||||
|
var body = item.body;
|
||||||
|
body.SetAwake(true);
|
||||||
|
body.ApplyImpulse(new Box2D.Common.Math.b2Vec2(x * 3, -y * 3), body.GetPosition());
|
||||||
};
|
};
|
||||||
|
|
||||||
Doll.prototype.onFootSensorDetection = function(isColliding, fixture) {
|
Doll.prototype.onFootSensorDetection = function(isColliding, fixture) {
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ function (Doll, Settings) {
|
||||||
this.doll;
|
this.doll;
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.isSpawned = false;
|
this.isSpawned = false;
|
||||||
|
this.holdingItem = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
Player.prototype.getDoll = function() {
|
Player.prototype.getDoll = function() {
|
||||||
|
|
@ -45,6 +46,21 @@ function (Doll, Settings) {
|
||||||
if(this.doll) this.doll.lookAt(x, y);
|
if(this.doll) this.doll.lookAt(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Player.prototype.handAction = function(x, y) {
|
||||||
|
|
||||||
|
if (this.holdingItem) {
|
||||||
|
// throw
|
||||||
|
this.doll.throw(this.holdingItem, x, y);
|
||||||
|
this.holdingItem = null;
|
||||||
|
} else {
|
||||||
|
// take
|
||||||
|
var item = this.doll.grab(x, y);
|
||||||
|
if(item) {
|
||||||
|
this.holdingItem = item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
Player.prototype.update = function () {
|
Player.prototype.update = function () {
|
||||||
|
|
||||||
if(this.doll) {
|
if(this.doll) {
|
||||||
|
|
|
||||||
|
|
@ -16,22 +16,15 @@ function (NotificationCenter, Channel) {
|
||||||
|
|
||||||
process.on('message', function (message, handle) {
|
process.on('message', function (message, handle) {
|
||||||
|
|
||||||
for(var method in message.data) {
|
if(message.data.hasOwnProperty('CREATE')) {
|
||||||
switch(method) {
|
self.channel = new Channel(this, message.data['CREATE']);
|
||||||
case 'CREATE':
|
} else if (message.data.hasOwnProperty('KILL')) {
|
||||||
self.channel = new Channel(this, message.data[method]);
|
self.channel.destroy();
|
||||||
break;
|
process.exit(0);
|
||||||
|
} else {
|
||||||
case 'KILL':
|
self.onMessage(message);
|
||||||
self.channel.destroy();
|
|
||||||
process.exit(0);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
self.onMessage(message);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ function (NotificationCenter, childProcess) {
|
||||||
var self = this;
|
var self = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// While creating user
|
||||||
PipeToChannel.prototype.send = function (recipient, data) {
|
PipeToChannel.prototype.send = function (recipient, data) {
|
||||||
var message = {
|
var message = {
|
||||||
recipient: recipient,
|
recipient: recipient,
|
||||||
|
|
@ -35,6 +36,7 @@ function (NotificationCenter, childProcess) {
|
||||||
this.channelPipe.send(message);
|
this.channelPipe.send(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If user already created
|
||||||
PipeToChannel.prototype.sendToUser = function (id, data) {
|
PipeToChannel.prototype.sendToUser = function (id, data) {
|
||||||
var message = {
|
var message = {
|
||||||
recipient: "user/" + id,
|
recipient: "user/" + id,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue