aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/YEngine/XMRInstRun.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ScriptEngine/YEngine/XMRInstRun.cs')
-rw-r--r--OpenSim/Region/ScriptEngine/YEngine/XMRInstRun.cs50
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)