diff options
author | Jeff Ames | 2007-12-10 15:08:44 +0000 |
---|---|---|
committer | Jeff Ames | 2007-12-10 15:08:44 +0000 |
commit | 40fd37f95af68a213b0c3a465858c27fa7c8cfdf (patch) | |
tree | 27424718d3b777adee5088deecd813573223bc33 /OpenSim | |
parent | more work on texture downloading. (diff) | |
download | opensim-SC-40fd37f95af68a213b0c3a465858c27fa7c8cfdf.zip opensim-SC-40fd37f95af68a213b0c3a465858c27fa7c8cfdf.tar.gz opensim-SC-40fd37f95af68a213b0c3a465858c27fa7c8cfdf.tar.bz2 opensim-SC-40fd37f95af68a213b0c3a465858c27fa7c8cfdf.tar.xz |
Refactored animation handling in ScenePresence. Now maintains a list of current animations.
* Fixes weirdness when typing and sitting at the same time
* Should fix bug #32 (getting stuck in edit appearance pose)
* Crouchwalk and possibly jump may need more looking into
Diffstat (limited to 'OpenSim')
-rw-r--r-- | OpenSim/Framework/IClientAPI.cs | 6 | ||||
-rw-r--r-- | OpenSim/Region/ClientStack/ClientView.cs | 23 | ||||
-rw-r--r-- | OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs | 5 | ||||
-rw-r--r-- | OpenSim/Region/Environment/Scenes/Scene.cs | 1 | ||||
-rw-r--r-- | OpenSim/Region/Environment/Scenes/ScenePresence.cs | 179 | ||||
-rw-r--r-- | OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs | 7 |
6 files changed, 129 insertions, 92 deletions
diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs index 6898f91..98c7a18 100644 --- a/OpenSim/Framework/IClientAPI.cs +++ b/OpenSim/Framework/IClientAPI.cs | |||
@@ -235,6 +235,8 @@ namespace OpenSim.Framework | |||
235 | 235 | ||
236 | public delegate void StartAnim(IClientAPI remoteClient, LLUUID animID, int seq); | 236 | public delegate void StartAnim(IClientAPI remoteClient, LLUUID animID, int seq); |
237 | 237 | ||
238 | public delegate void StopAnim(IClientAPI remoteClient, LLUUID animID); | ||
239 | |||
238 | public delegate void LinkObjects(uint parent, List<uint> children); | 240 | public delegate void LinkObjects(uint parent, List<uint> children); |
239 | 241 | ||
240 | public delegate void DelinkObjects(List<uint> primIds); | 242 | public delegate void DelinkObjects(List<uint> primIds); |
@@ -249,6 +251,7 @@ namespace OpenSim.Framework | |||
249 | public delegate void DisconnectUser(); | 251 | public delegate void DisconnectUser(); |
250 | 252 | ||
251 | public delegate void RequestAvatarProperties(IClientAPI remoteClient, LLUUID avatarID); | 253 | public delegate void RequestAvatarProperties(IClientAPI remoteClient, LLUUID avatarID); |
254 | |||
252 | public delegate void SetAlwaysRun(IClientAPI remoteClient, bool SetAlwaysRun); | 255 | public delegate void SetAlwaysRun(IClientAPI remoteClient, bool SetAlwaysRun); |
253 | 256 | ||
254 | public delegate void GenericCall2(); | 257 | public delegate void GenericCall2(); |
@@ -375,6 +378,7 @@ namespace OpenSim.Framework | |||
375 | event SetAppearance OnSetAppearance; | 378 | event SetAppearance OnSetAppearance; |
376 | event AvatarNowWearing OnAvatarNowWearing; | 379 | event AvatarNowWearing OnAvatarNowWearing; |
377 | event StartAnim OnStartAnim; | 380 | event StartAnim OnStartAnim; |
381 | event StopAnim OnStopAnim; | ||
378 | event LinkObjects OnLinkObjects; | 382 | event LinkObjects OnLinkObjects; |
379 | event DelinkObjects OnDelinkObjects; | 383 | event DelinkObjects OnDelinkObjects; |
380 | event RequestMapBlocks OnRequestMapBlocks; | 384 | event RequestMapBlocks OnRequestMapBlocks; |
@@ -468,7 +472,7 @@ namespace OpenSim.Framework | |||
468 | void SendAppearance(LLUUID agentID, byte[] visualParams, byte[] textureEntry); | 472 | void SendAppearance(LLUUID agentID, byte[] visualParams, byte[] textureEntry); |
469 | void SendStartPingCheck(byte seq); | 473 | void SendStartPingCheck(byte seq); |
470 | void SendKillObject(ulong regionHandle, uint localID); | 474 | void SendKillObject(ulong regionHandle, uint localID); |
471 | void SendAnimation(LLUUID animID, int seq, LLUUID sourceAgentId); | 475 | void SendAnimations(LLUUID[] animID, int[] seqs, LLUUID sourceAgentId); |
472 | void SendRegionHandshake(RegionInfo regionInfo); | 476 | void SendRegionHandshake(RegionInfo regionInfo); |
473 | void SendChatMessage(string message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID); | 477 | void SendChatMessage(string message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID); |
474 | void SendChatMessage(byte[] message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID); | 478 | void SendChatMessage(byte[] message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID); |
diff --git a/OpenSim/Region/ClientStack/ClientView.cs b/OpenSim/Region/ClientStack/ClientView.cs index 1a544b8..db25ee6 100644 --- a/OpenSim/Region/ClientStack/ClientView.cs +++ b/OpenSim/Region/ClientStack/ClientView.cs | |||
@@ -392,6 +392,7 @@ namespace OpenSim.Region.ClientStack | |||
392 | public event AgentSit OnAgentSit; | 392 | public event AgentSit OnAgentSit; |
393 | public event AvatarPickerRequest OnAvatarPickerRequest; | 393 | public event AvatarPickerRequest OnAvatarPickerRequest; |
394 | public event StartAnim OnStartAnim; | 394 | public event StartAnim OnStartAnim; |
395 | public event StopAnim OnStopAnim; | ||
395 | public event Action<IClientAPI> OnRequestAvatarsData; | 396 | public event Action<IClientAPI> OnRequestAvatarsData; |
396 | public event LinkObjects OnLinkObjects; | 397 | public event LinkObjects OnLinkObjects; |
397 | public event DelinkObjects OnDelinkObjects; | 398 | public event DelinkObjects OnDelinkObjects; |
@@ -1265,7 +1266,7 @@ namespace OpenSim.Region.ClientStack | |||
1265 | OutPacket(avp, ThrottleOutPacketType.Task); | 1266 | OutPacket(avp, ThrottleOutPacketType.Task); |
1266 | } | 1267 | } |
1267 | 1268 | ||
1268 | public void SendAnimation(LLUUID animID, int seq, LLUUID sourceAgentId) | 1269 | public void SendAnimations(LLUUID[] animations, int[] seqs, LLUUID sourceAgentId) |
1269 | { | 1270 | { |
1270 | AvatarAnimationPacket ani = new AvatarAnimationPacket(); | 1271 | AvatarAnimationPacket ani = new AvatarAnimationPacket(); |
1271 | ani.AnimationSourceList = new AvatarAnimationPacket.AnimationSourceListBlock[1]; | 1272 | ani.AnimationSourceList = new AvatarAnimationPacket.AnimationSourceListBlock[1]; |
@@ -1273,10 +1274,15 @@ namespace OpenSim.Region.ClientStack | |||
1273 | ani.AnimationSourceList[0].ObjectID = sourceAgentId; | 1274 | ani.AnimationSourceList[0].ObjectID = sourceAgentId; |
1274 | ani.Sender = new AvatarAnimationPacket.SenderBlock(); | 1275 | ani.Sender = new AvatarAnimationPacket.SenderBlock(); |
1275 | ani.Sender.ID = sourceAgentId; | 1276 | ani.Sender.ID = sourceAgentId; |
1276 | ani.AnimationList = new AvatarAnimationPacket.AnimationListBlock[1]; | 1277 | ani.AnimationList = new AvatarAnimationPacket.AnimationListBlock[animations.Length]; |
1277 | ani.AnimationList[0] = new AvatarAnimationPacket.AnimationListBlock(); | 1278 | |
1278 | ani.AnimationList[0].AnimID = animID; | 1279 | for (int i = 0; i < animations.Length; ++i) |
1279 | ani.AnimationList[0].AnimSequenceID = seq; | 1280 | { |
1281 | ani.AnimationList[i] = new AvatarAnimationPacket.AnimationListBlock(); | ||
1282 | ani.AnimationList[i].AnimID = animations[i]; | ||
1283 | ani.AnimationList[i].AnimSequenceID = seqs[i]; | ||
1284 | } | ||
1285 | |||
1280 | OutPacket(ani, ThrottleOutPacketType.Task); | 1286 | OutPacket(ani, ThrottleOutPacketType.Task); |
1281 | } | 1287 | } |
1282 | 1288 | ||
@@ -2485,6 +2491,13 @@ namespace OpenSim.Region.ClientStack | |||
2485 | OnStartAnim(this, AgentAni.AnimationList[i].AnimID, 1); | 2491 | OnStartAnim(this, AgentAni.AnimationList[i].AnimID, 1); |
2486 | } | 2492 | } |
2487 | } | 2493 | } |
2494 | else | ||
2495 | { | ||
2496 | if (OnStopAnim != null) | ||
2497 | { | ||
2498 | OnStopAnim(this, AgentAni.AnimationList[i].AnimID); | ||
2499 | } | ||
2500 | } | ||
2488 | } | 2501 | } |
2489 | break; | 2502 | break; |
2490 | case PacketType.AgentRequestSit: | 2503 | case PacketType.AgentRequestSit: |
diff --git a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs index 4fdfc32..07e5362 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs | |||
@@ -133,11 +133,6 @@ namespace OpenSim.Region.Environment.Scenes | |||
133 | } | 133 | } |
134 | } | 134 | } |
135 | 135 | ||
136 | public void StartAnimation(LLUUID animID, int seq, LLUUID agentId) | ||
137 | { | ||
138 | Broadcast(delegate(IClientAPI client) { client.SendAnimation(animID, seq, agentId); }); | ||
139 | } | ||
140 | |||
141 | public virtual void ProcessObjectGrab(uint localID, LLVector3 offsetPos, IClientAPI remoteClient) | 136 | public virtual void ProcessObjectGrab(uint localID, LLVector3 offsetPos, IClientAPI remoteClient) |
142 | { | 137 | { |
143 | EventManager.TriggerObjectGrab(localID, offsetPos, remoteClient); | 138 | EventManager.TriggerObjectGrab(localID, offsetPos, remoteClient); |
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index e9d83a1..01bcd83 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs | |||
@@ -950,7 +950,6 @@ namespace OpenSim.Region.Environment.Scenes | |||
950 | 950 | ||
951 | protected virtual void SubscribeToClientEvents(IClientAPI client) | 951 | protected virtual void SubscribeToClientEvents(IClientAPI client) |
952 | { | 952 | { |
953 | // client.OnStartAnim += StartAnimation; | ||
954 | client.OnRegionHandShakeReply += SendLayerData; | 953 | client.OnRegionHandShakeReply += SendLayerData; |
955 | //remoteClient.OnRequestWearables += new GenericCall(this.GetInitialPrims); | 954 | //remoteClient.OnRequestWearables += new GenericCall(this.GetInitialPrims); |
956 | client.OnModifyTerrain += ModifyTerrain; | 955 | client.OnModifyTerrain += ModifyTerrain; |
diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index 21c0f3f..c277011 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs | |||
@@ -43,8 +43,8 @@ namespace OpenSim.Region.Environment.Scenes | |||
43 | public static AvatarAnimations Animations; | 43 | public static AvatarAnimations Animations; |
44 | public static byte[] DefaultTexture; | 44 | public static byte[] DefaultTexture; |
45 | 45 | ||
46 | public LLUUID CurrentAnimation; | 46 | private List<LLUUID> m_animations = new List<LLUUID>(); |
47 | public int AnimationSeq; | 47 | private List<int> m_animationSeqs = new List<int>(); |
48 | 48 | ||
49 | private bool m_updateflag = false; | 49 | private bool m_updateflag = false; |
50 | private byte m_movementflag = 0; | 50 | private byte m_movementflag = 0; |
@@ -55,7 +55,6 @@ namespace OpenSim.Region.Environment.Scenes | |||
55 | private float m_sitAvatarHeight = 2.0f; | 55 | private float m_sitAvatarHeight = 2.0f; |
56 | private float m_godlevel = 0; | 56 | private float m_godlevel = 0; |
57 | 57 | ||
58 | private bool m_isTyping = false; | ||
59 | private bool m_setAlwaysRun = false; | 58 | private bool m_setAlwaysRun = false; |
60 | 59 | ||
61 | private Quaternion m_bodyRot; | 60 | private Quaternion m_bodyRot; |
@@ -74,7 +73,6 @@ namespace OpenSim.Region.Environment.Scenes | |||
74 | private readonly Vector3[] Dir_Vectors = new Vector3[6]; | 73 | private readonly Vector3[] Dir_Vectors = new Vector3[6]; |
75 | private LLVector3 lastPhysPos = new LLVector3(); | 74 | private LLVector3 lastPhysPos = new LLVector3(); |
76 | 75 | ||
77 | |||
78 | // Position of agent's camera in world | 76 | // Position of agent's camera in world |
79 | protected Vector3 m_CameraCenter = new Vector3(0, 0, 0); | 77 | protected Vector3 m_CameraCenter = new Vector3(0, 0, 0); |
80 | 78 | ||
@@ -286,6 +284,9 @@ namespace OpenSim.Region.Environment.Scenes | |||
286 | Animations = new AvatarAnimations(); | 284 | Animations = new AvatarAnimations(); |
287 | Animations.LoadAnims(); | 285 | Animations.LoadAnims(); |
288 | 286 | ||
287 | m_animations.Add(Animations.AnimsLLUUID["STAND"]); | ||
288 | m_animationSeqs.Add(1); | ||
289 | |||
289 | RegisterToEvents(); | 290 | RegisterToEvents(); |
290 | 291 | ||
291 | SetDirectionVectors(); | 292 | SetDirectionVectors(); |
@@ -303,7 +304,6 @@ namespace OpenSim.Region.Environment.Scenes | |||
303 | m_scene.LandManager.sendLandUpdate(this); | 304 | m_scene.LandManager.sendLandUpdate(this); |
304 | } | 305 | } |
305 | 306 | ||
306 | |||
307 | public ScenePresence(IClientAPI client, Scene world, RegionInfo reginfo, AvatarAppearance appearance) | 307 | public ScenePresence(IClientAPI client, Scene world, RegionInfo reginfo, AvatarAppearance appearance) |
308 | { | 308 | { |
309 | //couldn't move the following into SetInitialValues as they are readonly | 309 | //couldn't move the following into SetInitialValues as they are readonly |
@@ -319,6 +319,9 @@ namespace OpenSim.Region.Environment.Scenes | |||
319 | Animations = new AvatarAnimations(); | 319 | Animations = new AvatarAnimations(); |
320 | Animations.LoadAnims(); | 320 | Animations.LoadAnims(); |
321 | 321 | ||
322 | m_animations.Add(Animations.AnimsLLUUID["STAND"]); | ||
323 | m_animationSeqs.Add(1); | ||
324 | |||
322 | RegisterToEvents(); | 325 | RegisterToEvents(); |
323 | SetDirectionVectors(); | 326 | SetDirectionVectors(); |
324 | 327 | ||
@@ -350,8 +353,9 @@ namespace OpenSim.Region.Environment.Scenes | |||
350 | m_controllingClient.OnAgentRequestSit += HandleAgentRequestSit; | 353 | m_controllingClient.OnAgentRequestSit += HandleAgentRequestSit; |
351 | m_controllingClient.OnAgentSit += HandleAgentSit; | 354 | m_controllingClient.OnAgentSit += HandleAgentSit; |
352 | m_controllingClient.OnSetAlwaysRun += HandleSetAlwaysRun; | 355 | m_controllingClient.OnSetAlwaysRun += HandleSetAlwaysRun; |
356 | m_controllingClient.OnStartAnim += HandleStartAnim; | ||
357 | m_controllingClient.OnStopAnim += HandleStopAnim; | ||
353 | 358 | ||
354 | // ControllingClient.OnStartAnim += new StartAnim(this.SendAnimPack); | ||
355 | // ControllingClient.OnChildAgentStatus += new StatusChange(this.ChildStatusChange); | 359 | // ControllingClient.OnChildAgentStatus += new StatusChange(this.ChildStatusChange); |
356 | //ControllingClient.OnStopMovement += new GenericCall2(this.StopMovement); | 360 | //ControllingClient.OnStopMovement += new GenericCall2(this.StopMovement); |
357 | } | 361 | } |
@@ -786,7 +790,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
786 | Velocity = new LLVector3(0, 0, 0); | 790 | Velocity = new LLVector3(0, 0, 0); |
787 | RemoveFromPhysicalScene(); | 791 | RemoveFromPhysicalScene(); |
788 | 792 | ||
789 | SendAnimPack(Animations.AnimsLLUUID["SIT"], 1); | 793 | SetMovementAnimation(Animations.AnimsLLUUID["SIT"], 1); |
790 | SendFullUpdateToAllClients(); | 794 | SendFullUpdateToAllClients(); |
791 | } | 795 | } |
792 | 796 | ||
@@ -799,6 +803,57 @@ namespace OpenSim.Region.Environment.Scenes | |||
799 | } | 803 | } |
800 | } | 804 | } |
801 | 805 | ||
806 | public void AddAnimation(LLUUID animID, int seq) | ||
807 | { | ||
808 | if (!m_animations.Contains(animID)) | ||
809 | { | ||
810 | m_animations.Add(animID); | ||
811 | m_animationSeqs.Add(seq); | ||
812 | SendAnimPack(); | ||
813 | } | ||
814 | } | ||
815 | |||
816 | public void RemoveAnimation(LLUUID animID) | ||
817 | { | ||
818 | if (m_animations.Contains(animID)) | ||
819 | { | ||
820 | if (m_animations[0] == animID) | ||
821 | { | ||
822 | SetMovementAnimation(Animations.AnimsLLUUID["STAND"], 1); | ||
823 | } | ||
824 | else | ||
825 | { | ||
826 | m_animations.Remove(animID); | ||
827 | SendAnimPack(); | ||
828 | } | ||
829 | } | ||
830 | } | ||
831 | |||
832 | public void HandleStartAnim(IClientAPI remoteClient, LLUUID animID, int seq) | ||
833 | { | ||
834 | AddAnimation(animID, seq); | ||
835 | } | ||
836 | |||
837 | public void HandleStopAnim(IClientAPI remoteClient, LLUUID animID) | ||
838 | { | ||
839 | RemoveAnimation(animID); | ||
840 | } | ||
841 | |||
842 | /// <summary> | ||
843 | /// The movement animation is the first element of the animation list, | ||
844 | /// reserved for "main" animations that are mutually exclusive, | ||
845 | /// like flying and sitting, for example. | ||
846 | /// </summary> | ||
847 | protected void SetMovementAnimation(LLUUID anim, int seq) | ||
848 | { | ||
849 | if (m_animations[0] != anim) | ||
850 | { | ||
851 | m_animations[0] = anim; | ||
852 | m_animationSeqs[0] = seq; | ||
853 | SendAnimPack(); | ||
854 | } | ||
855 | } | ||
856 | |||
802 | protected void UpdateMovementAnimations(bool update_movementflag) | 857 | protected void UpdateMovementAnimations(bool update_movementflag) |
803 | { | 858 | { |
804 | if (update_movementflag) | 859 | if (update_movementflag) |
@@ -807,81 +862,49 @@ namespace OpenSim.Region.Environment.Scenes | |||
807 | { | 862 | { |
808 | if (m_physicsActor.Flying) | 863 | if (m_physicsActor.Flying) |
809 | { | 864 | { |
810 | SendAnimPack(Animations.AnimsLLUUID["FLY"], 1); | 865 | SetMovementAnimation(Animations.AnimsLLUUID["FLY"], 1); |
811 | } | 866 | } |
812 | else | 867 | else if (((m_movementflag & (uint)AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG) != 0) && |
868 | PhysicsActor.IsColliding) | ||
813 | { | 869 | { |
814 | if (((m_movementflag & (uint)AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG) != 0) && | 870 | SetMovementAnimation(Animations.AnimsLLUUID["CROUCHWALK"], 1); |
815 | PhysicsActor.IsColliding) | ||
816 | { | ||
817 | SendAnimPack(Animations.AnimsLLUUID["CROUCHWALK"], 1); | ||
818 | } | ||
819 | else | ||
820 | { | ||
821 | if (!PhysicsActor.IsColliding && m_physicsActor.Velocity.Z < -6) | ||
822 | { | ||
823 | SendAnimPack(Animations.AnimsLLUUID["FALLDOWN"], 1); | ||
824 | } | ||
825 | else if (!PhysicsActor.IsColliding && Velocity.Z > 0 && (m_movementflag & (uint)AgentManager.ControlFlags.AGENT_CONTROL_UP_POS) != 0) | ||
826 | { | ||
827 | SendAnimPack(Animations.AnimsLLUUID["JUMP"], 1); | ||
828 | } | ||
829 | else | ||
830 | { | ||
831 | if (!m_setAlwaysRun) | ||
832 | { | ||
833 | SendAnimPack(Animations.AnimsLLUUID["WALK"], 1); | ||
834 | } | ||
835 | else | ||
836 | { | ||
837 | SendAnimPack(Animations.AnimsLLUUID["RUN"], 1); | ||
838 | } | ||
839 | } | ||
840 | } | ||
841 | } | 871 | } |
842 | } | 872 | else if (!PhysicsActor.IsColliding && m_physicsActor.Velocity.Z < -6) |
843 | else if (m_parentID != 0) | ||
844 | { | ||
845 | if (m_isTyping) | ||
846 | { | 873 | { |
847 | SendAnimPack(Animations.AnimsLLUUID["TYPE"], 1); | 874 | SetMovementAnimation(Animations.AnimsLLUUID["FALLDOWN"], 1); |
848 | } | 875 | } |
849 | else | 876 | else if (!PhysicsActor.IsColliding && Velocity.Z > 0 && (m_movementflag & (uint)AgentManager.ControlFlags.AGENT_CONTROL_UP_POS) != 0) |
850 | { | 877 | { |
851 | // TODO: stop the typing animation, continue sitting | 878 | SetMovementAnimation(Animations.AnimsLLUUID["JUMP"], 1); |
852 | SendAnimPack(Animations.AnimsLLUUID["SIT"], 1); | ||
853 | } | 879 | } |
880 | else if (m_setAlwaysRun) | ||
881 | { | ||
882 | SetMovementAnimation(Animations.AnimsLLUUID["RUN"], 1); | ||
883 | } | ||
884 | else | ||
885 | SetMovementAnimation(Animations.AnimsLLUUID["WALK"], 1); | ||
854 | } | 886 | } |
855 | else | 887 | else |
856 | { | 888 | { |
857 | if (((m_movementflag & (uint)AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG) != 0) && | 889 | if (((m_movementflag & (uint)AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG) != 0) && |
858 | PhysicsActor.IsColliding) | 890 | PhysicsActor.IsColliding) |
859 | { | 891 | { |
860 | SendAnimPack(Animations.AnimsLLUUID["CROUCH"], 1); | 892 | SetMovementAnimation(Animations.AnimsLLUUID["CROUCH"], 1); |
861 | } | 893 | } |
862 | else if (m_isTyping) | 894 | else if (!PhysicsActor.IsColliding && m_physicsActor.Velocity.Z < -6 && !m_physicsActor.Flying) |
863 | { | 895 | { |
864 | SendAnimPack(Animations.AnimsLLUUID["TYPE"], 1); | 896 | SetMovementAnimation(Animations.AnimsLLUUID["FALLDOWN"], 1); |
865 | } | 897 | } |
866 | else | 898 | else if (!PhysicsActor.IsColliding && Velocity.Z > 0 && !m_physicsActor.Flying && (m_movementflag & (uint)AgentManager.ControlFlags.AGENT_CONTROL_UP_POS) != 0) |
867 | { | 899 | { |
868 | if (!PhysicsActor.IsColliding && m_physicsActor.Velocity.Z < -6 && !m_physicsActor.Flying) | 900 | SetMovementAnimation(Animations.AnimsLLUUID["JUMP"], 1); |
869 | { | 901 | } |
870 | SendAnimPack(Animations.AnimsLLUUID["FALLDOWN"], 1); | 902 | else if (m_physicsActor.Flying) |
871 | } | 903 | { |
872 | else if (!PhysicsActor.IsColliding && Velocity.Z > 0 && !m_physicsActor.Flying && (m_movementflag & (uint)AgentManager.ControlFlags.AGENT_CONTROL_UP_POS) != 0) | 904 | SetMovementAnimation(Animations.AnimsLLUUID["FLY"], 1); |
873 | { | ||
874 | SendAnimPack(Animations.AnimsLLUUID["JUMP"], 1); | ||
875 | } | ||
876 | else | ||
877 | { | ||
878 | if (!m_physicsActor.Flying) | ||
879 | { | ||
880 | SendAnimPack(Animations.AnimsLLUUID["STAND"], 1); | ||
881 | } | ||
882 | } | ||
883 | |||
884 | } | 905 | } |
906 | else | ||
907 | SetMovementAnimation(Animations.AnimsLLUUID["STAND"], 1); | ||
885 | } | 908 | } |
886 | } | 909 | } |
887 | } | 910 | } |
@@ -912,8 +935,8 @@ namespace OpenSim.Region.Environment.Scenes | |||
912 | { | 935 | { |
913 | direc.z *= 3; | 936 | direc.z *= 3; |
914 | //System.Console.WriteLine("Jump"); | 937 | //System.Console.WriteLine("Jump"); |
915 | SendAnimPack(Animations.AnimsLLUUID["PREJUMP"], 1); | 938 | SetMovementAnimation(Animations.AnimsLLUUID["PREJUMP"], 1); |
916 | SendAnimPack(Animations.AnimsLLUUID["JUMP"], 1); | 939 | SetMovementAnimation(Animations.AnimsLLUUID["JUMP"], 1); |
917 | } | 940 | } |
918 | } | 941 | } |
919 | } | 942 | } |
@@ -932,9 +955,10 @@ namespace OpenSim.Region.Environment.Scenes | |||
932 | return; | 955 | return; |
933 | } | 956 | } |
934 | 957 | ||
935 | m_isTyping = typing; | 958 | if (typing) |
936 | 959 | AddAnimation(Animations.AnimsLLUUID["TYPE"], 1); | |
937 | UpdateMovementAnimations(true); | 960 | else |
961 | RemoveAnimation(Animations.AnimsLLUUID["TYPE"]); | ||
938 | } | 962 | } |
939 | 963 | ||
940 | #endregion | 964 | #endregion |
@@ -1122,15 +1146,14 @@ namespace OpenSim.Region.Environment.Scenes | |||
1122 | /// <summary> | 1146 | /// <summary> |
1123 | /// | 1147 | /// |
1124 | /// </summary> | 1148 | /// </summary> |
1125 | /// <param name="animID"></param> | 1149 | /// <param name="animations"></param> |
1126 | /// <param name="seq"></param> | 1150 | /// <param name="seqs"></param> |
1127 | public void SendAnimPack(LLUUID animID, int seq) | 1151 | public void SendAnimPack(LLUUID[] animations, int[] seqs) |
1128 | { | 1152 | { |
1129 | CurrentAnimation = animID; | 1153 | m_scene.Broadcast(delegate(IClientAPI client) |
1130 | AnimationSeq = seq; | 1154 | { |
1131 | LLUUID sourceAgentId = m_controllingClient.AgentId; | 1155 | client.SendAnimations(animations, seqs, m_controllingClient.AgentId); |
1132 | 1156 | }); | |
1133 | m_scene.Broadcast(delegate(IClientAPI client) { client.SendAnimation(animID, seq, sourceAgentId); }); | ||
1134 | } | 1157 | } |
1135 | 1158 | ||
1136 | /// <summary> | 1159 | /// <summary> |
@@ -1138,7 +1161,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
1138 | /// </summary> | 1161 | /// </summary> |
1139 | public void SendAnimPack() | 1162 | public void SendAnimPack() |
1140 | { | 1163 | { |
1141 | SendAnimPack(CurrentAnimation, AnimationSeq); | 1164 | SendAnimPack(m_animations.ToArray(), m_animationSeqs.ToArray()); |
1142 | } | 1165 | } |
1143 | 1166 | ||
1144 | #endregion | 1167 | #endregion |
diff --git a/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs index 82272f8..530b933 100644 --- a/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs +++ b/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs | |||
@@ -58,6 +58,7 @@ namespace SimpleApp | |||
58 | public event SetAppearance OnSetAppearance; | 58 | public event SetAppearance OnSetAppearance; |
59 | public event AvatarNowWearing OnAvatarNowWearing; | 59 | public event AvatarNowWearing OnAvatarNowWearing; |
60 | public event StartAnim OnStartAnim; | 60 | public event StartAnim OnStartAnim; |
61 | public event StopAnim OnStopAnim; | ||
61 | public event LinkObjects OnLinkObjects; | 62 | public event LinkObjects OnLinkObjects; |
62 | public event DelinkObjects OnDelinkObjects; | 63 | public event DelinkObjects OnDelinkObjects; |
63 | public event RequestMapBlocks OnRequestMapBlocks; | 64 | public event RequestMapBlocks OnRequestMapBlocks; |
@@ -198,18 +199,20 @@ namespace SimpleApp | |||
198 | public virtual void SendStartPingCheck(byte seq) | 199 | public virtual void SendStartPingCheck(byte seq) |
199 | { | 200 | { |
200 | } | 201 | } |
202 | |||
201 | public virtual void SendAvatarPickerReply(AvatarPickerReplyPacket response) | 203 | public virtual void SendAvatarPickerReply(AvatarPickerReplyPacket response) |
202 | { | 204 | { |
203 | |||
204 | } | 205 | } |
205 | 206 | ||
206 | public virtual void SendKillObject(ulong regionHandle, uint localID) | 207 | public virtual void SendKillObject(ulong regionHandle, uint localID) |
207 | { | 208 | { |
208 | } | 209 | } |
210 | |||
209 | public virtual void SetChildAgentThrottle(byte[] throttle) | 211 | public virtual void SetChildAgentThrottle(byte[] throttle) |
210 | { | 212 | { |
211 | } | 213 | } |
212 | public virtual void SendAnimation(LLUUID animID, int seq, LLUUID sourceAgentId) | 214 | |
215 | public virtual void SendAnimations(LLUUID[] animations, int[] seqs, LLUUID sourceAgentId) | ||
213 | { | 216 | { |
214 | } | 217 | } |
215 | 218 | ||