Commit dd956b9f authored by Viktor Lidholt's avatar Viktor Lidholt

Merge pull request #1645 from vlidholt/master

Adds teleporting methods for moving sprite kinematic bodies
parents 2609f7bf 23bae330
......@@ -148,6 +148,16 @@ class Node {
invalidateTransformMatrix();
}
void teleportRotation(double rotation) {
assert(rotation != null);
if (_physicsBody != null && parent is PhysicsNode) {
_physicsBody._body.setTransform(_physicsBody._body.position, radians(rotation));
_physicsBody._body.angularVelocity = 0.0;
_physicsBody._body.setType(box2d.BodyType.STATIC);
}
_setRotationFromPhysics(rotation);
}
/// The position of this node relative to its parent.
///
/// myNode.position = new Point(42.0, 42.0);
......@@ -172,6 +182,23 @@ class Node {
invalidateTransformMatrix();
}
void teleportPosition(Point position) {
assert(position != null);
if (_physicsBody != null && parent is PhysicsNode) {
PhysicsNode physicsNode = parent;
_physicsBody._body.setTransform(
new Vector2(
position.x / physicsNode.b2WorldToNodeConversionFactor,
position.y / physicsNode.b2WorldToNodeConversionFactor
),
_physicsBody._body.getAngle()
);
_physicsBody._body.linearVelocity = new Vector2.zero();
_physicsBody._body.setType(box2d.BodyType.STATIC);
}
_setPositionFromPhysics(position);
}
/// The skew along the x-axis of this node in degrees.
///
/// myNode.skewX = 45.0;
......
......@@ -112,6 +112,13 @@ class PhysicsNode extends Node {
for (box2d.Body b2Body = b2World.bodyList; b2Body != null; b2Body = b2Body.getNext()) {
// Update visual position and rotation
PhysicsBody body = b2Body.userData;
if (b2Body.getType() == box2d.BodyType.KINEMATIC) {
body._targetPosition = null;
body._targetAngle = null;
}
// Update visual position and rotation
body._node._setPositionFromPhysics(new Point(
b2Body.position.x * b2WorldToNodeConversionFactor,
b2Body.position.y * b2WorldToNodeConversionFactor
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment