private void AddForce(OMV.Vector3 force, bool pushforce, bool inTaintTime) { if (force.IsFinite()) { float magnitude = force.Length(); if (magnitude > BSParam.MaxAddForceMagnitude) { // Force has a limit force = force / magnitude * BSParam.MaxAddForceMagnitude; } OMV.Vector3 addForce = force; // DetailLog("{0},BSCharacter.addForce,call,force={1}", LocalID, addForce); PhysicsScene.TaintedObject(inTaintTime, "BSCharacter.AddForce", delegate() { // Bullet adds this central force to the total force for this tick // DetailLog("{0},BSCharacter.addForce,taint,force={1}", LocalID, addForce); if (PhysBody.HasPhysicalBody) { PhysicsScene.PE.ApplyCentralForce(PhysBody, addForce); } }); } else { m_log.WarnFormat("{0}: Got a NaN force applied to a character. LocalID={1}", LogHeader, LocalID); return; } }
public virtual bool Equals(Vertex v, float tolerance) { OpenMetaverse.Vector3 diff = this._impl - v._impl; float d = diff.Length(); if (d < tolerance) { return(true); } return(false); }
public Vertex normalize() { float tlength = _impl.Length(); if (tlength != 0) { float mul = 1.0f / tlength; return(new Vertex(X * mul, Y * mul, Z * mul)); } else { return(new Vertex(0, 0, 0)); } }
public OpenMetaverse.Vector3 getNormal() { // Vertices // Vectors for edges OpenMetaverse.Vector3 e1; OpenMetaverse.Vector3 e2; e1 = new OpenMetaverse.Vector3(v1.X - v2.X, v1.Y - v2.Y, v1.Z - v2.Z); e2 = new OpenMetaverse.Vector3(v1.X - v3.X, v1.Y - v3.Y, v1.Z - v3.Z); // Cross product for normal OpenMetaverse.Vector3 n = OpenMetaverse.Vector3.Cross(e1, e2); // Length float l = n.Length(); // Normalized "normal" n = n / l; return(n); }