diff options
Diffstat (limited to 'OpenSim/Region/Physics/Manager')
-rw-r--r-- | OpenSim/Region/Physics/Manager/IMesher.cs | 28 | ||||
-rw-r--r-- | OpenSim/Region/Physics/Manager/PhysicsActor.cs | 227 | ||||
-rw-r--r-- | OpenSim/Region/Physics/Manager/PhysicsScene.cs | 61 | ||||
-rw-r--r-- | OpenSim/Region/Physics/Manager/VehicleConstants.cs | 45 | ||||
-rw-r--r-- | OpenSim/Region/Physics/Manager/ZeroMesher.cs | 14 |
5 files changed, 284 insertions, 91 deletions
diff --git a/OpenSim/Region/Physics/Manager/IMesher.cs b/OpenSim/Region/Physics/Manager/IMesher.cs index 2e7bb5d..5485eb7 100644 --- a/OpenSim/Region/Physics/Manager/IMesher.cs +++ b/OpenSim/Region/Physics/Manager/IMesher.cs | |||
@@ -27,6 +27,7 @@ | |||
27 | 27 | ||
28 | using System; | 28 | using System; |
29 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
30 | using System.Runtime.InteropServices; | ||
30 | using OpenSim.Framework; | 31 | using OpenSim.Framework; |
31 | using OpenMetaverse; | 32 | using OpenMetaverse; |
32 | 33 | ||
@@ -36,7 +37,11 @@ namespace OpenSim.Region.Physics.Manager | |||
36 | { | 37 | { |
37 | IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod); | 38 | IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod); |
38 | IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical); | 39 | IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical); |
39 | IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical, bool shouldCache); | 40 | IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical, bool shouldCache, bool convex, bool forOde); |
41 | IMesh GetMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical, bool convex); | ||
42 | void ReleaseMesh(IMesh mesh); | ||
43 | void ExpireReleaseMeshs(); | ||
44 | void ExpireFileCache(); | ||
40 | } | 45 | } |
41 | 46 | ||
42 | // Values for level of detail to be passed to the mesher. | 47 | // Values for level of detail to be passed to the mesher. |
@@ -54,6 +59,25 @@ namespace OpenSim.Region.Physics.Manager | |||
54 | { | 59 | { |
55 | } | 60 | } |
56 | 61 | ||
62 | [Serializable()] | ||
63 | [StructLayout(LayoutKind.Explicit)] | ||
64 | public struct AMeshKey | ||
65 | { | ||
66 | [FieldOffset(0)] | ||
67 | public UUID uuid; | ||
68 | [FieldOffset(0)] | ||
69 | public ulong hashA; | ||
70 | [FieldOffset(8)] | ||
71 | public ulong hashB; | ||
72 | [FieldOffset(16)] | ||
73 | public ulong hashC; | ||
74 | |||
75 | public override string ToString() | ||
76 | { | ||
77 | return uuid.ToString() + "-" + hashC.ToString("x") ; | ||
78 | } | ||
79 | } | ||
80 | |||
57 | public interface IMesh | 81 | public interface IMesh |
58 | { | 82 | { |
59 | List<Vector3> getVertexList(); | 83 | List<Vector3> getVertexList(); |
@@ -67,5 +91,7 @@ namespace OpenSim.Region.Physics.Manager | |||
67 | void releasePinned(); | 91 | void releasePinned(); |
68 | void Append(IMesh newMesh); | 92 | void Append(IMesh newMesh); |
69 | void TransformLinear(float[,] matrix, float[] offset); | 93 | void TransformLinear(float[,] matrix, float[] offset); |
94 | Vector3 GetCentroid(); | ||
95 | Vector3 GetOBB(); | ||
70 | } | 96 | } |
71 | } | 97 | } |
diff --git a/OpenSim/Region/Physics/Manager/PhysicsActor.cs b/OpenSim/Region/Physics/Manager/PhysicsActor.cs index 2500f27..739e984 100644 --- a/OpenSim/Region/Physics/Manager/PhysicsActor.cs +++ b/OpenSim/Region/Physics/Manager/PhysicsActor.cs | |||
@@ -43,7 +43,8 @@ namespace OpenSim.Region.Physics.Manager | |||
43 | Unknown = 0, | 43 | Unknown = 0, |
44 | Agent = 1, | 44 | Agent = 1, |
45 | Prim = 2, | 45 | Prim = 2, |
46 | Ground = 3 | 46 | Ground = 3, |
47 | Water = 4 | ||
47 | } | 48 | } |
48 | 49 | ||
49 | public enum PIDHoverType | 50 | public enum PIDHoverType |
@@ -59,15 +60,41 @@ namespace OpenSim.Region.Physics.Manager | |||
59 | public Vector3 Position; | 60 | public Vector3 Position; |
60 | public Vector3 SurfaceNormal; | 61 | public Vector3 SurfaceNormal; |
61 | public float PenetrationDepth; | 62 | public float PenetrationDepth; |
63 | public float RelativeSpeed; | ||
64 | public bool CharacterFeet; | ||
62 | 65 | ||
63 | public ContactPoint(Vector3 position, Vector3 surfaceNormal, float penetrationDepth) | 66 | public ContactPoint(Vector3 position, Vector3 surfaceNormal, float penetrationDepth) |
64 | { | 67 | { |
65 | Position = position; | 68 | Position = position; |
66 | SurfaceNormal = surfaceNormal; | 69 | SurfaceNormal = surfaceNormal; |
67 | PenetrationDepth = penetrationDepth; | 70 | PenetrationDepth = penetrationDepth; |
71 | RelativeSpeed = 0f; // for now let this one be set explicity | ||
72 | CharacterFeet = true; // keep other plugins work as before | ||
73 | } | ||
74 | |||
75 | public ContactPoint(Vector3 position, Vector3 surfaceNormal, float penetrationDepth, bool feet) | ||
76 | { | ||
77 | Position = position; | ||
78 | SurfaceNormal = surfaceNormal; | ||
79 | PenetrationDepth = penetrationDepth; | ||
80 | RelativeSpeed = 0f; // for now let this one be set explicity | ||
81 | CharacterFeet = feet; // keep other plugins work as before | ||
68 | } | 82 | } |
69 | } | 83 | } |
70 | 84 | ||
85 | public struct ContactData | ||
86 | { | ||
87 | public float mu; | ||
88 | public float bounce; | ||
89 | public bool softcolide; | ||
90 | |||
91 | public ContactData(float _mu, float _bounce, bool _softcolide) | ||
92 | { | ||
93 | mu = _mu; | ||
94 | bounce = _bounce; | ||
95 | softcolide = _softcolide; | ||
96 | } | ||
97 | } | ||
71 | /// <summary> | 98 | /// <summary> |
72 | /// Used to pass collision information to OnCollisionUpdate listeners. | 99 | /// Used to pass collision information to OnCollisionUpdate listeners. |
73 | /// </summary> | 100 | /// </summary> |
@@ -99,7 +126,7 @@ namespace OpenSim.Region.Physics.Manager | |||
99 | m_objCollisionList.Add(localID, contact); | 126 | m_objCollisionList.Add(localID, contact); |
100 | } | 127 | } |
101 | else | 128 | else |
102 | { | 129 | { |
103 | if (m_objCollisionList[localID].PenetrationDepth < contact.PenetrationDepth) | 130 | if (m_objCollisionList[localID].PenetrationDepth < contact.PenetrationDepth) |
104 | m_objCollisionList[localID] = contact; | 131 | m_objCollisionList[localID] = contact; |
105 | } | 132 | } |
@@ -135,6 +162,8 @@ namespace OpenSim.Region.Physics.Manager | |||
135 | /// </summary> | 162 | /// </summary> |
136 | public event CollisionUpdate OnCollisionUpdate; | 163 | public event CollisionUpdate OnCollisionUpdate; |
137 | 164 | ||
165 | public virtual void SetVehicle(object vdata) { } | ||
166 | |||
138 | public event OutOfBounds OnOutOfBounds; | 167 | public event OutOfBounds OnOutOfBounds; |
139 | #pragma warning restore 67 | 168 | #pragma warning restore 67 |
140 | 169 | ||
@@ -142,11 +171,32 @@ namespace OpenSim.Region.Physics.Manager | |||
142 | { | 171 | { |
143 | get { return new NullPhysicsActor(); } | 172 | get { return new NullPhysicsActor(); } |
144 | } | 173 | } |
174 | |||
175 | public virtual bool Building { get; set; } | ||
176 | |||
177 | public virtual void getContactData(ref ContactData cdata) | ||
178 | { | ||
179 | cdata.mu = 0; | ||
180 | cdata.bounce = 0; | ||
181 | } | ||
145 | 182 | ||
146 | public abstract bool Stopped { get; } | 183 | public abstract bool Stopped { get; } |
147 | 184 | ||
148 | public abstract Vector3 Size { get; set; } | 185 | public abstract Vector3 Size { get; set; } |
149 | 186 | ||
187 | public virtual void setAvatarSize(Vector3 size, float feetOffset) | ||
188 | { | ||
189 | Size = size; | ||
190 | } | ||
191 | |||
192 | public virtual bool Phantom { get; set; } | ||
193 | |||
194 | public virtual bool IsVolumeDtc | ||
195 | { | ||
196 | get { return false; } | ||
197 | set { return; } | ||
198 | } | ||
199 | |||
150 | public virtual byte PhysicsShapeType { get; set; } | 200 | public virtual byte PhysicsShapeType { get; set; } |
151 | 201 | ||
152 | public abstract PrimitiveBaseShape Shape { set; } | 202 | public abstract PrimitiveBaseShape Shape { set; } |
@@ -169,7 +219,7 @@ namespace OpenSim.Region.Physics.Manager | |||
169 | /// XXX: Bizarrely, this cannot be "Terrain" or "Water" right now unless it really is simulating terrain or | 219 | /// XXX: Bizarrely, this cannot be "Terrain" or "Water" right now unless it really is simulating terrain or |
170 | /// water. This is not a problem due to the formatting of names given by prims and avatars. | 220 | /// water. This is not a problem due to the formatting of names given by prims and avatars. |
171 | /// </remarks> | 221 | /// </remarks> |
172 | public string Name { get; protected set; } | 222 | public string Name { get; set; } |
173 | 223 | ||
174 | /// <summary> | 224 | /// <summary> |
175 | /// This is being used by ODE joint code. | 225 | /// This is being used by ODE joint code. |
@@ -253,6 +303,51 @@ namespace OpenSim.Region.Physics.Manager | |||
253 | public abstract Vector3 GeometricCenter { get; } | 303 | public abstract Vector3 GeometricCenter { get; } |
254 | public abstract Vector3 CenterOfMass { get; } | 304 | public abstract Vector3 CenterOfMass { get; } |
255 | 305 | ||
306 | public virtual Vector3 OOBsize | ||
307 | { | ||
308 | get | ||
309 | { | ||
310 | Vector3 s=Size; | ||
311 | s.X *=0.5f; | ||
312 | s.Y *=0.5f; | ||
313 | s.Z *=0.5f; | ||
314 | return s; | ||
315 | } | ||
316 | } | ||
317 | |||
318 | public virtual Vector3 OOBoffset | ||
319 | { | ||
320 | get | ||
321 | { | ||
322 | return Vector3.Zero; | ||
323 | } | ||
324 | } | ||
325 | |||
326 | public virtual float OOBRadiusSQ | ||
327 | { | ||
328 | get | ||
329 | { | ||
330 | return Size.LengthSquared() * 0.25f; // ((0.5^2) | ||
331 | } | ||
332 | } | ||
333 | |||
334 | |||
335 | public virtual float PhysicsCost | ||
336 | { | ||
337 | get | ||
338 | { | ||
339 | return 0.1f; | ||
340 | } | ||
341 | } | ||
342 | |||
343 | public virtual float StreamCost | ||
344 | { | ||
345 | get | ||
346 | { | ||
347 | return 1.0f; | ||
348 | } | ||
349 | } | ||
350 | |||
256 | /// <summary> | 351 | /// <summary> |
257 | /// The desired velocity of this actor. | 352 | /// The desired velocity of this actor. |
258 | /// </summary> | 353 | /// </summary> |
@@ -314,6 +409,12 @@ namespace OpenSim.Region.Physics.Manager | |||
314 | public abstract void UnSubscribeEvents(); | 409 | public abstract void UnSubscribeEvents(); |
315 | public abstract bool SubscribedEvents(); | 410 | public abstract bool SubscribedEvents(); |
316 | 411 | ||
412 | public virtual void AddCollisionEvent(uint CollidedWith, ContactPoint contact) { } | ||
413 | |||
414 | // Warning in a parent part it returns itself, not null | ||
415 | public virtual PhysicsActor ParentActor { get { return this; } } | ||
416 | |||
417 | |||
317 | // Extendable interface for new, physics engine specific operations | 418 | // Extendable interface for new, physics engine specific operations |
318 | public virtual object Extension(string pFunct, params object[] pParams) | 419 | public virtual object Extension(string pFunct, params object[] pParams) |
319 | { | 420 | { |
@@ -323,9 +424,11 @@ namespace OpenSim.Region.Physics.Manager | |||
323 | 424 | ||
324 | public class NullPhysicsActor : PhysicsActor | 425 | public class NullPhysicsActor : PhysicsActor |
325 | { | 426 | { |
427 | private ActorTypes m_actorType = ActorTypes.Unknown; | ||
428 | |||
326 | public override bool Stopped | 429 | public override bool Stopped |
327 | { | 430 | { |
328 | get{ return false; } | 431 | get{ return true; } |
329 | } | 432 | } |
330 | 433 | ||
331 | public override Vector3 Position | 434 | public override Vector3 Position |
@@ -342,6 +445,7 @@ namespace OpenSim.Region.Physics.Manager | |||
342 | 445 | ||
343 | public override uint LocalID | 446 | public override uint LocalID |
344 | { | 447 | { |
448 | get { return 0; } | ||
345 | set { return; } | 449 | set { return; } |
346 | } | 450 | } |
347 | 451 | ||
@@ -401,50 +505,17 @@ namespace OpenSim.Region.Physics.Manager | |||
401 | set { return; } | 505 | set { return; } |
402 | } | 506 | } |
403 | 507 | ||
404 | public override void VehicleFloatParam(int param, float value) | 508 | public override void VehicleFloatParam(int param, float value) {} |
405 | { | 509 | public override void VehicleVectorParam(int param, Vector3 value) { } |
510 | public override void VehicleRotationParam(int param, Quaternion rotation) { } | ||
511 | public override void VehicleFlags(int param, bool remove) { } | ||
512 | public override void SetVolumeDetect(int param) {} | ||
513 | public override void SetMaterial(int material) {} | ||
514 | public override Vector3 CenterOfMass { get { return Vector3.Zero; }} | ||
406 | 515 | ||
407 | } | 516 | public override Vector3 GeometricCenter { get { return Vector3.Zero; }} |
408 | 517 | ||
409 | public override void VehicleVectorParam(int param, Vector3 value) | 518 | public override PrimitiveBaseShape Shape { set { return; }} |
410 | { | ||
411 | |||
412 | } | ||
413 | |||
414 | public override void VehicleRotationParam(int param, Quaternion rotation) | ||
415 | { | ||
416 | |||
417 | } | ||
418 | |||
419 | public override void VehicleFlags(int param, bool remove) | ||
420 | { | ||
421 | |||
422 | } | ||
423 | |||
424 | public override void SetVolumeDetect(int param) | ||
425 | { | ||
426 | |||
427 | } | ||
428 | |||
429 | public override void SetMaterial(int material) | ||
430 | { | ||
431 | |||
432 | } | ||
433 | |||
434 | public override Vector3 CenterOfMass | ||
435 | { | ||
436 | get { return Vector3.Zero; } | ||
437 | } | ||
438 | |||
439 | public override Vector3 GeometricCenter | ||
440 | { | ||
441 | get { return Vector3.Zero; } | ||
442 | } | ||
443 | |||
444 | public override PrimitiveBaseShape Shape | ||
445 | { | ||
446 | set { return; } | ||
447 | } | ||
448 | 519 | ||
449 | public override Vector3 Velocity | 520 | public override Vector3 Velocity |
450 | { | 521 | { |
@@ -464,9 +535,7 @@ namespace OpenSim.Region.Physics.Manager | |||
464 | set { } | 535 | set { } |
465 | } | 536 | } |
466 | 537 | ||
467 | public override void CrossingFailure() | 538 | public override void CrossingFailure() {} |
468 | { | ||
469 | } | ||
470 | 539 | ||
471 | public override Quaternion Orientation | 540 | public override Quaternion Orientation |
472 | { | 541 | { |
@@ -506,8 +575,20 @@ namespace OpenSim.Region.Physics.Manager | |||
506 | 575 | ||
507 | public override int PhysicsActorType | 576 | public override int PhysicsActorType |
508 | { | 577 | { |
509 | get { return (int) ActorTypes.Unknown; } | 578 | get { return (int)m_actorType; } |
510 | set { return; } | 579 | set { |
580 | ActorTypes type = (ActorTypes)value; | ||
581 | switch (type) | ||
582 | { | ||
583 | case ActorTypes.Ground: | ||
584 | case ActorTypes.Water: | ||
585 | m_actorType = type; | ||
586 | break; | ||
587 | default: | ||
588 | m_actorType = ActorTypes.Unknown; | ||
589 | break; | ||
590 | } | ||
591 | } | ||
511 | } | 592 | } |
512 | 593 | ||
513 | public override bool Kinematic | 594 | public override bool Kinematic |
@@ -516,26 +597,11 @@ namespace OpenSim.Region.Physics.Manager | |||
516 | set { return; } | 597 | set { return; } |
517 | } | 598 | } |
518 | 599 | ||
519 | public override void link(PhysicsActor obj) | 600 | public override void link(PhysicsActor obj) { } |
520 | { | 601 | public override void delink() { } |
521 | } | 602 | public override void LockAngularMotion(Vector3 axis) { } |
522 | 603 | public override void AddForce(Vector3 force, bool pushforce) { } | |
523 | public override void delink() | 604 | public override void AddAngularForce(Vector3 force, bool pushforce) { } |
524 | { | ||
525 | } | ||
526 | |||
527 | public override void LockAngularMotion(Vector3 axis) | ||
528 | { | ||
529 | } | ||
530 | |||
531 | public override void AddForce(Vector3 force, bool pushforce) | ||
532 | { | ||
533 | } | ||
534 | |||
535 | public override void AddAngularForce(Vector3 force, bool pushforce) | ||
536 | { | ||
537 | |||
538 | } | ||
539 | 605 | ||
540 | public override Vector3 RotationalVelocity | 606 | public override Vector3 RotationalVelocity |
541 | { | 607 | { |
@@ -557,21 +623,10 @@ namespace OpenSim.Region.Physics.Manager | |||
557 | public override float APIDStrength { set { return; } } | 623 | public override float APIDStrength { set { return; } } |
558 | public override float APIDDamping { set { return; } } | 624 | public override float APIDDamping { set { return; } } |
559 | 625 | ||
560 | public override void SetMomentum(Vector3 momentum) | 626 | public override void SetMomentum(Vector3 momentum) { } |
561 | { | ||
562 | } | ||
563 | |||
564 | public override void SubscribeEvents(int ms) | ||
565 | { | ||
566 | |||
567 | } | ||
568 | public override void UnSubscribeEvents() | ||
569 | { | ||
570 | 627 | ||
571 | } | 628 | public override void SubscribeEvents(int ms) { } |
572 | public override bool SubscribedEvents() | 629 | public override void UnSubscribeEvents() { } |
573 | { | 630 | public override bool SubscribedEvents() { return false; } |
574 | return false; | ||
575 | } | ||
576 | } | 631 | } |
577 | } | 632 | } |
diff --git a/OpenSim/Region/Physics/Manager/PhysicsScene.cs b/OpenSim/Region/Physics/Manager/PhysicsScene.cs index 07a1d36..52f2809 100644 --- a/OpenSim/Region/Physics/Manager/PhysicsScene.cs +++ b/OpenSim/Region/Physics/Manager/PhysicsScene.cs | |||
@@ -41,6 +41,10 @@ namespace OpenSim.Region.Physics.Manager | |||
41 | 41 | ||
42 | public delegate void RaycastCallback(bool hitYN, Vector3 collisionPoint, uint localid, float distance, Vector3 normal); | 42 | public delegate void RaycastCallback(bool hitYN, Vector3 collisionPoint, uint localid, float distance, Vector3 normal); |
43 | public delegate void RayCallback(List<ContactResult> list); | 43 | public delegate void RayCallback(List<ContactResult> list); |
44 | public delegate void ProbeBoxCallback(List<ContactResult> list); | ||
45 | public delegate void ProbeSphereCallback(List<ContactResult> list); | ||
46 | public delegate void ProbePlaneCallback(List<ContactResult> list); | ||
47 | public delegate void SitAvatarCallback(int status, uint partID, Vector3 offset, Quaternion Orientation); | ||
44 | 48 | ||
45 | public delegate void JointMoved(PhysicsJoint joint); | 49 | public delegate void JointMoved(PhysicsJoint joint); |
46 | public delegate void JointDeactivated(PhysicsJoint joint); | 50 | public delegate void JointDeactivated(PhysicsJoint joint); |
@@ -89,6 +93,8 @@ namespace OpenSim.Region.Physics.Manager | |||
89 | public Vector3 Normal; | 93 | public Vector3 Normal; |
90 | } | 94 | } |
91 | 95 | ||
96 | |||
97 | |||
92 | public abstract class PhysicsScene | 98 | public abstract class PhysicsScene |
93 | { | 99 | { |
94 | // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 100 | // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
@@ -136,8 +142,10 @@ namespace OpenSim.Region.Physics.Manager | |||
136 | /// <param name="size"></param> | 142 | /// <param name="size"></param> |
137 | /// <param name="isFlying"></param> | 143 | /// <param name="isFlying"></param> |
138 | /// <returns></returns> | 144 | /// <returns></returns> |
139 | public abstract PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 size, bool isFlying); | 145 | public virtual PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 size, bool isFlying) |
140 | 146 | { | |
147 | return null; | ||
148 | } | ||
141 | /// <summary> | 149 | /// <summary> |
142 | /// Add an avatar | 150 | /// Add an avatar |
143 | /// </summary> | 151 | /// </summary> |
@@ -154,6 +162,12 @@ namespace OpenSim.Region.Physics.Manager | |||
154 | return ret; | 162 | return ret; |
155 | } | 163 | } |
156 | 164 | ||
165 | public virtual PhysicsActor AddAvatar(uint localID, string avName, Vector3 position, Vector3 size, float feetOffset, bool isFlying) | ||
166 | { | ||
167 | PhysicsActor ret = AddAvatar(localID, avName, position, size, isFlying); | ||
168 | return ret; | ||
169 | } | ||
170 | |||
157 | /// <summary> | 171 | /// <summary> |
158 | /// Remove an avatar. | 172 | /// Remove an avatar. |
159 | /// </summary> | 173 | /// </summary> |
@@ -169,6 +183,19 @@ namespace OpenSim.Region.Physics.Manager | |||
169 | public abstract PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position, | 183 | public abstract PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position, |
170 | Vector3 size, Quaternion rotation, bool isPhysical, uint localid); | 184 | Vector3 size, Quaternion rotation, bool isPhysical, uint localid); |
171 | 185 | ||
186 | public virtual PhysicsActor AddPrimShape(string primName, PhysicsActor parent, PrimitiveBaseShape pbs, Vector3 position, | ||
187 | uint localid, byte[] sdata) | ||
188 | { | ||
189 | return null; | ||
190 | } | ||
191 | |||
192 | public virtual PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position, | ||
193 | Vector3 size, Quaternion rotation, bool isPhysical, bool isPhantom, uint localid) | ||
194 | { | ||
195 | return AddPrimShape(primName, pbs, position, size, rotation, isPhysical, localid); | ||
196 | } | ||
197 | |||
198 | |||
172 | public virtual PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position, | 199 | public virtual PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position, |
173 | Vector3 size, Quaternion rotation, bool isPhysical, bool isPhantom, byte shapetype, uint localid) | 200 | Vector3 size, Quaternion rotation, bool isPhysical, bool isPhantom, byte shapetype, uint localid) |
174 | { | 201 | { |
@@ -242,6 +269,9 @@ namespace OpenSim.Region.Physics.Manager | |||
242 | 269 | ||
243 | public abstract void AddPhysicsActorTaint(PhysicsActor prim); | 270 | public abstract void AddPhysicsActorTaint(PhysicsActor prim); |
244 | 271 | ||
272 | |||
273 | public virtual void PrepareSimulation() { } | ||
274 | |||
245 | /// <summary> | 275 | /// <summary> |
246 | /// Perform a simulation of the current physics scene over the given timestep. | 276 | /// Perform a simulation of the current physics scene over the given timestep. |
247 | /// </summary> | 277 | /// </summary> |
@@ -286,7 +316,7 @@ namespace OpenSim.Region.Physics.Manager | |||
286 | } | 316 | } |
287 | 317 | ||
288 | public virtual void Combine(PhysicsScene pScene, Vector3 offset, Vector3 extents) {} | 318 | public virtual void Combine(PhysicsScene pScene, Vector3 offset, Vector3 extents) {} |
289 | 319 | public virtual void CombineTerrain(float[] heightMap, Vector3 pOffset) {} | |
290 | public virtual void UnCombine(PhysicsScene pScene) {} | 320 | public virtual void UnCombine(PhysicsScene pScene) {} |
291 | 321 | ||
292 | /// <summary> | 322 | /// <summary> |
@@ -335,6 +365,31 @@ namespace OpenSim.Region.Physics.Manager | |||
335 | return false; | 365 | return false; |
336 | } | 366 | } |
337 | 367 | ||
368 | public virtual List<ContactResult> RaycastActor(PhysicsActor actor, Vector3 position, Vector3 direction, float length, int Count, RayFilterFlags flags) | ||
369 | { | ||
370 | return new List<ContactResult>(); | ||
371 | } | ||
372 | |||
373 | public virtual List<ContactResult> BoxProbe(Vector3 position, Vector3 size, Quaternion orientation, int Count, RayFilterFlags flags) | ||
374 | { | ||
375 | return new List<ContactResult>(); | ||
376 | } | ||
377 | |||
378 | public virtual List<ContactResult> SphereProbe(Vector3 position, float radius, int Count, RayFilterFlags flags) | ||
379 | { | ||
380 | return new List<ContactResult>(); | ||
381 | } | ||
382 | |||
383 | public virtual List<ContactResult> PlaneProbe(PhysicsActor actor, Vector4 plane, int Count, RayFilterFlags flags) | ||
384 | { | ||
385 | return new List<ContactResult>(); | ||
386 | } | ||
387 | |||
388 | public virtual int SitAvatar(PhysicsActor actor, Vector3 AbsolutePosition, Vector3 CameraPosition, Vector3 offset, Vector3 AvatarSize, SitAvatarCallback PhysicsSitResponse) | ||
389 | { | ||
390 | return 0; | ||
391 | } | ||
392 | |||
338 | // Extendable interface for new, physics engine specific operations | 393 | // Extendable interface for new, physics engine specific operations |
339 | public virtual object Extension(string pFunct, params object[] pParams) | 394 | public virtual object Extension(string pFunct, params object[] pParams) |
340 | { | 395 | { |
diff --git a/OpenSim/Region/Physics/Manager/VehicleConstants.cs b/OpenSim/Region/Physics/Manager/VehicleConstants.cs index f0775c1..8e24b4c 100644 --- a/OpenSim/Region/Physics/Manager/VehicleConstants.cs +++ b/OpenSim/Region/Physics/Manager/VehicleConstants.cs | |||
@@ -26,6 +26,7 @@ | |||
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System; | 28 | using System; |
29 | using OpenMetaverse; | ||
29 | 30 | ||
30 | namespace OpenSim.Region.Physics.Manager | 31 | namespace OpenSim.Region.Physics.Manager |
31 | { | 32 | { |
@@ -117,5 +118,47 @@ namespace OpenSim.Region.Physics.Manager | |||
117 | NO_DEFLECTION = 16392, | 118 | NO_DEFLECTION = 16392, |
118 | LOCK_ROTATION = 32784 | 119 | LOCK_ROTATION = 32784 |
119 | } | 120 | } |
120 | 121 | ||
122 | public struct VehicleData | ||
123 | { | ||
124 | public Vehicle m_type; | ||
125 | public VehicleFlag m_flags; | ||
126 | |||
127 | // Linear properties | ||
128 | public Vector3 m_linearMotorDirection; | ||
129 | public Vector3 m_linearFrictionTimescale; | ||
130 | public float m_linearMotorDecayTimescale; | ||
131 | public float m_linearMotorTimescale; | ||
132 | public Vector3 m_linearMotorOffset; | ||
133 | |||
134 | //Angular properties | ||
135 | public Vector3 m_angularMotorDirection; | ||
136 | public float m_angularMotorTimescale; | ||
137 | public float m_angularMotorDecayTimescale; | ||
138 | public Vector3 m_angularFrictionTimescale; | ||
139 | |||
140 | //Deflection properties | ||
141 | public float m_angularDeflectionEfficiency; | ||
142 | public float m_angularDeflectionTimescale; | ||
143 | public float m_linearDeflectionEfficiency; | ||
144 | public float m_linearDeflectionTimescale; | ||
145 | |||
146 | //Banking properties | ||
147 | public float m_bankingEfficiency; | ||
148 | public float m_bankingMix; | ||
149 | public float m_bankingTimescale; | ||
150 | |||
151 | //Hover and Buoyancy properties | ||
152 | public float m_VhoverHeight; | ||
153 | public float m_VhoverEfficiency; | ||
154 | public float m_VhoverTimescale; | ||
155 | public float m_VehicleBuoyancy; | ||
156 | |||
157 | //Attractor properties | ||
158 | public float m_verticalAttractionEfficiency; | ||
159 | public float m_verticalAttractionTimescale; | ||
160 | |||
161 | // Axis | ||
162 | public Quaternion m_referenceFrame; | ||
163 | } | ||
121 | } | 164 | } |
diff --git a/OpenSim/Region/Physics/Manager/ZeroMesher.cs b/OpenSim/Region/Physics/Manager/ZeroMesher.cs index 270d2ec..80ecf66 100644 --- a/OpenSim/Region/Physics/Manager/ZeroMesher.cs +++ b/OpenSim/Region/Physics/Manager/ZeroMesher.cs | |||
@@ -67,6 +67,11 @@ namespace OpenSim.Region.Physics.Manager | |||
67 | return CreateMesh(primName, primShape, size, lod, false, false); | 67 | return CreateMesh(primName, primShape, size, lod, false, false); |
68 | } | 68 | } |
69 | 69 | ||
70 | public IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical, bool shouldCache, bool convex,bool forOde) | ||
71 | { | ||
72 | return CreateMesh(primName, primShape, size, lod, false); | ||
73 | } | ||
74 | |||
70 | public IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical) | 75 | public IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical) |
71 | { | 76 | { |
72 | return CreateMesh(primName, primShape, size, lod, false, false); | 77 | return CreateMesh(primName, primShape, size, lod, false, false); |
@@ -79,5 +84,14 @@ namespace OpenSim.Region.Physics.Manager | |||
79 | 84 | ||
80 | return null; | 85 | return null; |
81 | } | 86 | } |
87 | |||
88 | public IMesh GetMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical, bool convex) | ||
89 | { | ||
90 | return null; | ||
91 | } | ||
92 | |||
93 | public void ReleaseMesh(IMesh mesh) { } | ||
94 | public void ExpireReleaseMeshs() { } | ||
95 | public void ExpireFileCache() { } | ||
82 | } | 96 | } |
83 | } | 97 | } |