diff options
Diffstat (limited to 'OpenSim/Region/Environment/Scenes/ScenePresence.cs')
-rw-r--r-- | OpenSim/Region/Environment/Scenes/ScenePresence.cs | 104 |
1 files changed, 103 insertions, 1 deletions
diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index 66363b7..fdafd7f 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs | |||
@@ -81,6 +81,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
81 | private List<int> m_animationSeqs = new List<int>(); | 81 | private List<int> m_animationSeqs = new List<int>(); |
82 | private Dictionary<LLUUID, ScriptControllers> scriptedcontrols = new Dictionary<LLUUID, ScriptControllers>(); | 82 | private Dictionary<LLUUID, ScriptControllers> scriptedcontrols = new Dictionary<LLUUID, ScriptControllers>(); |
83 | private ScriptControlled IgnoredControls = ScriptControlled.CONTROL_ZERO; | 83 | private ScriptControlled IgnoredControls = ScriptControlled.CONTROL_ZERO; |
84 | private ScriptControlled LastCommands = ScriptControlled.CONTROL_ZERO; | ||
84 | 85 | ||
85 | public Vector3 lastKnownAllowedPosition = new Vector3(); | 86 | public Vector3 lastKnownAllowedPosition = new Vector3(); |
86 | public bool sentMessageAboutRestrictedParcelFlyingDown = false; | 87 | public bool sentMessageAboutRestrictedParcelFlyingDown = false; |
@@ -819,6 +820,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
819 | { | 820 | { |
820 | if (scriptedcontrols.Count > 0) | 821 | if (scriptedcontrols.Count > 0) |
821 | { | 822 | { |
823 | SendControlToScripts(flags, LastCommands); | ||
822 | flags = this.RemoveIgnoredControls(flags, IgnoredControls); | 824 | flags = this.RemoveIgnoredControls(flags, IgnoredControls); |
823 | 825 | ||
824 | } | 826 | } |
@@ -2435,7 +2437,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
2435 | } | 2437 | } |
2436 | } | 2438 | } |
2437 | 2439 | ||
2438 | public void SendMovementEventsToScript(int controls, int accept, int pass_on, uint Obj_localID, LLUUID Script_item_LLUUID) | 2440 | public void RegisterControlEventsToScript(int controls, int accept, int pass_on, uint Obj_localID, LLUUID Script_item_LLUUID) |
2439 | { | 2441 | { |
2440 | 2442 | ||
2441 | ScriptControllers obj = new ScriptControllers(); | 2443 | ScriptControllers obj = new ScriptControllers(); |
@@ -2489,6 +2491,106 @@ namespace OpenSim.Region.Environment.Scenes | |||
2489 | 2491 | ||
2490 | 2492 | ||
2491 | } | 2493 | } |
2494 | |||
2495 | public void UnRegisterControlEventsToScript(uint Obj_localID, LLUUID Script_item_LLUUID) | ||
2496 | { | ||
2497 | lock (scriptedcontrols) | ||
2498 | { | ||
2499 | if (scriptedcontrols.ContainsKey(Script_item_LLUUID)) | ||
2500 | { | ||
2501 | scriptedcontrols.Remove(Script_item_LLUUID); | ||
2502 | IgnoredControls = ScriptControlled.CONTROL_ZERO; | ||
2503 | foreach (ScriptControllers scData in scriptedcontrols.Values) | ||
2504 | { | ||
2505 | IgnoredControls |= scData.ignoreControls; | ||
2506 | } | ||
2507 | } | ||
2508 | } | ||
2509 | } | ||
2510 | |||
2511 | internal void SendControlToScripts(uint flags, ScriptControlled lastFlags) | ||
2512 | { | ||
2513 | |||
2514 | ScriptControlled allflags = ScriptControlled.CONTROL_ZERO; | ||
2515 | if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_AT_POS) != 0 || (flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_POS) != 0) | ||
2516 | { | ||
2517 | allflags |= ScriptControlled.CONTROL_FWD; | ||
2518 | } | ||
2519 | if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_AT_NEG) != 0 || (flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_NEG) != 0) | ||
2520 | { | ||
2521 | allflags |= ScriptControlled.CONTROL_BACK; | ||
2522 | } | ||
2523 | if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_UP_POS) != 0 || (flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_POS) != 0) | ||
2524 | { | ||
2525 | allflags |= ScriptControlled.CONTROL_UP; | ||
2526 | } | ||
2527 | if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG) != 0 || (flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_NEG) != 0) | ||
2528 | { | ||
2529 | allflags |= ScriptControlled.CONTROL_DOWN; | ||
2530 | } | ||
2531 | if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_LEFT_POS) != 0 || (flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_POS) != 0) | ||
2532 | { | ||
2533 | allflags |= ScriptControlled.CONTROL_LEFT; | ||
2534 | } | ||
2535 | if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_LEFT_NEG) != 0 || (flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_NEG) != 0) | ||
2536 | { | ||
2537 | allflags |= ScriptControlled.CONTROL_RIGHT; | ||
2538 | } | ||
2539 | if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_YAW_POS) != 0) | ||
2540 | { | ||
2541 | allflags |= ScriptControlled.CONTROL_ROT_RIGHT; | ||
2542 | } | ||
2543 | if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_YAW_NEG) != 0) | ||
2544 | { | ||
2545 | allflags |= ScriptControlled.CONTROL_ROT_LEFT; | ||
2546 | } | ||
2547 | if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_ML_LBUTTON_DOWN) != 0) | ||
2548 | { | ||
2549 | allflags |= ScriptControlled.CONTROL_ML_LBUTTON; | ||
2550 | } | ||
2551 | if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_LBUTTON_UP) != 0 || (flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_LBUTTON_DOWN) != 0) | ||
2552 | { | ||
2553 | allflags |= ScriptControlled.CONTROL_LBUTTON; | ||
2554 | } | ||
2555 | ScriptControlled held = ScriptControlled.CONTROL_ZERO; | ||
2556 | ScriptControlled change = ScriptControlled.CONTROL_ZERO; | ||
2557 | |||
2558 | foreach (ScriptControlled DCF in Enum.GetValues(typeof (ScriptControlled))) | ||
2559 | { | ||
2560 | // Held | ||
2561 | if ((lastFlags & DCF) != 0 && (allflags & DCF) != 0) | ||
2562 | { | ||
2563 | held |= DCF; | ||
2564 | continue; | ||
2565 | } | ||
2566 | // Not held recently | ||
2567 | if ((lastFlags & DCF) != 0 && (allflags & DCF) == 0) | ||
2568 | { | ||
2569 | change |= DCF; | ||
2570 | continue; | ||
2571 | } | ||
2572 | // Newly pressed. | ||
2573 | if ((lastFlags & DCF) == 0 && (allflags & DCF) != 0) | ||
2574 | { | ||
2575 | change |= DCF; | ||
2576 | continue; | ||
2577 | } | ||
2578 | |||
2579 | } | ||
2580 | |||
2581 | lock (scriptedcontrols) | ||
2582 | { | ||
2583 | foreach (LLUUID scriptUUID in scriptedcontrols.Keys) | ||
2584 | { | ||
2585 | ScriptControllers scriptControlData = scriptedcontrols[scriptUUID]; | ||
2586 | ScriptControlled localHeld = held & scriptControlData.eventControls; | ||
2587 | ScriptControlled localChange = change & scriptControlData.eventControls; | ||
2588 | m_scene.EventManager.TriggerControlEvent(scriptControlData.objID, scriptUUID, (uint)localHeld, (uint)localChange); | ||
2589 | } | ||
2590 | } | ||
2591 | LastCommands = allflags; | ||
2592 | //foreach (Dir_ControlFlags DCF in Enum.GetValues(typeof (Dir_ControlFlags))) | ||
2593 | } | ||
2492 | internal uint RemoveIgnoredControls(uint flags, ScriptControlled Ignored) | 2594 | internal uint RemoveIgnoredControls(uint flags, ScriptControlled Ignored) |
2493 | { | 2595 | { |
2494 | if (Ignored == ScriptControlled.CONTROL_ZERO) | 2596 | if (Ignored == ScriptControlled.CONTROL_ZERO) |