diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/ScenePresence.cs | 120 |
1 files changed, 49 insertions, 71 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 19e6a20..a1fc1c0 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -146,6 +146,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
146 | private bool m_flyingOld; // add for fly velocity control | 146 | private bool m_flyingOld; // add for fly velocity control |
147 | public bool m_wasFlying; // add for fly velocity control | 147 | public bool m_wasFlying; // add for fly velocity control |
148 | 148 | ||
149 | private int m_lastColCount = -1; //KF: Look for Collision chnages | ||
150 | private int m_updateCount = 0; //KF: Update Anims for a while | ||
151 | private static readonly int UPDATE_COUNT = 10; // how many frames to update for | ||
152 | private List<uint> m_lastColliders = new List<uint>(); | ||
153 | |||
149 | private TeleportFlags m_teleportFlags; | 154 | private TeleportFlags m_teleportFlags; |
150 | public TeleportFlags TeleportFlags | 155 | public TeleportFlags TeleportFlags |
151 | { | 156 | { |
@@ -208,13 +213,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
208 | private bool m_followCamAuto; | 213 | private bool m_followCamAuto; |
209 | 214 | ||
210 | private int m_movementUpdateCount; | 215 | private int m_movementUpdateCount; |
211 | private int m_lastColCount = -1; //KF: Look for Collision chnages | ||
212 | private int m_updateCount = 0; //KF: Update Anims for a while | ||
213 | private static readonly int UPDATE_COUNT = 10; // how many frames to update for | ||
214 | private const int NumMovementsBetweenRayCast = 5; | 216 | private const int NumMovementsBetweenRayCast = 5; |
215 | private List<uint> m_lastColliders = new List<uint>(); | ||
216 | |||
217 | private object m_syncRoot = new Object(); | ||
218 | 217 | ||
219 | private bool CameraConstraintActive; | 218 | private bool CameraConstraintActive; |
220 | //private int m_moveToPositionStateStatus; | 219 | //private int m_moveToPositionStateStatus; |
@@ -255,7 +254,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
255 | DIR_CONTROL_FLAG_UP = AgentManager.ControlFlags.AGENT_CONTROL_UP_POS, | 254 | DIR_CONTROL_FLAG_UP = AgentManager.ControlFlags.AGENT_CONTROL_UP_POS, |
256 | DIR_CONTROL_FLAG_DOWN = AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG, | 255 | DIR_CONTROL_FLAG_DOWN = AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG, |
257 | DIR_CONTROL_FLAG_FORWARD_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_POS, | 256 | DIR_CONTROL_FLAG_FORWARD_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_POS, |
258 | DIR_CONTROL_FLAG_BACK_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_NEG, | 257 | DIR_CONTROL_FLAG_BACKWARD_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_NEG, |
259 | DIR_CONTROL_FLAG_LEFT_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_POS, | 258 | DIR_CONTROL_FLAG_LEFT_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_POS, |
260 | DIR_CONTROL_FLAG_RIGHT_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_NEG, | 259 | DIR_CONTROL_FLAG_RIGHT_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_NEG, |
261 | DIR_CONTROL_FLAG_DOWN_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_NEG | 260 | DIR_CONTROL_FLAG_DOWN_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_NEG |
@@ -496,11 +495,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
496 | { | 495 | { |
497 | get | 496 | get |
498 | { | 497 | { |
499 | PhysicsActor actor = m_physicsActor; | 498 | if (PhysicsActor != null && m_parentID == 0) |
500 | // if (actor != null) | 499 | { |
501 | if ((actor != null) && (m_parentID == 0)) // KF Do NOT update m_pos here if Av is sitting! | 500 | m_pos = PhysicsActor.Position; |
502 | { | ||
503 | m_pos = actor.Position; | ||
504 | 501 | ||
505 | // m_log.DebugFormat( | 502 | // m_log.DebugFormat( |
506 | // "[SCENE PRESENCE]: Set position {0} for {1} in {2} via getting AbsolutePosition!", | 503 | // "[SCENE PRESENCE]: Set position {0} for {1} in {2} via getting AbsolutePosition!", |
@@ -551,10 +548,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
551 | } | 548 | } |
552 | } | 549 | } |
553 | 550 | ||
554 | // Changed this to update unconditionally to make npose work | 551 | m_pos = value; |
555 | // if (m_parentID == 0) // KF Do NOT update m_pos here if Av is sitting! | 552 | ParentPosition = Vector3.Zero; |
556 | m_pos = value; | ||
557 | m_parentPosition = Vector3.Zero; | ||
558 | 553 | ||
559 | // m_log.DebugFormat( | 554 | // m_log.DebugFormat( |
560 | // "[ENTITY BASE]: In {0} set AbsolutePosition of {1} to {2}", | 555 | // "[ENTITY BASE]: In {0} set AbsolutePosition of {1} to {2}", |
@@ -637,15 +632,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
637 | set { m_isChildAgent = value; } | 632 | set { m_isChildAgent = value; } |
638 | } | 633 | } |
639 | 634 | ||
640 | private uint m_parentID; | ||
641 | |||
642 | |||
643 | public uint ParentID | 635 | public uint ParentID |
644 | { | 636 | { |
645 | get { return m_parentID; } | 637 | get { return m_parentID; } |
646 | set { m_parentID = value; } | 638 | set { m_parentID = value; } |
647 | } | 639 | } |
648 | 640 | private uint m_parentID; | |
649 | 641 | ||
650 | public float Health | 642 | public float Health |
651 | { | 643 | { |
@@ -797,7 +789,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
797 | m_reprioritization_timer.AutoReset = false; | 789 | m_reprioritization_timer.AutoReset = false; |
798 | 790 | ||
799 | AdjustKnownSeeds(); | 791 | AdjustKnownSeeds(); |
792 | |||
793 | // TODO: I think, this won't send anything, as we are still a child here... | ||
800 | Animator.TrySetMovementAnimation("STAND"); | 794 | Animator.TrySetMovementAnimation("STAND"); |
795 | |||
801 | // we created a new ScenePresence (a new child agent) in a fresh region. | 796 | // we created a new ScenePresence (a new child agent) in a fresh region. |
802 | // Request info about all the (root) agents in this region | 797 | // Request info about all the (root) agents in this region |
803 | // Note: This won't send data *to* other clients in that region (children don't send) | 798 | // Note: This won't send data *to* other clients in that region (children don't send) |
@@ -861,7 +856,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
861 | vector[10] = new Vector3(-m_CameraAtAxis.Z, 0f, -m_CameraUpAxis.Z); //DOWN_NUDGE | 856 | vector[10] = new Vector3(-m_CameraAtAxis.Z, 0f, -m_CameraUpAxis.Z); //DOWN_NUDGE |
862 | return vector; | 857 | return vector; |
863 | } | 858 | } |
864 | 859 | ||
865 | #endregion | 860 | #endregion |
866 | 861 | ||
867 | public uint GenerateClientFlags(UUID ObjectID) | 862 | public uint GenerateClientFlags(UUID ObjectID) |
@@ -876,8 +871,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
876 | /// </summary> | 871 | /// </summary> |
877 | public void SendPrimUpdates() | 872 | public void SendPrimUpdates() |
878 | { | 873 | { |
879 | m_sceneViewer.SendPrimUpdates(); | ||
880 | |||
881 | SceneViewer.SendPrimUpdates(); | 874 | SceneViewer.SendPrimUpdates(); |
882 | } | 875 | } |
883 | 876 | ||
@@ -1117,11 +1110,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
1117 | { | 1110 | { |
1118 | try | 1111 | try |
1119 | { | 1112 | { |
1120 | m_physicsActor.OnRequestTerseUpdate -= SendTerseUpdateToAllClients; | 1113 | PhysicsActor.OnRequestTerseUpdate -= SendTerseUpdateToAllClients; |
1121 | m_physicsActor.OnOutOfBounds -= OutOfBoundsCall; | 1114 | PhysicsActor.OnOutOfBounds -= OutOfBoundsCall; |
1122 | m_physicsActor.OnCollisionUpdate -= PhysicsCollisionUpdate; | ||
1123 | m_scene.PhysicsScene.RemoveAvatar(PhysicsActor); | 1115 | m_scene.PhysicsScene.RemoveAvatar(PhysicsActor); |
1124 | m_physicsActor.UnSubscribeEvents(); | 1116 | PhysicsActor.UnSubscribeEvents(); |
1117 | PhysicsActor.OnCollisionUpdate -= PhysicsCollisionUpdate; | ||
1125 | PhysicsActor = null; | 1118 | PhysicsActor = null; |
1126 | } | 1119 | } |
1127 | catch | 1120 | catch |
@@ -1146,7 +1139,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
1146 | AddToPhysicalScene(isFlying); | 1139 | AddToPhysicalScene(isFlying); |
1147 | 1140 | ||
1148 | SendTerseUpdateToAllClients(); | 1141 | SendTerseUpdateToAllClients(); |
1149 | |||
1150 | } | 1142 | } |
1151 | 1143 | ||
1152 | public void TeleportWithMomentum(Vector3 pos) | 1144 | public void TeleportWithMomentum(Vector3 pos) |
@@ -1364,12 +1356,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
1364 | /// <summary> | 1356 | /// <summary> |
1365 | /// This is the event handler for client movement. If a client is moving, this event is triggering. | 1357 | /// This is the event handler for client movement. If a client is moving, this event is triggering. |
1366 | /// </summary> | 1358 | /// </summary> |
1367 | /// <summary> | ||
1368 | /// This is the event handler for client movement. If a client is moving, this event is triggering. | ||
1369 | /// </summary> | ||
1370 | public void HandleAgentUpdate(IClientAPI remoteClient, AgentUpdateArgs agentData) | 1359 | public void HandleAgentUpdate(IClientAPI remoteClient, AgentUpdateArgs agentData) |
1371 | { | 1360 | { |
1372 | // m_log.DebugFormat("[SCENE PRESENCE]: Received agent update from {0}", remoteClient.Name); | 1361 | // m_log.DebugFormat( |
1362 | // "[SCENE PRESENCE]: In {0} received agent update from {1}", | ||
1363 | // Scene.RegionInfo.RegionName, remoteClient.Name); | ||
1373 | 1364 | ||
1374 | //if (IsChildAgent) | 1365 | //if (IsChildAgent) |
1375 | //{ | 1366 | //{ |
@@ -1570,7 +1561,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1570 | 1561 | ||
1571 | if ((MovementFlag & (byte)(uint)DCF) == 0) | 1562 | if ((MovementFlag & (byte)(uint)DCF) == 0) |
1572 | { | 1563 | { |
1573 | if (DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD_NUDGE || DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_BACK_NUDGE) | 1564 | if (DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD_NUDGE || DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_BACKWARD_NUDGE) |
1574 | { | 1565 | { |
1575 | MovementFlag |= (byte)nudgehack; | 1566 | MovementFlag |= (byte)nudgehack; |
1576 | } | 1567 | } |
@@ -1582,13 +1573,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
1582 | } | 1573 | } |
1583 | else | 1574 | else |
1584 | { | 1575 | { |
1585 | if ((m_movementflag & (byte)(uint)DCF) != 0 || | 1576 | if ((MovementFlag & (byte)(uint)DCF) != 0 || |
1586 | ((DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD_NUDGE || DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_BACK_NUDGE) | 1577 | ((DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD_NUDGE || DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_BACKWARD_NUDGE) |
1587 | && ((m_movementflag & (byte)nudgehack) == nudgehack)) | 1578 | && ((MovementFlag & (byte)nudgehack) == nudgehack)) |
1588 | ) // This or is for Nudge forward | 1579 | ) // This or is for Nudge forward |
1589 | { | 1580 | { |
1590 | // m_log.DebugFormat("[SCENE PRESENCE]: Updating m_movementflag for {0} with lack of {1}", Name, DCF); | 1581 | // m_log.DebugFormat("[SCENE PRESENCE]: Updating MovementFlag for {0} with lack of {1}", Name, DCF); |
1591 | m_movementflag -= ((byte)(uint)DCF); | 1582 | MovementFlag -= ((byte)(uint)DCF); |
1592 | update_movementflag = true; | 1583 | update_movementflag = true; |
1593 | 1584 | ||
1594 | /* | 1585 | /* |
@@ -1818,9 +1809,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
1818 | if (SitGround) | 1809 | if (SitGround) |
1819 | StandUp(); | 1810 | StandUp(); |
1820 | 1811 | ||
1821 | // m_log.DebugFormat( | 1812 | m_log.DebugFormat( |
1822 | // "[SCENE PRESENCE]: Avatar {0} received request to move to position {1} in {2}", | 1813 | "[SCENE PRESENCE]: Avatar {0} received request to move to position {1} in {2}", |
1823 | // Name, pos, m_scene.RegionInfo.RegionName); | 1814 | Name, pos, m_scene.RegionInfo.RegionName); |
1824 | 1815 | ||
1825 | if (pos.X < 0 || pos.X >= Constants.RegionSize | 1816 | if (pos.X < 0 || pos.X >= Constants.RegionSize |
1826 | || pos.Y < 0 || pos.Y >= Constants.RegionSize | 1817 | || pos.Y < 0 || pos.Y >= Constants.RegionSize |
@@ -1846,9 +1837,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
1846 | if (pos.Z - terrainHeight < 0.2) | 1837 | if (pos.Z - terrainHeight < 0.2) |
1847 | pos.Z = terrainHeight; | 1838 | pos.Z = terrainHeight; |
1848 | 1839 | ||
1849 | // m_log.DebugFormat( | 1840 | m_log.DebugFormat( |
1850 | // "[SCENE PRESENCE]: Avatar {0} set move to target {1} (terrain height {2}) in {3}", | 1841 | "[SCENE PRESENCE]: Avatar {0} set move to target {1} (terrain height {2}) in {3}", |
1851 | // Name, pos, terrainHeight, m_scene.RegionInfo.RegionName); | 1842 | Name, pos, terrainHeight, m_scene.RegionInfo.RegionName); |
1852 | 1843 | ||
1853 | if (noFly) | 1844 | if (noFly) |
1854 | PhysicsActor.Flying = false; | 1845 | PhysicsActor.Flying = false; |
@@ -1884,7 +1875,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1884 | /// </summary> | 1875 | /// </summary> |
1885 | public void ResetMoveToTarget() | 1876 | public void ResetMoveToTarget() |
1886 | { | 1877 | { |
1887 | // m_log.DebugFormat("[SCENE PRESENCE]: Resetting move to target for {0}", Name); | 1878 | m_log.DebugFormat("[SCENE PRESENCE]: Resetting move to target for {0}", Name); |
1888 | 1879 | ||
1889 | MovingToTarget = false; | 1880 | MovingToTarget = false; |
1890 | MoveToPositionTarget = Vector3.Zero; | 1881 | MoveToPositionTarget = Vector3.Zero; |
@@ -2548,9 +2539,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
2548 | 2539 | ||
2549 | CheckForSignificantMovement(); // sends update to the modules. | 2540 | CheckForSignificantMovement(); // sends update to the modules. |
2550 | } | 2541 | } |
2551 | |||
2552 | //Sending prim updates AFTER the avatar terse updates are sent | ||
2553 | SendPrimUpdates(); | ||
2554 | } | 2542 | } |
2555 | 2543 | ||
2556 | #endregion | 2544 | #endregion |
@@ -3268,7 +3256,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
3268 | m_callbackURI = cAgent.CallbackURI; | 3256 | m_callbackURI = cAgent.CallbackURI; |
3269 | 3257 | ||
3270 | m_pos = cAgent.Position; | 3258 | m_pos = cAgent.Position; |
3271 | |||
3272 | m_velocity = cAgent.Velocity; | 3259 | m_velocity = cAgent.Velocity; |
3273 | CameraPosition = cAgent.Center; | 3260 | CameraPosition = cAgent.Center; |
3274 | CameraAtAxis = cAgent.AtAxis; | 3261 | CameraAtAxis = cAgent.AtAxis; |
@@ -3415,14 +3402,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
3415 | //if ((Math.Abs(Velocity.X) > 0.1e-9f) || (Math.Abs(Velocity.Y) > 0.1e-9f)) | 3402 | //if ((Math.Abs(Velocity.X) > 0.1e-9f) || (Math.Abs(Velocity.Y) > 0.1e-9f)) |
3416 | // The Physics Scene will send updates every 500 ms grep: PhysicsActor.SubscribeEvents( | 3403 | // The Physics Scene will send updates every 500 ms grep: PhysicsActor.SubscribeEvents( |
3417 | // as of this comment the interval is set in AddToPhysicalScene | 3404 | // as of this comment the interval is set in AddToPhysicalScene |
3418 | if (Animator!=null) | 3405 | if (Animator != null) |
3419 | { | 3406 | { |
3420 | if (m_updateCount > 0) //KF: DO NOT call UpdateMovementAnimations outside of the m_updateCount wrapper, | 3407 | if (m_updateCount > 0) |
3421 | { // else its will lock out other animation changes, like ground sit. | 3408 | { |
3422 | Animator.UpdateMovementAnimations(); | 3409 | Animator.UpdateMovementAnimations(); |
3423 | m_updateCount--; | 3410 | m_updateCount--; |
3424 | } | 3411 | } |
3425 | } | 3412 | } |
3426 | 3413 | ||
3427 | CollisionEventUpdate collisionData = (CollisionEventUpdate)e; | 3414 | CollisionEventUpdate collisionData = (CollisionEventUpdate)e; |
3428 | Dictionary<uint, ContactPoint> coldata = collisionData.m_objCollisionList; | 3415 | Dictionary<uint, ContactPoint> coldata = collisionData.m_objCollisionList; |
@@ -3431,12 +3418,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
3431 | 3418 | ||
3432 | // No collisions at all means we may be flying. Update always | 3419 | // No collisions at all means we may be flying. Update always |
3433 | // to make falling work | 3420 | // to make falling work |
3434 | if (m_lastColCount != coldata.Count || coldata.Count == 0) | 3421 | if (m_lastColCount != coldata.Count || coldata.Count == 0) |
3435 | { | 3422 | { |
3436 | m_updateCount = UPDATE_COUNT; | 3423 | m_updateCount = UPDATE_COUNT; |
3437 | m_lastColCount = coldata.Count; | 3424 | m_lastColCount = coldata.Count; |
3438 | } | 3425 | } |
3439 | 3426 | ||
3440 | if (coldata.Count != 0 && Animator != null) | 3427 | if (coldata.Count != 0 && Animator != null) |
3441 | { | 3428 | { |
3442 | switch (Animator.CurrentMovementAnimation) | 3429 | switch (Animator.CurrentMovementAnimation) |
@@ -4047,15 +4034,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
4047 | } | 4034 | } |
4048 | } | 4035 | } |
4049 | 4036 | ||
4050 | private Vector3 Quat2Euler(Quaternion rot){ | ||
4051 | float x = Utils.RAD_TO_DEG * (float)Math.Atan2((double)((2.0f * rot.X * rot.W) - (2.0f * rot.Y * rot.Z)) , | ||
4052 | (double)(1 - (2.0f * rot.X * rot.X) - (2.0f * rot.Z * rot.Z))); | ||
4053 | float y = Utils.RAD_TO_DEG * (float)Math.Asin ((double)((2.0f * rot.X * rot.Y) + (2.0f * rot.Z * rot.W))); | ||
4054 | float z = Utils.RAD_TO_DEG * (float)Math.Atan2(((double)(2.0f * rot.Y * rot.W) - (2.0f * rot.X * rot.Z)) , | ||
4055 | (double)(1 - (2.0f * rot.Y * rot.Y) - (2.0f * rot.Z * rot.Z))); | ||
4056 | return(new Vector3(x,y,z)); | ||
4057 | } | ||
4058 | |||
4059 | private void CheckLandingPoint(ref Vector3 pos) | 4037 | private void CheckLandingPoint(ref Vector3 pos) |
4060 | { | 4038 | { |
4061 | // Never constrain lures | 4039 | // Never constrain lures |