aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment/Scenes/ScenePresence.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Environment/Scenes/ScenePresence.cs')
-rw-r--r--OpenSim/Region/Environment/Scenes/ScenePresence.cs56
1 files changed, 55 insertions, 1 deletions
diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs
index 6a50336..453c18f 100644
--- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs
@@ -67,6 +67,9 @@ namespace OpenSim.Region.Environment.Scenes
67 private LLVector3 m_requestedSitOffset = new LLVector3(); 67 private LLVector3 m_requestedSitOffset = new LLVector3();
68 private float m_sitAvatarHeight = 2.0f; 68 private float m_sitAvatarHeight = 2.0f;
69 private float m_godlevel = 0; 69 private float m_godlevel = 0;
70
71 private bool m_invulnerable = true;
72
70 private LLVector3 m_LastChildAgentUpdatePosition = new LLVector3(); 73 private LLVector3 m_LastChildAgentUpdatePosition = new LLVector3();
71 74
72 private int m_perfMonMS = 0; 75 private int m_perfMonMS = 0;
@@ -83,6 +86,7 @@ namespace OpenSim.Region.Environment.Scenes
83 private bool m_newForce = false; 86 private bool m_newForce = false;
84 private bool m_newCoarseLocations = true; 87 private bool m_newCoarseLocations = true;
85 private bool m_gotAllObjectsInScene = false; 88 private bool m_gotAllObjectsInScene = false;
89 private float m_health = 100f;
86 90
87 private LLVector3 m_lastVelocity = LLVector3.Zero; 91 private LLVector3 m_lastVelocity = LLVector3.Zero;
88 92
@@ -183,6 +187,11 @@ namespace OpenSim.Region.Environment.Scenes
183 set { m_updateflag = value; } 187 set { m_updateflag = value; }
184 get { return m_updateflag; } 188 get { return m_updateflag; }
185 } 189 }
190 public bool Invulnerable
191 {
192 set { m_invulnerable = value; }
193 get { return m_invulnerable; }
194 }
186 195
187 private readonly ulong m_regionHandle; 196 private readonly ulong m_regionHandle;
188 197
@@ -334,6 +343,11 @@ namespace OpenSim.Region.Environment.Scenes
334 get { return m_parentID; } 343 get { return m_parentID; }
335 set { m_parentID = value; } 344 set { m_parentID = value; }
336 } 345 }
346 public float Health
347 {
348 get { return m_health; }
349 set { m_health = value; }
350 }
337 351
338 /// <summary> 352 /// <summary>
339 /// These are the region handles known by the avatar. 353 /// These are the region handles known by the avatar.
@@ -602,6 +616,7 @@ namespace OpenSim.Region.Environment.Scenes
602 { 616 {
603 m_scene.PhysicsScene.RemoveAvatar(PhysicsActor); 617 m_scene.PhysicsScene.RemoveAvatar(PhysicsActor);
604 m_physicsActor.OnRequestTerseUpdate -= SendTerseUpdateToAllClients; 618 m_physicsActor.OnRequestTerseUpdate -= SendTerseUpdateToAllClients;
619 m_physicsActor.UnSubscribeEvents();
605 m_physicsActor.OnCollisionUpdate -= PhysicsCollisionUpdate; 620 m_physicsActor.OnCollisionUpdate -= PhysicsCollisionUpdate;
606 PhysicsActor = null; 621 PhysicsActor = null;
607 } 622 }
@@ -1894,16 +1909,55 @@ namespace OpenSim.Region.Environment.Scenes
1894 } 1909 }
1895 //m_physicsActor.OnRequestTerseUpdate += SendTerseUpdateToAllClients; 1910 //m_physicsActor.OnRequestTerseUpdate += SendTerseUpdateToAllClients;
1896 m_physicsActor.OnCollisionUpdate += PhysicsCollisionUpdate; 1911 m_physicsActor.OnCollisionUpdate += PhysicsCollisionUpdate;
1912 m_physicsActor.SubscribeEvents(1000);
1897 m_physicsActor.LocalID = LocalId; 1913 m_physicsActor.LocalID = LocalId;
1898 } 1914 }
1899 1915
1900 // Event called by the physics plugin to tell the avatar about a collision. 1916 // Event called by the physics plugin to tell the avatar about a collision.
1901 private void PhysicsCollisionUpdate(EventArgs e) 1917 private void PhysicsCollisionUpdate(EventArgs e)
1902 { 1918 {
1919 if (e == null)
1920 return;
1921 CollisionEventUpdate collisionData = (CollisionEventUpdate)e;
1922 Dictionary<uint, float> coldata = collisionData.m_objCollisionList;
1923 float starthealth = Health;
1924 uint killerObj = 0;
1925 foreach (uint localid in coldata.Keys)
1926 {
1927 if (coldata[localid] <= 0.10f || m_invulnerable)
1928 continue;
1929 //if (localid == 0)
1930 //continue;
1931
1932 Health -= coldata[localid] * 5;
1933
1934 if (Health <= 0)
1935 {
1936 if (localid != 0)
1937 killerObj = localid;
1938 }
1939 //m_log.Debug("[AVATAR]: Collision with localid: " + localid.ToString() + " at depth: " + coldata[localid].ToString());
1940 }
1941 //Health = 100;
1942 if (!m_invulnerable)
1943 {
1944 if (starthealth != Health)
1945 {
1946 ControllingClient.SendHealth(Health);
1947 }
1948 if (m_health <= 0)
1949 m_scene.EventManager.TriggerAvatarKill(killerObj, this);
1950 }
1951
1952
1903 bool isUserMoving = Velocity.X > 0 || Velocity.Y > 0; 1953 bool isUserMoving = Velocity.X > 0 || Velocity.Y > 0;
1904 UpdateMovementAnimations(isUserMoving); 1954 UpdateMovementAnimations(isUserMoving);
1905 } 1955 }
1906 1956 public void setHealthWithUpdate(float health)
1957 {
1958 Health = health;
1959 ControllingClient.SendHealth(Health);
1960 }
1907 internal void Close() 1961 internal void Close()
1908 { 1962 {
1909 lock (m_attachments) 1963 lock (m_attachments)