Changes in BulletXPlugin: Added new class BulletXActor class inherits from PhysicsActor and it's the ancestor for BulletXCharacter and BulletXPrim.Physical modifications: Changes for pass the value of Physical flag in the SceneObjectPart class to the Physics engines. New call for AddPrimShape so it has a new parameter called "isPhysical". The old call will be obselete soon (i believe). PhysActor and its descendants have a new property called IsPhysical. By the way no new special funcionallity added. It's more like preparing the way for new modifications.

afrisby
darok 2007-11-03 10:25:43 +00:00
parent a30866ed45
commit f8e0cf0f1d
10 changed files with 114 additions and 63 deletions

View File

@ -456,6 +456,7 @@ namespace OpenSim.Region.Environment.Scenes
AddEntity(group);
group.AbsolutePosition = pos;
SceneObjectPart rootPart = group.GetChildPart(group.UUID);
bool UsePhysics = ((rootPart.ObjectFlags & (uint)LLObject.ObjectFlags.Physics) > 0);
if ((rootPart.ObjectFlags & (uint) LLObject.ObjectFlags.Phantom) == 0)
{
PrimitiveBaseShape pbs = rootPart.Shape;
@ -466,7 +467,7 @@ namespace OpenSim.Region.Environment.Scenes
rootPart.AbsolutePosition.Z),
new PhysicsVector(rootPart.Scale.X, rootPart.Scale.Y, rootPart.Scale.Z),
new Quaternion(rootPart.RotationOffset.W, rootPart.RotationOffset.X,
rootPart.RotationOffset.Y, rootPart.RotationOffset.Z));
rootPart.RotationOffset.Y, rootPart.RotationOffset.Z), UsePhysics);
}
}
}

View File

@ -533,6 +533,7 @@ namespace OpenSim.Region.Environment.Scenes
{
AddEntityFromStorage(prim);
SceneObjectPart rootPart = prim.GetChildPart(prim.UUID);
bool UsePhysics = ((rootPart.ObjectFlags & (uint)LLObject.ObjectFlags.Physics) > 0);
if ((rootPart.ObjectFlags & (uint) LLObject.ObjectFlags.Phantom) == 0)
rootPart.PhysActor = phyScene.AddPrimShape(
rootPart.Name,
@ -541,7 +542,7 @@ namespace OpenSim.Region.Environment.Scenes
rootPart.AbsolutePosition.Z),
new PhysicsVector(rootPart.Scale.X, rootPart.Scale.Y, rootPart.Scale.Z),
new Quaternion(rootPart.RotationOffset.W, rootPart.RotationOffset.X,
rootPart.RotationOffset.Y, rootPart.RotationOffset.Z));
rootPart.RotationOffset.Y, rootPart.RotationOffset.Z), UsePhysics);
}
MainLog.Instance.Verbose("Loaded " + PrimsFromDB.Count.ToString() + " SceneObject(s)");
}
@ -582,6 +583,7 @@ namespace OpenSim.Region.Environment.Scenes
rootPart.ObjectFlags += (uint) LLObject.ObjectFlags.Phantom;
}
// if not phantom, add to physics
bool UsePhysics = ((rootPart.ObjectFlags & (uint)LLObject.ObjectFlags.Physics) > 0);
if ((rootPart.ObjectFlags & (uint) LLObject.ObjectFlags.Phantom) == 0)
rootPart.PhysActor =
phyScene.AddPrimShape(
@ -589,7 +591,7 @@ namespace OpenSim.Region.Environment.Scenes
rootPart.Shape,
new PhysicsVector(pos.X, pos.Y, pos.Z),
new PhysicsVector(shape.Scale.X, shape.Scale.Y, shape.Scale.Z),
new Quaternion());
new Quaternion(), UsePhysics);
}
}
@ -669,6 +671,7 @@ namespace OpenSim.Region.Environment.Scenes
AddEntity(obj);
SceneObjectPart rootPart = obj.GetChildPart(obj.UUID);
bool UsePhysics = ((rootPart.ObjectFlags & (uint)LLObject.ObjectFlags.Physics) > 0);
if ((rootPart.ObjectFlags & (uint) LLObject.ObjectFlags.Phantom) == 0)
rootPart.PhysActor = phyScene.AddPrimShape(
rootPart.Name,
@ -677,7 +680,7 @@ namespace OpenSim.Region.Environment.Scenes
rootPart.AbsolutePosition.Z),
new PhysicsVector(rootPart.Scale.X, rootPart.Scale.Y, rootPart.Scale.Z),
new Quaternion(rootPart.RotationOffset.W, rootPart.RotationOffset.X,
rootPart.RotationOffset.Y, rootPart.RotationOffset.Z));
rootPart.RotationOffset.Y, rootPart.RotationOffset.Z), UsePhysics);
primCount++;
}
}
@ -734,6 +737,7 @@ namespace OpenSim.Region.Environment.Scenes
AddEntityFromStorage(obj);
SceneObjectPart rootPart = obj.GetChildPart(obj.UUID);
bool UsePhysics = ((rootPart.ObjectFlags & (uint)LLObject.ObjectFlags.Physics) > 0);
if ((rootPart.ObjectFlags & (uint) LLObject.ObjectFlags.Phantom) == 0)
rootPart.PhysActor = phyScene.AddPrimShape(
rootPart.Name,
@ -742,7 +746,7 @@ namespace OpenSim.Region.Environment.Scenes
rootPart.AbsolutePosition.Z),
new PhysicsVector(rootPart.Scale.X, rootPart.Scale.Y, rootPart.Scale.Z),
new Quaternion(rootPart.RotationOffset.W, rootPart.RotationOffset.X,
rootPart.RotationOffset.Y, rootPart.RotationOffset.Z));
rootPart.RotationOffset.Y, rootPart.RotationOffset.Z), UsePhysics);
}
public void SavePrimsToXml2(string fileName)

View File

@ -438,7 +438,8 @@ namespace OpenSim.Region.Environment.Scenes
dupe.RootPart.AbsolutePosition.Z),
new PhysicsVector(dupe.RootPart.Scale.X, dupe.RootPart.Scale.Y, dupe.RootPart.Scale.Z),
new Quaternion(dupe.RootPart.RotationOffset.W, dupe.RootPart.RotationOffset.X,
dupe.RootPart.RotationOffset.Y, dupe.RootPart.RotationOffset.Z));
dupe.RootPart.RotationOffset.Y, dupe.RootPart.RotationOffset.Z),
dupe.RootPart.PhysActor.IsPhysical);
}
List<SceneObjectPart> partList = new List<SceneObjectPart>(m_parts.Values);
@ -977,7 +978,8 @@ namespace OpenSim.Region.Environment.Scenes
m_rootPart.AbsolutePosition.Z),
new PhysicsVector(m_rootPart.Scale.X, m_rootPart.Scale.Y, m_rootPart.Scale.Z),
new Quaternion(m_rootPart.RotationOffset.W, m_rootPart.RotationOffset.X,
m_rootPart.RotationOffset.Y, m_rootPart.RotationOffset.Z));
m_rootPart.RotationOffset.Y, m_rootPart.RotationOffset.Z),
m_rootPart.PhysActor.IsPhysical);
}
}

View File

@ -672,6 +672,15 @@ namespace OpenSim.Region.Environment.Scenes
//Silently ignore it - TODO: FIXME Quick
}
if (UsePhysics)
{
AddFlag(LLObject.ObjectFlags.Physics);
}
else
{
RemFlag(LLObject.ObjectFlags.Physics);
}
if (IsPhantom)
{
AddFlag(LLObject.ObjectFlags.Phantom);
@ -694,18 +703,10 @@ namespace OpenSim.Region.Environment.Scenes
AbsolutePosition.Z),
new PhysicsVector(Scale.X, Scale.Y, Scale.Z),
new Quaternion(RotationOffset.W, RotationOffset.X,
RotationOffset.Y, RotationOffset.Z));
RotationOffset.Y, RotationOffset.Z), UsePhysics);
}
}
if (UsePhysics)
{
AddFlag(LLObject.ObjectFlags.Physics);
}
else
{
RemFlag(LLObject.ObjectFlags.Physics);
}
if (IsTemporary)
{
AddFlag(LLObject.ObjectFlags.TemporaryOnRez);

View File

@ -101,9 +101,14 @@ namespace OpenSim.Region.Physics.BasicPhysicsPlugin
public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, PhysicsVector position,
PhysicsVector size, Quaternion rotation)
{
return null;
return this.AddPrimShape(primName, pbs, position, size, rotation, false);
}
public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, PhysicsVector position,
PhysicsVector size, Quaternion rotation, bool isPhysical)
{
return null;
}
public override void Simulate(float timeStep)
{
@ -186,6 +191,12 @@ namespace OpenSim.Region.Physics.BasicPhysicsPlugin
_acceleration = new PhysicsVector();
}
public override bool IsPhysical
{
get { return false; }
set { return; }
}
public override bool Flying
{
get { return flying; }

View File

@ -386,6 +386,11 @@ namespace OpenSim.Region.Physics.BulletXPlugin
public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, PhysicsVector position,
PhysicsVector size, AxiomQuaternion rotation)
{
return this.AddPrimShape(primName, pbs, position, size, rotation, false);
}
public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, PhysicsVector position,
PhysicsVector size, AxiomQuaternion rotation, bool isPhysical)
{
PhysicsActor result;
@ -651,10 +656,7 @@ namespace OpenSim.Region.Physics.BulletXPlugin
public override PhysicsVector Position
{
get
{
return _position;
}
get { return _position; }
set
{
lock (BulletXScene.BulletXLock)
@ -666,10 +668,7 @@ namespace OpenSim.Region.Physics.BulletXPlugin
}
public override PhysicsVector Velocity
{
get
{
return _velocity;
}
get { return _velocity; }
set
{
lock (BulletXScene.BulletXLock)
@ -689,31 +688,16 @@ namespace OpenSim.Region.Physics.BulletXPlugin
}
public override PhysicsVector Size
{
get
{
return _size;
}
set
{
lock (BulletXScene.BulletXLock)
{
_size = value;
}
}
get { return _size; }
set { lock (BulletXScene.BulletXLock) { _size = value; } }
}
public override PhysicsVector Acceleration
{
get
{
return _acceleration;
}
get { return _acceleration; }
}
public override AxiomQuaternion Orientation
{
get
{
return _orientation;
}
get { return _orientation; }
set
{
lock (BulletXScene.BulletXLock)
@ -724,28 +708,28 @@ namespace OpenSim.Region.Physics.BulletXPlugin
}
}
public virtual float Mass
{ get { return 0; } }
{
get { return 0; }
}
public RigidBody RigidBody
{
get
{
return rigidBody;
}
get { return rigidBody; }
}
public Vector3 RigidBodyPosition
{
get { return this.rigidBody.CenterOfMassPosition; }
}
public override bool IsPhysical
{
get { return false; }
set { return; }
}
public override bool Flying
{
get
{
return flying;
}
set
{
flying = value;
}
get { return flying; }
set { flying = value; }
}
public override bool IsColliding
{

View File

@ -58,6 +58,8 @@ namespace OpenSim.Region.Physics.Manager
public abstract Quaternion Orientation { get; set; }
public abstract bool IsPhysical {get; set;}
public abstract bool Flying { get; set; }
public abstract bool IsColliding { get; set; }
@ -100,6 +102,12 @@ namespace OpenSim.Region.Physics.Manager
get { return PhysicsVector.Zero; }
}
public override bool IsPhysical
{
get { return false; }
set { return; }
}
public override bool Flying
{
get { return false; }

View File

@ -45,7 +45,9 @@ namespace OpenSim.Region.Physics.Manager
public abstract void RemovePrim(PhysicsActor prim);
public abstract PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, PhysicsVector position,
PhysicsVector size, Quaternion rotation);
PhysicsVector size, Quaternion rotation); //To be removed
public abstract PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, PhysicsVector position,
PhysicsVector size, Quaternion rotation, bool isPhysical);
public abstract void Simulate(float timeStep);
@ -82,9 +84,13 @@ namespace OpenSim.Region.Physics.Manager
return PhysicsActor.Null;
}
*/
public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, PhysicsVector position,
PhysicsVector size, Quaternion rotation)
PhysicsVector size, Quaternion rotation) //To be removed
{
return this.AddPrimShape(primName, pbs, position, size, rotation, false);
}
public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, PhysicsVector position,
PhysicsVector size, Quaternion rotation, bool isPhysical)
{
MainLog.Instance.Verbose("NullPhysicsScene : AddPrim({0},{1})", position, size);
return PhysicsActor.Null;

View File

@ -300,7 +300,12 @@ namespace OpenSim.Region.Physics.OdePlugin
public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, PhysicsVector position,
PhysicsVector size, Quaternion rotation)
PhysicsVector size, Quaternion rotation) //To be removed
{
return this.AddPrimShape(primName, pbs, position, size, rotation, false);
}
public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, PhysicsVector position,
PhysicsVector size, Quaternion rotation, bool isPhysical)
{
PhysicsActor result;
@ -510,6 +515,12 @@ namespace OpenSim.Region.Physics.OdePlugin
parent_scene.actor_name_map[Shell] = (PhysicsActor)this;
}
public override bool IsPhysical
{
get { return false; }
set { return; }
}
public override bool Flying
{
get { return flying; }
@ -758,6 +769,12 @@ namespace OpenSim.Region.Physics.OdePlugin
prim_geom = d.CreateTriMesh(parent_scene.space, _triMeshData, parent_scene.triCallback, null, null);
}
public override bool IsPhysical
{
get { return false; }
set { return; }
}
public override bool Flying
{
get { return false; //no flying prims for you

View File

@ -120,7 +120,12 @@ namespace OpenSim.Region.Physics.PhysXPlugin
}
public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, PhysicsVector position,
PhysicsVector size, Quaternion rotation)
PhysicsVector size, Quaternion rotation) //To be removed
{
return this.AddPrimShape(primName, pbs, position, size, rotation, false);
}
public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, PhysicsVector position,
PhysicsVector size, Quaternion rotation, bool isPhysical)
{
return AddPrim(position, size, rotation);
}
@ -193,6 +198,12 @@ namespace OpenSim.Region.Physics.PhysXPlugin
_character = character;
}
public override bool IsPhysical
{
get { return false; }
set { return; }
}
public override bool Flying
{
get { return flying; }
@ -305,6 +316,12 @@ namespace OpenSim.Region.Physics.PhysXPlugin
_prim = prim;
}
public override bool IsPhysical
{
get { return false; }
set { return; }
}
public override bool Flying
{
get { return false; //no flying prims for you