diff options
Diffstat (limited to '')
10 files changed, 49 insertions, 33 deletions
diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs index 759059f..673810e 100644 --- a/OpenSim/Framework/IClientAPI.cs +++ b/OpenSim/Framework/IClientAPI.cs | |||
@@ -794,7 +794,7 @@ namespace OpenSim.Framework | |||
794 | /// <param name="localID"></param> | 794 | /// <param name="localID"></param> |
795 | void SendKillObject(ulong regionHandle, uint localID); | 795 | void SendKillObject(ulong regionHandle, uint localID); |
796 | 796 | ||
797 | void SendAnimations(UUID[] animID, int[] seqs, UUID sourceAgentId); | 797 | void SendAnimations(UUID[] animID, int[] seqs, UUID sourceAgentId, UUID[] objectIDs); |
798 | void SendRegionHandshake(RegionInfo regionInfo, RegionHandshakeArgs args); | 798 | void SendRegionHandshake(RegionInfo regionInfo, RegionHandshakeArgs args); |
799 | 799 | ||
800 | void SendChatMessage(string message, byte type, Vector3 fromPos, string fromName, UUID fromAgentID, byte source, | 800 | void SendChatMessage(string message, byte type, Vector3 fromPos, string fromName, UUID fromAgentID, byte source, |
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index dd0f6ac..3565e5a 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | |||
@@ -2493,15 +2493,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
2493 | OutPacket(avp, ThrottleOutPacketType.Task); | 2493 | OutPacket(avp, ThrottleOutPacketType.Task); |
2494 | } | 2494 | } |
2495 | 2495 | ||
2496 | public void SendAnimations(UUID[] animations, int[] seqs, UUID sourceAgentId) | 2496 | public void SendAnimations(UUID[] animations, int[] seqs, UUID sourceAgentId, UUID[] objectIDs) |
2497 | { | 2497 | { |
2498 | //m_log.DebugFormat("[CLIENT]: Sending animations to {0}", Name); | 2498 | //m_log.DebugFormat("[CLIENT]: Sending animations to {0}", Name); |
2499 | 2499 | ||
2500 | AvatarAnimationPacket ani = (AvatarAnimationPacket)PacketPool.Instance.GetPacket(PacketType.AvatarAnimation); | 2500 | AvatarAnimationPacket ani = (AvatarAnimationPacket)PacketPool.Instance.GetPacket(PacketType.AvatarAnimation); |
2501 | // TODO: don't create new blocks if recycling an old packet | 2501 | // TODO: don't create new blocks if recycling an old packet |
2502 | ani.AnimationSourceList = new AvatarAnimationPacket.AnimationSourceListBlock[1]; | 2502 | ani.AnimationSourceList = new AvatarAnimationPacket.AnimationSourceListBlock[animations.Length]; |
2503 | ani.AnimationSourceList[0] = new AvatarAnimationPacket.AnimationSourceListBlock(); | ||
2504 | ani.AnimationSourceList[0].ObjectID = sourceAgentId; | ||
2505 | ani.Sender = new AvatarAnimationPacket.SenderBlock(); | 2503 | ani.Sender = new AvatarAnimationPacket.SenderBlock(); |
2506 | ani.Sender.ID = sourceAgentId; | 2504 | ani.Sender.ID = sourceAgentId; |
2507 | ani.AnimationList = new AvatarAnimationPacket.AnimationListBlock[animations.Length]; | 2505 | ani.AnimationList = new AvatarAnimationPacket.AnimationListBlock[animations.Length]; |
@@ -2511,6 +2509,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
2511 | ani.AnimationList[i] = new AvatarAnimationPacket.AnimationListBlock(); | 2509 | ani.AnimationList[i] = new AvatarAnimationPacket.AnimationListBlock(); |
2512 | ani.AnimationList[i].AnimID = animations[i]; | 2510 | ani.AnimationList[i].AnimID = animations[i]; |
2513 | ani.AnimationList[i].AnimSequenceID = seqs[i]; | 2511 | ani.AnimationList[i].AnimSequenceID = seqs[i]; |
2512 | |||
2513 | ani.AnimationSourceList[i] = new AvatarAnimationPacket.AnimationSourceListBlock(); | ||
2514 | ani.AnimationSourceList[i].ObjectID = objectIDs[i]; | ||
2515 | if (objectIDs[i] == UUID.Zero) | ||
2516 | ani.AnimationSourceList[i].ObjectID = sourceAgentId; | ||
2514 | } | 2517 | } |
2515 | ani.Header.Reliable = false; | 2518 | ani.Header.Reliable = false; |
2516 | OutPacket(ani, ThrottleOutPacketType.Task); | 2519 | OutPacket(ani, ThrottleOutPacketType.Task); |
diff --git a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs index 1ee4424..4e11759 100644 --- a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs +++ b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs | |||
@@ -393,7 +393,7 @@ namespace OpenSim.Region.Examples.SimpleModule | |||
393 | } | 393 | } |
394 | 394 | ||
395 | 395 | ||
396 | public virtual void SendAnimations(UUID[] animations, int[] seqs, UUID sourceAgentId) | 396 | public virtual void SendAnimations(UUID[] animations, int[] seqs, UUID sourceAgentId, UUID[] objectIDs) |
397 | { | 397 | { |
398 | } | 398 | } |
399 | 399 | ||
diff --git a/OpenSim/Region/Framework/Scenes/Animation.cs b/OpenSim/Region/Framework/Scenes/Animation.cs index cb0afa7..6f0681c 100644 --- a/OpenSim/Region/Framework/Scenes/Animation.cs +++ b/OpenSim/Region/Framework/Scenes/Animation.cs | |||
@@ -45,14 +45,22 @@ namespace OpenSim.Region.Framework.Scenes | |||
45 | set { sequenceNum = value; } | 45 | set { sequenceNum = value; } |
46 | } | 46 | } |
47 | 47 | ||
48 | private UUID objectID; | ||
49 | public UUID ObjectID | ||
50 | { | ||
51 | get { return objectID; } | ||
52 | set { objectID = value; } | ||
53 | } | ||
54 | |||
48 | public Animation() | 55 | public Animation() |
49 | { | 56 | { |
50 | } | 57 | } |
51 | 58 | ||
52 | public Animation(UUID animID, int sequenceNum) | 59 | public Animation(UUID animID, int sequenceNum, UUID objectID) |
53 | { | 60 | { |
54 | this.animID = animID; | 61 | this.animID = animID; |
55 | this.sequenceNum = sequenceNum; | 62 | this.sequenceNum = sequenceNum; |
63 | this.objectID = objectID; | ||
56 | } | 64 | } |
57 | } | 65 | } |
58 | } | 66 | } |
diff --git a/OpenSim/Region/Framework/Scenes/AnimationSet.cs b/OpenSim/Region/Framework/Scenes/AnimationSet.cs index 49bcda8..864e599 100644 --- a/OpenSim/Region/Framework/Scenes/AnimationSet.cs +++ b/OpenSim/Region/Framework/Scenes/AnimationSet.cs | |||
@@ -60,13 +60,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
60 | return false; | 60 | return false; |
61 | } | 61 | } |
62 | 62 | ||
63 | public bool Add(UUID animID, int sequenceNum) | 63 | public bool Add(UUID animID, int sequenceNum, UUID objectID) |
64 | { | 64 | { |
65 | lock (m_animations) | 65 | lock (m_animations) |
66 | { | 66 | { |
67 | if (!HasAnimation(animID)) | 67 | if (!HasAnimation(animID)) |
68 | { | 68 | { |
69 | m_animations.Add(new Animation(animID, sequenceNum)); | 69 | m_animations.Add(new Animation(animID, sequenceNum, objectID)); |
70 | return true; | 70 | return true; |
71 | } | 71 | } |
72 | } | 72 | } |
@@ -106,11 +106,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
106 | /// The default animation is reserved for "main" animations | 106 | /// The default animation is reserved for "main" animations |
107 | /// that are mutually exclusive, e.g. flying and sitting. | 107 | /// that are mutually exclusive, e.g. flying and sitting. |
108 | /// </summary> | 108 | /// </summary> |
109 | public bool SetDefaultAnimation(UUID animID, int sequenceNum) | 109 | public bool SetDefaultAnimation(UUID animID, int sequenceNum, UUID objectID) |
110 | { | 110 | { |
111 | if (m_defaultAnimation.AnimID != animID) | 111 | if (m_defaultAnimation.AnimID != animID) |
112 | { | 112 | { |
113 | m_defaultAnimation = new Animation(animID, sequenceNum); | 113 | m_defaultAnimation = new Animation(animID, sequenceNum, objectID); |
114 | return true; | 114 | return true; |
115 | } | 115 | } |
116 | return false; | 116 | return false; |
@@ -118,27 +118,28 @@ namespace OpenSim.Region.Framework.Scenes | |||
118 | 118 | ||
119 | protected bool ResetDefaultAnimation() | 119 | protected bool ResetDefaultAnimation() |
120 | { | 120 | { |
121 | return TrySetDefaultAnimation("STAND", 1); | 121 | return TrySetDefaultAnimation("STAND", 1, UUID.Zero); |
122 | } | 122 | } |
123 | 123 | ||
124 | /// <summary> | 124 | /// <summary> |
125 | /// Set the animation as the default animation if it's known | 125 | /// Set the animation as the default animation if it's known |
126 | /// </summary> | 126 | /// </summary> |
127 | public bool TrySetDefaultAnimation(string anim, int sequenceNum) | 127 | public bool TrySetDefaultAnimation(string anim, int sequenceNum, UUID objectID) |
128 | { | 128 | { |
129 | if (Animations.AnimsUUID.ContainsKey(anim)) | 129 | if (Animations.AnimsUUID.ContainsKey(anim)) |
130 | { | 130 | { |
131 | return SetDefaultAnimation(Animations.AnimsUUID[anim], sequenceNum); | 131 | return SetDefaultAnimation(Animations.AnimsUUID[anim], sequenceNum, objectID); |
132 | } | 132 | } |
133 | return false; | 133 | return false; |
134 | } | 134 | } |
135 | 135 | ||
136 | public void GetArrays(out UUID[] animIDs, out int[] sequenceNums) | 136 | public void GetArrays(out UUID[] animIDs, out int[] sequenceNums, out UUID[] objectIDs) |
137 | { | 137 | { |
138 | lock (m_animations) | 138 | lock (m_animations) |
139 | { | 139 | { |
140 | animIDs = new UUID[m_animations.Count + 1]; | 140 | animIDs = new UUID[m_animations.Count + 1]; |
141 | sequenceNums = new int[m_animations.Count + 1]; | 141 | sequenceNums = new int[m_animations.Count + 1]; |
142 | objectIDs = new UUID[m_animations.Count + 1]; | ||
142 | 143 | ||
143 | animIDs[0] = m_defaultAnimation.AnimID; | 144 | animIDs[0] = m_defaultAnimation.AnimID; |
144 | sequenceNums[0] = m_defaultAnimation.SequenceNum; | 145 | sequenceNums[0] = m_defaultAnimation.SequenceNum; |
@@ -147,6 +148,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
147 | { | 148 | { |
148 | animIDs[i + 1] = m_animations[i].AnimID; | 149 | animIDs[i + 1] = m_animations[i].AnimID; |
149 | sequenceNums[i + 1] = m_animations[i].SequenceNum; | 150 | sequenceNums[i + 1] = m_animations[i].SequenceNum; |
151 | objectIDs[i + i] = m_animations[i].ObjectID; | ||
150 | } | 152 | } |
151 | } | 153 | } |
152 | } | 154 | } |
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index fc3166a..a488f59 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -1754,18 +1754,18 @@ namespace OpenSim.Region.Framework.Scenes | |||
1754 | } | 1754 | } |
1755 | } | 1755 | } |
1756 | 1756 | ||
1757 | public void AddAnimation(UUID animID) | 1757 | public void AddAnimation(UUID animID, UUID objectID) |
1758 | { | 1758 | { |
1759 | if (m_isChildAgent) | 1759 | if (m_isChildAgent) |
1760 | return; | 1760 | return; |
1761 | 1761 | ||
1762 | if (m_animations.Add(animID, m_controllingClient.NextAnimationSequenceNumber)) | 1762 | if (m_animations.Add(animID, m_controllingClient.NextAnimationSequenceNumber, objectID)) |
1763 | { | 1763 | { |
1764 | SendAnimPack(); | 1764 | SendAnimPack(); |
1765 | } | 1765 | } |
1766 | } | 1766 | } |
1767 | 1767 | ||
1768 | public void AddAnimation(string name) | 1768 | public void AddAnimation(string name, UUID objectID) |
1769 | { | 1769 | { |
1770 | if (m_isChildAgent) | 1770 | if (m_isChildAgent) |
1771 | return; | 1771 | return; |
@@ -1774,7 +1774,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1774 | if (animID == UUID.Zero) | 1774 | if (animID == UUID.Zero) |
1775 | return; | 1775 | return; |
1776 | 1776 | ||
1777 | AddAnimation(animID); | 1777 | AddAnimation(animID, objectID); |
1778 | } | 1778 | } |
1779 | 1779 | ||
1780 | public void RemoveAnimation(UUID animID) | 1780 | public void RemoveAnimation(UUID animID) |
@@ -1804,13 +1804,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
1804 | { | 1804 | { |
1805 | UUID[] animIDs; | 1805 | UUID[] animIDs; |
1806 | int[] sequenceNums; | 1806 | int[] sequenceNums; |
1807 | m_animations.GetArrays( out animIDs, out sequenceNums ); | 1807 | UUID[] objectIDs; |
1808 | m_animations.GetArrays( out animIDs, out sequenceNums, out objectIDs); | ||
1808 | return animIDs; | 1809 | return animIDs; |
1809 | } | 1810 | } |
1810 | 1811 | ||
1811 | public void HandleStartAnim(IClientAPI remoteClient, UUID animID) | 1812 | public void HandleStartAnim(IClientAPI remoteClient, UUID animID) |
1812 | { | 1813 | { |
1813 | AddAnimation(animID); | 1814 | AddAnimation(animID, UUID.Zero); |
1814 | } | 1815 | } |
1815 | 1816 | ||
1816 | public void HandleStopAnim(IClientAPI remoteClient, UUID animID) | 1817 | public void HandleStopAnim(IClientAPI remoteClient, UUID animID) |
@@ -1826,7 +1827,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1826 | { | 1827 | { |
1827 | //m_log.DebugFormat("Updating movement animation to {0}", anim); | 1828 | //m_log.DebugFormat("Updating movement animation to {0}", anim); |
1828 | 1829 | ||
1829 | if (m_animations.TrySetDefaultAnimation(anim, m_controllingClient.NextAnimationSequenceNumber)) | 1830 | if (m_animations.TrySetDefaultAnimation(anim, m_controllingClient.NextAnimationSequenceNumber, UUID.Zero)) |
1830 | { | 1831 | { |
1831 | SendAnimPack(); | 1832 | SendAnimPack(); |
1832 | } | 1833 | } |
@@ -2284,13 +2285,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
2284 | /// </summary> | 2285 | /// </summary> |
2285 | /// <param name="animations"></param> | 2286 | /// <param name="animations"></param> |
2286 | /// <param name="seqs"></param> | 2287 | /// <param name="seqs"></param> |
2287 | public void SendAnimPack(UUID[] animations, int[] seqs) | 2288 | public void SendAnimPack(UUID[] animations, int[] seqs, UUID[] objectIDs) |
2288 | { | 2289 | { |
2289 | if (m_isChildAgent) | 2290 | if (m_isChildAgent) |
2290 | return; | 2291 | return; |
2291 | 2292 | ||
2292 | m_scene.Broadcast( | 2293 | m_scene.Broadcast( |
2293 | delegate(IClientAPI client) { client.SendAnimations(animations, seqs, m_controllingClient.AgentId); }); | 2294 | delegate(IClientAPI client) { client.SendAnimations(animations, seqs, m_controllingClient.AgentId, objectIDs); }); |
2294 | } | 2295 | } |
2295 | 2296 | ||
2296 | public void SendAnimPackToClient(IClientAPI client) | 2297 | public void SendAnimPackToClient(IClientAPI client) |
@@ -2299,10 +2300,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
2299 | return; | 2300 | return; |
2300 | UUID[] animIDs; | 2301 | UUID[] animIDs; |
2301 | int[] sequenceNums; | 2302 | int[] sequenceNums; |
2303 | UUID[] objectIDs; | ||
2302 | 2304 | ||
2303 | m_animations.GetArrays(out animIDs, out sequenceNums); | 2305 | m_animations.GetArrays(out animIDs, out sequenceNums, out objectIDs); |
2304 | 2306 | ||
2305 | client.SendAnimations(animIDs, sequenceNums, m_controllingClient.AgentId); | 2307 | client.SendAnimations(animIDs, sequenceNums, m_controllingClient.AgentId, objectIDs); |
2306 | } | 2308 | } |
2307 | 2309 | ||
2308 | /// <summary> | 2310 | /// <summary> |
@@ -2317,10 +2319,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
2317 | 2319 | ||
2318 | UUID[] animIDs; | 2320 | UUID[] animIDs; |
2319 | int[] sequenceNums; | 2321 | int[] sequenceNums; |
2322 | UUID[] objectIDs; | ||
2320 | 2323 | ||
2321 | m_animations.GetArrays(out animIDs, out sequenceNums); | 2324 | m_animations.GetArrays(out animIDs, out sequenceNums, out objectIDs); |
2322 | 2325 | ||
2323 | SendAnimPack(animIDs, sequenceNums); | 2326 | SendAnimPack(animIDs, sequenceNums, objectIDs); |
2324 | } | 2327 | } |
2325 | 2328 | ||
2326 | #endregion | 2329 | #endregion |
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs index 91518e2..c84ede8 100644 --- a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs | |||
@@ -482,7 +482,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC | |||
482 | } | 482 | } |
483 | 483 | ||
484 | 484 | ||
485 | public virtual void SendAnimations(UUID[] animations, int[] seqs, UUID sourceAgentId) | 485 | public virtual void SendAnimations(UUID[] animations, int[] seqs, UUID sourceAgentId, UUID[] objectIDs) |
486 | { | 486 | { |
487 | } | 487 | } |
488 | 488 | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index e5f097f..5f6ea16 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -2854,9 +2854,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2854 | // Do NOT try to parse UUID, animations cannot be triggered by ID | 2854 | // Do NOT try to parse UUID, animations cannot be triggered by ID |
2855 | UUID animID=InventoryKey(anim, (int)AssetType.Animation); | 2855 | UUID animID=InventoryKey(anim, (int)AssetType.Animation); |
2856 | if (animID == UUID.Zero) | 2856 | if (animID == UUID.Zero) |
2857 | presence.AddAnimation(anim); | 2857 | presence.AddAnimation(anim, m_host.UUID); |
2858 | else | 2858 | else |
2859 | presence.AddAnimation(animID); | 2859 | presence.AddAnimation(animID, m_host.UUID); |
2860 | } | 2860 | } |
2861 | } | 2861 | } |
2862 | } | 2862 | } |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index eeef58b..564648b 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | |||
@@ -559,7 +559,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
559 | if (World.Entities.ContainsKey((UUID)avatar) && World.Entities[avatarID] is ScenePresence) | 559 | if (World.Entities.ContainsKey((UUID)avatar) && World.Entities[avatarID] is ScenePresence) |
560 | { | 560 | { |
561 | ScenePresence target = (ScenePresence)World.Entities[avatarID]; | 561 | ScenePresence target = (ScenePresence)World.Entities[avatarID]; |
562 | target.AddAnimation(animation); | 562 | target.AddAnimation(animation, m_host.UUID); |
563 | } | 563 | } |
564 | } | 564 | } |
565 | 565 | ||
diff --git a/OpenSim/Tests/Common/Mock/TestClient.cs b/OpenSim/Tests/Common/Mock/TestClient.cs index 2463b3b..373ee13 100644 --- a/OpenSim/Tests/Common/Mock/TestClient.cs +++ b/OpenSim/Tests/Common/Mock/TestClient.cs | |||
@@ -443,7 +443,7 @@ namespace OpenSim.Tests.Common.Mock | |||
443 | } | 443 | } |
444 | 444 | ||
445 | 445 | ||
446 | public virtual void SendAnimations(UUID[] animations, int[] seqs, UUID sourceAgentId) | 446 | public virtual void SendAnimations(UUID[] animations, int[] seqs, UUID sourceAgentId, UUID[] objectIDs) |
447 | { | 447 | { |
448 | } | 448 | } |
449 | 449 | ||