aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/Framework/Scenes/Animation/AnimationSet.cs13
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs23
2 files changed, 28 insertions, 8 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Animation/AnimationSet.cs b/OpenSim/Region/Framework/Scenes/Animation/AnimationSet.cs
index 33041e9..da1b9e0 100644
--- a/OpenSim/Region/Framework/Scenes/Animation/AnimationSet.cs
+++ b/OpenSim/Region/Framework/Scenes/Animation/AnimationSet.cs
@@ -168,10 +168,11 @@ namespace OpenSim.Region.Framework.Scenes.Animation
168 168
169 public OpenSim.Framework.Animation[] ToArray() 169 public OpenSim.Framework.Animation[] ToArray()
170 { 170 {
171 OpenSim.Framework.Animation[] theArray = new OpenSim.Framework.Animation[m_animations.Count]; 171 OpenSim.Framework.Animation[] theArray = new OpenSim.Framework.Animation[m_animations.Count + 1];
172 uint i = 0; 172 uint i = 0;
173 try 173 try
174 { 174 {
175 theArray[i++] = m_defaultAnimation;
175 foreach (OpenSim.Framework.Animation anim in m_animations) 176 foreach (OpenSim.Framework.Animation anim in m_animations)
176 theArray[i++] = anim; 177 theArray[i++] = anim;
177 } 178 }
@@ -184,8 +185,14 @@ namespace OpenSim.Region.Framework.Scenes.Animation
184 185
185 public void FromArray(OpenSim.Framework.Animation[] theArray) 186 public void FromArray(OpenSim.Framework.Animation[] theArray)
186 { 187 {
187 foreach (OpenSim.Framework.Animation anim in theArray) 188// foreach (OpenSim.Framework.Animation anim in theArray)
188 m_animations.Add(anim); 189// m_animations.Add(anim);
190 if (theArray.Length > 0)
191 {
192 m_defaultAnimation = theArray[0];
193 for (int i = 1; i < theArray.Length; i++)
194 m_animations.Add(theArray[i]);
195 }
189 } 196 }
190 } 197 }
191} 198}
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 7136cfc..991074b 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -866,7 +866,7 @@ namespace OpenSim.Region.Framework.Scenes
866 866
867 IsChildAgent = false; 867 IsChildAgent = false;
868 868
869 Animator.TrySetMovementAnimation("SIT"); 869// Animator.TryFixMovementAnimation("SIT");
870 } 870 }
871 else 871 else
872 { 872 {
@@ -929,7 +929,15 @@ namespace OpenSim.Region.Framework.Scenes
929 } 929 }
930 AbsolutePosition = pos; 930 AbsolutePosition = pos;
931 931
932 AddToPhysicalScene(isFlying); 932 if (m_teleportFlags == TeleportFlags.Default)
933 {
934 Vector3 vel = Velocity;
935 AddToPhysicalScene(isFlying);
936 if (PhysicsActor != null)
937 PhysicsActor.SetMomentum(vel);
938 }
939 else
940 AddToPhysicalScene(isFlying);
933 941
934 if (ForceFly) 942 if (ForceFly)
935 { 943 {
@@ -943,7 +951,8 @@ namespace OpenSim.Region.Framework.Scenes
943 // Don't send an animation pack here, since on a region crossing this will sometimes cause a flying 951 // Don't send an animation pack here, since on a region crossing this will sometimes cause a flying
944 // avatar to return to the standing position in mid-air. On login it looks like this is being sent 952 // avatar to return to the standing position in mid-air. On login it looks like this is being sent
945 // elsewhere anyway 953 // elsewhere anyway
946 // Animator.SendAnimPack(); 954// Animator.SendAnimPack();
955
947 956
948 m_scene.SwapRootAgentCount(false); 957 m_scene.SwapRootAgentCount(false);
949 958
@@ -980,6 +989,7 @@ namespace OpenSim.Region.Framework.Scenes
980 // If we don't reset the movement flag here, an avatar that crosses to a neighbouring sim and returns will 989 // If we don't reset the movement flag here, an avatar that crosses to a neighbouring sim and returns will
981 // stall on the border crossing since the existing child agent will still have the last movement 990 // stall on the border crossing since the existing child agent will still have the last movement
982 // recorded, which stops the input from being processed. 991 // recorded, which stops the input from being processed.
992
983 MovementFlag = 0; 993 MovementFlag = 0;
984 994
985 m_scene.EventManager.TriggerOnMakeRootAgent(this); 995 m_scene.EventManager.TriggerOnMakeRootAgent(this);
@@ -1020,6 +1030,8 @@ namespace OpenSim.Region.Framework.Scenes
1020 // as teleporting back 1030 // as teleporting back
1021 TeleportFlags = TeleportFlags.Default; 1031 TeleportFlags = TeleportFlags.Default;
1022 1032
1033 MovementFlag = 0;
1034
1023 // It looks like Animator is set to null somewhere, and MakeChild 1035 // It looks like Animator is set to null somewhere, and MakeChild
1024 // is called after that. Probably in aborted teleports. 1036 // is called after that. Probably in aborted teleports.
1025 if (Animator == null) 1037 if (Animator == null)
@@ -1027,6 +1039,7 @@ namespace OpenSim.Region.Framework.Scenes
1027 else 1039 else
1028 Animator.ResetAnimations(); 1040 Animator.ResetAnimations();
1029 1041
1042
1030// m_log.DebugFormat( 1043// m_log.DebugFormat(
1031// "[SCENE PRESENCE]: Downgrading root agent {0}, {1} to a child agent in {2}", 1044// "[SCENE PRESENCE]: Downgrading root agent {0}, {1} to a child agent in {2}",
1032// Name, UUID, m_scene.RegionInfo.RegionName); 1045// Name, UUID, m_scene.RegionInfo.RegionName);
@@ -1053,9 +1066,9 @@ namespace OpenSim.Region.Framework.Scenes
1053 { 1066 {
1054// PhysicsActor.OnRequestTerseUpdate -= SendTerseUpdateToAllClients; 1067// PhysicsActor.OnRequestTerseUpdate -= SendTerseUpdateToAllClients;
1055 PhysicsActor.OnOutOfBounds -= OutOfBoundsCall; 1068 PhysicsActor.OnOutOfBounds -= OutOfBoundsCall;
1056 m_scene.PhysicsScene.RemoveAvatar(PhysicsActor);
1057 PhysicsActor.UnSubscribeEvents();
1058 PhysicsActor.OnCollisionUpdate -= PhysicsCollisionUpdate; 1069 PhysicsActor.OnCollisionUpdate -= PhysicsCollisionUpdate;
1070 PhysicsActor.UnSubscribeEvents();
1071 m_scene.PhysicsScene.RemoveAvatar(PhysicsActor);
1059 PhysicsActor = null; 1072 PhysicsActor = null;
1060 } 1073 }
1061// else 1074// else