shapetype support on chOde so it can also request a simple convex hull 'mesh'
							parent
							
								
									312f0c6970
								
							
						
					
					
						commit
						316f272b62
					
				|  | @ -179,6 +179,9 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
|         public bool m_outofBounds; | ||||
|         private float m_density = 10.000006836f; // Aluminum g/cm3; | ||||
| 
 | ||||
|         private byte m_shapetype; | ||||
|         private byte m_taintshapetype; | ||||
| 
 | ||||
|         public bool _zeroFlag;					 // if body has been stopped | ||||
|         private bool m_lastUpdateSent; | ||||
| 
 | ||||
|  | @ -315,7 +318,8 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
|         } | ||||
| 
 | ||||
|         public OdePrim(String primName, OdeScene parent_scene, Vector3 pos, Vector3 size, | ||||
|                        Quaternion rotation, IMesh mesh, PrimitiveBaseShape pbs, bool pisPhysical,bool pisPhantom, CollisionLocker dode, uint localid) | ||||
|                        Quaternion rotation, IMesh mesh, PrimitiveBaseShape pbs, bool pisPhysical, | ||||
|                        bool pisPhantom,byte shapetype, CollisionLocker dode, uint localid) | ||||
|         { | ||||
|             m_localID = localid; | ||||
|             ode = dode; | ||||
|  | @ -360,6 +364,8 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
|             m_taintrot = _orientation; | ||||
|             _mesh = mesh; | ||||
|             _pbs = pbs; | ||||
|             m_shapetype = shapetype; | ||||
|             m_taintshapetype = shapetype; | ||||
| 
 | ||||
|             _parent_scene = parent_scene; | ||||
|             m_targetSpace = (IntPtr)0; | ||||
|  | @ -605,6 +611,19 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public override byte PhysicsShapeType | ||||
|         { | ||||
|             get | ||||
|             { | ||||
|                 return m_shapetype; | ||||
|             } | ||||
|             set | ||||
|             { | ||||
|                 m_taintshapetype = value; | ||||
|                 _parent_scene.AddPhysicsActorTaint(this); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public override Vector3 Velocity | ||||
|         { | ||||
|             get | ||||
|  | @ -1535,6 +1554,12 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
|                     changesize(timestep); | ||||
|                 // | ||||
| 
 | ||||
|                 if(m_taintshapetype != m_shapetype) | ||||
|                 { | ||||
|                     m_shapetype = m_taintshapetype; | ||||
|                     changeshape(timestep); | ||||
|                 } | ||||
| 
 | ||||
|                 if (m_taintshape) | ||||
|                     changeshape(timestep); | ||||
|                 // | ||||
|  | @ -2476,9 +2501,16 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
| 
 | ||||
|                 if (IsPhysical) | ||||
|                     meshlod = _parent_scene.MeshSculptphysicalLOD; | ||||
| 
 | ||||
|                 bool convex; | ||||
|                 if (m_shapetype == 2) | ||||
|                     convex = true; | ||||
|                 else | ||||
|                     convex = false; | ||||
| 
 | ||||
|                 try | ||||
|                 { | ||||
|                     mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, (int)LevelOfDetail.High, true); | ||||
|                     mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, (int)LevelOfDetail.High, true, convex); | ||||
|                 } | ||||
|                 catch | ||||
|                 { | ||||
|  |  | |||
|  | @ -1720,7 +1720,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
|         } | ||||
| 
 | ||||
|         private PhysicsActor AddPrim(String name, Vector3 position, Vector3 size, Quaternion rotation, | ||||
|                                      IMesh mesh, PrimitiveBaseShape pbs, bool isphysical, uint localid) | ||||
|                              IMesh mesh, PrimitiveBaseShape pbs, bool isphysical, bool isphantom, byte shapetype, uint localid) | ||||
|         { | ||||
| 
 | ||||
|             Vector3 pos = position; | ||||
|  | @ -1730,27 +1730,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
|             OdePrim newPrim; | ||||
|             lock (OdeLock) | ||||
|             { | ||||
|                 newPrim = new OdePrim(name, this, pos, siz, rot, mesh, pbs, isphysical,false, ode, localid); | ||||
| 
 | ||||
|                 lock (_prims) | ||||
|                     _prims.Add(newPrim); | ||||
|             } | ||||
| 
 | ||||
|             return newPrim; | ||||
|         } | ||||
| 
 | ||||
|         private PhysicsActor AddPrim(String name, Vector3 position, Vector3 size, Quaternion rotation, | ||||
|                              IMesh mesh, PrimitiveBaseShape pbs, bool isphysical, bool isphantom, uint localid) | ||||
|         { | ||||
| 
 | ||||
|             Vector3 pos = position; | ||||
|             Vector3 siz = size; | ||||
|             Quaternion rot = rotation; | ||||
| 
 | ||||
|             OdePrim newPrim; | ||||
|             lock (OdeLock) | ||||
|             { | ||||
|                 newPrim = new OdePrim(name, this, pos, siz, rot, mesh, pbs, isphysical, isphantom, ode, localid); | ||||
|                 newPrim = new OdePrim(name, this, pos, siz, rot, mesh, pbs, isphysical, isphantom, shapetype, ode, localid); | ||||
| 
 | ||||
|                 lock (_prims) | ||||
|                     _prims.Add(newPrim); | ||||
|  | @ -1781,7 +1761,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
|             if (needsMeshing(pbs)) | ||||
|                 mesh = mesher.CreateMesh(primName, pbs, size, (int)LevelOfDetail.High, true); | ||||
| 
 | ||||
|             result = AddPrim(primName, position, size, rotation, mesh, pbs, isPhysical, localid); | ||||
|             result = AddPrim(primName, position, size, rotation, mesh, pbs, isPhysical,false,0, localid); | ||||
| 
 | ||||
|             return result; | ||||
|         } | ||||
|  | @ -1795,25 +1775,25 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
|             if (needsMeshing(pbs)) | ||||
|                 mesh = mesher.CreateMesh(primName, pbs, size, (int)LevelOfDetail.High, true); | ||||
| 
 | ||||
|             result = AddPrim(primName, position, size, rotation, mesh, pbs, isPhysical, isPhantom, localid); | ||||
|             result = AddPrim(primName, position, size, rotation, mesh, pbs, isPhysical, isPhantom,0, localid); | ||||
| 
 | ||||
|             return result; | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| /* | ||||
|         public override PhysicsActor AddPrimShape(string primName, PhysicsActor parent, PrimitiveBaseShape pbs, Vector3 position, | ||||
|                                                   uint localid, byte[] sdata) | ||||
|         public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position, | ||||
|                                                   Vector3 size, Quaternion rotation, bool isPhysical, bool isPhantom, byte shapetype, uint localid) | ||||
|         { | ||||
|             PhysicsActor result; | ||||
|             IMesh mesh = null; | ||||
| 
 | ||||
|             result = AddPrim(primName, position, parent, | ||||
|                                      pbs, localid, sdata); | ||||
|             if (needsMeshing(pbs)) | ||||
|                 mesh = mesher.CreateMesh(primName, pbs, size, (int)LevelOfDetail.High, true); | ||||
| 
 | ||||
|             result = AddPrim(primName, position, size, rotation, mesh, pbs, isPhysical, isPhantom, shapetype, localid); | ||||
| 
 | ||||
|             return result; | ||||
|         } | ||||
| */ | ||||
| 
 | ||||
|         public override float TimeDilation | ||||
|         { | ||||
|             get { return m_timeDilation; } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 UbitUmarov
						UbitUmarov