PositionSolverManifold class
class PositionSolverManifold { Vector normal; Vector point; num separation; /** Pooling */ Vector pointA; Vector pointB; Vector temp; Vector planePoint; Vector clipPoint; PositionSolverManifold() : normal = new Vector(), point = new Vector(), separation = 0, // Initialize pool variables. pointA = new Vector(), pointB = new Vector(), temp = new Vector(), planePoint = new Vector(), clipPoint = new Vector() { } void initialize(ContactConstraint cc, int index) { assert(cc.pointCount > 0); switch (cc.type) { case ManifoldType.CIRCLES: cc.bodyA.getWorldPointToOut(cc.localPoint, pointA); cc.bodyB.getWorldPointToOut(cc.points[0].localPoint, pointB); if (MathBox.distanceSquared(pointA, pointB) > Settings.EPSILON * Settings.EPSILON){ normal.setFrom(pointB).subLocal(pointA); normal.normalize(); } else { normal.setCoords(1.0, 0.0); } point.setFrom(pointA).addLocal(pointB).mulLocal(.5); temp.setFrom(pointB).subLocal(pointA); separation = Vector.dot(temp, normal) - cc.radius; break; case ManifoldType.FACE_A: cc.bodyA.getWorldVectorToOut(cc.localNormal, normal); cc.bodyA.getWorldPointToOut(cc.localPoint, planePoint); cc.bodyB.getWorldPointToOut(cc.points[index].localPoint, clipPoint); temp.setFrom(clipPoint).subLocal(planePoint); separation = Vector.dot(temp, normal) - cc.radius; point.setFrom(clipPoint); break; case ManifoldType.FACE_B: cc.bodyB.getWorldVectorToOut(cc.localNormal, normal); cc.bodyB.getWorldPointToOut(cc.localPoint, planePoint); cc.bodyA.getWorldPointToOut(cc.points[index].localPoint, clipPoint); temp.setFrom(clipPoint).subLocal(planePoint); separation = Vector.dot(temp, normal) - cc.radius; point.setFrom(clipPoint); // Ensure normal points from A to B normal.negateLocal(); break; } } }
Constructors
new PositionSolverManifold() #
PositionSolverManifold() : normal = new Vector(), point = new Vector(), separation = 0, // Initialize pool variables. pointA = new Vector(), pointB = new Vector(), temp = new Vector(), planePoint = new Vector(), clipPoint = new Vector() { }
Properties
final Type runtimeType #
A representation of the runtime type of the object.
external Type get runtimeType;
num separation #
num separation;
Operators
bool operator ==(other) #
The equality operator.
The default behavior for all Object
s is to return true if and
only if this
and
other are the same object.
If a subclass overrides the equality operator it should override
the hashCode
method as well to maintain consistency.
bool operator ==(other) => identical(this, other);
Methods
int hashCode() #
Get a hash code for this object.
All objects have hash codes. Hash codes are guaranteed to be the
same for objects that are equal when compared using the equality
operator ==
. Other than that there are no guarantees about
the hash codes. They will not be consistent between runs and
there are no distribution guarantees.
If a subclass overrides hashCode
it should override the
equality operator as well to maintain consistency.
external int hashCode();
void initialize(ContactConstraint cc, int index) #
void initialize(ContactConstraint cc, int index) { assert(cc.pointCount > 0); switch (cc.type) { case ManifoldType.CIRCLES: cc.bodyA.getWorldPointToOut(cc.localPoint, pointA); cc.bodyB.getWorldPointToOut(cc.points[0].localPoint, pointB); if (MathBox.distanceSquared(pointA, pointB) > Settings.EPSILON * Settings.EPSILON){ normal.setFrom(pointB).subLocal(pointA); normal.normalize(); } else { normal.setCoords(1.0, 0.0); } point.setFrom(pointA).addLocal(pointB).mulLocal(.5); temp.setFrom(pointB).subLocal(pointA); separation = Vector.dot(temp, normal) - cc.radius; break; case ManifoldType.FACE_A: cc.bodyA.getWorldVectorToOut(cc.localNormal, normal); cc.bodyA.getWorldPointToOut(cc.localPoint, planePoint); cc.bodyB.getWorldPointToOut(cc.points[index].localPoint, clipPoint); temp.setFrom(clipPoint).subLocal(planePoint); separation = Vector.dot(temp, normal) - cc.radius; point.setFrom(clipPoint); break; case ManifoldType.FACE_B: cc.bodyB.getWorldVectorToOut(cc.localNormal, normal); cc.bodyB.getWorldPointToOut(cc.localPoint, planePoint); cc.bodyA.getWorldPointToOut(cc.points[index].localPoint, clipPoint); temp.setFrom(clipPoint).subLocal(planePoint); separation = Vector.dot(temp, normal) - cc.radius; point.setFrom(clipPoint); // Ensure normal points from A to B normal.negateLocal(); break; } }
noSuchMethod(String name, List args) #
noSuchMethod
is invoked when users invoke a non-existant method
on an object. The name of the method and the arguments of the
invocation are passed to noSuchMethod
. If noSuchMethod
returns a value, that value becomes the result of the original
invocation.
The default behavior of noSuchMethod
is to throw a
noSuchMethodError
.
external Dynamic noSuchMethod(String name, List args);
const Object() #
Creates a new Object
instance.
Object
instances have no meaningful state, and are only useful
through their identity. An Object
instance is equal to itself
only.
const Object();
new PositionSolverManifold() #
PositionSolverManifold() : normal = new Vector(), point = new Vector(), separation = 0, // Initialize pool variables. pointA = new Vector(), pointB = new Vector(), temp = new Vector(), planePoint = new Vector(), clipPoint = new Vector() { }
String toString() #
Returns a string representation of this object.
external String toString();