diff options
Diffstat (limited to 'OpenSim/Region')
3 files changed, 63 insertions, 2 deletions
diff --git a/OpenSim/Region/Environment/Interfaces/IWindModule.cs b/OpenSim/Region/Environment/Interfaces/IWindModule.cs new file mode 100644 index 0000000..63a95d3 --- /dev/null +++ b/OpenSim/Region/Environment/Interfaces/IWindModule.cs | |||
@@ -0,0 +1,41 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
28 | using System; | ||
29 | using OpenSim.Framework; | ||
30 | using OpenMetaverse; | ||
31 | |||
32 | namespace OpenSim.Region.Environment.Interfaces | ||
33 | { | ||
34 | public interface IWindModule : IRegionModule | ||
35 | { | ||
36 | Vector2[] WindSpeeds | ||
37 | { | ||
38 | get; | ||
39 | } | ||
40 | } | ||
41 | } | ||
diff --git a/OpenSim/Region/Environment/Modules/World/Wind/WindModule.cs b/OpenSim/Region/Environment/Modules/World/Wind/WindModule.cs index 3fdb771..52eb6e7 100644 --- a/OpenSim/Region/Environment/Modules/World/Wind/WindModule.cs +++ b/OpenSim/Region/Environment/Modules/World/Wind/WindModule.cs | |||
@@ -35,7 +35,7 @@ using OpenSim.Region.Environment.Scenes; | |||
35 | 35 | ||
36 | namespace OpenSim.Region.Environment.Modules | 36 | namespace OpenSim.Region.Environment.Modules |
37 | { | 37 | { |
38 | public class WindModule : IRegionModule | 38 | public class WindModule : IWindModule |
39 | { | 39 | { |
40 | 40 | ||
41 | private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | 41 | private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); |
@@ -83,6 +83,7 @@ namespace OpenSim.Region.Environment.Modules | |||
83 | scene.EventManager.OnMakeChildAgent += MakeChildAgent; | 83 | scene.EventManager.OnMakeChildAgent += MakeChildAgent; |
84 | scene.EventManager.OnAvatarEnteringNewParcel += AvatarEnteringParcel; | 84 | scene.EventManager.OnAvatarEnteringNewParcel += AvatarEnteringParcel; |
85 | scene.EventManager.OnClientClosed += ClientLoggedOut; | 85 | scene.EventManager.OnClientClosed += ClientLoggedOut; |
86 | scene.RegisterModuleInterface<IWindModule>(this); | ||
86 | 87 | ||
87 | GenWindPos(); | 88 | GenWindPos(); |
88 | 89 | ||
@@ -117,6 +118,11 @@ namespace OpenSim.Region.Environment.Modules | |||
117 | get { return false; } | 118 | get { return false; } |
118 | } | 119 | } |
119 | 120 | ||
121 | public Vector2[] WindSpeeds | ||
122 | { | ||
123 | get { return windSpeeds; } | ||
124 | } | ||
125 | |||
120 | public void WindToClient(IClientAPI client) | 126 | public void WindToClient(IClientAPI client) |
121 | { | 127 | { |
122 | if (ready) | 128 | if (ready) |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 956a500..d410a59 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -953,7 +953,21 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
953 | public LSL_Vector llWind(LSL_Vector offset) | 953 | public LSL_Vector llWind(LSL_Vector offset) |
954 | { | 954 | { |
955 | m_host.AddScriptLPS(1); | 955 | m_host.AddScriptLPS(1); |
956 | return new LSL_Vector(); | 956 | LSL_Vector wind = new LSL_Vector(0, 0, 0); |
957 | IWindModule module = World.RequestModuleInterface<IWindModule>(); | ||
958 | if (module != null && module.WindSpeeds != null) | ||
959 | { | ||
960 | Vector3 pos = m_host.GetWorldPosition(); | ||
961 | int x = (int)((pos.X + offset.x)/ 16); | ||
962 | int y = (int)((pos.Y + offset.y)/ 16); | ||
963 | if (x < 0) x = 0; | ||
964 | if (x > 15) x = 15; | ||
965 | if (y < 0) y = 0; | ||
966 | if (y > 15) y = 15; | ||
967 | wind.x = module.WindSpeeds[y * 16 + x].X; | ||
968 | wind.y = module.WindSpeeds[y * 16 + x].Y; | ||
969 | } | ||
970 | return wind; | ||
957 | } | 971 | } |
958 | 972 | ||
959 | public void llSetStatus(int status, int value) | 973 | public void llSetStatus(int status, int value) |