示例#1
0
        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;
            }
        }
示例#2
0
    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);
    }
示例#3
0
    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));
        }
    }
示例#4
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);
    }