Tell physics about physics shape when creating. Added some virtual methods to get/set density,gravmod, frition,bounce and shape type ( not in use ). UbitOde now should do convex type on creation or everytime the mesh is changed ( as in change size, shape, etc )
parent
2e41294da9
commit
11ed932263
|
@ -1832,6 +1832,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
GetWorldRotation(),
|
GetWorldRotation(),
|
||||||
isPhysical,
|
isPhysical,
|
||||||
isPhantom,
|
isPhantom,
|
||||||
|
PhysicsShapeType,
|
||||||
m_localId);
|
m_localId);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
|
@ -4732,6 +4733,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
GetWorldRotation(), //physics wants world rotation like all other functions send
|
GetWorldRotation(), //physics wants world rotation like all other functions send
|
||||||
UsePhysics,
|
UsePhysics,
|
||||||
SetPhantom,
|
SetPhantom,
|
||||||
|
PhysicsShapeType,
|
||||||
m_localId);
|
m_localId);
|
||||||
|
|
||||||
PhysActor.SetMaterial(Material);
|
PhysActor.SetMaterial(Material);
|
||||||
|
|
|
@ -172,6 +172,8 @@ namespace OpenSim.Region.Physics.Manager
|
||||||
|
|
||||||
public virtual bool Phantom { get; set; }
|
public virtual bool Phantom { get; set; }
|
||||||
|
|
||||||
|
public virtual byte PhysicsShapeType { get; set; }
|
||||||
|
|
||||||
public abstract PrimitiveBaseShape Shape { set; }
|
public abstract PrimitiveBaseShape Shape { set; }
|
||||||
|
|
||||||
uint m_baseLocalID;
|
uint m_baseLocalID;
|
||||||
|
@ -252,6 +254,11 @@ namespace OpenSim.Region.Physics.Manager
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public virtual float Density { get; set; }
|
||||||
|
public virtual float GravModifier { get; set; }
|
||||||
|
public virtual float Friction { get; set; }
|
||||||
|
public virtual float Bounce { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Position of this actor.
|
/// Position of this actor.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -137,6 +137,13 @@ namespace OpenSim.Region.Physics.Manager
|
||||||
return AddPrimShape(primName, pbs, position, size, rotation, isPhysical, localid);
|
return AddPrimShape(primName, pbs, position, size, rotation, isPhysical, localid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public virtual PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position,
|
||||||
|
Vector3 size, Quaternion rotation, bool isPhysical, bool isPhantom, byte shapetype, uint localid)
|
||||||
|
{
|
||||||
|
return AddPrimShape(primName, pbs, position, size, rotation, isPhysical, localid);
|
||||||
|
}
|
||||||
|
|
||||||
public virtual float TimeDilation
|
public virtual float TimeDilation
|
||||||
{
|
{
|
||||||
get { return 1.0f; }
|
get { return 1.0f; }
|
||||||
|
|
|
@ -163,7 +163,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
public IntPtr collide_geom; // for objects: geom if single prim space it linkset
|
public IntPtr collide_geom; // for objects: geom if single prim space it linkset
|
||||||
|
|
||||||
private float m_density = 10.000006836f; // Aluminum g/cm3;
|
private float m_density = 10.000006836f; // Aluminum g/cm3;
|
||||||
|
private byte m_shapetype;
|
||||||
public bool _zeroFlag;
|
public bool _zeroFlag;
|
||||||
private bool m_lastUpdateSent;
|
private bool m_lastUpdateSent;
|
||||||
|
|
||||||
|
@ -846,7 +846,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
|
|
||||||
|
|
||||||
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,uint plocalID)
|
Quaternion rotation, PrimitiveBaseShape pbs, bool pisPhysical,bool pisPhantom,byte _shapeType,uint plocalID)
|
||||||
{
|
{
|
||||||
Name = primName;
|
Name = primName;
|
||||||
LocalID = plocalID;
|
LocalID = plocalID;
|
||||||
|
@ -920,6 +920,8 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
hasOOBoffsetFromMesh = false;
|
hasOOBoffsetFromMesh = false;
|
||||||
_triMeshData = IntPtr.Zero;
|
_triMeshData = IntPtr.Zero;
|
||||||
|
|
||||||
|
m_shapetype = _shapeType;
|
||||||
|
|
||||||
m_lastdoneSelected = false;
|
m_lastdoneSelected = false;
|
||||||
m_isSelected = false;
|
m_isSelected = false;
|
||||||
m_delaySelect = false;
|
m_delaySelect = false;
|
||||||
|
@ -1050,7 +1052,13 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
IMesh mesh = _parent_scene.mesher.CreateMesh(Name, _pbs, _size, (int)LevelOfDetail.High, true);
|
bool convex;
|
||||||
|
if (m_shapetype == 0)
|
||||||
|
convex = false;
|
||||||
|
else
|
||||||
|
convex = true;
|
||||||
|
|
||||||
|
IMesh mesh = _parent_scene.mesher.CreateMesh(Name, _pbs, _size, (int)LevelOfDetail.High, true,convex);
|
||||||
if (mesh == null)
|
if (mesh == null)
|
||||||
{
|
{
|
||||||
m_log.WarnFormat("[PHYSICS]: CreateMesh Failed on prim {0} at <{1},{2},{3}>.", Name, _position.X, _position.Y, _position.Z);
|
m_log.WarnFormat("[PHYSICS]: CreateMesh Failed on prim {0} at <{1},{2},{3}>.", Name, _position.X, _position.Y, _position.Z);
|
||||||
|
|
|
@ -1141,7 +1141,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
OdePrim newPrim;
|
OdePrim newPrim;
|
||||||
lock (OdeLock)
|
lock (OdeLock)
|
||||||
{
|
{
|
||||||
newPrim = new OdePrim(name, this, pos, siz, rot, pbs, isphysical,false,localID);
|
newPrim = new OdePrim(name, this, pos, siz, rot, pbs, isphysical,false,0,localID);
|
||||||
|
|
||||||
lock (_prims)
|
lock (_prims)
|
||||||
_prims.Add(newPrim);
|
_prims.Add(newPrim);
|
||||||
|
@ -1159,7 +1159,25 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
OdePrim newPrim;
|
OdePrim newPrim;
|
||||||
lock (OdeLock)
|
lock (OdeLock)
|
||||||
{
|
{
|
||||||
newPrim = new OdePrim(name, this, pos, siz, rot, pbs, isphysical,isPhantom,localID);
|
newPrim = new OdePrim(name, this, pos, siz, rot, pbs, isphysical, isPhantom, 0, localID);
|
||||||
|
|
||||||
|
lock (_prims)
|
||||||
|
_prims.Add(newPrim);
|
||||||
|
}
|
||||||
|
return newPrim;
|
||||||
|
}
|
||||||
|
|
||||||
|
private PhysicsActor AddPrim(String name, Vector3 position, Vector3 size, Quaternion rotation,
|
||||||
|
PrimitiveBaseShape pbs, bool isphysical, bool isPhantom, byte shapeType, uint localID)
|
||||||
|
{
|
||||||
|
Vector3 pos = position;
|
||||||
|
Vector3 siz = size;
|
||||||
|
Quaternion rot = rotation;
|
||||||
|
|
||||||
|
OdePrim newPrim;
|
||||||
|
lock (OdeLock)
|
||||||
|
{
|
||||||
|
newPrim = new OdePrim(name, this, pos, siz, rot, pbs, isphysical, isPhantom, shapeType, localID);
|
||||||
|
|
||||||
lock (_prims)
|
lock (_prims)
|
||||||
_prims.Add(newPrim);
|
_prims.Add(newPrim);
|
||||||
|
@ -1203,6 +1221,16 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
return AddPrim(primName, position, size, rotation, pbs, isPhysical, localid);
|
return AddPrim(primName, position, size, rotation, pbs, isPhysical, localid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position,
|
||||||
|
Vector3 size, Quaternion rotation, bool isPhysical, bool isPhantom, byte shapeType, uint localid)
|
||||||
|
{
|
||||||
|
#if SPAM
|
||||||
|
m_log.DebugFormat("[PHYSICS]: Adding physics actor to {0}", primName);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return AddPrim(primName, position, size, rotation, pbs, isPhysical,isPhantom, shapeType, localid);
|
||||||
|
}
|
||||||
|
|
||||||
public override float TimeDilation
|
public override float TimeDilation
|
||||||
{
|
{
|
||||||
get { return m_timeDilation; }
|
get { return m_timeDilation; }
|
||||||
|
|
Loading…
Reference in New Issue