diff options
Diffstat (limited to 'OpenSim/Region/ScriptEngine/YEngine/XMRInstRun.cs')
-rw-r--r-- | OpenSim/Region/ScriptEngine/YEngine/XMRInstRun.cs | 50 |
1 files changed, 44 insertions, 6 deletions
diff --git a/OpenSim/Region/ScriptEngine/YEngine/XMRInstRun.cs b/OpenSim/Region/ScriptEngine/YEngine/XMRInstRun.cs index 6c969dc..1b735e3 100644 --- a/OpenSim/Region/ScriptEngine/YEngine/XMRInstRun.cs +++ b/OpenSim/Region/ScriptEngine/YEngine/XMRInstRun.cs | |||
@@ -63,8 +63,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine | |||
63 | */ | 63 | */ |
64 | public void PostEvent(EventParams evt) | 64 | public void PostEvent(EventParams evt) |
65 | { | 65 | { |
66 | ScriptEventCode evc = (ScriptEventCode)Enum.Parse(typeof(ScriptEventCode), | 66 | ScriptEventCode evc = (ScriptEventCode)Enum.Parse(typeof(ScriptEventCode), evt.EventName); |
67 | evt.EventName); | ||
68 | 67 | ||
69 | // Put event on end of event queue. | 68 | // Put event on end of event queue. |
70 | bool startIt = false; | 69 | bool startIt = false; |
@@ -86,6 +85,47 @@ namespace OpenSim.Region.ScriptEngine.Yengine | |||
86 | if(!m_Running && !construct) | 85 | if(!m_Running && !construct) |
87 | return; | 86 | return; |
88 | 87 | ||
88 | if(m_minEventDelay != 0) | ||
89 | { | ||
90 | switch (evc) | ||
91 | { | ||
92 | // ignore some events by time set by llMinEventDelay | ||
93 | case ScriptEventCode.collision: | ||
94 | case ScriptEventCode.land_collision: | ||
95 | case ScriptEventCode.listen: | ||
96 | case ScriptEventCode.not_at_target: | ||
97 | case ScriptEventCode.not_at_rot_target: | ||
98 | case ScriptEventCode.no_sensor: | ||
99 | case ScriptEventCode.sensor: | ||
100 | case ScriptEventCode.timer: | ||
101 | case ScriptEventCode.touch: | ||
102 | { | ||
103 | double now = Util.GetTimeStamp(); | ||
104 | if (now < m_nextEventTime) | ||
105 | return; | ||
106 | m_nextEventTime = now + m_minEventDelay; | ||
107 | break; | ||
108 | } | ||
109 | case ScriptEventCode.changed: | ||
110 | { | ||
111 | const int canignore = ~(CHANGED_SCALE | CHANGED_POSITION); | ||
112 | int change = (int)evt.Params[0]; | ||
113 | if(change == 0) // what? | ||
114 | return; | ||
115 | if((change & canignore) == 0) | ||
116 | { | ||
117 | double now = Util.GetTimeStamp(); | ||
118 | if (now < m_nextEventTime) | ||
119 | return; | ||
120 | m_nextEventTime = now + m_minEventDelay; | ||
121 | } | ||
122 | break; | ||
123 | } | ||
124 | default: | ||
125 | break; | ||
126 | } | ||
127 | } | ||
128 | |||
89 | // Only so many of each event type allowed to queue. | 129 | // Only so many of each event type allowed to queue. |
90 | if((uint)evc < (uint)m_EventCounts.Length) | 130 | if((uint)evc < (uint)m_EventCounts.Length) |
91 | { | 131 | { |
@@ -124,10 +164,8 @@ namespace OpenSim.Region.ScriptEngine.Yengine | |||
124 | for(lln2 = m_EventQueue.First; lln2 != null; lln2 = lln2.Next) | 164 | for(lln2 = m_EventQueue.First; lln2 != null; lln2 = lln2.Next) |
125 | { | 165 | { |
126 | EventParams evt2 = lln2.Value; | 166 | EventParams evt2 = lln2.Value; |
127 | ScriptEventCode evc2 = (ScriptEventCode)Enum.Parse(typeof(ScriptEventCode), | 167 | ScriptEventCode evc2 = (ScriptEventCode)Enum.Parse(typeof(ScriptEventCode), evt2.EventName); |
128 | evt2.EventName); | 168 | if((evc2 != ScriptEventCode.state_entry) && (evc2 != ScriptEventCode.attach)) |
129 | if((evc2 != ScriptEventCode.state_entry) && | ||
130 | (evc2 != ScriptEventCode.attach)) | ||
131 | break; | 169 | break; |
132 | } | 170 | } |
133 | if(lln2 == null) | 171 | if(lln2 == null) |