Merge commit 'f2132329a358db2c66c29501d35ef54eae8d6eed' into bigmerge
commit
63cbdb9b2a
|
@ -188,7 +188,6 @@ namespace OpenSim.Region.Physics.Manager
|
||||||
public virtual Vector3 GetJointAxis(PhysicsJoint joint)
|
public virtual Vector3 GetJointAxis(PhysicsJoint joint)
|
||||||
{ return Vector3.Zero; }
|
{ return Vector3.Zero; }
|
||||||
|
|
||||||
|
|
||||||
public abstract void AddPhysicsActorTaint(PhysicsActor prim);
|
public abstract void AddPhysicsActorTaint(PhysicsActor prim);
|
||||||
|
|
||||||
public abstract float Simulate(float timeStep);
|
public abstract float Simulate(float timeStep);
|
||||||
|
|
|
@ -326,7 +326,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
/// Set a new geometry for this prim.
|
/// Set a new geometry for this prim.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="geom"></param>
|
/// <param name="geom"></param>
|
||||||
public void SetGeom(IntPtr geom)
|
private void SetGeom(IntPtr geom)
|
||||||
{
|
{
|
||||||
prim_geom = geom;
|
prim_geom = geom;
|
||||||
//Console.WriteLine("SetGeom to " + prim_geom + " for " + Name);
|
//Console.WriteLine("SetGeom to " + prim_geom + " for " + Name);
|
||||||
|
@ -351,7 +351,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
//m_log.Warn("Setting Geom to: " + prim_geom);
|
//m_log.Warn("Setting Geom to: " + prim_geom);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void enableBodySoft()
|
private void enableBodySoft()
|
||||||
{
|
{
|
||||||
if (!childPrim)
|
if (!childPrim)
|
||||||
{
|
{
|
||||||
|
@ -366,7 +366,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void disableBodySoft()
|
private void disableBodySoft()
|
||||||
{
|
{
|
||||||
m_disabled = true;
|
m_disabled = true;
|
||||||
|
|
||||||
|
@ -379,7 +379,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Make a prim subject to physics.
|
/// Make a prim subject to physics.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void enableBody()
|
private void enableBody()
|
||||||
{
|
{
|
||||||
// Don't enable this body if we're a child prim
|
// Don't enable this body if we're a child prim
|
||||||
// this should be taken care of in the parent function not here
|
// this should be taken care of in the parent function not here
|
||||||
|
@ -423,7 +423,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
m_vehicle.Enable(Body, _parent_scene);
|
m_vehicle.Enable(Body, _parent_scene);
|
||||||
}
|
}
|
||||||
|
|
||||||
_parent_scene.addActivePrim(this);
|
_parent_scene.ActivatePrim(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -741,7 +741,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public void setMass()
|
private void setMass()
|
||||||
{
|
{
|
||||||
if (Body != (IntPtr) 0)
|
if (Body != (IntPtr) 0)
|
||||||
{
|
{
|
||||||
|
@ -757,7 +757,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Stop a prim from being subject to physics.
|
/// Stop a prim from being subject to physics.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void disableBody()
|
internal void disableBody()
|
||||||
{
|
{
|
||||||
//this kills the body so things like 'mesh' can re-create it.
|
//this kills the body so things like 'mesh' can re-create it.
|
||||||
lock (this)
|
lock (this)
|
||||||
|
@ -766,7 +766,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
{
|
{
|
||||||
if (Body != IntPtr.Zero)
|
if (Body != IntPtr.Zero)
|
||||||
{
|
{
|
||||||
_parent_scene.remActivePrim(this);
|
_parent_scene.DeactivatePrim(this);
|
||||||
m_collisionCategories &= ~CollisionCategories.Body;
|
m_collisionCategories &= ~CollisionCategories.Body;
|
||||||
m_collisionFlags &= ~(CollisionCategories.Wind | CollisionCategories.Land);
|
m_collisionFlags &= ~(CollisionCategories.Wind | CollisionCategories.Land);
|
||||||
|
|
||||||
|
@ -783,7 +783,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
{
|
{
|
||||||
foreach (OdePrim prm in childrenPrim)
|
foreach (OdePrim prm in childrenPrim)
|
||||||
{
|
{
|
||||||
_parent_scene.remActivePrim(prm);
|
_parent_scene.DeactivatePrim(prm);
|
||||||
prm.Body = IntPtr.Zero;
|
prm.Body = IntPtr.Zero;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -793,7 +793,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_parent_scene.remActivePrim(this);
|
_parent_scene.DeactivatePrim(this);
|
||||||
|
|
||||||
m_collisionCategories &= ~CollisionCategories.Body;
|
m_collisionCategories &= ~CollisionCategories.Body;
|
||||||
m_collisionFlags &= ~(CollisionCategories.Wind | CollisionCategories.Land);
|
m_collisionFlags &= ~(CollisionCategories.Wind | CollisionCategories.Land);
|
||||||
|
@ -814,7 +814,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
|
|
||||||
private static Dictionary<IMesh, IntPtr> m_MeshToTriMeshMap = new Dictionary<IMesh, IntPtr>();
|
private static Dictionary<IMesh, IntPtr> m_MeshToTriMeshMap = new Dictionary<IMesh, IntPtr>();
|
||||||
|
|
||||||
public void setMesh(OdeScene parent_scene, IMesh mesh)
|
private void setMesh(OdeScene parent_scene, IMesh mesh)
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat("[ODE PRIM]: Setting mesh on {0} to {1}", Name, mesh);
|
// m_log.DebugFormat("[ODE PRIM]: Setting mesh on {0} to {1}", Name, mesh);
|
||||||
|
|
||||||
|
@ -884,73 +884,73 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ProcessTaints(float timestep)
|
internal void ProcessTaints()
|
||||||
{
|
{
|
||||||
#if SPAM
|
#if SPAM
|
||||||
Console.WriteLine("ZProcessTaints for " + Name);
|
Console.WriteLine("ZProcessTaints for " + Name);
|
||||||
#endif
|
#endif
|
||||||
if (m_taintadd)
|
if (m_taintadd)
|
||||||
{
|
{
|
||||||
changeadd(timestep);
|
changeadd();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (prim_geom != IntPtr.Zero)
|
if (prim_geom != IntPtr.Zero)
|
||||||
{
|
{
|
||||||
if (!_position.ApproxEquals(m_taintposition, 0f))
|
if (!_position.ApproxEquals(m_taintposition, 0f))
|
||||||
changemove(timestep);
|
changemove();
|
||||||
|
|
||||||
if (m_taintrot != _orientation)
|
if (m_taintrot != _orientation)
|
||||||
{
|
{
|
||||||
if (childPrim && IsPhysical) // For physical child prim...
|
if (childPrim && IsPhysical) // For physical child prim...
|
||||||
{
|
{
|
||||||
rotate(timestep);
|
rotate();
|
||||||
// KF: ODE will also rotate the parent prim!
|
// KF: ODE will also rotate the parent prim!
|
||||||
// so rotate the root back to where it was
|
// so rotate the root back to where it was
|
||||||
OdePrim parent = (OdePrim)_parent;
|
OdePrim parent = (OdePrim)_parent;
|
||||||
parent.rotate(timestep);
|
parent.rotate();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//Just rotate the prim
|
//Just rotate the prim
|
||||||
rotate(timestep);
|
rotate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_taintPhysics != IsPhysical && !(m_taintparent != _parent))
|
if (m_taintPhysics != IsPhysical && !(m_taintparent != _parent))
|
||||||
changePhysicsStatus(timestep);
|
changePhysicsStatus();
|
||||||
|
|
||||||
if (!_size.ApproxEquals(m_taintsize, 0f))
|
if (!_size.ApproxEquals(m_taintsize, 0f))
|
||||||
changesize(timestep);
|
changesize();
|
||||||
|
|
||||||
if (m_taintshape)
|
if (m_taintshape)
|
||||||
changeshape(timestep);
|
changeshape();
|
||||||
|
|
||||||
if (m_taintforce)
|
if (m_taintforce)
|
||||||
changeAddForce(timestep);
|
changeAddForce();
|
||||||
|
|
||||||
if (m_taintaddangularforce)
|
if (m_taintaddangularforce)
|
||||||
changeAddAngularForce(timestep);
|
changeAddAngularForce();
|
||||||
|
|
||||||
if (!m_taintTorque.ApproxEquals(Vector3.Zero, 0.001f))
|
if (!m_taintTorque.ApproxEquals(Vector3.Zero, 0.001f))
|
||||||
changeSetTorque(timestep);
|
changeSetTorque();
|
||||||
|
|
||||||
if (m_taintdisable)
|
if (m_taintdisable)
|
||||||
changedisable(timestep);
|
changedisable();
|
||||||
|
|
||||||
if (m_taintselected != m_isSelected)
|
if (m_taintselected != m_isSelected)
|
||||||
changeSelectedStatus(timestep);
|
changeSelectedStatus();
|
||||||
|
|
||||||
if (!m_taintVelocity.ApproxEquals(Vector3.Zero, 0.001f))
|
if (!m_taintVelocity.ApproxEquals(Vector3.Zero, 0.001f))
|
||||||
changevelocity(timestep);
|
changevelocity();
|
||||||
|
|
||||||
if (m_taintparent != _parent)
|
if (m_taintparent != _parent)
|
||||||
changelink(timestep);
|
changelink();
|
||||||
|
|
||||||
if (m_taintCollidesWater != m_collidesWater)
|
if (m_taintCollidesWater != m_collidesWater)
|
||||||
changefloatonwater(timestep);
|
changefloatonwater();
|
||||||
|
|
||||||
if (!m_angularlock.ApproxEquals(m_taintAngularLock,0f))
|
if (!m_angularlock.ApproxEquals(m_taintAngularLock,0f))
|
||||||
changeAngularLock(timestep);
|
changeAngularLock();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -958,7 +958,10 @@ Console.WriteLine("ZProcessTaints for " + Name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void changeAngularLock(float timestep)
|
/// <summary>
|
||||||
|
/// Change prim in response to an angular lock taint.
|
||||||
|
/// </summary>
|
||||||
|
private void changeAngularLock()
|
||||||
{
|
{
|
||||||
// do we have a Physical object?
|
// do we have a Physical object?
|
||||||
if (Body != IntPtr.Zero)
|
if (Body != IntPtr.Zero)
|
||||||
|
@ -983,11 +986,15 @@ Console.WriteLine("ZProcessTaints for " + Name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store this for later in case we get turned into a separate body
|
// Store this for later in case we get turned into a separate body
|
||||||
m_angularlock = m_taintAngularLock;
|
m_angularlock = m_taintAngularLock;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void changelink(float timestep)
|
/// <summary>
|
||||||
|
/// Change prim in response to a link taint.
|
||||||
|
/// </summary>
|
||||||
|
private void changelink()
|
||||||
{
|
{
|
||||||
// If the newly set parent is not null
|
// If the newly set parent is not null
|
||||||
// create link
|
// create link
|
||||||
|
@ -1042,7 +1049,7 @@ Console.WriteLine("ZProcessTaints for " + Name);
|
||||||
/// Add a child prim to this parent prim.
|
/// Add a child prim to this parent prim.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="prim">Child prim</param>
|
/// <param name="prim">Child prim</param>
|
||||||
public void AddChildPrim(OdePrim prim)
|
private void AddChildPrim(OdePrim prim)
|
||||||
{
|
{
|
||||||
//Console.WriteLine("AddChildPrim " + Name);
|
//Console.WriteLine("AddChildPrim " + Name);
|
||||||
if (this.m_localID != prim.m_localID)
|
if (this.m_localID != prim.m_localID)
|
||||||
|
@ -1134,7 +1141,7 @@ Console.WriteLine("ZProcessTaints for " + Name);
|
||||||
prm.createAMotor(m_angularlock);
|
prm.createAMotor(m_angularlock);
|
||||||
}
|
}
|
||||||
prm.Body = Body;
|
prm.Body = Body;
|
||||||
_parent_scene.addActivePrim(prm);
|
_parent_scene.ActivatePrim(prm);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_collisionCategories |= CollisionCategories.Body;
|
m_collisionCategories |= CollisionCategories.Body;
|
||||||
|
@ -1179,7 +1186,7 @@ Console.WriteLine("ZProcessTaints for " + Name);
|
||||||
if (m_vehicle.Type != Vehicle.TYPE_NONE)
|
if (m_vehicle.Type != Vehicle.TYPE_NONE)
|
||||||
m_vehicle.Enable(Body, _parent_scene);
|
m_vehicle.Enable(Body, _parent_scene);
|
||||||
|
|
||||||
_parent_scene.addActivePrim(this);
|
_parent_scene.ActivatePrim(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1206,7 +1213,7 @@ Console.WriteLine("ZProcessTaints for " + Name);
|
||||||
|
|
||||||
if (Body != IntPtr.Zero)
|
if (Body != IntPtr.Zero)
|
||||||
{
|
{
|
||||||
_parent_scene.remActivePrim(this);
|
_parent_scene.DeactivatePrim(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
lock (childrenPrim)
|
lock (childrenPrim)
|
||||||
|
@ -1245,7 +1252,7 @@ Console.WriteLine("ZProcessTaints for " + Name);
|
||||||
|
|
||||||
if (Body != IntPtr.Zero)
|
if (Body != IntPtr.Zero)
|
||||||
{
|
{
|
||||||
_parent_scene.remActivePrim(this);
|
_parent_scene.DeactivatePrim(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
lock (childrenPrim)
|
lock (childrenPrim)
|
||||||
|
@ -1258,7 +1265,10 @@ Console.WriteLine("ZProcessTaints for " + Name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void changeSelectedStatus(float timestep)
|
/// <summary>
|
||||||
|
/// Change prim in response to a selection taint.
|
||||||
|
/// </summary>
|
||||||
|
private void changeSelectedStatus()
|
||||||
{
|
{
|
||||||
if (m_taintselected)
|
if (m_taintselected)
|
||||||
{
|
{
|
||||||
|
@ -1338,7 +1348,7 @@ Console.WriteLine("ZProcessTaints for " + Name);
|
||||||
m_isSelected = m_taintselected;
|
m_isSelected = m_taintselected;
|
||||||
}//end changeSelectedStatus
|
}//end changeSelectedStatus
|
||||||
|
|
||||||
public void ResetTaints()
|
internal void ResetTaints()
|
||||||
{
|
{
|
||||||
m_taintposition = _position;
|
m_taintposition = _position;
|
||||||
m_taintrot = _orientation;
|
m_taintrot = _orientation;
|
||||||
|
@ -1356,7 +1366,7 @@ Console.WriteLine("ZProcessTaints for " + Name);
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="m_targetSpace"></param>
|
/// <param name="m_targetSpace"></param>
|
||||||
/// <param name="mesh">If null, then a mesh is used that is based on the profile shape data.</param>
|
/// <param name="mesh">If null, then a mesh is used that is based on the profile shape data.</param>
|
||||||
public void CreateGeom(IntPtr m_targetSpace, IMesh mesh)
|
private void CreateGeom(IntPtr m_targetSpace, IMesh mesh)
|
||||||
{
|
{
|
||||||
#if SPAM
|
#if SPAM
|
||||||
Console.WriteLine("CreateGeom:");
|
Console.WriteLine("CreateGeom:");
|
||||||
|
@ -1442,7 +1452,7 @@ Console.WriteLine("CreateGeom:");
|
||||||
/// <param name="m_targetSpace"></param>
|
/// <param name="m_targetSpace"></param>
|
||||||
/// <param name="mesh">If null, then a mesh is used that is based on the profile shape data.</param>
|
/// <param name="mesh">If null, then a mesh is used that is based on the profile shape data.</param>
|
||||||
/// <returns>true if the geom was successfully removed, false if it was already gone or the remove failed.</returns>
|
/// <returns>true if the geom was successfully removed, false if it was already gone or the remove failed.</returns>
|
||||||
public bool RemoveGeom()
|
internal bool RemoveGeom()
|
||||||
{
|
{
|
||||||
if (prim_geom != IntPtr.Zero)
|
if (prim_geom != IntPtr.Zero)
|
||||||
{
|
{
|
||||||
|
@ -1468,8 +1478,10 @@ Console.WriteLine("CreateGeom:");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
public void changeadd(float timestep)
|
/// Add prim in response to an add taint.
|
||||||
|
/// </summary>
|
||||||
|
private void changeadd()
|
||||||
{
|
{
|
||||||
int[] iprimspaceArrItem = _parent_scene.calculateSpaceArrayItemFromPos(_position);
|
int[] iprimspaceArrItem = _parent_scene.calculateSpaceArrayItemFromPos(_position);
|
||||||
IntPtr targetspace = _parent_scene.calculateSpaceForGeom(_position);
|
IntPtr targetspace = _parent_scene.calculateSpaceForGeom(_position);
|
||||||
|
@ -1513,12 +1525,15 @@ Console.WriteLine("changeadd 1");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
changeSelectedStatus(timestep);
|
changeSelectedStatus();
|
||||||
|
|
||||||
m_taintadd = false;
|
m_taintadd = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void changemove(float timestep)
|
/// <summary>
|
||||||
|
/// Move prim in response to a move taint.
|
||||||
|
/// </summary>
|
||||||
|
private void changemove()
|
||||||
{
|
{
|
||||||
if (IsPhysical)
|
if (IsPhysical)
|
||||||
{
|
{
|
||||||
|
@ -1589,13 +1604,13 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
changeSelectedStatus(timestep);
|
changeSelectedStatus();
|
||||||
|
|
||||||
resetCollisionAccounting();
|
resetCollisionAccounting();
|
||||||
m_taintposition = _position;
|
m_taintposition = _position;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Move(float timestep)
|
internal void Move(float timestep)
|
||||||
{
|
{
|
||||||
float fx = 0;
|
float fx = 0;
|
||||||
float fy = 0;
|
float fy = 0;
|
||||||
|
@ -1842,7 +1857,7 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void rotate(float timestep)
|
private void rotate()
|
||||||
{
|
{
|
||||||
d.Quaternion myrot = new d.Quaternion();
|
d.Quaternion myrot = new d.Quaternion();
|
||||||
myrot.X = _orientation.X;
|
myrot.X = _orientation.X;
|
||||||
|
@ -1876,7 +1891,10 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
m_disabled = false;
|
m_disabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void changedisable(float timestep)
|
/// <summary>
|
||||||
|
/// Change prim in response to a disable taint.
|
||||||
|
/// </summary>
|
||||||
|
private void changedisable()
|
||||||
{
|
{
|
||||||
m_disabled = true;
|
m_disabled = true;
|
||||||
if (Body != IntPtr.Zero)
|
if (Body != IntPtr.Zero)
|
||||||
|
@ -1888,7 +1906,10 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
m_taintdisable = false;
|
m_taintdisable = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void changePhysicsStatus(float timestep)
|
/// <summary>
|
||||||
|
/// Change prim in response to a physics status taint
|
||||||
|
/// </summary>
|
||||||
|
private void changePhysicsStatus()
|
||||||
{
|
{
|
||||||
if (IsPhysical)
|
if (IsPhysical)
|
||||||
{
|
{
|
||||||
|
@ -1896,7 +1917,7 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
{
|
{
|
||||||
if (_pbs.SculptEntry && _parent_scene.meshSculptedPrim)
|
if (_pbs.SculptEntry && _parent_scene.meshSculptedPrim)
|
||||||
{
|
{
|
||||||
changeshape(2f);
|
changeshape();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1913,7 +1934,7 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
RemoveGeom();
|
RemoveGeom();
|
||||||
|
|
||||||
//Console.WriteLine("changePhysicsStatus for " + Name);
|
//Console.WriteLine("changePhysicsStatus for " + Name);
|
||||||
changeadd(2f);
|
changeadd();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (childPrim)
|
if (childPrim)
|
||||||
|
@ -1931,13 +1952,16 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
changeSelectedStatus(timestep);
|
changeSelectedStatus();
|
||||||
|
|
||||||
resetCollisionAccounting();
|
resetCollisionAccounting();
|
||||||
m_taintPhysics = IsPhysical;
|
m_taintPhysics = IsPhysical;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void changesize(float timestamp)
|
/// <summary>
|
||||||
|
/// Change prim in response to a size taint.
|
||||||
|
/// </summary>
|
||||||
|
private void changesize()
|
||||||
{
|
{
|
||||||
#if SPAM
|
#if SPAM
|
||||||
m_log.DebugFormat("[ODE PRIM]: Called changesize");
|
m_log.DebugFormat("[ODE PRIM]: Called changesize");
|
||||||
|
@ -2007,7 +2031,8 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
d.BodyEnable(Body);
|
d.BodyEnable(Body);
|
||||||
}
|
}
|
||||||
|
|
||||||
changeSelectedStatus(timestamp);
|
changeSelectedStatus();
|
||||||
|
|
||||||
if (childPrim)
|
if (childPrim)
|
||||||
{
|
{
|
||||||
if (_parent is OdePrim)
|
if (_parent is OdePrim)
|
||||||
|
@ -2020,7 +2045,11 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
m_taintsize = _size;
|
m_taintsize = _size;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void changefloatonwater(float timestep)
|
/// <summary>
|
||||||
|
/// Change prim in response to a float on water taint.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="timestep"></param>
|
||||||
|
private void changefloatonwater()
|
||||||
{
|
{
|
||||||
m_collidesWater = m_taintCollidesWater;
|
m_collidesWater = m_taintCollidesWater;
|
||||||
|
|
||||||
|
@ -2038,7 +2067,10 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void changeshape(float timestamp)
|
/// <summary>
|
||||||
|
/// Change prim in response to a shape taint.
|
||||||
|
/// </summary>
|
||||||
|
private void changeshape()
|
||||||
{
|
{
|
||||||
// Cleanup of old prim geometry and Bodies
|
// Cleanup of old prim geometry and Bodies
|
||||||
if (IsPhysical && Body != IntPtr.Zero)
|
if (IsPhysical && Body != IntPtr.Zero)
|
||||||
|
@ -2101,7 +2133,8 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
changeSelectedStatus(timestamp);
|
changeSelectedStatus();
|
||||||
|
|
||||||
if (childPrim)
|
if (childPrim)
|
||||||
{
|
{
|
||||||
if (_parent is OdePrim)
|
if (_parent is OdePrim)
|
||||||
|
@ -2115,7 +2148,10 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
m_taintshape = false;
|
m_taintshape = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void changeAddForce(float timestamp)
|
/// <summary>
|
||||||
|
/// Change prim in response to an add force taint.
|
||||||
|
/// </summary>
|
||||||
|
private void changeAddForce()
|
||||||
{
|
{
|
||||||
if (!m_isSelected)
|
if (!m_isSelected)
|
||||||
{
|
{
|
||||||
|
@ -2163,7 +2199,10 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
m_taintforce = false;
|
m_taintforce = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void changeSetTorque(float timestamp)
|
/// <summary>
|
||||||
|
/// Change prim in response to a torque taint.
|
||||||
|
/// </summary>
|
||||||
|
private void changeSetTorque()
|
||||||
{
|
{
|
||||||
if (!m_isSelected)
|
if (!m_isSelected)
|
||||||
{
|
{
|
||||||
|
@ -2176,7 +2215,10 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
m_taintTorque = Vector3.Zero;
|
m_taintTorque = Vector3.Zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void changeAddAngularForce(float timestamp)
|
/// <summary>
|
||||||
|
/// Change prim in response to an angular force taint.
|
||||||
|
/// </summary>
|
||||||
|
private void changeAddAngularForce()
|
||||||
{
|
{
|
||||||
if (!m_isSelected)
|
if (!m_isSelected)
|
||||||
{
|
{
|
||||||
|
@ -2204,7 +2246,10 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
m_taintaddangularforce = false;
|
m_taintaddangularforce = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void changevelocity(float timestep)
|
/// <summary>
|
||||||
|
/// Change prim in response to a velocity taint.
|
||||||
|
/// </summary>
|
||||||
|
private void changevelocity()
|
||||||
{
|
{
|
||||||
if (!m_isSelected)
|
if (!m_isSelected)
|
||||||
{
|
{
|
||||||
|
@ -2219,10 +2264,11 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
|
|
||||||
//resetCollisionAccounting();
|
//resetCollisionAccounting();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_taintVelocity = Vector3.Zero;
|
m_taintVelocity = Vector3.Zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPrimForRemoval()
|
internal void setPrimForRemoval()
|
||||||
{
|
{
|
||||||
m_taintremove = true;
|
m_taintremove = true;
|
||||||
}
|
}
|
||||||
|
@ -2438,16 +2484,13 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
if (QuaternionIsFinite(value))
|
if (QuaternionIsFinite(value))
|
||||||
{
|
|
||||||
_orientation = value;
|
_orientation = value;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
m_log.WarnFormat("[PHYSICS]: Got NaN quaternion Orientation from Scene in Object {0}", Name);
|
m_log.WarnFormat("[PHYSICS]: Got NaN quaternion Orientation from Scene in Object {0}", Name);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static bool QuaternionIsFinite(Quaternion q)
|
private static bool QuaternionIsFinite(Quaternion q)
|
||||||
{
|
{
|
||||||
if (Single.IsNaN(q.X) || Single.IsInfinity(q.X))
|
if (Single.IsNaN(q.X) || Single.IsInfinity(q.X))
|
||||||
return false;
|
return false;
|
||||||
|
@ -2465,12 +2508,6 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
get { return _acceleration; }
|
get { return _acceleration; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void SetAcceleration(Vector3 accel)
|
|
||||||
{
|
|
||||||
_acceleration = accel;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void AddForce(Vector3 force, bool pushforce)
|
public override void AddForce(Vector3 force, bool pushforce)
|
||||||
{
|
{
|
||||||
if (force.IsFinite())
|
if (force.IsFinite())
|
||||||
|
@ -2574,7 +2611,7 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdatePositionAndVelocity()
|
internal void UpdatePositionAndVelocity()
|
||||||
{
|
{
|
||||||
// no lock; called from Simulate() -- if you call this from elsewhere, gotta lock or do Monitor.Enter/Exit!
|
// no lock; called from Simulate() -- if you call this from elsewhere, gotta lock or do Monitor.Enter/Exit!
|
||||||
if (_parent == null)
|
if (_parent == null)
|
||||||
|
@ -2943,7 +2980,7 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
d.JointSetAMotorParam(Amotor, (int)dParam.FMax, Mass * 50f);//
|
d.JointSetAMotorParam(Amotor, (int)dParam.FMax, Mass * 50f);//
|
||||||
}
|
}
|
||||||
|
|
||||||
public Matrix4 FromDMass(d.Mass pMass)
|
private Matrix4 FromDMass(d.Mass pMass)
|
||||||
{
|
{
|
||||||
Matrix4 obj;
|
Matrix4 obj;
|
||||||
obj.M11 = pMass.I.M00;
|
obj.M11 = pMass.I.M00;
|
||||||
|
@ -2965,7 +3002,7 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
public d.Mass FromMatrix4(Matrix4 pMat, ref d.Mass obj)
|
private d.Mass FromMatrix4(Matrix4 pMat, ref d.Mass obj)
|
||||||
{
|
{
|
||||||
obj.I.M00 = pMat[0, 0];
|
obj.I.M00 = pMat[0, 0];
|
||||||
obj.I.M01 = pMat[0, 1];
|
obj.I.M01 = pMat[0, 1];
|
||||||
|
@ -3153,6 +3190,7 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static float determinant3x3(Matrix4 pMat)
|
private static float determinant3x3(Matrix4 pMat)
|
||||||
{
|
{
|
||||||
float det = 0;
|
float det = 0;
|
||||||
|
|
|
@ -193,9 +193,30 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
private readonly HashSet<OdeCharacter> _characters = new HashSet<OdeCharacter>();
|
private readonly HashSet<OdeCharacter> _characters = new HashSet<OdeCharacter>();
|
||||||
private readonly HashSet<OdePrim> _prims = new HashSet<OdePrim>();
|
private readonly HashSet<OdePrim> _prims = new HashSet<OdePrim>();
|
||||||
private readonly HashSet<OdePrim> _activeprims = new HashSet<OdePrim>();
|
private readonly HashSet<OdePrim> _activeprims = new HashSet<OdePrim>();
|
||||||
private readonly HashSet<OdePrim> _taintedPrimH = new HashSet<OdePrim>();
|
|
||||||
|
/// <summary>
|
||||||
|
/// Used to lock on manipulation of _taintedPrimL and _taintedPrimH
|
||||||
|
/// </summary>
|
||||||
private readonly Object _taintedPrimLock = new Object();
|
private readonly Object _taintedPrimLock = new Object();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// List of tainted prims.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// A tainted prim is one that has taints to process before performing any other operations. The list is
|
||||||
|
/// cleared after processing.
|
||||||
|
/// </remarks>
|
||||||
private readonly List<OdePrim> _taintedPrimL = new List<OdePrim>();
|
private readonly List<OdePrim> _taintedPrimL = new List<OdePrim>();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// HashSet of tainted prims.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// A tainted prim is one that has taints to process before performing any other operations. The hashset is
|
||||||
|
/// cleared after processing.
|
||||||
|
/// </remarks>
|
||||||
|
private readonly HashSet<OdePrim> _taintedPrimH = new HashSet<OdePrim>();
|
||||||
|
|
||||||
private readonly HashSet<OdeCharacter> _taintedActors = new HashSet<OdeCharacter>();
|
private readonly HashSet<OdeCharacter> _taintedActors = new HashSet<OdeCharacter>();
|
||||||
private readonly List<d.ContactGeom> _perloopContact = new List<d.ContactGeom>();
|
private readonly List<d.ContactGeom> _perloopContact = new List<d.ContactGeom>();
|
||||||
|
|
||||||
|
@ -257,6 +278,9 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
// split static geometry collision handling into spaces of 30 meters
|
// split static geometry collision handling into spaces of 30 meters
|
||||||
public IntPtr[,] staticPrimspace;
|
public IntPtr[,] staticPrimspace;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Used to lock the entire physics scene. Locked during the main part of Simulate()
|
||||||
|
/// </summary>
|
||||||
public Object OdeLock;
|
public Object OdeLock;
|
||||||
|
|
||||||
public IMesher mesher;
|
public IMesher mesher;
|
||||||
|
@ -643,15 +667,15 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
//while (d.SpaceLockQuery(space)) { } // Wait and do nothing
|
//while (d.SpaceLockQuery(space)) { } // Wait and do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
// /// <summary>
|
||||||
/// Debug space message for printing the space that a prim/avatar is in.
|
// /// Debug space message for printing the space that a prim/avatar is in.
|
||||||
/// </summary>
|
// /// </summary>
|
||||||
/// <param name="pos"></param>
|
// /// <param name="pos"></param>
|
||||||
/// <returns>Returns which split up space the given position is in.</returns>
|
// /// <returns>Returns which split up space the given position is in.</returns>
|
||||||
public string whichspaceamIin(Vector3 pos)
|
// public string whichspaceamIin(Vector3 pos)
|
||||||
{
|
// {
|
||||||
return calculateSpaceForGeom(pos).ToString();
|
// return calculateSpaceForGeom(pos).ToString();
|
||||||
}
|
// }
|
||||||
|
|
||||||
#region Collision Detection
|
#region Collision Detection
|
||||||
|
|
||||||
|
@ -1402,7 +1426,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
public int TriArrayCallback(IntPtr trimesh, IntPtr refObject, int[] triangleIndex, int triCount)
|
private int TriArrayCallback(IntPtr trimesh, IntPtr refObject, int[] triangleIndex, int triCount)
|
||||||
{
|
{
|
||||||
/* String name1 = null;
|
/* String name1 = null;
|
||||||
String name2 = null;
|
String name2 = null;
|
||||||
|
@ -1421,7 +1445,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int TriCallback(IntPtr trimesh, IntPtr refObject, int triangleIndex)
|
private int TriCallback(IntPtr trimesh, IntPtr refObject, int triangleIndex)
|
||||||
{
|
{
|
||||||
// String name1 = null;
|
// String name1 = null;
|
||||||
// String name2 = null;
|
// String name2 = null;
|
||||||
|
@ -1552,7 +1576,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
}
|
}
|
||||||
|
|
||||||
// Recovered for use by fly height. Kitto Flora
|
// Recovered for use by fly height. Kitto Flora
|
||||||
public float GetTerrainHeightAtXY(float x, float y)
|
internal float GetTerrainHeightAtXY(float x, float y)
|
||||||
{
|
{
|
||||||
int offsetX = ((int)(x / (int)Constants.RegionSize)) * (int)Constants.RegionSize;
|
int offsetX = ((int)(x / (int)Constants.RegionSize)) * (int)Constants.RegionSize;
|
||||||
int offsetY = ((int)(y / (int)Constants.RegionSize)) * (int)Constants.RegionSize;
|
int offsetY = ((int)(y / (int)Constants.RegionSize)) * (int)Constants.RegionSize;
|
||||||
|
@ -1610,7 +1634,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
/// Add actor to the list that should receive collision events in the simulate loop.
|
/// Add actor to the list that should receive collision events in the simulate loop.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="obj"></param>
|
/// <param name="obj"></param>
|
||||||
public void AddCollisionEventReporting(PhysicsActor obj)
|
internal void AddCollisionEventReporting(PhysicsActor obj)
|
||||||
{
|
{
|
||||||
lock (_collisionEventPrim)
|
lock (_collisionEventPrim)
|
||||||
{
|
{
|
||||||
|
@ -1623,7 +1647,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
/// Remove actor from the list that should receive collision events in the simulate loop.
|
/// Remove actor from the list that should receive collision events in the simulate loop.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="obj"></param>
|
/// <param name="obj"></param>
|
||||||
public void RemoveCollisionEventReporting(PhysicsActor obj)
|
internal void RemoveCollisionEventReporting(PhysicsActor obj)
|
||||||
{
|
{
|
||||||
lock (_collisionEventPrim)
|
lock (_collisionEventPrim)
|
||||||
{
|
{
|
||||||
|
@ -1647,7 +1671,13 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
return newAv;
|
return newAv;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddCharacter(OdeCharacter chr)
|
public override void RemoveAvatar(PhysicsActor actor)
|
||||||
|
{
|
||||||
|
//m_log.Debug("[PHYSICS]:ODELOCK");
|
||||||
|
((OdeCharacter) actor).Destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void AddCharacter(OdeCharacter chr)
|
||||||
{
|
{
|
||||||
lock (_characters)
|
lock (_characters)
|
||||||
{
|
{
|
||||||
|
@ -1660,7 +1690,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RemoveCharacter(OdeCharacter chr)
|
internal void RemoveCharacter(OdeCharacter chr)
|
||||||
{
|
{
|
||||||
lock (_characters)
|
lock (_characters)
|
||||||
{
|
{
|
||||||
|
@ -1671,7 +1701,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void BadCharacter(OdeCharacter chr)
|
internal void BadCharacter(OdeCharacter chr)
|
||||||
{
|
{
|
||||||
lock (_badCharacter)
|
lock (_badCharacter)
|
||||||
{
|
{
|
||||||
|
@ -1680,12 +1710,6 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void RemoveAvatar(PhysicsActor actor)
|
|
||||||
{
|
|
||||||
//m_log.Debug("[PHYSICS]:ODELOCK");
|
|
||||||
((OdeCharacter) actor).Destroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
private PhysicsActor AddPrim(String name, Vector3 position, Vector3 size, Quaternion rotation,
|
private PhysicsActor AddPrim(String name, Vector3 position, Vector3 size, Quaternion rotation,
|
||||||
PrimitiveBaseShape pbs, bool isphysical, uint localID)
|
PrimitiveBaseShape pbs, bool isphysical, uint localID)
|
||||||
{
|
{
|
||||||
|
@ -1705,13 +1729,17 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
return newPrim;
|
return newPrim;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addActivePrim(OdePrim activatePrim)
|
/// <summary>
|
||||||
|
/// Make this prim subject to physics.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="prim"></param>
|
||||||
|
internal void ActivatePrim(OdePrim prim)
|
||||||
{
|
{
|
||||||
// adds active prim.. (ones that should be iterated over in collisions_optimized
|
// adds active prim.. (ones that should be iterated over in collisions_optimized
|
||||||
lock (_activeprims)
|
lock (_activeprims)
|
||||||
{
|
{
|
||||||
if (!_activeprims.Contains(activatePrim))
|
if (!_activeprims.Contains(prim))
|
||||||
_activeprims.Add(activatePrim);
|
_activeprims.Add(prim);
|
||||||
//else
|
//else
|
||||||
// m_log.Warn("[PHYSICS]: Double Entry in _activeprims detected, potential crash immenent");
|
// m_log.Warn("[PHYSICS]: Double Entry in _activeprims detected, potential crash immenent");
|
||||||
}
|
}
|
||||||
|
@ -2084,12 +2112,14 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
return new Vector3(axis.X, axis.Y, axis.Z);
|
return new Vector3(axis.X, axis.Y, axis.Z);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void remActivePrim(OdePrim deactivatePrim)
|
/// <summary>
|
||||||
|
/// Stop this prim being subject to physics
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="prim"></param>
|
||||||
|
internal void DeactivatePrim(OdePrim prim)
|
||||||
{
|
{
|
||||||
lock (_activeprims)
|
lock (_activeprims)
|
||||||
{
|
_activeprims.Remove(prim);
|
||||||
_activeprims.Remove(deactivatePrim);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void RemovePrim(PhysicsActor prim)
|
public override void RemovePrim(PhysicsActor prim)
|
||||||
|
@ -2121,7 +2151,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
/// that the space was using.
|
/// that the space was using.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="prim"></param>
|
/// <param name="prim"></param>
|
||||||
public void RemovePrimThreadLocked(OdePrim prim)
|
internal void RemovePrimThreadLocked(OdePrim prim)
|
||||||
{
|
{
|
||||||
//Console.WriteLine("RemovePrimThreadLocked " + prim.m_primName);
|
//Console.WriteLine("RemovePrimThreadLocked " + prim.m_primName);
|
||||||
lock (prim)
|
lock (prim)
|
||||||
|
@ -2217,7 +2247,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
/// Takes a space pointer and zeros out the array we're using to hold the spaces
|
/// Takes a space pointer and zeros out the array we're using to hold the spaces
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="pSpace"></param>
|
/// <param name="pSpace"></param>
|
||||||
public void resetSpaceArrayItemToZero(IntPtr pSpace)
|
private void resetSpaceArrayItemToZero(IntPtr pSpace)
|
||||||
{
|
{
|
||||||
for (int x = 0; x < staticPrimspace.GetLength(0); x++)
|
for (int x = 0; x < staticPrimspace.GetLength(0); x++)
|
||||||
{
|
{
|
||||||
|
@ -2229,10 +2259,10 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void resetSpaceArrayItemToZero(int arrayitemX, int arrayitemY)
|
// private void resetSpaceArrayItemToZero(int arrayitemX, int arrayitemY)
|
||||||
{
|
// {
|
||||||
staticPrimspace[arrayitemX, arrayitemY] = IntPtr.Zero;
|
// staticPrimspace[arrayitemX, arrayitemY] = IntPtr.Zero;
|
||||||
}
|
// }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Called when a static prim moves. Allocates a space for the prim based on its position
|
/// Called when a static prim moves. Allocates a space for the prim based on its position
|
||||||
|
@ -2241,7 +2271,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
/// <param name="pos">the position that the geom moved to</param>
|
/// <param name="pos">the position that the geom moved to</param>
|
||||||
/// <param name="currentspace">a pointer to the space it was in before it was moved.</param>
|
/// <param name="currentspace">a pointer to the space it was in before it was moved.</param>
|
||||||
/// <returns>a pointer to the new space it's in</returns>
|
/// <returns>a pointer to the new space it's in</returns>
|
||||||
public IntPtr recalculateSpaceForGeom(IntPtr geom, Vector3 pos, IntPtr currentspace)
|
internal IntPtr recalculateSpaceForGeom(IntPtr geom, Vector3 pos, IntPtr currentspace)
|
||||||
{
|
{
|
||||||
// Called from setting the Position and Size of an ODEPrim so
|
// Called from setting the Position and Size of an ODEPrim so
|
||||||
// it's already in locked space.
|
// it's already in locked space.
|
||||||
|
@ -2372,7 +2402,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
/// <param name="iprimspaceArrItemX"></param>
|
/// <param name="iprimspaceArrItemX"></param>
|
||||||
/// <param name="iprimspaceArrItemY"></param>
|
/// <param name="iprimspaceArrItemY"></param>
|
||||||
/// <returns>A pointer to the created space</returns>
|
/// <returns>A pointer to the created space</returns>
|
||||||
public IntPtr createprimspace(int iprimspaceArrItemX, int iprimspaceArrItemY)
|
internal IntPtr createprimspace(int iprimspaceArrItemX, int iprimspaceArrItemY)
|
||||||
{
|
{
|
||||||
// creating a new space for prim and inserting it into main space.
|
// creating a new space for prim and inserting it into main space.
|
||||||
staticPrimspace[iprimspaceArrItemX, iprimspaceArrItemY] = d.HashSpaceCreate(IntPtr.Zero);
|
staticPrimspace[iprimspaceArrItemX, iprimspaceArrItemY] = d.HashSpaceCreate(IntPtr.Zero);
|
||||||
|
@ -2388,7 +2418,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="pos"></param>
|
/// <param name="pos"></param>
|
||||||
/// <returns>a pointer to the space. This could be a new space or reused space.</returns>
|
/// <returns>a pointer to the space. This could be a new space or reused space.</returns>
|
||||||
public IntPtr calculateSpaceForGeom(Vector3 pos)
|
internal IntPtr calculateSpaceForGeom(Vector3 pos)
|
||||||
{
|
{
|
||||||
int[] xyspace = calculateSpaceArrayItemFromPos(pos);
|
int[] xyspace = calculateSpaceArrayItemFromPos(pos);
|
||||||
//m_log.Info("[Physics]: Attempting to use arrayItem: " + xyspace[0].ToString() + "," + xyspace[1].ToString());
|
//m_log.Info("[Physics]: Attempting to use arrayItem: " + xyspace[0].ToString() + "," + xyspace[1].ToString());
|
||||||
|
@ -2400,7 +2430,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="pos"></param>
|
/// <param name="pos"></param>
|
||||||
/// <returns>an array item based on the position</returns>
|
/// <returns>an array item based on the position</returns>
|
||||||
public int[] calculateSpaceArrayItemFromPos(Vector3 pos)
|
internal int[] calculateSpaceArrayItemFromPos(Vector3 pos)
|
||||||
{
|
{
|
||||||
int[] returnint = new int[2];
|
int[] returnint = new int[2];
|
||||||
|
|
||||||
|
@ -2427,7 +2457,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="pbs"></param>
|
/// <param name="pbs"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public bool needsMeshing(PrimitiveBaseShape pbs)
|
internal bool needsMeshing(PrimitiveBaseShape pbs)
|
||||||
{
|
{
|
||||||
// most of this is redundant now as the mesher will return null if it cant mesh a prim
|
// most of this is redundant now as the mesher will return null if it cant mesh a prim
|
||||||
// but we still need to check for sculptie meshing being enabled so this is the most
|
// but we still need to check for sculptie meshing being enabled so this is the most
|
||||||
|
@ -2705,7 +2735,7 @@ Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.Name);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Console.WriteLine("Simulate calls ProcessTaints for {0}", prim.Name);
|
// Console.WriteLine("Simulate calls ProcessTaints for {0}", prim.Name);
|
||||||
prim.ProcessTaints(timeStep);
|
prim.ProcessTaints();
|
||||||
}
|
}
|
||||||
|
|
||||||
processedtaints = true;
|
processedtaints = true;
|
||||||
|
@ -2910,7 +2940,7 @@ Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.Name);
|
||||||
/// <remarks>
|
/// <remarks>
|
||||||
/// Called by the main Simulate() loop if NINJA joints are active. Should not be called from anywhere else.
|
/// Called by the main Simulate() loop if NINJA joints are active. Should not be called from anywhere else.
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
protected void SimulatePendingNINJAJoints()
|
private void SimulatePendingNINJAJoints()
|
||||||
{
|
{
|
||||||
// Create pending joints, if possible
|
// Create pending joints, if possible
|
||||||
|
|
||||||
|
@ -3101,7 +3131,7 @@ Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.Name);
|
||||||
/// Called as part of the Simulate() loop if NINJA physics is active. Must only be called from there.
|
/// Called as part of the Simulate() loop if NINJA physics is active. Must only be called from there.
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
/// <param name="actor"></param>
|
/// <param name="actor"></param>
|
||||||
protected void SimulateActorPendingJoints(OdePrim actor)
|
private void SimulateActorPendingJoints(OdePrim actor)
|
||||||
{
|
{
|
||||||
// If an actor moved, move its joint proxy objects as well.
|
// If an actor moved, move its joint proxy objects as well.
|
||||||
// There seems to be an event PhysicsActor.OnPositionUpdate that could be used
|
// There seems to be an event PhysicsActor.OnPositionUpdate that could be used
|
||||||
|
@ -3138,7 +3168,7 @@ Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
#region ODE Specific Terrain Fixes
|
#region ODE Specific Terrain Fixes
|
||||||
public float[] ResizeTerrain512NearestNeighbour(float[] heightMap)
|
private float[] ResizeTerrain512NearestNeighbour(float[] heightMap)
|
||||||
{
|
{
|
||||||
float[] returnarr = new float[262144];
|
float[] returnarr = new float[262144];
|
||||||
float[,] resultarr = new float[(int)WorldExtents.X, (int)WorldExtents.Y];
|
float[,] resultarr = new float[(int)WorldExtents.X, (int)WorldExtents.Y];
|
||||||
|
@ -3251,7 +3281,7 @@ Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.Name);
|
||||||
return returnarr;
|
return returnarr;
|
||||||
}
|
}
|
||||||
|
|
||||||
public float[] ResizeTerrain512Interpolation(float[] heightMap)
|
private float[] ResizeTerrain512Interpolation(float[] heightMap)
|
||||||
{
|
{
|
||||||
float[] returnarr = new float[262144];
|
float[] returnarr = new float[262144];
|
||||||
float[,] resultarr = new float[512,512];
|
float[,] resultarr = new float[512,512];
|
||||||
|
@ -3419,7 +3449,7 @@ Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.Name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetTerrain(float[] heightMap, Vector3 pOffset)
|
private void SetTerrain(float[] heightMap, Vector3 pOffset)
|
||||||
{
|
{
|
||||||
// this._heightmap[i] = (double)heightMap[i];
|
// this._heightmap[i] = (double)heightMap[i];
|
||||||
// dbm (danx0r) -- creating a buffer zone of one extra sample all around
|
// dbm (danx0r) -- creating a buffer zone of one extra sample all around
|
||||||
|
@ -3548,7 +3578,7 @@ Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.Name);
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public float GetWaterLevel()
|
internal float GetWaterLevel()
|
||||||
{
|
{
|
||||||
return waterlevel;
|
return waterlevel;
|
||||||
}
|
}
|
||||||
|
@ -3623,7 +3653,7 @@ Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.Name);
|
||||||
randomizeWater(waterlevel);
|
randomizeWater(waterlevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void randomizeWater(float baseheight)
|
private void randomizeWater(float baseheight)
|
||||||
{
|
{
|
||||||
const uint heightmapWidth = m_regionWidth + 2;
|
const uint heightmapWidth = m_regionWidth + 2;
|
||||||
const uint heightmapHeight = m_regionHeight + 2;
|
const uint heightmapHeight = m_regionHeight + 2;
|
||||||
|
@ -3675,9 +3705,7 @@ Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.Name);
|
||||||
d.RFromAxisAndAngle(out R, v3.X, v3.Y, v3.Z, angle);
|
d.RFromAxisAndAngle(out R, v3.X, v3.Y, v3.Z, angle);
|
||||||
d.GeomSetRotation(WaterGeom, ref R);
|
d.GeomSetRotation(WaterGeom, ref R);
|
||||||
d.GeomSetPosition(WaterGeom, 128, 128, 0);
|
d.GeomSetPosition(WaterGeom, 128, 128, 0);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Dispose()
|
public override void Dispose()
|
||||||
|
@ -3724,6 +3752,7 @@ Console.WriteLine("AddPhysicsActorTaint to " + taintedprim.Name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return returncolliders;
|
return returncolliders;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue