From d1fcb9c35dca3f3e24d122ec84bc018635a0ac0d Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Fri, 4 Sep 2020 15:31:42 +0100 Subject: [PATCH] filter some changed events at trigger point --- .../EntityTransfer/EntityTransferModule.cs | 3 +- .../Scenes/Animation/ScenePresenceAnimator.cs | 5 ++-- .../Framework/Scenes/SceneObjectGroup.cs | 5 +++- .../Framework/Scenes/SceneObjectPart.cs | 3 +- .../Region/Framework/Scenes/ScenePresence.cs | 29 +++++-------------- 5 files changed, 17 insertions(+), 28 deletions(-) diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs index 19c4b1dc2e..36550f4cbf 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs @@ -564,7 +564,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer foreach (SceneObjectGroup grp in sp.GetAttachments()) { - sp.Scene.EventManager.TriggerOnScriptChangedEvent(grp.LocalId, (uint)Changed.TELEPORT); + if ((grp.ScriptEvents & scriptEvents.changed) != 0) + sp.Scene.EventManager.TriggerOnScriptChangedEvent(grp.LocalId, (uint)Changed.TELEPORT); } m_entityTransferStateMachine.UpdateInTransit(sp.UUID, AgentTransferState.CleaningUp); diff --git a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs index 9abb2eccb7..c57f98072b 100644 --- a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs +++ b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs @@ -223,7 +223,7 @@ namespace OpenSim.Region.Framework.Scenes.Animation { m_animations.SetDefaultAnimation(overridenAnim, m_scenePresence.ControllingClient.NextAnimationSequenceNumber, m_scenePresence.UUID); } - m_scenePresence.SendScriptEventToAttachments("changed", new Object[] { (int)Changed.ANIMATION }); + m_scenePresence.SendScriptChangedEventToAttachments(Changed.ANIMATION); SendAnimPack(); ret = true; } @@ -239,8 +239,7 @@ namespace OpenSim.Region.Framework.Scenes.Animation // "[SCENE PRESENCE ANIMATOR]: Updating movement animation to {0} for {1}", // anim, m_scenePresence.Name); - // 16384 is CHANGED_ANIMATION - m_scenePresence.SendScriptEventToAttachments("changed", new Object[] { (int)Changed.ANIMATION }); + m_scenePresence.SendScriptChangedEventToAttachments(Changed.ANIMATION); SendAnimPack(); ret = true; } diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 974839d3de..8ce4d4fe99 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs @@ -689,7 +689,7 @@ namespace OpenSim.Region.Framework.Scenes } // now that position is changed tell it to scripts - if (triggerScriptEvent) + if (triggerScriptEvent && (ScriptEvents & scriptEvents.changed) != 0) { foreach (SceneObjectPart part in parts) { @@ -2277,6 +2277,8 @@ namespace OpenSim.Region.Framework.Scenes private scriptEvents lastRootPartPhysEvents = 0; + public scriptEvents ScriptEvents; + public void aggregateScriptEvents() { PrimFlags objectflagupdate = (PrimFlags)RootPart.GetEffectiveObjectFlags(); @@ -2328,6 +2330,7 @@ namespace OpenSim.Region.Framework.Scenes parts[i].UpdatePhysicsSubscribedEvents(); } + ScriptEvents = aggregatedScriptEvents; ScheduleGroupForFullUpdate(); } diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index dae13c291e..0287352b1d 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs @@ -4503,7 +4503,8 @@ namespace OpenSim.Region.Framework.Scenes public void TriggerScriptChangedEvent(Changed val, object data = null) { - if (ParentGroup != null && ParentGroup.Scene != null) + //if (ParentGroup != null && ParentGroup.Scene != null && (ScriptEvents & scriptEvents.changed) != 0) + if ((ScriptEvents & scriptEvents.changed) != 0) ParentGroup.Scene.EventManager.TriggerOnScriptChangedEvent(LocalId, (uint)val, data); } diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 20893bb168..fde8dbf641 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -5850,36 +5850,21 @@ namespace OpenSim.Region.Framework.Scenes } } - /// - /// Send a script event to this scene presence's attachments - /// - /// The name of the event - /// The arguments for the event - public void SendScriptEventToAttachments(string eventName, Object[] args) + public void SendScriptChangedEventToAttachments(Changed val) { - Util.FireAndForget(delegate(object x) + lock (m_attachments) { - if (m_scriptEngines.Length == 0) - return; - - lock (m_attachments) + foreach (SceneObjectGroup grp in m_attachments) { - foreach (SceneObjectGroup grp in m_attachments) + if ((grp.ScriptEvents & scriptEvents.changed) != 0) { - // 16384 is CHANGED_ANIMATION - // - // Send this to all attachment root prims - // - foreach (IScriptModule m in m_scriptEngines) + foreach(SceneObjectPart sop in grp.Parts) { - if (m == null) // No script engine loaded - continue; - - m.PostObjectEvent(grp.RootPart.UUID, "changed", new Object[] { (int)Changed.ANIMATION }); + sop.TriggerScriptChangedEvent(val); } } } - }, null, "ScenePresence.SendScriptEventToAttachments"); + } } ///