fix ubOde prims unlink that got broken fixing sleeping bodies collisions, core removes and adds a prim with same LocalID not giving time for physics to actuly delete, so when it did it LocalID was lost
parent
d386bfa1b6
commit
6ad0f3250b
|
@ -306,7 +306,12 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
||||||
public override uint LocalID
|
public override uint LocalID
|
||||||
{
|
{
|
||||||
get { return m_localID; }
|
get { return m_localID; }
|
||||||
set { m_localID = value; }
|
set
|
||||||
|
{
|
||||||
|
uint oldid = m_localID;
|
||||||
|
m_localID = value;
|
||||||
|
_parent_scene.changePrimID(this, oldid);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override PhysicsActor ParentActor
|
public override PhysicsActor ParentActor
|
||||||
|
@ -1066,8 +1071,10 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
||||||
public OdePrim(String primName, ODEScene parent_scene, Vector3 pos, Vector3 size,
|
public OdePrim(String primName, ODEScene parent_scene, Vector3 pos, Vector3 size,
|
||||||
Quaternion rotation, PrimitiveBaseShape pbs, bool pisPhysical,bool pisPhantom,byte _shapeType,uint plocalID)
|
Quaternion rotation, PrimitiveBaseShape pbs, bool pisPhysical,bool pisPhantom,byte _shapeType,uint plocalID)
|
||||||
{
|
{
|
||||||
|
_parent_scene = parent_scene;
|
||||||
|
|
||||||
Name = primName;
|
Name = primName;
|
||||||
LocalID = plocalID;
|
m_localID = plocalID;
|
||||||
|
|
||||||
m_vehicle = null;
|
m_vehicle = null;
|
||||||
|
|
||||||
|
@ -1113,7 +1120,6 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
||||||
|
|
||||||
_pbs = pbs;
|
_pbs = pbs;
|
||||||
|
|
||||||
_parent_scene = parent_scene;
|
|
||||||
m_targetSpace = IntPtr.Zero;
|
m_targetSpace = IntPtr.Zero;
|
||||||
|
|
||||||
if (pos.Z < 0)
|
if (pos.Z < 0)
|
||||||
|
@ -1159,6 +1165,8 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
||||||
m_OBBOffset = repData.OBBOffset;
|
m_OBBOffset = repData.OBBOffset;
|
||||||
|
|
||||||
UpdatePrimBodyData();
|
UpdatePrimBodyData();
|
||||||
|
|
||||||
|
AddChange(changes.Add, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void resetCollisionAccounting()
|
private void resetCollisionAccounting()
|
||||||
|
@ -2441,6 +2449,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
||||||
|
|
||||||
private void changeadd()
|
private void changeadd()
|
||||||
{
|
{
|
||||||
|
_parent_scene.addToPrims(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void changeAngularLock(byte newLocks)
|
private void changeAngularLock(byte newLocks)
|
||||||
|
|
|
@ -1328,8 +1328,6 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
||||||
{
|
{
|
||||||
|
|
||||||
newPrim = new OdePrim(name, this, position, size, rotation, pbs, isphysical, isPhantom, shapeType, localID);
|
newPrim = new OdePrim(name, this, position, size, rotation, pbs, isphysical, isPhantom, shapeType, localID);
|
||||||
lock (_prims)
|
|
||||||
_prims[newPrim.LocalID] = newPrim;
|
|
||||||
}
|
}
|
||||||
return newPrim;
|
return newPrim;
|
||||||
}
|
}
|
||||||
|
@ -1350,7 +1348,6 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
||||||
public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position,
|
public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position,
|
||||||
Vector3 size, Quaternion rotation, bool isPhysical, bool isPhantom, byte shapeType, uint localid)
|
Vector3 size, Quaternion rotation, bool isPhysical, bool isPhantom, byte shapeType, uint localid)
|
||||||
{
|
{
|
||||||
|
|
||||||
return AddPrim(primName, position, size, rotation, pbs, isPhysical,isPhantom, shapeType, localid);
|
return AddPrim(primName, position, size, rotation, pbs, isPhysical,isPhantom, shapeType, localid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1396,6 +1393,12 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addToPrims(OdePrim prim)
|
||||||
|
{
|
||||||
|
lock (_prims)
|
||||||
|
_prims[prim.LocalID] = prim;
|
||||||
|
}
|
||||||
|
|
||||||
public OdePrim getPrim(uint id)
|
public OdePrim getPrim(uint id)
|
||||||
{
|
{
|
||||||
lock (_prims)
|
lock (_prims)
|
||||||
|
@ -1413,6 +1416,16 @@ namespace OpenSim.Region.PhysicsModule.ubOde
|
||||||
return _prims.ContainsKey(prm.LocalID);
|
return _prims.ContainsKey(prm.LocalID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void changePrimID(OdePrim prim,uint oldID)
|
||||||
|
{
|
||||||
|
lock (_prims)
|
||||||
|
{
|
||||||
|
if(_prims.ContainsKey(oldID))
|
||||||
|
_prims.Remove(oldID);
|
||||||
|
_prims[prim.LocalID] = prim;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public bool haveActor(PhysicsActor actor)
|
public bool haveActor(PhysicsActor actor)
|
||||||
{
|
{
|
||||||
if (actor is OdePrim)
|
if (actor is OdePrim)
|
||||||
|
|
Loading…
Reference in New Issue