From 217b2d93ae77925e9ebbb0ef3e9b44d47e4234db Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Sat, 11 Apr 2009 16:51:27 +0000 Subject: [PATCH] Adding a script event, changed(CHANGED_ANIMATION) This is sent to all root prims of all attachments of an avatar when the animation state changes. llGetAnimation() can thenbe used to find the new movement animation. This eliminates the need for fast timers in AOs --- .../Framework/Interfaces/IScriptModule.cs | 1 + .../Region/Framework/Scenes/ScenePresence.cs | 23 ++++++++++++++++++- .../ScriptEngine/DotNetEngine/ScriptEngine.cs | 9 ++++++++ .../Shared/Api/Runtime/LSL_Constants.cs | 1 + .../Region/ScriptEngine/XEngine/XEngine.cs | 9 ++++++++ 5 files changed, 42 insertions(+), 1 deletion(-) diff --git a/OpenSim/Region/Framework/Interfaces/IScriptModule.cs b/OpenSim/Region/Framework/Interfaces/IScriptModule.cs index 7d7f90432e..51dcb7d7df 100644 --- a/OpenSim/Region/Framework/Interfaces/IScriptModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IScriptModule.cs @@ -38,5 +38,6 @@ namespace OpenSim.Region.Framework.Interfaces string GetXMLState(UUID itemID); bool PostScriptEvent(UUID itemID, string name, Object[] args); + bool PostObjectEvent(UUID itemID, string name, Object[] args); } } diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 2c316a6abd..d06c5838fb 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -223,6 +223,8 @@ namespace OpenSim.Region.Framework.Scenes string m_callbackURI; ulong m_rootRegionHandle; + private IScriptModule[] m_scriptEngines; + #region Properties /// @@ -585,6 +587,8 @@ namespace OpenSim.Region.Framework.Scenes if (gm != null) m_grouptitle = gm.GetGroupTitle(m_uuid); + m_scriptEngines = m_scene.RequestModuleInterfaces(); + AbsolutePosition = m_controllingClient.StartPos; AdjustKnownSeeds(); @@ -1943,7 +1947,24 @@ namespace OpenSim.Region.Framework.Scenes if (m_animations.TrySetDefaultAnimation(anim, m_controllingClient.NextAnimationSequenceNumber, UUID.Zero)) { - SendAnimPack(); + if (m_scriptEngines != null) + { + lock (m_attachments) + { + foreach (SceneObjectGroup grp in m_attachments) + { + // 16384 is CHANGED_ANIMATION + // + // Send this to all attachment root prims + // + foreach (IScriptModule m in m_scriptEngines) + { + m.PostObjectEvent(grp.RootPart.UUID, "changed", new Object[] {16384}); + } + SendAnimPack(); + } + } + } } } diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptEngine.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptEngine.cs index 34a7c7adfa..c3b52dfec2 100644 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptEngine.cs +++ b/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptEngine.cs @@ -222,6 +222,15 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine return PostScriptEvent(itemID, new EventParams(name, p, new DetectParams[0])); } + public bool PostObjectEvent(UUID itemID, string name, Object[] p) + { + SceneObjectPart part = m_Scene.GetSceneObjectPart(itemID); + if (part == null) + return false; + + return PostObjectEvent(part.LocalId, new EventParams(name, p, new DetectParams[0])); + } + public DetectParams GetDetectParams(UUID itemID, int number) { uint localID = m_ScriptManager.GetLocalID(itemID); diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs index 5969a43329..c9777ad65a 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs @@ -268,6 +268,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase public const int CHANGED_REGION_RESTART = 256; public const int CHANGED_REGION = 512; public const int CHANGED_TELEPORT = 1024; + public const int CHANGED_ANIMATION = 16384; public const int TYPE_INVALID = 0; public const int TYPE_INTEGER = 1; public const int TYPE_FLOAT = 2; diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs index 037c494bb5..f47e57daa9 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs @@ -938,6 +938,15 @@ namespace OpenSim.Region.ScriptEngine.XEngine return PostScriptEvent(itemID, new EventParams(name, p, new DetectParams[0])); } + public bool PostObjectEvent(UUID itemID, string name, Object[] p) + { + SceneObjectPart part = m_Scene.GetSceneObjectPart(itemID); + if (part == null) + return false; + + return PostObjectEvent(part.LocalId, new EventParams(name, p, new DetectParams[0])); + } + public Assembly OnAssemblyResolve(object sender, ResolveEventArgs args) {