bug fix + make costs visible for testing
parent
a0b4e68060
commit
48d8fbc9ae
|
@ -1583,7 +1583,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
float cost = 0.1f;
|
float cost = 0.1f;
|
||||||
if (PhysActor != null)
|
if (PhysActor != null)
|
||||||
// cost += PhysActor.Cost;
|
cost = PhysActor.PhysicsCost;
|
||||||
|
else
|
||||||
|
cost = 0.1f;
|
||||||
|
|
||||||
if ((Flags & PrimFlags.Physics) != 0)
|
if ((Flags & PrimFlags.Physics) != 0)
|
||||||
cost *= (1.0f + 0.01333f * Scale.LengthSquared()); // 0.01333 == 0.04/3
|
cost *= (1.0f + 0.01333f * Scale.LengthSquared()); // 0.01333 == 0.04/3
|
||||||
|
@ -1596,9 +1598,12 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
|
float cost;
|
||||||
|
if (PhysActor != null)
|
||||||
return 0.1f;
|
cost = PhysActor.StreamCost;
|
||||||
|
else
|
||||||
|
cost = 1.0f;
|
||||||
|
return 1.0f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -315,6 +315,23 @@ namespace OpenSim.Region.Physics.Manager
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public virtual float PhysicsCost
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return 0.1f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual float StreamCost
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return 1.0f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Velocity of this actor.
|
/// Velocity of this actor.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -40,8 +40,6 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
|
|
||||||
public float volume;
|
public float volume;
|
||||||
|
|
||||||
public float physCost;
|
|
||||||
public float streamCost;
|
|
||||||
public byte shapetype;
|
public byte shapetype;
|
||||||
public bool hasOBB;
|
public bool hasOBB;
|
||||||
public bool hasMeshVolume;
|
public bool hasMeshVolume;
|
||||||
|
@ -121,8 +119,14 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
|
|
||||||
public void Stop()
|
public void Stop()
|
||||||
{
|
{
|
||||||
m_running = false;
|
try
|
||||||
m_thread.Abort();
|
{
|
||||||
|
m_thread.Abort();
|
||||||
|
createqueue.Clear();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ChangeActorPhysRep(PhysicsActor actor, PrimitiveBaseShape pbs,
|
public void ChangeActorPhysRep(PhysicsActor actor, PrimitiveBaseShape pbs,
|
||||||
|
@ -172,11 +176,16 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
if (repData.assetState != AssetState.needAsset)
|
if (repData.assetState != AssetState.needAsset)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (repData.assetID == null || repData.assetID == UUID.Zero)
|
|
||||||
return;
|
|
||||||
|
|
||||||
repData.mesh = null;
|
repData.mesh = null;
|
||||||
|
|
||||||
|
if (repData.assetID == null || repData.assetID == UUID.Zero)
|
||||||
|
{
|
||||||
|
repData.assetState = AssetState.noNeedAsset;
|
||||||
|
repData.comand = meshWorkerCmnds.changefull;
|
||||||
|
createqueue.Enqueue(repData);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
repData.assetState = AssetState.loadingAsset;
|
repData.assetState = AssetState.loadingAsset;
|
||||||
|
|
||||||
repData.comand = meshWorkerCmnds.getmesh;
|
repData.comand = meshWorkerCmnds.getmesh;
|
||||||
|
@ -211,9 +220,6 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
repData.OBBOffset = mesh.GetCentroid();
|
repData.OBBOffset = mesh.GetCentroid();
|
||||||
repData.OBB = mesh.GetOBB();
|
repData.OBB = mesh.GetOBB();
|
||||||
repData.hasOBB = true;
|
repData.hasOBB = true;
|
||||||
repData.physCost = 0.0013f * (float)indexCount;
|
|
||||||
// todo
|
|
||||||
repData.streamCost = 1.0f;
|
|
||||||
mesh.releaseSourceMeshData();
|
mesh.releaseSourceMeshData();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -427,11 +433,14 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
if (pbs.SculptTexture != null && pbs.SculptTexture != UUID.Zero)
|
if (pbs.SculptTexture != null && pbs.SculptTexture != UUID.Zero)
|
||||||
{
|
{
|
||||||
repData.assetID = pbs.SculptTexture;
|
repData.assetID = pbs.SculptTexture;
|
||||||
repData.assetState = AssetState.needAsset;
|
repData.assetState = AssetState.needAsset;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
repData.assetState = AssetState.AssetFailed;
|
repData.assetState = AssetState.AssetFailed;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
repData.assetState = AssetState.needAsset;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -828,14 +837,6 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
if (repData.hasOBB)
|
if (repData.hasOBB)
|
||||||
{
|
{
|
||||||
Vector3 OBB = repData.OBB;
|
Vector3 OBB = repData.OBB;
|
||||||
float pc = repData.physCost;
|
|
||||||
float psf = OBB.X * (OBB.Y + OBB.Z) + OBB.Y * OBB.Z;
|
|
||||||
psf *= 1.33f * .2f;
|
|
||||||
pc *= psf;
|
|
||||||
if (pc < 0.1f)
|
|
||||||
pc = 0.1f;
|
|
||||||
|
|
||||||
repData.physCost = pc;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -846,9 +847,6 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
|
|
||||||
repData.OBB = OBB;
|
repData.OBB = OBB;
|
||||||
repData.OBBOffset = Vector3.Zero;
|
repData.OBBOffset = Vector3.Zero;
|
||||||
|
|
||||||
repData.physCost = 0.1f;
|
|
||||||
repData.streamCost = 1.0f;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CalculateBasicPrimVolume(repData);
|
CalculateBasicPrimVolume(repData);
|
||||||
|
|
|
@ -277,7 +277,23 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
cdata.mu *= veh.FrictionFactor;
|
cdata.mu *= veh.FrictionFactor;
|
||||||
// cdata.mu *= 0;
|
// cdata.mu *= 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override float PhysicsCost
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return m_physCost;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override float StreamCost
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return m_streamCost;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public override int PhysicsActorType
|
public override int PhysicsActorType
|
||||||
{
|
{
|
||||||
|
@ -1373,6 +1389,11 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
m_mesh = null;
|
m_mesh = null;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_physCost = 0.0013f * (float)indexCount;
|
||||||
|
// todo
|
||||||
|
m_streamCost = 1.0f;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1386,7 +1407,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
if (m_assetState == AssetState.AssetFailed)
|
if (m_assetState == AssetState.AssetFailed)
|
||||||
m_NoColide = true;
|
m_NoColide = true;
|
||||||
|
|
||||||
else if (m_mesh != null)
|
else if(m_mesh != null)
|
||||||
{
|
{
|
||||||
if (GetMeshGeom())
|
if (GetMeshGeom())
|
||||||
hasMesh = true;
|
hasMesh = true;
|
||||||
|
@ -2058,7 +2079,23 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
m_OBBOffset.Y,
|
m_OBBOffset.Y,
|
||||||
m_OBBOffset.Z);
|
m_OBBOffset.Z);
|
||||||
|
|
||||||
primOOBradiusSQ = m_OBBOffset.LengthSquared();
|
primOOBradiusSQ = m_OBB.LengthSquared();
|
||||||
|
|
||||||
|
if (_triMeshData != IntPtr.Zero)
|
||||||
|
{
|
||||||
|
float pc = m_physCost;
|
||||||
|
float psf = primOOBradiusSQ;
|
||||||
|
psf *= 1.33f * .2f;
|
||||||
|
pc *= psf;
|
||||||
|
if (pc < 0.1f)
|
||||||
|
pc = 0.1f;
|
||||||
|
|
||||||
|
m_physCost = pc;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
m_physCost = 0.1f;
|
||||||
|
|
||||||
|
m_streamCost = 1.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -2717,10 +2754,6 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
m_OBBOffset = repData.OBBOffset;
|
m_OBBOffset = repData.OBBOffset;
|
||||||
m_OBB = repData.OBB;
|
m_OBB = repData.OBB;
|
||||||
|
|
||||||
// m_NoColide = repData.NoColide;
|
|
||||||
m_physCost = repData.physCost;
|
|
||||||
m_streamCost = repData.streamCost;
|
|
||||||
|
|
||||||
primVolume = repData.volume;
|
primVolume = repData.volume;
|
||||||
|
|
||||||
CreateGeom();
|
CreateGeom();
|
||||||
|
@ -2793,9 +2826,6 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
m_OBBOffset = repData.OBBOffset;
|
m_OBBOffset = repData.OBBOffset;
|
||||||
m_OBB = repData.OBB;
|
m_OBB = repData.OBB;
|
||||||
|
|
||||||
m_physCost = repData.physCost;
|
|
||||||
m_streamCost = repData.streamCost;
|
|
||||||
|
|
||||||
primVolume = repData.volume;
|
primVolume = repData.volume;
|
||||||
|
|
||||||
CreateGeom();
|
CreateGeom();
|
||||||
|
@ -2806,14 +2836,8 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
|
|
||||||
UpdatePrimBodyData();
|
UpdatePrimBodyData();
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
_parent_scene.actor_name_map[prim_geom] = this;
|
_parent_scene.actor_name_map[prim_geom] = this;
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z);
|
d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z);
|
||||||
d.Quaternion myrot = new d.Quaternion();
|
d.Quaternion myrot = new d.Quaternion();
|
||||||
|
|
Loading…
Reference in New Issue