Add OnScriptMovingStartEvent and OnScriptMovingEndEvent to EventManager so that these can be triggered by future code (not yet implemented).

Also hooks up moving_start and moving_end script events, eliminating itemID on XEngine EventManager methods since this is completely unused.
An adaptation of the patch in http://opensimulator.org/mantis/view.php?id=6515
Thanks Garmin Kawaguichi and Signpost Marv.
user_profiles
Justin Clark-Casey (justincc) 2013-01-26 03:57:51 +00:00
parent 8ea112a5b2
commit 53833babf9
2 changed files with 60 additions and 2 deletions

View File

@ -549,6 +549,20 @@ namespace OpenSim.Region.Framework.Scenes
/// </remarks> /// </remarks>
public event ScriptControlEvent OnScriptControlEvent; public event ScriptControlEvent OnScriptControlEvent;
public delegate void ScriptMovingStartEvent(uint localID);
/// <summary>
/// TODO: Should be triggered when a physics object starts moving.
/// </summary>
public event ScriptMovingStartEvent OnScriptMovingStartEvent;
public delegate void ScriptMovingEndEvent(uint localID);
/// <summary>
/// TODO: Should be triggered when a physics object stops moving.
/// </summary>
public event ScriptMovingEndEvent OnScriptMovingEndEvent;
public delegate void ScriptAtTargetEvent(uint localID, uint handle, Vector3 targetpos, Vector3 atpos); public delegate void ScriptAtTargetEvent(uint localID, uint handle, Vector3 targetpos, Vector3 atpos);
/// <summary> /// <summary>
@ -2212,6 +2226,48 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
public void TriggerMovingStartEvent(uint localID)
{
ScriptMovingStartEvent handlerScriptMovingStartEvent = OnScriptMovingStartEvent;
if (handlerScriptMovingStartEvent != null)
{
foreach (ScriptMovingStartEvent d in handlerScriptMovingStartEvent.GetInvocationList())
{
try
{
d(localID);
}
catch (Exception e)
{
m_log.ErrorFormat(
"[EVENT MANAGER]: Delegate for TriggerMovingStartEvent failed - continuing. {0} {1}",
e.Message, e.StackTrace);
}
}
}
}
public void TriggerMovingEndEvent(uint localID)
{
ScriptMovingEndEvent handlerScriptMovingEndEvent = OnScriptMovingEndEvent;
if (handlerScriptMovingEndEvent != null)
{
foreach (ScriptMovingEndEvent d in handlerScriptMovingEndEvent.GetInvocationList())
{
try
{
d(localID);
}
catch (Exception e)
{
m_log.ErrorFormat(
"[EVENT MANAGER]: Delegate for TriggerMovingEndEvent failed - continuing. {0} {1}",
e.Message, e.StackTrace);
}
}
}
}
public void TriggerRequestChangeWaterHeight(float height) public void TriggerRequestChangeWaterHeight(float height)
{ {
if (height < 0) if (height < 0)

View File

@ -62,6 +62,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
myScriptEngine.World.EventManager.OnScriptNotAtTargetEvent += not_at_target; myScriptEngine.World.EventManager.OnScriptNotAtTargetEvent += not_at_target;
myScriptEngine.World.EventManager.OnScriptAtRotTargetEvent += at_rot_target; myScriptEngine.World.EventManager.OnScriptAtRotTargetEvent += at_rot_target;
myScriptEngine.World.EventManager.OnScriptNotAtRotTargetEvent += not_at_rot_target; myScriptEngine.World.EventManager.OnScriptNotAtRotTargetEvent += not_at_rot_target;
myScriptEngine.World.EventManager.OnScriptMovingStartEvent += moving_start;
myScriptEngine.World.EventManager.OnScriptMovingEndEvent += moving_end;
myScriptEngine.World.EventManager.OnScriptControlEvent += control; myScriptEngine.World.EventManager.OnScriptControlEvent += control;
myScriptEngine.World.EventManager.OnScriptColliderStart += collision_start; myScriptEngine.World.EventManager.OnScriptColliderStart += collision_start;
myScriptEngine.World.EventManager.OnScriptColliding += collision; myScriptEngine.World.EventManager.OnScriptColliding += collision;
@ -419,14 +421,14 @@ namespace OpenSim.Region.ScriptEngine.XEngine
// dataserver: not handled here // dataserver: not handled here
// link_message: not handled here // link_message: not handled here
public void moving_start(uint localID, UUID itemID) public void moving_start(uint localID)
{ {
myScriptEngine.PostObjectEvent(localID, new EventParams( myScriptEngine.PostObjectEvent(localID, new EventParams(
"moving_start",new object[0], "moving_start",new object[0],
new DetectParams[0])); new DetectParams[0]));
} }
public void moving_end(uint localID, UUID itemID) public void moving_end(uint localID)
{ {
myScriptEngine.PostObjectEvent(localID, new EventParams( myScriptEngine.PostObjectEvent(localID, new EventParams(
"moving_end",new object[0], "moving_end",new object[0],