fix some issues on ubOde physics shape type changes

0.9.0-post-fixes
UbitUmarov 2017-06-12 16:19:29 +01:00
parent f62400c4ca
commit a18d45fbdc
2 changed files with 18 additions and 15 deletions

View File

@ -80,7 +80,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
public float MeshSculptphysicalLOD = 32; public float MeshSculptphysicalLOD = 32;
private OpenSim.Framework.BlockingQueue<ODEPhysRepData> createqueue = new OpenSim.Framework.BlockingQueue<ODEPhysRepData>(); private OpenSim.Framework.BlockingQueue<ODEPhysRepData> workQueue = new OpenSim.Framework.BlockingQueue<ODEPhysRepData>();
private bool m_running; private bool m_running;
private Thread m_thread; private Thread m_thread;
@ -110,7 +110,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
while(m_running) while(m_running)
{ {
ODEPhysRepData nextRep = createqueue.Dequeue(); ODEPhysRepData nextRep = workQueue.Dequeue();
if(!m_running) if(!m_running)
return; return;
if (nextRep == null) if (nextRep == null)
@ -139,7 +139,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
try try
{ {
m_thread.Abort(); m_thread.Abort();
createqueue.Clear(); workQueue.Clear();
} }
catch catch
{ {
@ -196,7 +196,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
repData.meshState = MeshState.loadingAsset; repData.meshState = MeshState.loadingAsset;
repData.comand = meshWorkerCmnds.getmesh; repData.comand = meshWorkerCmnds.getmesh;
createqueue.Enqueue(repData); workQueue.Enqueue(repData);
} }
} }
@ -242,7 +242,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
if (needsMeshing(repData)) // no need for pbs now? if (needsMeshing(repData)) // no need for pbs now?
{ {
repData.comand = meshWorkerCmnds.changefull; repData.comand = meshWorkerCmnds.changefull;
createqueue.Enqueue(repData); workQueue.Enqueue(repData);
} }
} }
else else

View File

@ -165,6 +165,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
private float m_density; private float m_density;
private byte m_shapetype; private byte m_shapetype;
private byte m_fakeShapetype;
public bool _zeroFlag; public bool _zeroFlag;
private bool m_lastUpdateSent; private bool m_lastUpdateSent;
@ -420,7 +421,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
{ {
if (value.IsFinite()) if (value.IsFinite())
{ {
_parent_scene.m_meshWorker.ChangeActorPhysRep(this, _pbs, value, m_shapetype); _parent_scene.m_meshWorker.ChangeActorPhysRep(this, _pbs, value, m_fakeShapetype);
} }
else else
{ {
@ -630,7 +631,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
set set
{ {
// AddChange(changes.Shape, value); // AddChange(changes.Shape, value);
_parent_scene.m_meshWorker.ChangeActorPhysRep(this, value, _size, m_shapetype); _parent_scene.m_meshWorker.ChangeActorPhysRep(this, value, _size, m_fakeShapetype);
} }
} }
@ -638,11 +639,11 @@ namespace OpenSim.Region.PhysicsModule.ubOde
{ {
get get
{ {
return m_shapetype; return m_fakeShapetype;
} }
set set
{ {
m_shapetype = value; m_fakeShapetype = value;
_parent_scene.m_meshWorker.ChangeActorPhysRep(this, _pbs, _size, value); _parent_scene.m_meshWorker.ChangeActorPhysRep(this, _pbs, _size, value);
} }
} }
@ -1329,7 +1330,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
_triMeshData = IntPtr.Zero; _triMeshData = IntPtr.Zero;
m_shapetype = _shapeType; m_fakeShapetype = _shapeType;
m_lastdoneSelected = false; m_lastdoneSelected = false;
m_isSelected = false; m_isSelected = false;
@ -1346,7 +1347,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
AddChange(changes.Add, null); AddChange(changes.Add, null);
// get basic mass parameters // get basic mass parameters
ODEPhysRepData repData = _parent_scene.m_meshWorker.NewActorPhysRep(this, _pbs, _size, m_shapetype); ODEPhysRepData repData = _parent_scene.m_meshWorker.NewActorPhysRep(this, _pbs, _size, _shapeType);
primVolume = repData.volume; primVolume = repData.volume;
m_OBB = repData.OBB; m_OBB = repData.OBB;
@ -3161,7 +3162,6 @@ namespace OpenSim.Region.PhysicsModule.ubOde
{ {
_size = repData.size; //?? _size = repData.size; //??
_pbs = repData.pbs; _pbs = repData.pbs;
m_shapetype = repData.shapetype;
m_mesh = repData.mesh; m_mesh = repData.mesh;
@ -3200,9 +3200,11 @@ namespace OpenSim.Region.PhysicsModule.ubOde
{ {
repData.size = _size; repData.size = _size;
repData.pbs = _pbs; repData.pbs = _pbs;
repData.shapetype = m_shapetype; repData.shapetype = m_fakeShapetype;
_parent_scene.m_meshWorker.RequestMesh(repData); _parent_scene.m_meshWorker.RequestMesh(repData);
} }
else
m_shapetype = repData.shapetype;
} }
private void changePhysRepData(ODEPhysRepData repData) private void changePhysRepData(ODEPhysRepData repData)
@ -3236,7 +3238,6 @@ namespace OpenSim.Region.PhysicsModule.ubOde
_size = repData.size; _size = repData.size;
_pbs = repData.pbs; _pbs = repData.pbs;
m_shapetype = repData.shapetype;
m_mesh = repData.mesh; m_mesh = repData.mesh;
@ -3287,9 +3288,11 @@ namespace OpenSim.Region.PhysicsModule.ubOde
{ {
repData.size = _size; repData.size = _size;
repData.pbs = _pbs; repData.pbs = _pbs;
repData.shapetype = m_shapetype; repData.shapetype = m_fakeShapetype;
_parent_scene.m_meshWorker.RequestMesh(repData); _parent_scene.m_meshWorker.RequestMesh(repData);
} }
else
m_shapetype = repData.shapetype;
} }
private void changeFloatOnWater(bool newval) private void changeFloatOnWater(bool newval)