Fix script controls for weapons

0.6.1-post-fixes
Melanie Thielker 2008-12-16 04:12:40 +00:00
parent 223b6f63af
commit 36ee0e8fb9
1 changed files with 23 additions and 10 deletions

View File

@ -45,7 +45,7 @@ using OSD = OpenMetaverse.StructuredData.OSD;
namespace OpenSim.Region.Environment.Scenes
{
enum ScriptControlled : int
enum ScriptControlled : uint
{
CONTROL_ZERO = 0,
CONTROL_FWD = 1,
@ -85,6 +85,7 @@ namespace OpenSim.Region.Environment.Scenes
private Dictionary<UUID, ScriptControllers> scriptedcontrols = new Dictionary<UUID, ScriptControllers>();
private ScriptControlled IgnoredControls = ScriptControlled.CONTROL_ZERO;
private ScriptControlled LastCommands = ScriptControlled.CONTROL_ZERO;
private bool MouseDown = false;
private SceneObjectGroup proxyObjectGroup = null;
//private SceneObjectPart proxyObjectPart = null;
@ -3341,6 +3342,27 @@ namespace OpenSim.Region.Environment.Scenes
ScriptControlled allflags = ScriptControlled.CONTROL_ZERO;
if (MouseDown)
{
allflags = LastCommands & (ScriptControlled.CONTROL_ML_LBUTTON | ScriptControlled.CONTROL_LBUTTON);
if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_LBUTTON_UP) != 0 || (flags & unchecked((uint)AgentManager.ControlFlags.AGENT_CONTROL_ML_LBUTTON_UP)) != 0)
{
allflags = ScriptControlled.CONTROL_ZERO;
MouseDown = true;
}
}
if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_ML_LBUTTON_DOWN) != 0)
{
allflags |= ScriptControlled.CONTROL_ML_LBUTTON;
MouseDown = true;
}
if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_LBUTTON_DOWN) != 0)
{
allflags |= ScriptControlled.CONTROL_LBUTTON;
MouseDown = true;
}
// find all activated controls, whether the scripts are interested in them or not
if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_AT_POS) != 0 || (flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_POS) != 0)
{
@ -3374,15 +3396,6 @@ namespace OpenSim.Region.Environment.Scenes
{
allflags |= ScriptControlled.CONTROL_ROT_LEFT;
}
if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_ML_LBUTTON_DOWN) != 0)
{
allflags |= ScriptControlled.CONTROL_ML_LBUTTON;
}
if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_LBUTTON_UP) != 0 || (flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_LBUTTON_DOWN) != 0)
{
allflags |= ScriptControlled.CONTROL_LBUTTON;
}
// optimization; we have to check per script, but if nothing is pressed and nothing changed, we can skip that
if (allflags != ScriptControlled.CONTROL_ZERO || allflags != LastCommands)
{