From 5e4d6cab00cb29cd088ab7b62ab13aff103b64cb Mon Sep 17 00:00:00 2001 From: onefang Date: Sun, 19 May 2019 21:24:15 +1000 Subject: Dump OpenSim 0.9.0.1 into it's own branch. --- .../PhysicsModules/SharedBase/AssemblyInfo.cs | 2 +- .../Region/PhysicsModules/SharedBase/IMesher.cs | 31 +- .../SharedBase/IPhysicsParameters.cs | 0 .../PhysicsModules/SharedBase/NullPhysicsScene.cs | 2 +- .../PhysicsModules/SharedBase/PhysicsActor.cs | 311 +++++++++++++++------ .../PhysicsModules/SharedBase/PhysicsScene.cs | 85 +++++- .../PhysicsModules/SharedBase/PhysicsVector.cs | 2 +- .../PhysicsModules/SharedBase/VehicleConstants.cs | 47 +++- 8 files changed, 365 insertions(+), 115 deletions(-) mode change 100644 => 100755 OpenSim/Region/PhysicsModules/SharedBase/IPhysicsParameters.cs (limited to 'OpenSim/Region/PhysicsModules/SharedBase') diff --git a/OpenSim/Region/PhysicsModules/SharedBase/AssemblyInfo.cs b/OpenSim/Region/PhysicsModules/SharedBase/AssemblyInfo.cs index 33f60e4..9027e2e 100644 --- a/OpenSim/Region/PhysicsModules/SharedBase/AssemblyInfo.cs +++ b/OpenSim/Region/PhysicsModules/SharedBase/AssemblyInfo.cs @@ -55,4 +55,4 @@ using System.Runtime.InteropServices; // You can specify all values by your own or you can build default build and revision // numbers with the '*' character (the default): -[assembly : AssemblyVersion("0.8.2.*")] +[assembly : AssemblyVersion(OpenSim.VersionInfo.AssemblyVersionNumber)] diff --git a/OpenSim/Region/PhysicsModules/SharedBase/IMesher.cs b/OpenSim/Region/PhysicsModules/SharedBase/IMesher.cs index 5c75307..1a8409e 100644 --- a/OpenSim/Region/PhysicsModules/SharedBase/IMesher.cs +++ b/OpenSim/Region/PhysicsModules/SharedBase/IMesher.cs @@ -27,6 +27,7 @@ using System; using System.Collections.Generic; +using System.Runtime.InteropServices; using OpenSim.Framework; using OpenMetaverse; @@ -36,13 +37,18 @@ namespace OpenSim.Region.PhysicsModules.SharedBase { IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod); IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical); - IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical, bool shouldCache); + IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical, bool convex, bool forOde); + IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical, bool shouldCache, bool convex, bool forOde); + IMesh GetMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical, bool convex); + void ReleaseMesh(IMesh mesh); + void ExpireReleaseMeshs(); + void ExpireFileCache(); } // Values for level of detail to be passed to the mesher. // Values origionally chosen for the LOD of sculpties (the sqrt(width*heigth) of sculpt texture) // Lower level of detail reduces the number of vertices used to represent the meshed shape. - public enum LevelOfDetail + public enum LevelOfDetail { High = 32, Medium = 16, @@ -54,6 +60,25 @@ namespace OpenSim.Region.PhysicsModules.SharedBase { } + [Serializable()] + [StructLayout(LayoutKind.Explicit)] + public struct AMeshKey + { + [FieldOffset(0)] + public UUID uuid; + [FieldOffset(0)] + public ulong hashA; + [FieldOffset(8)] + public ulong hashB; + [FieldOffset(16)] + public ulong hashC; + + public override string ToString() + { + return uuid.ToString() + "-" + hashC.ToString("x") ; + } + } + public interface IMesh { List getVertexList(); @@ -67,5 +92,7 @@ namespace OpenSim.Region.PhysicsModules.SharedBase void releasePinned(); void Append(IMesh newMesh); void TransformLinear(float[,] matrix, float[] offset); + Vector3 GetCentroid(); + Vector3 GetOBB(); } } diff --git a/OpenSim/Region/PhysicsModules/SharedBase/IPhysicsParameters.cs b/OpenSim/Region/PhysicsModules/SharedBase/IPhysicsParameters.cs old mode 100644 new mode 100755 diff --git a/OpenSim/Region/PhysicsModules/SharedBase/NullPhysicsScene.cs b/OpenSim/Region/PhysicsModules/SharedBase/NullPhysicsScene.cs index 432708c..8079e79 100644 --- a/OpenSim/Region/PhysicsModules/SharedBase/NullPhysicsScene.cs +++ b/OpenSim/Region/PhysicsModules/SharedBase/NullPhysicsScene.cs @@ -37,7 +37,7 @@ namespace OpenSim.Region.PhysicsModules.SharedBase class NullPhysicsScene : PhysicsScene { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - + private static int m_workIndicator; public override PhysicsActor AddAvatar( diff --git a/OpenSim/Region/PhysicsModules/SharedBase/PhysicsActor.cs b/OpenSim/Region/PhysicsModules/SharedBase/PhysicsActor.cs index c04ff58..2fa98b5 100644 --- a/OpenSim/Region/PhysicsModules/SharedBase/PhysicsActor.cs +++ b/OpenSim/Region/PhysicsModules/SharedBase/PhysicsActor.cs @@ -43,7 +43,8 @@ namespace OpenSim.Region.PhysicsModules.SharedBase Unknown = 0, Agent = 1, Prim = 2, - Ground = 3 + Ground = 3, + Water = 4 } public enum PIDHoverType @@ -54,20 +55,54 @@ namespace OpenSim.Region.PhysicsModules.SharedBase Absolute } + public struct CameraData + { + public Quaternion CameraRotation; + public Vector3 CameraAtAxis; + public bool MouseLook; + public bool Valid; + } + public struct ContactPoint { public Vector3 Position; public Vector3 SurfaceNormal; public float PenetrationDepth; + public float RelativeSpeed; + public bool CharacterFeet; public ContactPoint(Vector3 position, Vector3 surfaceNormal, float penetrationDepth) { Position = position; SurfaceNormal = surfaceNormal; PenetrationDepth = penetrationDepth; + RelativeSpeed = 0f; // for now let this one be set explicity + CharacterFeet = true; // keep other plugins work as before + } + + public ContactPoint(Vector3 position, Vector3 surfaceNormal, float penetrationDepth, bool feet) + { + Position = position; + SurfaceNormal = surfaceNormal; + PenetrationDepth = penetrationDepth; + RelativeSpeed = 0f; // for now let this one be set explicity + CharacterFeet = feet; // keep other plugins work as before } } + public struct ContactData + { + public float mu; + public float bounce; + public bool softcolide; + + public ContactData(float _mu, float _bounce, bool _softcolide) + { + mu = _mu; + bounce = _bounce; + softcolide = _softcolide; + } + } /// /// Used to pass collision information to OnCollisionUpdate listeners. /// @@ -100,8 +135,19 @@ namespace OpenSim.Region.PhysicsModules.SharedBase } else { + float lastVel = m_objCollisionList[localID].RelativeSpeed; if (m_objCollisionList[localID].PenetrationDepth < contact.PenetrationDepth) + { + if(Math.Abs(lastVel) > Math.Abs(contact.RelativeSpeed)) + contact.RelativeSpeed = lastVel; m_objCollisionList[localID] = contact; + } + else if(Math.Abs(lastVel) < Math.Abs(contact.RelativeSpeed)) + { + ContactPoint tmp = m_objCollisionList[localID]; + tmp.RelativeSpeed = contact.RelativeSpeed; + m_objCollisionList[localID] = tmp; + } } } @@ -121,13 +167,15 @@ namespace OpenSim.Region.PhysicsModules.SharedBase public delegate void RequestTerseUpdate(); public delegate void CollisionUpdate(EventArgs e); public delegate void OutOfBounds(Vector3 pos); + public delegate CameraData GetCameraData(); -// disable warning: public events + // disable warning: public events #pragma warning disable 67 public event PositionUpdate OnPositionUpdate; public event VelocityUpdate OnVelocityUpdate; public event OrientationUpdate OnOrientationUpdate; public event RequestTerseUpdate OnRequestTerseUpdate; + public event GetCameraData OnPhysicsRequestingCameraData; /// /// Subscribers to this event must synchronously handle the dictionary of collisions received, since the event @@ -138,15 +186,47 @@ namespace OpenSim.Region.PhysicsModules.SharedBase public event OutOfBounds OnOutOfBounds; #pragma warning restore 67 + public CameraData TryGetCameraData() + { + GetCameraData handler = OnPhysicsRequestingCameraData; + if (handler != null) + { + return handler(); + } + + return new CameraData { Valid = false }; + } + public static PhysicsActor Null { get { return new NullPhysicsActor(); } } + public virtual bool Building { get; set; } + + public virtual void getContactData(ref ContactData cdata) + { + cdata.mu = 0; + cdata.bounce = 0; + } + public abstract bool Stopped { get; } public abstract Vector3 Size { get; set; } + public virtual void setAvatarSize(Vector3 size, float feetOffset) + { + Size = size; + } + + public virtual bool Phantom { get; set; } + + public virtual bool IsVolumeDtc + { + get { return false; } + set { return; } + } + public virtual byte PhysicsShapeType { get; set; } public abstract PrimitiveBaseShape Shape { set; } @@ -169,20 +249,21 @@ namespace OpenSim.Region.PhysicsModules.SharedBase /// XXX: Bizarrely, this cannot be "Terrain" or "Water" right now unless it really is simulating terrain or /// water. This is not a problem due to the formatting of names given by prims and avatars. /// - public string Name { get; protected set; } + public string Name { get; set; } /// /// This is being used by ODE joint code. /// public string SOPName; + public virtual void CrossingStart() { } public abstract void CrossingFailure(); public abstract void link(PhysicsActor obj); public abstract void delink(); - public abstract void LockAngularMotion(Vector3 axis); + public abstract void LockAngularMotion(byte axislocks); public virtual void RequestPhysicsterseUpdate() { @@ -245,6 +326,56 @@ namespace OpenSim.Region.PhysicsModules.SharedBase public abstract void VehicleRotationParam(int param, Quaternion rotation); public abstract void VehicleFlags(int param, bool remove); + // This is an overridable version of SetVehicle() that works for all physics engines. + // This is VERY inefficient. It behoves any physics engine to override this and + // implement a more efficient setting of all the vehicle parameters. + public virtual void SetVehicle(object pvdata) + { + VehicleData vdata = (VehicleData)pvdata; + // vehicleActor.ProcessSetVehicle((VehicleData)vdata); + + this.VehicleType = (int)vdata.m_type; + this.VehicleFlags(-1, false); // clears all flags + this.VehicleFlags((int)vdata.m_flags, false); + + // Linear properties + this.VehicleVectorParam((int)Vehicle.LINEAR_MOTOR_DIRECTION, vdata.m_linearMotorDirection); + this.VehicleVectorParam((int)Vehicle.LINEAR_FRICTION_TIMESCALE, vdata.m_linearFrictionTimescale); + this.VehicleFloatParam((int)Vehicle.LINEAR_MOTOR_DECAY_TIMESCALE, vdata.m_linearMotorDecayTimescale); + this.VehicleFloatParam((int)Vehicle.LINEAR_MOTOR_TIMESCALE, vdata.m_linearMotorTimescale); + this.VehicleVectorParam((int)Vehicle.LINEAR_MOTOR_OFFSET, vdata.m_linearMotorOffset); + + //Angular properties + this.VehicleVectorParam((int)Vehicle.ANGULAR_MOTOR_DIRECTION, vdata.m_angularMotorDirection); + this.VehicleFloatParam((int)Vehicle.ANGULAR_MOTOR_TIMESCALE, vdata.m_angularMotorTimescale); + this.VehicleFloatParam((int)Vehicle.ANGULAR_MOTOR_DECAY_TIMESCALE, vdata.m_angularMotorDecayTimescale); + this.VehicleVectorParam((int)Vehicle.ANGULAR_FRICTION_TIMESCALE, vdata.m_angularFrictionTimescale); + + //Deflection properties + this.VehicleFloatParam((int)Vehicle.ANGULAR_DEFLECTION_EFFICIENCY, vdata.m_angularDeflectionEfficiency); + this.VehicleFloatParam((int)Vehicle.ANGULAR_DEFLECTION_TIMESCALE, vdata.m_angularDeflectionTimescale); + this.VehicleFloatParam((int)Vehicle.LINEAR_DEFLECTION_EFFICIENCY, vdata.m_linearDeflectionEfficiency); + this.VehicleFloatParam((int)Vehicle.LINEAR_DEFLECTION_TIMESCALE, vdata.m_linearDeflectionTimescale); + + //Banking properties + this.VehicleFloatParam((int)Vehicle.BANKING_EFFICIENCY, vdata.m_bankingEfficiency); + this.VehicleFloatParam((int)Vehicle.BANKING_MIX, vdata.m_bankingMix); + this.VehicleFloatParam((int)Vehicle.BANKING_TIMESCALE, vdata.m_bankingTimescale); + + //Hover and Buoyancy properties + this.VehicleFloatParam((int)Vehicle.HOVER_HEIGHT, vdata.m_VhoverHeight); + this.VehicleFloatParam((int)Vehicle.HOVER_EFFICIENCY, vdata.m_VhoverEfficiency); + this.VehicleFloatParam((int)Vehicle.HOVER_TIMESCALE, vdata.m_VhoverTimescale); + this.VehicleFloatParam((int)Vehicle.BUOYANCY, vdata.m_VehicleBuoyancy); + + //Attractor properties + this.VehicleFloatParam((int)Vehicle.VERTICAL_ATTRACTION_EFFICIENCY, vdata.m_verticalAttractionEfficiency); + this.VehicleFloatParam((int)Vehicle.VERTICAL_ATTRACTION_TIMESCALE, vdata.m_verticalAttractionTimescale); + + this.VehicleRotationParam((int)Vehicle.REFERENCE_FRAME, vdata.m_referenceFrame); + } + + /// /// Allows the detection of collisions with inherently non-physical prims. see llVolumeDetect for more /// @@ -253,6 +384,22 @@ namespace OpenSim.Region.PhysicsModules.SharedBase public abstract Vector3 GeometricCenter { get; } public abstract Vector3 CenterOfMass { get; } + public virtual float PhysicsCost + { + get + { + return 0.1f; + } + } + + public virtual float StreamCost + { + get + { + return 1.0f; + } + } + /// /// The desired velocity of this actor. /// @@ -271,6 +418,7 @@ namespace OpenSim.Region.PhysicsModules.SharedBase } public abstract Vector3 Velocity { get; set; } + public virtual Vector3 rootVelocity { get { return Vector3.Zero; } } public abstract Vector3 Torque { get; set; } public abstract float CollisionScore { get; set;} @@ -296,7 +444,7 @@ namespace OpenSim.Region.PhysicsModules.SharedBase // Used for llSetHoverHeight and maybe vehicle height // Hover Height will override MoveTo target's Z - public abstract bool PIDHoverActive { set;} + public abstract bool PIDHoverActive {get; set;} public abstract float PIDHoverHeight { set;} public abstract PIDHoverType PIDHoverType { set;} public abstract float PIDHoverTau { set;} @@ -306,7 +454,7 @@ namespace OpenSim.Region.PhysicsModules.SharedBase public abstract bool APIDActive { set;} public abstract float APIDStrength { set;} public abstract float APIDDamping { set;} - + public abstract void AddForce(Vector3 force, bool pushforce); public abstract void AddAngularForce(Vector3 force, bool pushforce); public abstract void SetMomentum(Vector3 momentum); @@ -314,6 +462,29 @@ namespace OpenSim.Region.PhysicsModules.SharedBase public abstract void UnSubscribeEvents(); public abstract bool SubscribedEvents(); + public virtual void AddCollisionEvent(uint CollidedWith, ContactPoint contact) { } + public virtual void AddVDTCCollisionEvent(uint CollidedWith, ContactPoint contact) { } + + public virtual PhysicsInertiaData GetInertiaData() + { + PhysicsInertiaData data = new PhysicsInertiaData(); + data.TotalMass = this.Mass; + data.CenterOfMass = CenterOfMass - Position; + data.Inertia = Vector3.Zero; + data.InertiaRotation = Vector4.Zero; + return data; + } + + public virtual void SetInertiaData(PhysicsInertiaData inertia) + { + } + + public virtual float SimulationSuspended { get; set; } + + // Warning in a parent part it returns itself, not null + public virtual PhysicsActor ParentActor { get { return this; } } + + // Extendable interface for new, physics engine specific operations public virtual object Extension(string pFunct, params object[] pParams) { @@ -324,9 +495,11 @@ namespace OpenSim.Region.PhysicsModules.SharedBase public class NullPhysicsActor : PhysicsActor { + private ActorTypes m_actorType = ActorTypes.Unknown; + public override bool Stopped { - get{ return false; } + get{ return true; } } public override Vector3 Position @@ -343,6 +516,7 @@ namespace OpenSim.Region.PhysicsModules.SharedBase public override uint LocalID { + get { return 0; } set { return; } } @@ -402,50 +576,17 @@ namespace OpenSim.Region.PhysicsModules.SharedBase set { return; } } - public override void VehicleFloatParam(int param, float value) - { + public override void VehicleFloatParam(int param, float value) {} + public override void VehicleVectorParam(int param, Vector3 value) { } + public override void VehicleRotationParam(int param, Quaternion rotation) { } + public override void VehicleFlags(int param, bool remove) { } + public override void SetVolumeDetect(int param) {} + public override void SetMaterial(int material) {} + public override Vector3 CenterOfMass { get { return Vector3.Zero; }} - } - - public override void VehicleVectorParam(int param, Vector3 value) - { + public override Vector3 GeometricCenter { get { return Vector3.Zero; }} - } - - public override void VehicleRotationParam(int param, Quaternion rotation) - { - - } - - public override void VehicleFlags(int param, bool remove) - { - - } - - public override void SetVolumeDetect(int param) - { - - } - - public override void SetMaterial(int material) - { - - } - - public override Vector3 CenterOfMass - { - get { return Vector3.Zero; } - } - - public override Vector3 GeometricCenter - { - get { return Vector3.Zero; } - } - - public override PrimitiveBaseShape Shape - { - set { return; } - } + public override PrimitiveBaseShape Shape { set { return; }} public override Vector3 Velocity { @@ -465,9 +606,7 @@ namespace OpenSim.Region.PhysicsModules.SharedBase set { } } - public override void CrossingFailure() - { - } + public override void CrossingFailure() {} public override Quaternion Orientation { @@ -507,8 +646,20 @@ namespace OpenSim.Region.PhysicsModules.SharedBase public override int PhysicsActorType { - get { return (int) ActorTypes.Unknown; } - set { return; } + get { return (int)m_actorType; } + set { + ActorTypes type = (ActorTypes)value; + switch (type) + { + case ActorTypes.Ground: + case ActorTypes.Water: + m_actorType = type; + break; + default: + m_actorType = ActorTypes.Unknown; + break; + } + } } public override bool Kinematic @@ -517,26 +668,11 @@ namespace OpenSim.Region.PhysicsModules.SharedBase set { return; } } - public override void link(PhysicsActor obj) - { - } - - public override void delink() - { - } - - public override void LockAngularMotion(Vector3 axis) - { - } - - public override void AddForce(Vector3 force, bool pushforce) - { - } - - public override void AddAngularForce(Vector3 force, bool pushforce) - { - - } + public override void link(PhysicsActor obj) { } + public override void delink() { } + public override void LockAngularMotion(byte axislocks) { } + public override void AddForce(Vector3 force, bool pushforce) { } + public override void AddAngularForce(Vector3 force, bool pushforce) { } public override Vector3 RotationalVelocity { @@ -546,39 +682,28 @@ namespace OpenSim.Region.PhysicsModules.SharedBase public override Vector3 PIDTarget { set { return; } } - public override bool PIDActive + public override bool PIDActive { get { return false; } - set { return; } + set { return; } } public override float PIDTau { set { return; } } public override float PIDHoverHeight { set { return; } } - public override bool PIDHoverActive { set { return; } } + public override bool PIDHoverActive {get {return false;} set { return; } } public override PIDHoverType PIDHoverType { set { return; } } public override float PIDHoverTau { set { return; } } - + public override Quaternion APIDTarget { set { return; } } public override bool APIDActive { set { return; } } public override float APIDStrength { set { return; } } public override float APIDDamping { set { return; } } - - public override void SetMomentum(Vector3 momentum) - { - } - - public override void SubscribeEvents(int ms) - { - } - public override void UnSubscribeEvents() - { + public override void SetMomentum(Vector3 momentum) { } - } - public override bool SubscribedEvents() - { - return false; - } + public override void SubscribeEvents(int ms) { } + public override void UnSubscribeEvents() { } + public override bool SubscribedEvents() { return false; } } } diff --git a/OpenSim/Region/PhysicsModules/SharedBase/PhysicsScene.cs b/OpenSim/Region/PhysicsModules/SharedBase/PhysicsScene.cs index 32691fc..e8d6334 100644 --- a/OpenSim/Region/PhysicsModules/SharedBase/PhysicsScene.cs +++ b/OpenSim/Region/PhysicsModules/SharedBase/PhysicsScene.cs @@ -41,6 +41,10 @@ namespace OpenSim.Region.PhysicsModules.SharedBase public delegate void RaycastCallback(bool hitYN, Vector3 collisionPoint, uint localid, float distance, Vector3 normal); public delegate void RayCallback(List list); + public delegate void ProbeBoxCallback(List list); + public delegate void ProbeSphereCallback(List list); + public delegate void ProbePlaneCallback(List list); + public delegate void SitAvatarCallback(int status, uint partID, Vector3 offset, Quaternion Orientation); public delegate void JointMoved(PhysicsJoint joint); public delegate void JointDeactivated(PhysicsJoint joint); @@ -89,6 +93,8 @@ namespace OpenSim.Region.PhysicsModules.SharedBase public Vector3 Normal; } + + public abstract class PhysicsScene { // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); @@ -106,6 +112,8 @@ namespace OpenSim.Region.PhysicsModules.SharedBase /// public string EngineType { get; protected set; } + public string EngineName { get; protected set; } + // The only thing that should register for this event is the SceneGraph // Anything else could cause problems. public event physicsCrash OnPhysicsCrash; @@ -143,6 +151,7 @@ namespace OpenSim.Region.PhysicsModules.SharedBase /// /// /// + public abstract PhysicsActor AddAvatar( string avName, Vector3 position, Vector3 velocity, Vector3 size, bool isFlying); @@ -161,12 +170,26 @@ namespace OpenSim.Region.PhysicsModules.SharedBase { PhysicsActor ret = AddAvatar(avName, position, velocity, size, isFlying); - if (ret != null) + if (ret != null) ret.LocalID = localID; return ret; } + public virtual PhysicsActor AddAvatar( + uint localID, string avName, Vector3 position, Vector3 size, bool isFlying) + { + PhysicsActor ret = AddAvatar(localID, avName, position, Vector3.Zero, size, isFlying); + return ret; + } + + public virtual PhysicsActor AddAvatar( + uint localID, string avName, Vector3 position, Vector3 size, float feetOffset, bool isFlying) + { + PhysicsActor ret = AddAvatar(localID, avName, position, Vector3.Zero, size, isFlying); + return ret; + } + /// /// Remove an avatar. /// @@ -182,6 +205,19 @@ namespace OpenSim.Region.PhysicsModules.SharedBase public abstract PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position, Vector3 size, Quaternion rotation, bool isPhysical, uint localid); + public virtual PhysicsActor AddPrimShape(string primName, PhysicsActor parent, PrimitiveBaseShape pbs, Vector3 position, + uint localid, byte[] sdata) + { + return null; + } + + public virtual PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position, + Vector3 size, Quaternion rotation, bool isPhysical, bool isPhantom, uint 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) { @@ -255,6 +291,9 @@ namespace OpenSim.Region.PhysicsModules.SharedBase public abstract void AddPhysicsActorTaint(PhysicsActor prim); + + public virtual void ProcessPreSimulation() { } + /// /// Perform a simulation of the current physics scene over the given timestep. /// @@ -293,28 +332,19 @@ namespace OpenSim.Region.PhysicsModules.SharedBase return false; } - public virtual bool SupportsCombining() - { - return false; - } - - public virtual void Combine(PhysicsScene pScene, Vector3 offset, Vector3 extents) {} - - public virtual void UnCombine(PhysicsScene pScene) {} - /// /// Queue a raycast against the physics scene. /// The provided callback method will be called when the raycast is complete - /// - /// Many physics engines don't support collision testing at the same time as - /// manipulating the physics scene, so we queue the request up and callback + /// + /// Many physics engines don't support collision testing at the same time as + /// manipulating the physics scene, so we queue the request up and callback /// a custom method when the raycast is complete. /// This allows physics engines that give an immediate result to callback immediately /// and ones that don't, to callback when it gets a result back. - /// + /// /// ODE for example will not allow you to change the scene while collision testing or /// it asserts, 'opteration not valid for locked space'. This includes adding a ray to the scene. - /// + /// /// This is named RayCastWorld to not conflict with modrex's Raycast method. /// /// Origin of the ray @@ -348,6 +378,31 @@ namespace OpenSim.Region.PhysicsModules.SharedBase return false; } + public virtual List RaycastActor(PhysicsActor actor, Vector3 position, Vector3 direction, float length, int Count, RayFilterFlags flags) + { + return new List(); + } + + public virtual List BoxProbe(Vector3 position, Vector3 size, Quaternion orientation, int Count, RayFilterFlags flags) + { + return new List(); + } + + public virtual List SphereProbe(Vector3 position, float radius, int Count, RayFilterFlags flags) + { + return new List(); + } + + public virtual List PlaneProbe(PhysicsActor actor, Vector4 plane, int Count, RayFilterFlags flags) + { + return new List(); + } + + public virtual int SitAvatar(PhysicsActor actor, Vector3 AbsolutePosition, Vector3 CameraPosition, Vector3 offset, Vector3 AvatarSize, SitAvatarCallback PhysicsSitResponse) + { + return 0; + } + // Extendable interface for new, physics engine specific operations public virtual object Extension(string pFunct, params object[] pParams) { diff --git a/OpenSim/Region/PhysicsModules/SharedBase/PhysicsVector.cs b/OpenSim/Region/PhysicsModules/SharedBase/PhysicsVector.cs index 76a82fa..5aae42f 100644 --- a/OpenSim/Region/PhysicsModules/SharedBase/PhysicsVector.cs +++ b/OpenSim/Region/PhysicsModules/SharedBase/PhysicsVector.cs @@ -49,7 +49,7 @@ namespace OpenSim.Region.PhysicsModules.SharedBase public Vector3(Vector3 pv) : this(pv.X, pv.Y, pv.Z) { } - + public void setValues(float x, float y, float z) { X = x; diff --git a/OpenSim/Region/PhysicsModules/SharedBase/VehicleConstants.cs b/OpenSim/Region/PhysicsModules/SharedBase/VehicleConstants.cs index 63a8cb8..0b4c8c6 100644 --- a/OpenSim/Region/PhysicsModules/SharedBase/VehicleConstants.cs +++ b/OpenSim/Region/PhysicsModules/SharedBase/VehicleConstants.cs @@ -26,6 +26,7 @@ */ using System; +using OpenMetaverse; namespace OpenSim.Region.PhysicsModules.SharedBase { @@ -37,7 +38,7 @@ namespace OpenSim.Region.PhysicsModules.SharedBase TYPE_NONE = 0, /// - /// No Angular motor, High Left right friction, No Hover, Linear Deflection 1, no angular deflection + /// No Angular motor, High Left right friction, No Hover, Linear Deflection 1, no angular deflection /// no vertical attractor, No banking, Identity rotation frame /// TYPE_SLED = 1, @@ -117,5 +118,47 @@ namespace OpenSim.Region.PhysicsModules.SharedBase NO_DEFLECTION = 16392, LOCK_ROTATION = 32784 } - + + public struct VehicleData + { + public Vehicle m_type; + public VehicleFlag m_flags; + + // Linear properties + public Vector3 m_linearMotorDirection; + public Vector3 m_linearFrictionTimescale; + public float m_linearMotorDecayTimescale; + public float m_linearMotorTimescale; + public Vector3 m_linearMotorOffset; + + //Angular properties + public Vector3 m_angularMotorDirection; + public float m_angularMotorTimescale; + public float m_angularMotorDecayTimescale; + public Vector3 m_angularFrictionTimescale; + + //Deflection properties + public float m_angularDeflectionEfficiency; + public float m_angularDeflectionTimescale; + public float m_linearDeflectionEfficiency; + public float m_linearDeflectionTimescale; + + //Banking properties + public float m_bankingEfficiency; + public float m_bankingMix; + public float m_bankingTimescale; + + //Hover and Buoyancy properties + public float m_VhoverHeight; + public float m_VhoverEfficiency; + public float m_VhoverTimescale; + public float m_VehicleBuoyancy; + + //Attractor properties + public float m_verticalAttractionEfficiency; + public float m_verticalAttractionTimescale; + + // Axis + public Quaternion m_referenceFrame; + } } -- cgit v1.1