From 72c472f98858a6609d12ad36791fe497cd9f21d5 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Wed, 20 Feb 2019 20:12:13 +0000 Subject: Yengine: let llminEventDelay do something: it just ignores a more limited set of events than Xengine (neither do as SL) --- .../ScriptEngine/YEngine/MMRScriptEventCode.cs | 5 +--- OpenSim/Region/ScriptEngine/YEngine/XMREngine.cs | 5 +++- .../Region/ScriptEngine/YEngine/XMRInstBackend.cs | 12 ++++---- OpenSim/Region/ScriptEngine/YEngine/XMRInstMain.cs | 4 +++ OpenSim/Region/ScriptEngine/YEngine/XMRInstMisc.cs | 18 +++++++++++ OpenSim/Region/ScriptEngine/YEngine/XMRInstRun.cs | 35 ++++++++++++++++++---- 6 files changed, 62 insertions(+), 17 deletions(-) diff --git a/OpenSim/Region/ScriptEngine/YEngine/MMRScriptEventCode.cs b/OpenSim/Region/ScriptEngine/YEngine/MMRScriptEventCode.cs index c00e8d4..3539fa1 100644 --- a/OpenSim/Region/ScriptEngine/YEngine/MMRScriptEventCode.cs +++ b/OpenSim/Region/ScriptEngine/YEngine/MMRScriptEventCode.cs @@ -88,10 +88,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine path_update = 40, - // XMRE specific - region_cross = 63, - // marks highest numbered event, ie, number of columns in seht. - Size = 64 + Size = 41 } } diff --git a/OpenSim/Region/ScriptEngine/YEngine/XMREngine.cs b/OpenSim/Region/ScriptEngine/YEngine/XMREngine.cs index 017b294..6acc293 100644 --- a/OpenSim/Region/ScriptEngine/YEngine/XMREngine.cs +++ b/OpenSim/Region/ScriptEngine/YEngine/XMREngine.cs @@ -930,12 +930,15 @@ namespace OpenSim.Region.ScriptEngine.Yengine public void SetMinEventDelay(UUID itemID, double delay) { + XMRInstance instance = GetInstance(itemID); + if (instance != null) + instance.MinEventDelay = delay; } public int GetStartParameter(UUID itemID) { XMRInstance instance = GetInstance(itemID); - if(instance == null) + if (instance == null) return 0; return instance.StartParam; } diff --git a/OpenSim/Region/ScriptEngine/YEngine/XMRInstBackend.cs b/OpenSim/Region/ScriptEngine/YEngine/XMRInstBackend.cs index 6fe11d8..7fc97e9 100644 --- a/OpenSim/Region/ScriptEngine/YEngine/XMRInstBackend.cs +++ b/OpenSim/Region/ScriptEngine/YEngine/XMRInstBackend.cs @@ -422,9 +422,9 @@ namespace OpenSim.Region.ScriptEngine.Yengine object[] saveEHArgs = this.ehArgs; ScriptEventCode saveEventCode = this.eventCode; - this.m_DetectParams = evt.DetectParams; - this.ehArgs = evt.Params; - this.eventCode = evc; + m_DetectParams = evt.DetectParams; + ehArgs = evt.Params; + eventCode = evc; try { @@ -432,9 +432,9 @@ namespace OpenSim.Region.ScriptEngine.Yengine } finally { - this.m_DetectParams = saveDetParams; - this.ehArgs = saveEHArgs; - this.eventCode = saveEventCode; + m_DetectParams = saveDetParams; + ehArgs = saveEHArgs; + eventCode = saveEventCode; } // Keep waiting until we find a returnable event or timeout. diff --git a/OpenSim/Region/ScriptEngine/YEngine/XMRInstMain.cs b/OpenSim/Region/ScriptEngine/YEngine/XMRInstMain.cs index 3c0040c..def06b2 100644 --- a/OpenSim/Region/ScriptEngine/YEngine/XMRInstMain.cs +++ b/OpenSim/Region/ScriptEngine/YEngine/XMRInstMain.cs @@ -215,5 +215,9 @@ namespace OpenSim.Region.ScriptEngine.Yengine // It's born ready, but will be reset when the detach is posted. // It will then be set again on suspend/completion private ManualResetEvent m_DetachReady = new ManualResetEvent(true); + + // llmineventdelay support + double m_minEventDelay = 0.0; + double m_nextEventTime = 0.0; } } diff --git a/OpenSim/Region/ScriptEngine/YEngine/XMRInstMisc.cs b/OpenSim/Region/ScriptEngine/YEngine/XMRInstMisc.cs index 0af3d37..12feb7b 100644 --- a/OpenSim/Region/ScriptEngine/YEngine/XMRInstMisc.cs +++ b/OpenSim/Region/ScriptEngine/YEngine/XMRInstMisc.cs @@ -298,6 +298,24 @@ namespace OpenSim.Region.ScriptEngine.Yengine } } + public double MinEventDelay + { + get + { + return m_minEventDelay; + } + set + { + if (value > 0.001) + m_minEventDelay = value; + else + m_minEventDelay = 0.0; + + m_nextEventTime = 0.0; // reset it + } + } + + public SceneObjectPart SceneObject { get diff --git a/OpenSim/Region/ScriptEngine/YEngine/XMRInstRun.cs b/OpenSim/Region/ScriptEngine/YEngine/XMRInstRun.cs index 6c969dc..9d73a7f 100644 --- a/OpenSim/Region/ScriptEngine/YEngine/XMRInstRun.cs +++ b/OpenSim/Region/ScriptEngine/YEngine/XMRInstRun.cs @@ -63,8 +63,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine */ public void PostEvent(EventParams evt) { - ScriptEventCode evc = (ScriptEventCode)Enum.Parse(typeof(ScriptEventCode), - evt.EventName); + ScriptEventCode evc = (ScriptEventCode)Enum.Parse(typeof(ScriptEventCode), evt.EventName); // Put event on end of event queue. bool startIt = false; @@ -86,6 +85,32 @@ namespace OpenSim.Region.ScriptEngine.Yengine if(!m_Running && !construct) return; + if(m_minEventDelay != 0) + { + switch (evc) + { + // ignore some events by time set by llMinEventDelay + case ScriptEventCode.collision: + case ScriptEventCode.land_collision: + case ScriptEventCode.listen: + case ScriptEventCode.not_at_target: + case ScriptEventCode.not_at_rot_target: + case ScriptEventCode.no_sensor: + case ScriptEventCode.sensor: + case ScriptEventCode.timer: + case ScriptEventCode.touch: + { + double now = Util.GetTimeStamp(); + if (now < m_nextEventTime) + return; + m_nextEventTime = now + m_minEventDelay; + break; + } + default: + break; + } + } + // Only so many of each event type allowed to queue. if((uint)evc < (uint)m_EventCounts.Length) { @@ -124,10 +149,8 @@ namespace OpenSim.Region.ScriptEngine.Yengine for(lln2 = m_EventQueue.First; lln2 != null; lln2 = lln2.Next) { EventParams evt2 = lln2.Value; - ScriptEventCode evc2 = (ScriptEventCode)Enum.Parse(typeof(ScriptEventCode), - evt2.EventName); - if((evc2 != ScriptEventCode.state_entry) && - (evc2 != ScriptEventCode.attach)) + ScriptEventCode evc2 = (ScriptEventCode)Enum.Parse(typeof(ScriptEventCode), evt2.EventName); + if((evc2 != ScriptEventCode.state_entry) && (evc2 != ScriptEventCode.attach)) break; } if(lln2 == null) -- cgit v1.1