aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics/Manager/PhysicsActor.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Physics/Manager/PhysicsActor.cs')
-rw-r--r--OpenSim/Region/Physics/Manager/PhysicsActor.cs227
1 files changed, 141 insertions, 86 deletions
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}