From 9b2da745314833d30e66305fe47be7d2fb422614 Mon Sep 17 00:00:00 2001 From: Viktor Lidholt Date: Mon, 26 Oct 2015 13:23:33 -0700 Subject: [PATCH 1/2] Removing debug printout --- examples/game/test_physics.dart | 3 --- 1 file changed, 3 deletions(-) diff --git a/examples/game/test_physics.dart b/examples/game/test_physics.dart index 782f334d64c..31d8b3db04d 100644 --- a/examples/game/test_physics.dart +++ b/examples/game/test_physics.dart @@ -91,11 +91,8 @@ class TestBed extends NodeWithSize { if (event.type == "pointerdown") { Point pos = convertPointToNodeSpace(event.boxPosition); - print("ADDING SHIPS"); PhysicsGroup group = new PhysicsGroup(); group.position = pos; - group.rotation = 10.0; - group.scale = 0.5; _world.addChild(group); Sprite shipA; From 0815a861436364f58e4b845298c58d5e51d9cd0f Mon Sep 17 00:00:00 2001 From: Viktor Lidholt Date: Mon, 26 Oct 2015 13:24:08 -0700 Subject: [PATCH 2/2] Adds motors to revolute joints and prismatic joints --- skysprites/lib/src/physics_joint.dart | 98 ++++++++++++++++++++++++++- 1 file changed, 95 insertions(+), 3 deletions(-) diff --git a/skysprites/lib/src/physics_joint.dart b/skysprites/lib/src/physics_joint.dart index a0425bb4b81..d5241f0e6ba 100644 --- a/skysprites/lib/src/physics_joint.dart +++ b/skysprites/lib/src/physics_joint.dart @@ -82,8 +82,14 @@ class PhysicsJointRevolute extends PhysicsJoint { this.upperAngle: 0.0, this.enableLimit: false, PhysicsJointBreakCallback breakCallback, - double breakingForce + double breakingForce, + bool enableMotor: false, + double motorSpeed: 0.0, + double maxMotorTorque: 0.0 }) : super(bodyA, bodyB, breakingForce, breakCallback) { + _enableMotor = enableMotor; + _motorSpeed = motorSpeed; + _maxMotorTorque = maxMotorTorque; _completeCreation(); } @@ -92,6 +98,42 @@ class PhysicsJointRevolute extends PhysicsJoint { final double upperAngle; final bool enableLimit; + bool _enableMotor; + + bool get enableMotor => _enableMotor; + + set enableMotor(bool enableMotor) { + _enableMotor = enableMotor; + if (_joint != null) { + box2d.RevoluteJoint revoluteJoint = _joint; + revoluteJoint.enableMotor(enableMotor); + } + } + + double _motorSpeed; + + double get motorSpeed => _motorSpeed; + + set motorSpeed(double motorSpeed) { + _motorSpeed = motorSpeed; + if (_joint != null) { + box2d.RevoluteJoint revoluteJoint = _joint; + revoluteJoint.setMotorSpeed(radians(motorSpeed)); + } + } + + double _maxMotorTorque; + + double get maxMotorTorque => _maxMotorTorque; + + set maxMotorTorque(double maxMotorTorque) { + _maxMotorTorque = maxMotorTorque; + if (_joint != null) { + box2d.RevoluteJoint revoluteJoint = _joint; + revoluteJoint.setMaxMotorTorque(maxMotorTorque); + } + } + box2d.Joint _createB2Joint(PhysicsWorld physicsNode) { // Create Joint Definition Vector2 vecAnchor = new Vector2( @@ -105,6 +147,10 @@ class PhysicsJointRevolute extends PhysicsJoint { b2Def.lowerAngle = lowerAngle; b2Def.upperAngle = upperAngle; + b2Def.enableMotor = _enableMotor; + b2Def.motorSpeed = _motorSpeed; + b2Def.maxMotorTorque = _maxMotorTorque; + // Create joint return physicsNode.b2World.createJoint(b2Def); } @@ -116,17 +162,63 @@ class PhysicsJointPrismatic extends PhysicsJoint { PhysicsBody bodyB, this.axis, { double breakingForce, - PhysicsJointBreakCallback breakCallback + PhysicsJointBreakCallback breakCallback, + bool enableMotor: false, + double motorSpeed: 0.0, + double maxMotorForce: 0.0 } ) : super(bodyA, bodyB, breakingForce, breakCallback) { + _enableMotor = enableMotor; + _motorSpeed = motorSpeed; + _maxMotorForce = maxMotorForce; _completeCreation(); } - Offset axis; + final Offset axis; + + bool _enableMotor; + + bool get enableMotor => _enableMotor; + + set enableMotor(bool enableMotor) { + _enableMotor = enableMotor; + if (_joint != null) { + box2d.PrismaticJoint prismaticJoint = _joint; + prismaticJoint.enableMotor(enableMotor); + } + } + + double _motorSpeed; + + double get motorSpeed => _motorSpeed; + + set motorSpeed(double motorSpeed) { + _motorSpeed = motorSpeed; + if (_joint != null) { + box2d.PrismaticJoint prismaticJoint = _joint; + prismaticJoint.setMotorSpeed(motorSpeed / _physicsNode.b2WorldToNodeConversionFactor); + } + } + + double _maxMotorForce; + + double get maxMotorForce => _maxMotorForce; + + set maxMotorForce(double maxMotorForce) { + _maxMotorForce = maxMotorForce; + if (_joint != null) { + box2d.PrismaticJoint prismaticJoint = _joint; + prismaticJoint.setMaxMotorForce(maxMotorForce / _physicsNode.b2WorldToNodeConversionFactor); + } + } box2d.Joint _createB2Joint(PhysicsWorld physicsNode) { box2d.PrismaticJointDef b2Def = new box2d.PrismaticJointDef(); b2Def.initialize(bodyA._body, bodyB._body, bodyA._body.position, new Vector2(axis.dx, axis.dy)); + b2Def.enableMotor = _enableMotor; + b2Def.motorSpeed = _motorSpeed; + b2Def.maxMotorForce = _maxMotorForce; + return physicsNode.b2World.createJoint(b2Def); } }