From 47bb5ef1478103e0274dd89acf6b05851ed0bef5 Mon Sep 17 00:00:00 2001 From: Jeena Date: Wed, 12 Feb 2014 04:02:01 +0100 Subject: [PATCH] first visible RagDoll --- app/Game/Client/GameObjects/Items/RagDoll.js | 6 +- app/Game/Core/GameObjects/Item.js | 12 +- app/Game/Core/GameObjects/Items/RagDoll.js | 208 +++++++++++++++--- static/img/Characters/Chuck/chest.png | Bin 257 -> 306 bytes .../{arm_down_back.png => lowerLeftArm.png} | Bin .../Chuck/{leg_down.png => lowerLeftLeg.png} | Bin .../{arm_down_front.png => lowerRightArm.png} | Bin static/img/Characters/Chuck/lowerRightLeg.png | Bin 0 -> 158 bytes .../{arm_back_top.png => upperLeftArm.png} | Bin .../Chuck/{leg_top.png => upperLeftLeg.png} | Bin .../{arm_front_top.png => upperRightArm.png} | Bin static/img/Characters/Chuck/upperRightLeg.png | Bin 0 -> 144 bytes static/maps/tiled/debug.json | 4 +- 13 files changed, 189 insertions(+), 41 deletions(-) mode change 100755 => 100644 static/img/Characters/Chuck/chest.png rename static/img/Characters/Chuck/{arm_down_back.png => lowerLeftArm.png} (100%) rename static/img/Characters/Chuck/{leg_down.png => lowerLeftLeg.png} (100%) rename static/img/Characters/Chuck/{arm_down_front.png => lowerRightArm.png} (100%) create mode 100755 static/img/Characters/Chuck/lowerRightLeg.png rename static/img/Characters/Chuck/{arm_back_top.png => upperLeftArm.png} (100%) rename static/img/Characters/Chuck/{leg_top.png => upperLeftLeg.png} (100%) rename static/img/Characters/Chuck/{arm_front_top.png => upperRightArm.png} (100%) create mode 100755 static/img/Characters/Chuck/upperRightLeg.png diff --git a/app/Game/Client/GameObjects/Items/RagDoll.js b/app/Game/Client/GameObjects/Items/RagDoll.js index df32be4..65460fa 100644 --- a/app/Game/Client/GameObjects/Items/RagDoll.js +++ b/app/Game/Client/GameObjects/Items/RagDoll.js @@ -18,8 +18,10 @@ function (Parent, CoreItem, Settings, NotificationCenter) { RagDoll.prototype = Object.create(Parent.prototype); RagDoll.prototype.createMesh = function() { - this.createLimbMesh("chest"); - this.createLimbMesh("head"); + this.createLimbMesh("chest"); + for(var name in this.options.limbs) { + this.createLimbMesh(name); + } }; RagDoll.prototype.createLimbMesh = function(name) { diff --git a/app/Game/Core/GameObjects/Item.js b/app/Game/Core/GameObjects/Item.js index c003751..d9b67ff 100644 --- a/app/Game/Core/GameObjects/Item.js +++ b/app/Game/Core/GameObjects/Item.js @@ -102,6 +102,7 @@ function (Parent, Box2D, Options, Settings) { }; Item.prototype.reposition = function(handPosition, direction) { + this.body.SetAwake(true); var position = new Box2D.Common.Math.b2Vec2( handPosition.x + ((this.options.width / Settings.RATIO / 2) * direction), handPosition.y @@ -118,16 +119,7 @@ function (Parent, Box2D, Options, Settings) { Item.prototype.throw = function(x, y) { var body = this.body; body.SetAwake(true); - /* - body.ApplyImpulse( - new Box2D.Common.Math.b2Vec2( - x * Settings.MAX_THROW_FORCE, - -y * Settings.MAX_THROW_FORCE * 1.5 // 1.5 is to throw higher then far - ), - body.GetLocalCenter() - ); - */ - + var vector = new Box2D.Common.Math.b2Vec2( x * Settings.MAX_THROW_FORCE, -y * Settings.MAX_THROW_FORCE * 1.5 // 1.5 is to throw higher then far diff --git a/app/Game/Core/GameObjects/Items/RagDoll.js b/app/Game/Core/GameObjects/Items/RagDoll.js index e3ec91f..fdedcad 100644 --- a/app/Game/Core/GameObjects/Items/RagDoll.js +++ b/app/Game/Core/GameObjects/Items/RagDoll.js @@ -15,7 +15,7 @@ function (Parent, Box2D, Settings) { options.limbs = {}; options.limbs.chest = { width: 6, - height: 12, + height: 18, x: 0, y: 0 }; @@ -24,29 +24,154 @@ function (Parent, Box2D, Settings) { width: 10, height: 12, x: 0, - y: - options.limbs.chest.height / 2 - 5 + y: - options.limbs.chest.height / 2 - 7 }; + options.limbs.upperLeftLeg = { + width: 3, + height: 4, + x: -2, + y: options.limbs.chest.height / 2 + }; + + options.limbs.upperRightLeg = { + width: 3, + height: 4, + x: 2, + y: options.limbs.chest.height / 2 + }; + + options.limbs.lowerLeftLeg = { + width: 4, + height: 4, + x: -2, + y: options.limbs.chest.height / 2 + options.limbs.upperLeftLeg.height + }; + + options.limbs.lowerRightLeg = { + width: 4, + height: 4, + x: 2, + y: options.limbs.chest.height / 2 + options.limbs.upperRightLeg.height + }; + + + + + + options.limbs.upperLeftArm = { + width: 2, + height: 8, + x: -2, + y: -options.limbs.chest.height / 2 + }; + + options.limbs.upperRightArm = { + width: 3, + height: 8, + x: 2, + y: -options.limbs.chest.height / 2 + }; + + options.limbs.lowerLeftArm = { + width: 2, + height: 5, + x: -2, + y: -options.limbs.chest.height / 2 + options.limbs.upperLeftArm.height + }; + + options.limbs.lowerRightArm = { + width: 2, + height: 5, + x: 2, + y: -options.limbs.chest.height / 2 + options.limbs.upperRightArm.height + }; + + + + + + + Parent.call(this, physicsEngine, uid, options); - this.createSensor(); + //this.createSensor(); + + this.limbs = {}; - this.limbs = { - head: null - }; this.addHead(); + + this.addLimb( + "upperLeftLeg", + this.body, + options.limbs.upperLeftLeg.x, + options.limbs.chest.height / 2 + ); + + this.addLimb( + "upperRightLeg", + this.body, + options.limbs.upperRightLeg.x, + options.limbs.chest.height / 2 + ); + + this.addLimb( + "lowerLeftLeg", + this.limbs.upperLeftLeg, + 0, + options.limbs.upperLeftLeg.height / 2 + ); + + this.addLimb( + "lowerRightLeg", + this.limbs.upperRightLeg, + 0, + options.limbs.upperRightLeg.height / 2 + ); + + + + + + this.addLimb( + "upperLeftArm", + this.body, + options.limbs.upperLeftArm.x, + -options.limbs.chest.height / 2 + ); + + this.addLimb( + "upperRightArm", + this.body, + options.limbs.upperRightArm.x, + -options.limbs.chest.height / 2 + ); + + this.addLimb( + "lowerLeftArm", + this.limbs.upperLeftArm, + 0, + options.limbs.upperLeftArm.height / 2 + ); + + this.addLimb( + "lowerRightArm", + this.limbs.upperRightArm, + 0, + options.limbs.upperRightArm.height / 2 + ); } RagDoll.prototype = Object.create(Parent.prototype); RagDoll.prototype.getId = function() { - return 1; parseInt(this.uid.split("-")[1], 10); + return 55; //parseInt(this.uid.split("-")[1], 10); }; RagDoll.prototype.getBodyDef = function() { var bodyDef = Parent.prototype.getBodyDef.call(this); bodyDef.linearDamping = Settings.PLAYER_LINEAR_DAMPING; - //bodyDef.type = Box2D.Dynamics.b2Body.b2_staticBody; + bodyDef.type = Box2D.Dynamics.b2Body.b2_dynamicBody; return bodyDef; }; @@ -123,21 +248,14 @@ function (Parent, Box2D, Settings) { }; RagDoll.prototype.attachHead = function() { - var chestPosition = this.body.GetPosition(); - - var x = chestPosition.x + this.options.limbs.head.x / Settings.RATIO, - y = chestPosition.y + this.options.limbs.head.y / Settings.RATIO; - var head = this.limbs.head; - head.SetPosition(new Box2D.Common.Math.b2Vec2(x, y)); - head.SetAngle(0); var jointDef = new Box2D.Dynamics.Joints.b2RevoluteJointDef(); jointDef.enableMotor = false; - var point = chestPosition; - //point.y -= this.options.limbs.chest.height / 2 / Settings.RATIO; - jointDef.Initialize(this.body, head, point); + var pos = this.body.GetWorldCenter().Copy(); + pos.y -= this.options.limbs.chest.height / 2 / Settings.RATIO; + jointDef.Initialize(this.body, head, pos); jointDef.lowerAngle = -0.25 * Box2D.Common.b2Settings.b2_pi; // -45 degrees jointDef.upperAngle = 0.25 * Box2D.Common.b2Settings.b2_pi; // 45 degrees jointDef.enableLimit = true; @@ -145,6 +263,51 @@ function (Parent, Box2D, Settings) { this.body.GetWorld().CreateJoint(jointDef); }; + RagDoll.prototype.addLimb = function(name, connectTo, xOffset, yOffset) { + var x = this.options.x + this.options.limbs[name].x, + y = this.options.y + this.options.limbs[name].y; + + var bodyDef = new Box2D.Dynamics.b2BodyDef(); + bodyDef.linearDamping = Settings.PLAYER_LINEAR_DAMPING; + bodyDef.type = Box2D.Dynamics.b2Body.b2_dynamicBody; + bodyDef.position.x = x / Settings.RATIO; + bodyDef.position.y = y / Settings.RATIO; + bodyDef.angle = 0; + + var shape = new Box2D.Collision.Shapes.b2PolygonShape(); + shape.SetAsOrientedBox( + this.options.limbs[name].width / 2 / Settings.RATIO, + this.options.limbs[name].height / 2 / Settings.RATIO, + new Box2D.Common.Math.b2Vec2(0, this.options.limbs[name].height / 2 / Settings.RATIO) + ); + + var fixtureDef = new Box2D.Dynamics.b2FixtureDef(); + fixtureDef.density = Settings.PLAYER_DENSITY; + fixtureDef.friction = Settings.PLAYER_FRICTION; + fixtureDef.restitution = Settings.PLAYER_RESTITUTION; + fixtureDef.shape = shape; + fixtureDef.isSensor = false; + fixtureDef.filter.groupIndex = -this.getId(); + + var limb = this.body.GetWorld().CreateBody(bodyDef); + limb.CreateFixture(fixtureDef); + + this.limbs[name] = limb; + + var jointDef = new Box2D.Dynamics.Joints.b2RevoluteJointDef(); + jointDef.enableMotor = false; + + var pos = connectTo.GetWorldCenter().Copy(); + pos.x += (xOffset / Settings.RATIO); + pos.y += (yOffset / Settings.RATIO); + jointDef.Initialize(connectTo, limb, pos); + jointDef.lowerAngle = -0.15 * Box2D.Common.b2Settings.b2_pi; // -45 degrees + jointDef.upperAngle = 0.15 * Box2D.Common.b2Settings.b2_pi; // 45 degrees + jointDef.enableLimit = true; + + this.body.GetWorld().CreateJoint(jointDef); + }; + RagDoll.prototype.detachHead = function() { var joint = this.limbs.head.GetJointList().joint; if(joint) { @@ -173,15 +336,6 @@ function (Parent, Box2D, Settings) { for(var name in this.limbs) { var body = this.limbs[name]; body.SetAwake(true); - /* - body.ApplyImpulse( - new Box2D.Common.Math.b2Vec2( - x * Settings.MAX_THROW_FORCE * limbDampingFactor, - -y * Settings.MAX_THROW_FORCE * 1.5 *limbDampingFactor // 1.5 is to throw higher then far - ), - body.GetLocalCenter() - ); - */ var vector = new Box2D.Common.Math.b2Vec2( x * Settings.MAX_THROW_FORCE * limbDampingFactor, diff --git a/static/img/Characters/Chuck/chest.png b/static/img/Characters/Chuck/chest.png old mode 100755 new mode 100644 index f487a70b697c133607fecf14e2e4e680b3fe549b..5999dd6ca1b3523d7557cd5d30d6a5a5328acc7c GIT binary patch delta 236 zcmZo<+Qc+LoJ)vyr*QAtm_b40B7+YhP48LTj)cTOd3mg3UN zgvx;b|NsA6`Y`}#iS)#Nu~Hxx3>ef+xJ`kA0iG_7Ar-fBPIwA6DDb#kbSsdXAi@0P zAG_()t$SaDe_goBg-cXWDZ~8c2E#Wh#&OAozXEz}&K-UHB&C1Tr%vXMkB7vZZVA5% hj?O;!_q_T627W^hPEE;^2Y_ZXc)I$ztaD0e0sus`T|)o> delta 206 zcmdnQ)W|eJoQsEpnSp_!tkXtjqM}B|NkBIZYu)~6D|qz3kGu00K=x* zI~+i1drud~kcwL}C!&Q8C~!Dm3}DH=fA*hvwu-!^rLnk*GRLe)7LJ!rpG&9p`Tk-3 rruL~K`snTxU1dKz(|hji*F3=BAjDWE6=YfuG>gI0)z4*}Q$iB}W&l!z diff --git a/static/img/Characters/Chuck/arm_down_back.png b/static/img/Characters/Chuck/lowerLeftArm.png similarity index 100% rename from static/img/Characters/Chuck/arm_down_back.png rename to static/img/Characters/Chuck/lowerLeftArm.png diff --git a/static/img/Characters/Chuck/leg_down.png b/static/img/Characters/Chuck/lowerLeftLeg.png similarity index 100% rename from static/img/Characters/Chuck/leg_down.png rename to static/img/Characters/Chuck/lowerLeftLeg.png diff --git a/static/img/Characters/Chuck/arm_down_front.png b/static/img/Characters/Chuck/lowerRightArm.png similarity index 100% rename from static/img/Characters/Chuck/arm_down_front.png rename to static/img/Characters/Chuck/lowerRightArm.png diff --git a/static/img/Characters/Chuck/lowerRightLeg.png b/static/img/Characters/Chuck/lowerRightLeg.png new file mode 100755 index 0000000000000000000000000000000000000000..2314dec36b6188ab3cc3d75b3d971e0b9bbcd8b7 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^EFjFm3?%32=lK9B$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G`~f~8uG@M-4or!dUF_JOY4iX8|4