mirror of
https://github.com/opensim/opensim.git
synced 2026-08-05 00:46:02 +08:00
Yengine: avoid use of Enum.Parse
This commit is contained in:
@@ -1789,8 +1789,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||
{
|
||||
if (m_Scripts.TryGetValue(itemID, out IScriptInstance instance))
|
||||
{
|
||||
if (instance != null)
|
||||
instance.PostEvent(p);
|
||||
instance?.PostEvent(p);
|
||||
return true;
|
||||
}
|
||||
lock (m_CompileDict)
|
||||
|
||||
@@ -373,7 +373,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine
|
||||
for(lln = m_EventQueue.First; lln != null; lln = lln.Next)
|
||||
{
|
||||
evt = lln.Value;
|
||||
evc = (ScriptEventCode)Enum.Parse(typeof(ScriptEventCode), evt.EventName);
|
||||
m_eventCodeMap.TryGetValue(evt.EventName, out evc);
|
||||
evc1 = (int)evc;
|
||||
evc2 = evc1 - 32;
|
||||
if((((uint)evc1 < (uint)32) && (((mask1 >> evc1) & 1) != 0)) ||
|
||||
|
||||
@@ -582,9 +582,8 @@ namespace OpenSim.Region.ScriptEngine.Yengine
|
||||
m_EventCounts[i] = 0;
|
||||
foreach(EventParams evt in m_EventQueue)
|
||||
{
|
||||
ScriptEventCode eventCode = (ScriptEventCode)Enum.Parse(typeof(ScriptEventCode),
|
||||
evt.EventName);
|
||||
m_EventCounts[(int)eventCode]++;
|
||||
if(m_eventCodeMap.TryGetValue(evt.EventName, out ScriptEventCode eventCode))
|
||||
m_EventCounts[(int)eventCode]++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -929,9 +928,8 @@ namespace OpenSim.Region.ScriptEngine.Yengine
|
||||
m_EventCounts[i] = 0;
|
||||
foreach (EventParams evt in m_EventQueue)
|
||||
{
|
||||
ScriptEventCode evtCode = (ScriptEventCode)Enum.Parse(typeof(ScriptEventCode),
|
||||
evt.EventName);
|
||||
m_EventCounts[(int)evtCode]++;
|
||||
if(m_eventCodeMap.TryGetValue(evt.EventName, out ScriptEventCode evtCode))
|
||||
m_EventCounts[(int)evtCode]++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -219,5 +219,45 @@ namespace OpenSim.Region.ScriptEngine.Yengine
|
||||
// llmineventdelay support
|
||||
double m_minEventDelay = 0.0;
|
||||
double m_nextEventTime = 0.0;
|
||||
|
||||
private static readonly Dictionary<string, ScriptEventCode> m_eventCodeMap = new Dictionary<string, ScriptEventCode>()
|
||||
{
|
||||
{"attach", ScriptEventCode.attach},
|
||||
{"at_rot_target", ScriptEventCode.at_rot_target},
|
||||
{"at_target", ScriptEventCode.at_target},
|
||||
{"collision", ScriptEventCode.collision},
|
||||
{"collision_end", ScriptEventCode.collision_end},
|
||||
{"collision_start", ScriptEventCode.collision_start},
|
||||
{"control", ScriptEventCode.control},
|
||||
{"dataserver", ScriptEventCode.dataserver},
|
||||
{"email", ScriptEventCode.email},
|
||||
{"http_response", ScriptEventCode.http_response},
|
||||
{"land_collision", ScriptEventCode.land_collision},
|
||||
{"land_collision_end", ScriptEventCode.land_collision_end},
|
||||
{"land_collision_start", ScriptEventCode.land_collision_start},
|
||||
{"listen", ScriptEventCode.listen},
|
||||
{"money", ScriptEventCode.money},
|
||||
{"moving_end", ScriptEventCode.moving_end},
|
||||
{"moving_start", ScriptEventCode.moving_start},
|
||||
{"not_at_rot_target", ScriptEventCode.not_at_rot_target},
|
||||
{"not_at_target", ScriptEventCode.not_at_target},
|
||||
{"remote_data", ScriptEventCode.remote_data},
|
||||
{"run_time_permissions", ScriptEventCode.run_time_permissions},
|
||||
{"state_entry", ScriptEventCode.state_entry},
|
||||
{"state_exit", ScriptEventCode.state_exit},
|
||||
{"timer", ScriptEventCode.timer},
|
||||
{"touch", ScriptEventCode.touch},
|
||||
{"touch_end", ScriptEventCode.touch_end},
|
||||
{"touch_start", ScriptEventCode.touch_start},
|
||||
{"transaction_result", ScriptEventCode.transaction_result},
|
||||
{"object_rez", ScriptEventCode.object_rez},
|
||||
{"changed", ScriptEventCode.changed},
|
||||
{"link_message", ScriptEventCode.link_message},
|
||||
{"no_sensor", ScriptEventCode.no_sensor},
|
||||
{"on_rez", ScriptEventCode.on_rez},
|
||||
{"sensor", ScriptEventCode.sensor},
|
||||
{"http_request", ScriptEventCode.http_request},
|
||||
{"path_update", ScriptEventCode.path_update}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,7 +63,8 @@ namespace OpenSim.Region.ScriptEngine.Yengine
|
||||
*/
|
||||
public void PostEvent(EventParams evt)
|
||||
{
|
||||
ScriptEventCode evc = (ScriptEventCode)Enum.Parse(typeof(ScriptEventCode), evt.EventName);
|
||||
if(!m_eventCodeMap.TryGetValue(evt.EventName, out ScriptEventCode evc))
|
||||
return;
|
||||
|
||||
// Put event on end of event queue.
|
||||
bool startIt = false;
|
||||
@@ -175,7 +176,7 @@ 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);
|
||||
m_eventCodeMap.TryGetValue(evt2.EventName, out ScriptEventCode evc2);
|
||||
if((evc2 != ScriptEventCode.state_entry) && (evc2 != ScriptEventCode.attach))
|
||||
break;
|
||||
}
|
||||
@@ -239,15 +240,8 @@ namespace OpenSim.Region.ScriptEngine.Yengine
|
||||
|
||||
public void CancelEvent(string eventName)
|
||||
{
|
||||
ScriptEventCode evc;
|
||||
try
|
||||
{
|
||||
evc = (ScriptEventCode)Enum.Parse(typeof(ScriptEventCode), eventName);
|
||||
}
|
||||
catch
|
||||
{
|
||||
if (!m_eventCodeMap.TryGetValue(eventName, out ScriptEventCode evc))
|
||||
return;
|
||||
}
|
||||
|
||||
lock (m_QueueLock)
|
||||
{
|
||||
@@ -373,7 +367,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine
|
||||
if(m_EventQueue.First != null)
|
||||
{
|
||||
evt = m_EventQueue.First.Value;
|
||||
evc = (ScriptEventCode)Enum.Parse(typeof(ScriptEventCode), evt.EventName);
|
||||
m_eventCodeMap.TryGetValue(evt.EventName, out evc);
|
||||
if (m_DetachQuantum > 0)
|
||||
{
|
||||
if(evc != ScriptEventCode.attach)
|
||||
@@ -390,7 +384,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine
|
||||
}
|
||||
}
|
||||
m_EventQueue.RemoveFirst();
|
||||
if((int)evc >= 0)
|
||||
if(evc >= 0)
|
||||
m_EventCounts[(int)evc]--;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user