aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/ScenePresence.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/ScenePresence.cs')
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs50
1 files changed, 34 insertions, 16 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index cfb1be4..1c5d23d 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -507,7 +507,19 @@ namespace OpenSim.Region.Framework.Scenes
507 /// <summary> 507 /// <summary>
508 /// Physical scene representation of this Avatar. 508 /// Physical scene representation of this Avatar.
509 /// </summary> 509 /// </summary>
510 public PhysicsActor PhysicsActor { get; private set; } 510
511 PhysicsActor m_physActor;
512 public PhysicsActor PhysicsActor
513 {
514 get
515 {
516 return m_physActor;
517 }
518 private set
519 {
520 m_physActor = value;
521 }
522 }
511 523
512 /// <summary> 524 /// <summary>
513 /// Record user movement inputs. 525 /// Record user movement inputs.
@@ -523,7 +535,12 @@ namespace OpenSim.Region.Framework.Scenes
523 535
524 public bool Invulnerable 536 public bool Invulnerable
525 { 537 {
526 set { m_invulnerable = value; } 538 set
539 {
540 m_invulnerable = value;
541 if(value && Health != 100.0f)
542 Health = 100.0f;
543 }
527 get { return m_invulnerable; } 544 get { return m_invulnerable; }
528 } 545 }
529 546
@@ -1636,15 +1653,15 @@ namespace OpenSim.Region.Framework.Scenes
1636 /// </summary> 1653 /// </summary>
1637 public void RemoveFromPhysicalScene() 1654 public void RemoveFromPhysicalScene()
1638 { 1655 {
1639 if (PhysicsActor != null) 1656 PhysicsActor pa = Interlocked.Exchange(ref m_physActor, null);
1657 if (pa != null)
1640 { 1658 {
1641// PhysicsActor.OnRequestTerseUpdate -= SendTerseUpdateToAllClients; 1659// PhysicsActor.OnRequestTerseUpdate -= SendTerseUpdateToAllClients;
1642 1660
1643 PhysicsActor.OnOutOfBounds -= OutOfBoundsCall; 1661 pa.OnOutOfBounds -= OutOfBoundsCall;
1644 PhysicsActor.OnCollisionUpdate -= PhysicsCollisionUpdate; 1662 pa.OnCollisionUpdate -= PhysicsCollisionUpdate;
1645 PhysicsActor.UnSubscribeEvents(); 1663 pa.UnSubscribeEvents();
1646 m_scene.PhysicsScene.RemoveAvatar(PhysicsActor); 1664 m_scene.PhysicsScene.RemoveAvatar(pa);
1647 PhysicsActor = null;
1648 } 1665 }
1649// else 1666// else
1650// { 1667// {
@@ -2537,7 +2554,7 @@ namespace OpenSim.Region.Framework.Scenes
2537 m_pos.X = 127f; 2554 m_pos.X = 127f;
2538 m_pos.Y = 127f; 2555 m_pos.Y = 127f;
2539 m_pos.Z = 127f; 2556 m_pos.Z = 127f;
2540 m_log.Error("[AVATAR]: NonFinite Avatar position detected... Reset Position. Mantis this please. Error #9999903"); 2557 m_log.Error("[AVATAR]: NonFinite Avatar on lastFiniteposition also. Reset Position. Mantis this please. Error #9999903");
2541 } 2558 }
2542 2559
2543 if(isphysical) 2560 if(isphysical)
@@ -5007,16 +5024,17 @@ namespace OpenSim.Region.Framework.Scenes
5007 PhysicsScene scene = m_scene.PhysicsScene; 5024 PhysicsScene scene = m_scene.PhysicsScene;
5008 Vector3 pVec = AbsolutePosition; 5025 Vector3 pVec = AbsolutePosition;
5009 5026
5010 PhysicsActor = scene.AddAvatar( 5027 PhysicsActor pa = scene.AddAvatar(
5011 LocalId, Firstname + "." + Lastname, pVec, 5028 LocalId, Firstname + "." + Lastname, pVec,
5012 Appearance.AvatarBoxSize,Appearance.AvatarFeetOffset, isFlying); 5029 Appearance.AvatarBoxSize,Appearance.AvatarFeetOffset, isFlying);
5013 PhysicsActor.Orientation = m_bodyRot; 5030 pa.Orientation = m_bodyRot;
5014 //PhysicsActor.OnRequestTerseUpdate += SendTerseUpdateToAllClients; 5031 //PhysicsActor.OnRequestTerseUpdate += SendTerseUpdateToAllClients;
5015 PhysicsActor.OnCollisionUpdate += PhysicsCollisionUpdate; 5032 pa.OnCollisionUpdate += PhysicsCollisionUpdate;
5016 PhysicsActor.OnOutOfBounds += OutOfBoundsCall; // Called for PhysicsActors when there's something wrong 5033 pa.OnOutOfBounds += OutOfBoundsCall; // Called for PhysicsActors when there's something wrong
5017 PhysicsActor.SubscribeEvents(100); 5034 pa.SubscribeEvents(100);
5018 PhysicsActor.LocalID = LocalId; 5035 pa.LocalID = LocalId;
5019 PhysicsActor.SetAlwaysRun = m_setAlwaysRun; 5036 pa.SetAlwaysRun = m_setAlwaysRun;
5037 PhysicsActor = pa;
5020 } 5038 }
5021 5039
5022 private void OutOfBoundsCall(Vector3 pos) 5040 private void OutOfBoundsCall(Vector3 pos)