Commit 23bae330 authored by Viktor Lidholt's avatar Viktor Lidholt

Adds teleporting methods for moving sprite kinematic physics bodies without assigning velocities

parent 7febbfc7
...@@ -148,6 +148,16 @@ class Node { ...@@ -148,6 +148,16 @@ class Node {
invalidateTransformMatrix(); 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. /// The position of this node relative to its parent.
/// ///
/// myNode.position = new Point(42.0, 42.0); /// myNode.position = new Point(42.0, 42.0);
...@@ -172,6 +182,23 @@ class Node { ...@@ -172,6 +182,23 @@ class Node {
invalidateTransformMatrix(); 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. /// The skew along the x-axis of this node in degrees.
/// ///
/// myNode.skewX = 45.0; /// myNode.skewX = 45.0;
......
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