Add rotationalVelocity and acceleration to variables that are synced in PhysicsActor. Remove unused Prop class.

dsg
Robert Adams 2011-01-27 11:05:26 -08:00
parent 8d87d9e42d
commit 270f7e653a
9 changed files with 48 additions and 75 deletions

View File

@ -390,6 +390,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
pa.Position = data["position"].AsVector3(); pa.Position = data["position"].AsVector3();
pa.Force = data["force"].AsVector3(); pa.Force = data["force"].AsVector3();
pa.Velocity = data["velocity"].AsVector3(); pa.Velocity = data["velocity"].AsVector3();
pa.RotationalVelocity = data["rotationalVelocity"].AsVector3();
pa.Acceleration = data["acceleration"].AsVector3();
pa.Torque = data["torque"].AsVector3(); pa.Torque = data["torque"].AsVector3();
pa.Orientation = data["orientantion"].AsQuaternion(); pa.Orientation = data["orientantion"].AsQuaternion();
pa.IsPhysical = data["isPhysical"].AsBoolean(); // receive?? pa.IsPhysical = data["isPhysical"].AsBoolean(); // receive??
@ -444,6 +446,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
data["position"] = OSD.FromVector3(pa.Position); data["position"] = OSD.FromVector3(pa.Position);
data["force"] = OSD.FromVector3(pa.Force); data["force"] = OSD.FromVector3(pa.Force);
data["velocity"] = OSD.FromVector3(pa.Velocity); data["velocity"] = OSD.FromVector3(pa.Velocity);
data["rotationalVelocity"] = OSD.FromVector3(pa.RotationalVelocity);
data["acceleration"] = OSD.FromVector3(pa.Acceleration);
data["torque"] = OSD.FromVector3(pa.Torque); data["torque"] = OSD.FromVector3(pa.Torque);
data["orientation"] = OSD.FromQuaternion(pa.Orientation); data["orientation"] = OSD.FromQuaternion(pa.Orientation);
data["isPhysical"] = OSD.FromBoolean(pa.IsPhysical); data["isPhysical"] = OSD.FromBoolean(pa.IsPhysical);

View File

@ -350,6 +350,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
pa.Position = data["position"].AsVector3(); pa.Position = data["position"].AsVector3();
pa.Force = data["force"].AsVector3(); pa.Force = data["force"].AsVector3();
pa.Velocity = data["velocity"].AsVector3(); pa.Velocity = data["velocity"].AsVector3();
pa.RotationalVelocity = data["rotationalVelocity"].AsVector3();
pa.Acceleration = data["acceleration"].AsVector3();
pa.Torque = data["torque"].AsVector3(); pa.Torque = data["torque"].AsVector3();
pa.Orientation = data["orientantion"].AsQuaternion(); pa.Orientation = data["orientantion"].AsQuaternion();
pa.IsPhysical = data["isPhysical"].AsBoolean(); // receive?? pa.IsPhysical = data["isPhysical"].AsBoolean(); // receive??
@ -402,6 +404,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
data["position"] = OSD.FromVector3(pa.Position); data["position"] = OSD.FromVector3(pa.Position);
data["force"] = OSD.FromVector3(pa.Force); data["force"] = OSD.FromVector3(pa.Force);
data["velocity"] = OSD.FromVector3(pa.Velocity); data["velocity"] = OSD.FromVector3(pa.Velocity);
data["rotationalVelocity"] = OSD.FromVector3(pa.RotationalVelocity);
data["acceleration"] = OSD.FromVector3(pa.Acceleration);
data["torque"] = OSD.FromVector3(pa.Torque); data["torque"] = OSD.FromVector3(pa.Torque);
data["orientation"] = OSD.FromQuaternion(pa.Orientation); data["orientation"] = OSD.FromQuaternion(pa.Orientation);
data["isPhysical"] = OSD.FromBoolean(pa.IsPhysical); data["isPhysical"] = OSD.FromBoolean(pa.IsPhysical);

View File

@ -273,8 +273,11 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
public void SendUpdate(PhysicsActor pa) public void SendUpdate(PhysicsActor pa)
{ {
// m_log.DebugFormat("{0}: SendUpdate for {1}", LogHeader, pa.LocalID); // m_log.DebugFormat("{0}: SendUpdate for {1}", LogHeader, pa.LocalID);
if (m_sceneToPhysEngineConnector != null)
{
this.m_sceneToPhysEngineConnector.SendPhysUpdateAttributes(pa); this.m_sceneToPhysEngineConnector.SendPhysUpdateAttributes(pa);
} }
}
#endregion #endregion

View File

@ -127,6 +127,7 @@ namespace OpenSim.Region.Physics.Manager
public Vector3 position; public Vector3 position;
public Vector3 force; public Vector3 force;
public Vector3 velocity; public Vector3 velocity;
public Vector3 rotationalVelocity;
public Vector3 torque; public Vector3 torque;
public Quaternion orientation; public Quaternion orientation;
public Boolean isPhysical; public Boolean isPhysical;
@ -140,6 +141,7 @@ namespace OpenSim.Region.Physics.Manager
if (!AlmostEqual(position, pa.Position)) { position = pa.Position; ret = true; } if (!AlmostEqual(position, pa.Position)) { position = pa.Position; ret = true; }
if (!AlmostEqual(force, pa.Force)) { force = pa.Force; ret = true; } if (!AlmostEqual(force, pa.Force)) { force = pa.Force; ret = true; }
if (!AlmostEqual(velocity, pa.Velocity)) { velocity = pa.Velocity; ret = true; } if (!AlmostEqual(velocity, pa.Velocity)) { velocity = pa.Velocity; ret = true; }
if (!AlmostEqual(rotationalVelocity, pa.RotationalVelocity)) { rotationalVelocity = pa.RotationalVelocity; ret = true; }
if (!AlmostEqual(torque, pa.Torque)) { torque = pa.Torque; ret = true; } if (!AlmostEqual(torque, pa.Torque)) { torque = pa.Torque; ret = true; }
if (orientation != pa.Orientation) { orientation = pa.Orientation; ret = true; } if (orientation != pa.Orientation) { orientation = pa.Orientation; ret = true; }
if (isPhysical != pa.IsPhysical) { isPhysical = pa.IsPhysical; ret = true; } if (isPhysical != pa.IsPhysical) { isPhysical = pa.IsPhysical; ret = true; }
@ -149,9 +151,9 @@ namespace OpenSim.Region.Physics.Manager
} }
private bool AlmostEqual(Vector3 a, Vector3 b) private bool AlmostEqual(Vector3 a, Vector3 b)
{ {
if (Math.Abs(a.X - b.X) > 0.001) return false; if (Math.Abs(a.X - b.X) > 0.01) return false;
if (Math.Abs(a.Y - b.Y) > 0.001) return false; if (Math.Abs(a.Y - b.Y) > 0.01) return false;
if (Math.Abs(a.Z - b.Z) > 0.001) return false; if (Math.Abs(a.Z - b.Z) > 0.01) return false;
return true; return true;
} }
} }
@ -273,7 +275,12 @@ namespace OpenSim.Region.Physics.Manager
public abstract Vector3 Velocity { get; set; } public abstract Vector3 Velocity { get; set; }
public abstract Vector3 Torque { get; set; } public abstract Vector3 Torque { get; set; }
public abstract float CollisionScore { get; set;} public abstract float CollisionScore { get; set;}
public abstract Vector3 Acceleration { get; } // RA: used to be abstract but made virtual so 'set' does not need to be added to all phys engines
private Vector3 _acceleration;
public virtual Vector3 Acceleration {
get { return _acceleration; }
set { _acceleration = value; }
}
public abstract Quaternion Orientation { get; set; } public abstract Quaternion Orientation { get; set; }
public abstract int PhysicsActorType { get; set; } public abstract int PhysicsActorType { get; set; }
public abstract bool IsPhysical { get; set; } public abstract bool IsPhysical { get; set; }
@ -471,6 +478,7 @@ namespace OpenSim.Region.Physics.Manager
public override Vector3 Acceleration public override Vector3 Acceleration
{ {
get { return Vector3.Zero; } get { return Vector3.Zero; }
set { }
} }
public override bool IsPhysical public override bool IsPhysical

View File

@ -835,6 +835,7 @@ namespace OpenSim.Region.Physics.OdePlugin
public override Vector3 Acceleration public override Vector3 Acceleration
{ {
get { return _acceleration; } get { return _acceleration; }
set { _acceleration = value; }
} }
public void SetAcceleration(Vector3 accel) public void SetAcceleration(Vector3 accel)

View File

@ -2501,6 +2501,7 @@ Console.WriteLine(" JointCreateFixed");
public override Vector3 Acceleration public override Vector3 Acceleration
{ {
get { return _acceleration; } get { return _acceleration; }
set { _acceleration = value; }
} }

View File

@ -44,7 +44,10 @@ public class PECharacter : PhysicsActor
private bool _grabbed; private bool _grabbed;
private bool _selected; private bool _selected;
private Vector3 _position; private Vector3 _position;
private float _mass; private float _mass = 80f;
public float _density = 60f;
public float CAPSULE_RADIUS = 0.37f;
public float CAPSULE_LENGTH = 2.140599f;
private Vector3 _force; private Vector3 _force;
private Vector3 _velocity; private Vector3 _velocity;
private Vector3 _torque; private Vector3 _torque;
@ -79,6 +82,7 @@ public class PECharacter : PhysicsActor
{ {
_position = pos; _position = pos;
_size = size; _size = size;
_density = density;
return; return;
} }
@ -88,30 +92,25 @@ public class PECharacter : PhysicsActor
public override Vector3 Size { public override Vector3 Size {
get { return _size; } get { return _size; }
set { _size = value; set { _size = value;
Prop.Set(_localID, PropType.Size, _size);
} }
} }
public override PrimitiveBaseShape Shape { public override PrimitiveBaseShape Shape {
set { _pbs = value; set { _pbs = value;
Prop.Set(_localID, PropType.Shape, _pbs);
} }
} }
public override uint LocalID { public override uint LocalID {
set { _localID = value; set { _localID = value;
Prop.Set(_localID, PropType.LocalID, _localID);
} }
get { return _localID; } get { return _localID; }
} }
public override bool Grabbed { public override bool Grabbed {
set { _grabbed = value; set { _grabbed = value;
m_log.Debug("[RPE] PEChar set Grabbed"); m_log.Debug("[RPE] PEChar set Grabbed");
Prop.Set(_localID, PropType.Grabbed, _grabbed);
} }
} }
public override bool Selected { public override bool Selected {
set { _selected = value; set { _selected = value;
m_log.Debug("[RPE] PEChar set Selected"); m_log.Debug("[RPE] PEChar set Selected");
Prop.Set(_localID, PropType.Selected, _selected);
} }
} }
public override void CrossingFailure() { return; } public override void CrossingFailure() { return; }
@ -122,16 +121,18 @@ public class PECharacter : PhysicsActor
public override Vector3 Position { public override Vector3 Position {
get { return _position; } get { return _position; }
set { _position = value; set { _position = value;
Prop.Set(_localID, PropType.Position, _position);
} }
} }
public override float Mass { public override float Mass {
get { return _mass; } get {
float AVvolume = (float) (Math.PI*Math.Pow(CAPSULE_RADIUS, 2)*CAPSULE_LENGTH);
_mass = _density*AVvolume;
return _mass;
}
} }
public override Vector3 Force { public override Vector3 Force {
get { return _force; } get { return _force; }
set { _force = value; set { _force = value;
Prop.Set(_localID, PropType.Force, _force);
} }
} }
@ -152,19 +153,16 @@ public class PECharacter : PhysicsActor
public override Vector3 Velocity { public override Vector3 Velocity {
get { return _velocity; } get { return _velocity; }
set { _velocity = value; set { _velocity = value;
Prop.Set(_localID, PropType.Velocity, _velocity);
} }
} }
public override Vector3 Torque { public override Vector3 Torque {
get { return _torque; } get { return _torque; }
set { _torque = value; set { _torque = value;
Prop.Set(_localID, PropType.Torque, _torque);
} }
} }
public override float CollisionScore { public override float CollisionScore {
get { return _collisionScore; } get { return _collisionScore; }
set { _collisionScore = value; set { _collisionScore = value;
Prop.Set(_localID, PropType.CollisionScore, _collisionScore);
} }
} }
public override Vector3 Acceleration { public override Vector3 Acceleration {
@ -173,7 +171,6 @@ public class PECharacter : PhysicsActor
public override Quaternion Orientation { public override Quaternion Orientation {
get { return _orientation; } get { return _orientation; }
set { _orientation = value; set { _orientation = value;
Prop.Set(_localID, PropType.Orientation, _orientation);
} }
} }
public override int PhysicsActorType { public override int PhysicsActorType {
@ -261,6 +258,18 @@ public class PECharacter : PhysicsActor
public override float APIDDamping { set { return; } } public override float APIDDamping { set { return; } }
public override void AddForce(Vector3 force, bool pushforce) { public override void AddForce(Vector3 force, bool pushforce) {
if (force.IsFinite())
{
// base.ChangingActorID = RegionSyncServerModule.ActorID;
_velocity.X += force.X;
_velocity.Y += force.Y;
_velocity.Z += force.Z;
}
else
{
m_log.Warn("[PHYSICS]: Got a NaN force applied to a Character");
}
//m_lastUpdateSent = false;
} }
public override void AddAngularForce(Vector3 force, bool pushforce) { public override void AddAngularForce(Vector3 force, bool pushforce) {
} }

View File

@ -92,34 +92,29 @@ public sealed class PEPrim : PhysicsActor
set { _size = value; set { _size = value;
// m_log.Debug("[REMOTE PRIM ENGINE] PEPrim set Size"); // m_log.Debug("[REMOTE PRIM ENGINE] PEPrim set Size");
ChangingActorID = RegionSyncServerModule.ActorID; ChangingActorID = RegionSyncServerModule.ActorID;
Prop.Set(_localID, PropType.Size, _size);
} }
} }
public override PrimitiveBaseShape Shape { public override PrimitiveBaseShape Shape {
set { _pbs = value; set { _pbs = value;
m_log.Debug("[REMOTE PRIM ENGINE] PEPrim set Shape"); m_log.Debug("[REMOTE PRIM ENGINE] PEPrim set Shape");
ChangingActorID = RegionSyncServerModule.ActorID; ChangingActorID = RegionSyncServerModule.ActorID;
Prop.Set(_localID, PropType.Shape, _pbs);
} }
} }
public override uint LocalID { public override uint LocalID {
set { _localID = value; set { _localID = value;
// m_log.Debug("[REMOTE PRIM ENGINE] PEPrim set LocalID"); // m_log.Debug("[REMOTE PRIM ENGINE] PEPrim set LocalID");
ChangingActorID = RegionSyncServerModule.ActorID; ChangingActorID = RegionSyncServerModule.ActorID;
Prop.Set(_localID, PropType.LocalID, _localID);
} }
get { return _localID; } get { return _localID; }
} }
public override bool Grabbed { public override bool Grabbed {
set { _grabbed = value; set { _grabbed = value;
m_log.Debug("[REMOTE PRIM ENGINE] PEPrim set Grabbed"); m_log.Debug("[REMOTE PRIM ENGINE] PEPrim set Grabbed");
Prop.Set(_localID, PropType.Grabbed, _grabbed);
} }
} }
public override bool Selected { public override bool Selected {
set { _selected = value; set { _selected = value;
m_log.Debug("[REMOTE PRIM ENGINE] PEPrim set Selected"); m_log.Debug("[REMOTE PRIM ENGINE] PEPrim set Selected");
Prop.Set(_localID, PropType.Selected, _selected);
} }
} }
public override void CrossingFailure() { return; } public override void CrossingFailure() { return; }
@ -132,7 +127,6 @@ public sealed class PEPrim : PhysicsActor
set { _position = value; set { _position = value;
ChangingActorID = RegionSyncServerModule.ActorID; ChangingActorID = RegionSyncServerModule.ActorID;
// m_log.Debug("[REMOTE PRIM ENGINE] PEPrim set Position"); // m_log.Debug("[REMOTE PRIM ENGINE] PEPrim set Position");
Prop.Set(_localID, PropType.Position, _position);
} }
} }
public override float Mass { public override float Mass {
@ -143,7 +137,6 @@ public sealed class PEPrim : PhysicsActor
set { _force = value; set { _force = value;
ChangingActorID = RegionSyncServerModule.ActorID; ChangingActorID = RegionSyncServerModule.ActorID;
// m_log.Debug("[REMOTE PRIM ENGINE] PEPrim set Force"); // m_log.Debug("[REMOTE PRIM ENGINE] PEPrim set Force");
Prop.Set(_localID, PropType.Force, _force);
} }
} }
@ -165,21 +158,18 @@ public sealed class PEPrim : PhysicsActor
get { return _velocity; } get { return _velocity; }
set { _velocity = value; set { _velocity = value;
ChangingActorID = RegionSyncServerModule.ActorID; ChangingActorID = RegionSyncServerModule.ActorID;
Prop.Set(_localID, PropType.Velocity, _velocity);
} }
} }
public override Vector3 Torque { public override Vector3 Torque {
get { return _torque; } get { return _torque; }
set { _torque = value; set { _torque = value;
ChangingActorID = RegionSyncServerModule.ActorID; ChangingActorID = RegionSyncServerModule.ActorID;
Prop.Set(_localID, PropType.Torque, _torque);
} }
} }
public override float CollisionScore { public override float CollisionScore {
get { return _collisionScore; } get { return _collisionScore; }
set { _collisionScore = value; set { _collisionScore = value;
ChangingActorID = RegionSyncServerModule.ActorID; ChangingActorID = RegionSyncServerModule.ActorID;
Prop.Set(_localID, PropType.CollisionScore, _collisionScore);
} }
} }
public override Vector3 Acceleration { public override Vector3 Acceleration {
@ -189,7 +179,6 @@ public sealed class PEPrim : PhysicsActor
get { return _orientation; } get { return _orientation; }
set { _orientation = value; set { _orientation = value;
ChangingActorID = RegionSyncServerModule.ActorID; ChangingActorID = RegionSyncServerModule.ActorID;
Prop.Set(_localID, PropType.Orientation, _orientation);
} }
} }
public override int PhysicsActorType { public override int PhysicsActorType {

View File

@ -1,46 +0,0 @@
using System;
using System.Collections.Generic;
using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Region.Physics.Manager;
namespace OpenSim.Region.Physics.PEPlugin
{
public enum PropType
{
Size,
Shape,
LocalID,
Grabbed,
Selected,
Position,
Force,
Velocity,
Torque,
CollisionScore,
Orientation
};
public class Prop
{
public static void Set(uint localID, PropType type, uint val)
{
}
public static void Set(uint localID, PropType type, Vector3 val)
{
}
public static void Set(uint localID, PropType type, PrimitiveBaseShape val)
{
}
public static void Set(uint localID, PropType type, bool val)
{
}
public static void Set(uint localID, PropType type, float val)
{
}
public static void Set(uint localID, PropType type, Quaternion val)
{
}
}
}