diff options
8 files changed, 344 insertions, 249 deletions
diff --git a/OpenSim/Data/MySQL/Resources/032_RegionStore.sql b/OpenSim/Data/MySQL/Resources/032_RegionStore.sql index 0545ee1..b10ffcf 100644 --- a/OpenSim/Data/MySQL/Resources/032_RegionStore.sql +++ b/OpenSim/Data/MySQL/Resources/032_RegionStore.sql | |||
@@ -20,15 +20,15 @@ CREATE TABLE `regionwindlight` ( | |||
20 | `little_wave_direction_x` float(3,2) NOT NULL DEFAULT '1.11', | 20 | `little_wave_direction_x` float(3,2) NOT NULL DEFAULT '1.11', |
21 | `little_wave_direction_y` float(3,2) NOT NULL DEFAULT '-1.16', | 21 | `little_wave_direction_y` float(3,2) NOT NULL DEFAULT '-1.16', |
22 | `normal_map_texture` varchar(36) NOT NULL DEFAULT '822ded49-9a6c-f61c-cb89-6df54f42cdf4', | 22 | `normal_map_texture` varchar(36) NOT NULL DEFAULT '822ded49-9a6c-f61c-cb89-6df54f42cdf4', |
23 | `horizon_r` float(3,2) unsigned NOT NULL DEFAULT '0.26', | 23 | `horizon_r` float(3,2) unsigned NOT NULL DEFAULT '0.25', |
24 | `horizon_g` float(3,2) unsigned NOT NULL DEFAULT '0.24', | 24 | `horizon_g` float(3,2) unsigned NOT NULL DEFAULT '0.25', |
25 | `horizon_b` float(3,2) unsigned NOT NULL DEFAULT '0.33', | 25 | `horizon_b` float(3,2) unsigned NOT NULL DEFAULT '0.32', |
26 | `horizon_i` float(3,2) unsigned NOT NULL DEFAULT '0.33', | 26 | `horizon_i` float(3,2) unsigned NOT NULL DEFAULT '0.32', |
27 | `haze_horizon` float(3,2) unsigned NOT NULL DEFAULT '0.19', | 27 | `haze_horizon` float(3,2) unsigned NOT NULL DEFAULT '0.19', |
28 | `blue_density_r` float(3,2) unsigned NOT NULL DEFAULT '0.10', | 28 | `blue_density_r` float(3,2) unsigned NOT NULL DEFAULT '0.12', |
29 | `blue_density_g` float(3,2) unsigned NOT NULL DEFAULT '0.93', | 29 | `blue_density_g` float(3,2) unsigned NOT NULL DEFAULT '0.22', |
30 | `blue_density_b` float(3,2) unsigned NOT NULL DEFAULT '0.02', | 30 | `blue_density_b` float(3,2) unsigned NOT NULL DEFAULT '0.38', |
31 | `blue_density_i` float(3,2) unsigned NOT NULL DEFAULT '0.93', | 31 | `blue_density_i` float(3,2) unsigned NOT NULL DEFAULT '0.38', |
32 | `haze_density` float(3,2) unsigned NOT NULL DEFAULT '0.70', | 32 | `haze_density` float(3,2) unsigned NOT NULL DEFAULT '0.70', |
33 | `density_multiplier` float(3,2) unsigned NOT NULL DEFAULT '0.18', | 33 | `density_multiplier` float(3,2) unsigned NOT NULL DEFAULT '0.18', |
34 | `distance_multiplier` float(4,1) unsigned NOT NULL DEFAULT '0.8', | 34 | `distance_multiplier` float(4,1) unsigned NOT NULL DEFAULT '0.8', |
@@ -37,7 +37,7 @@ CREATE TABLE `regionwindlight` ( | |||
37 | `sun_moon_color_g` float(3,2) unsigned NOT NULL DEFAULT '0.26', | 37 | `sun_moon_color_g` float(3,2) unsigned NOT NULL DEFAULT '0.26', |
38 | `sun_moon_color_b` float(3,2) unsigned NOT NULL DEFAULT '0.30', | 38 | `sun_moon_color_b` float(3,2) unsigned NOT NULL DEFAULT '0.30', |
39 | `sun_moon_color_i` float(3,2) unsigned NOT NULL DEFAULT '0.30', | 39 | `sun_moon_color_i` float(3,2) unsigned NOT NULL DEFAULT '0.30', |
40 | `sun_moon_position` float(4,3) unsigned NOT NULL DEFAULT '0.335', | 40 | `sun_moon_position` float(4,3) unsigned NOT NULL DEFAULT '0.317', |
41 | `ambient_r` float(3,2) unsigned NOT NULL DEFAULT '0.35', | 41 | `ambient_r` float(3,2) unsigned NOT NULL DEFAULT '0.35', |
42 | `ambient_g` float(3,2) unsigned NOT NULL DEFAULT '0.35', | 42 | `ambient_g` float(3,2) unsigned NOT NULL DEFAULT '0.35', |
43 | `ambient_b` float(3,2) unsigned NOT NULL DEFAULT '0.35', | 43 | `ambient_b` float(3,2) unsigned NOT NULL DEFAULT '0.35', |
@@ -63,7 +63,7 @@ CREATE TABLE `regionwindlight` ( | |||
63 | `cloud_scroll_x_lock` tinyint(1) unsigned NOT NULL DEFAULT '0', | 63 | `cloud_scroll_x_lock` tinyint(1) unsigned NOT NULL DEFAULT '0', |
64 | `cloud_scroll_y` float(3,2) unsigned NOT NULL DEFAULT '0.01', | 64 | `cloud_scroll_y` float(3,2) unsigned NOT NULL DEFAULT '0.01', |
65 | `cloud_scroll_y_lock` tinyint(1) unsigned NOT NULL DEFAULT '0', | 65 | `cloud_scroll_y_lock` tinyint(1) unsigned NOT NULL DEFAULT '0', |
66 | `draw_classic_clouds` tinyint(1) unsigned NOT NULL DEFAULT '0', | 66 | `draw_classic_clouds` tinyint(1) unsigned NOT NULL DEFAULT '1', |
67 | PRIMARY KEY (`region_id`) | 67 | PRIMARY KEY (`region_id`) |
68 | ); | 68 | ); |
69 | 69 | ||
diff --git a/OpenSim/Framework/RegionInfo.cs b/OpenSim/Framework/RegionInfo.cs index 9e00528..1ea08f9 100644 --- a/OpenSim/Framework/RegionInfo.cs +++ b/OpenSim/Framework/RegionInfo.cs | |||
@@ -38,8 +38,8 @@ using OpenSim.Framework.Console; | |||
38 | 38 | ||
39 | 39 | ||
40 | namespace OpenSim.Framework | 40 | namespace OpenSim.Framework |
41 | { | 41 | { |
42 | public class RegionMeta7WindlightData | 42 | public class RegionMeta7WindlightData : ICloneable |
43 | { | 43 | { |
44 | public UUID regionID = UUID.Zero; | 44 | public UUID regionID = UUID.Zero; |
45 | public Vector3 waterColor = new Vector3(4.0f,38.0f,64.0f); | 45 | public Vector3 waterColor = new Vector3(4.0f,38.0f,64.0f); |
@@ -54,19 +54,19 @@ namespace OpenSim.Framework | |||
54 | public Vector2 bigWaveDirection = new Vector2(1.05f,-0.42f); | 54 | public Vector2 bigWaveDirection = new Vector2(1.05f,-0.42f); |
55 | public Vector2 littleWaveDirection = new Vector2(1.11f,-1.16f); | 55 | public Vector2 littleWaveDirection = new Vector2(1.11f,-1.16f); |
56 | public UUID normalMapTexture = new UUID("822ded49-9a6c-f61c-cb89-6df54f42cdf4"); | 56 | public UUID normalMapTexture = new UUID("822ded49-9a6c-f61c-cb89-6df54f42cdf4"); |
57 | public Vector4 horizon = new Vector4(0.26f, 0.24f, 0.34f, 0.33f); | 57 | public Vector4 horizon = new Vector4(0.25f, 0.25f, 0.32f, 0.32f); |
58 | public float hazeHorizon = 0.19f; | 58 | public float hazeHorizon = 0.19f; |
59 | public Vector4 blueDensity = new Vector4(0.10f, 0.93f, 0.02f, 0.93f); | 59 | public Vector4 blueDensity = new Vector4(0.12f, 0.22f, 0.38f, 0.38f); |
60 | public float hazeDensity = 0.70f; | 60 | public float hazeDensity = 0.70f; |
61 | public float densityMultiplier = 0.18f; | 61 | public float densityMultiplier = 0.18f; |
62 | public float distanceMultiplier = 0.8f; | 62 | public float distanceMultiplier = 0.8f; |
63 | public UInt16 maxAltitude = 1605; | 63 | public UInt16 maxAltitude = 1605; |
64 | public Vector4 sunMoonColor = new Vector4(0.24f, 0.26f, 0.30f, 0.30f); | 64 | public Vector4 sunMoonColor = new Vector4(0.24f, 0.26f, 0.30f, 0.30f); |
65 | public float sunMoonPosition = 0.335f; | 65 | public float sunMoonPosition = 0.317f; |
66 | public Vector4 ambient = new Vector4(0.35f,0.35f,0.35f,0.35f); | 66 | public Vector4 ambient = new Vector4(0.35f,0.35f,0.35f,0.35f); |
67 | public float eastAngle = 0.0f; | 67 | public float eastAngle = 0.0f; |
68 | public float sunGlowFocus = 0.10f; | 68 | public float sunGlowFocus = 0.10f; |
69 | public float sunGlowSize = 0.10f; | 69 | public float sunGlowSize = 1.75f; |
70 | public float sceneGamma = 1.0f; | 70 | public float sceneGamma = 1.0f; |
71 | public float starBrightness = 0.0f; | 71 | public float starBrightness = 0.0f; |
72 | public Vector4 cloudColor = new Vector4(0.41f, 0.41f, 0.41f, 0.41f); | 72 | public Vector4 cloudColor = new Vector4(0.41f, 0.41f, 0.41f, 0.41f); |
@@ -78,7 +78,7 @@ namespace OpenSim.Framework | |||
78 | public bool cloudScrollXLock = false; | 78 | public bool cloudScrollXLock = false; |
79 | public float cloudScrollY = 0.01f; | 79 | public float cloudScrollY = 0.01f; |
80 | public bool cloudScrollYLock = false; | 80 | public bool cloudScrollYLock = false; |
81 | public bool drawClassicClouds = false; | 81 | public bool drawClassicClouds = true; |
82 | 82 | ||
83 | public delegate void SaveDelegate(RegionMeta7WindlightData wl); | 83 | public delegate void SaveDelegate(RegionMeta7WindlightData wl); |
84 | public event SaveDelegate OnSave; | 84 | public event SaveDelegate OnSave; |
@@ -86,7 +86,12 @@ namespace OpenSim.Framework | |||
86 | { | 86 | { |
87 | if (OnSave != null) | 87 | if (OnSave != null) |
88 | OnSave(this); | 88 | OnSave(this); |
89 | } | 89 | } |
90 | public object Clone() | ||
91 | { | ||
92 | return this.MemberwiseClone(); // call clone method | ||
93 | } | ||
94 | |||
90 | } | 95 | } |
91 | 96 | ||
92 | [Serializable] | 97 | [Serializable] |
diff --git a/OpenSim/Region/CoreModules/World/Meta7Windlight/Meta7WindlightModule.cs b/OpenSim/Region/CoreModules/World/Meta7Windlight/Meta7WindlightModule.cs index f180b47..72b0b38 100644 --- a/OpenSim/Region/CoreModules/World/Meta7Windlight/Meta7WindlightModule.cs +++ b/OpenSim/Region/CoreModules/World/Meta7Windlight/Meta7WindlightModule.cs | |||
@@ -70,64 +70,69 @@ namespace OpenSim.Region.CoreModules.World.Meta7Windlight | |||
70 | if (m_enableWindlight) | 70 | if (m_enableWindlight) |
71 | { | 71 | { |
72 | m_scene.EventManager.OnMakeRootAgent += EventManager_OnMakeRootAgent; | 72 | m_scene.EventManager.OnMakeRootAgent += EventManager_OnMakeRootAgent; |
73 | m_scene.EventManager.OnSaveNewWindlightProfile += EventManager_OnSaveNewWindlightProfile; | 73 | m_scene.EventManager.OnSaveNewWindlightProfile += EventManager_OnSaveNewWindlightProfile; |
74 | m_scene.EventManager.OnSendNewWindlightProfileTargeted += EventManager_OnSendNewWindlightProfileTargeted; | ||
74 | } | 75 | } |
75 | 76 | ||
76 | InstallCommands(); | 77 | InstallCommands(); |
77 | 78 | ||
78 | m_log.Debug("[WINDLIGHT]: Initialised windlight module"); | 79 | m_log.Debug("[WINDLIGHT]: Initialised windlight module"); |
80 | } | ||
81 | |||
82 | private List<byte[]> compileWindlightSettings(RegionMeta7WindlightData wl) | ||
83 | { | ||
84 | byte[] mBlock = new Byte[249]; | ||
85 | int pos = 0; | ||
86 | |||
87 | wl.waterColor.ToBytes(mBlock, 0); pos += 12; | ||
88 | Utils.FloatToBytes(wl.waterFogDensityExponent).CopyTo(mBlock, pos); pos += 4; | ||
89 | Utils.FloatToBytes(wl.underwaterFogModifier).CopyTo(mBlock, pos); pos += 4; | ||
90 | wl.reflectionWaveletScale.ToBytes(mBlock, pos); pos += 12; | ||
91 | Utils.FloatToBytes(wl.fresnelScale).CopyTo(mBlock, pos); pos += 4; | ||
92 | Utils.FloatToBytes(wl.fresnelOffset).CopyTo(mBlock, pos); pos += 4; | ||
93 | Utils.FloatToBytes(wl.refractScaleAbove).CopyTo(mBlock, pos); pos += 4; | ||
94 | Utils.FloatToBytes(wl.refractScaleBelow).CopyTo(mBlock, pos); pos += 4; | ||
95 | Utils.FloatToBytes(wl.blurMultiplier).CopyTo(mBlock, pos); pos += 4; | ||
96 | wl.bigWaveDirection.ToBytes(mBlock, pos); pos += 8; | ||
97 | wl.littleWaveDirection.ToBytes(mBlock, pos); pos += 8; | ||
98 | wl.normalMapTexture.ToBytes(mBlock, pos); pos += 16; | ||
99 | wl.horizon.ToBytes(mBlock, pos); pos += 16; | ||
100 | Utils.FloatToBytes(wl.hazeHorizon).CopyTo(mBlock, pos); pos += 4; | ||
101 | wl.blueDensity.ToBytes(mBlock, pos); pos += 16; | ||
102 | Utils.FloatToBytes(wl.hazeDensity).CopyTo(mBlock, pos); pos += 4; | ||
103 | Utils.FloatToBytes(wl.densityMultiplier).CopyTo(mBlock, pos); pos += 4; | ||
104 | Utils.FloatToBytes(wl.distanceMultiplier).CopyTo(mBlock, pos); pos += 4; | ||
105 | wl.sunMoonColor.ToBytes(mBlock, pos); pos += 16; | ||
106 | Utils.FloatToBytes(wl.sunMoonPosition).CopyTo(mBlock, pos); pos += 4; | ||
107 | wl.ambient.ToBytes(mBlock, pos); pos += 16; | ||
108 | Utils.FloatToBytes(wl.eastAngle).CopyTo(mBlock, pos); pos += 4; | ||
109 | Utils.FloatToBytes(wl.sunGlowFocus).CopyTo(mBlock, pos); pos += 4; | ||
110 | Utils.FloatToBytes(wl.sunGlowSize).CopyTo(mBlock, pos); pos += 4; | ||
111 | Utils.FloatToBytes(wl.sceneGamma).CopyTo(mBlock, pos); pos += 4; | ||
112 | Utils.FloatToBytes(wl.starBrightness).CopyTo(mBlock, pos); pos += 4; | ||
113 | wl.cloudColor.ToBytes(mBlock, pos); pos += 16; | ||
114 | wl.cloudXYDensity.ToBytes(mBlock, pos); pos += 12; | ||
115 | Utils.FloatToBytes(wl.cloudCoverage).CopyTo(mBlock, pos); pos += 4; | ||
116 | Utils.FloatToBytes(wl.cloudScale).CopyTo(mBlock, pos); pos += 4; | ||
117 | wl.cloudDetailXYDensity.ToBytes(mBlock, pos); pos += 12; | ||
118 | Utils.FloatToBytes(wl.cloudScrollX).CopyTo(mBlock, pos); pos += 4; | ||
119 | Utils.FloatToBytes(wl.cloudScrollY).CopyTo(mBlock, pos); pos += 4; | ||
120 | Utils.UInt16ToBytes(wl.maxAltitude).CopyTo(mBlock, pos); pos += 2; | ||
121 | mBlock[pos] = Convert.ToByte(wl.cloudScrollXLock); pos++; | ||
122 | mBlock[pos] = Convert.ToByte(wl.cloudScrollYLock); pos++; | ||
123 | mBlock[pos] = Convert.ToByte(wl.drawClassicClouds); pos++; | ||
124 | List<byte[]> param = new List<byte[]>(); | ||
125 | param.Add(mBlock); | ||
126 | return param; | ||
79 | } | 127 | } |
80 | public void SendProfileToClient(ScenePresence presence) | 128 | public void SendProfileToClient(ScenePresence presence) |
81 | { | 129 | { |
130 | IClientAPI client = presence.ControllingClient; | ||
82 | if (m_enableWindlight) | 131 | if (m_enableWindlight) |
83 | { | 132 | { |
84 | if (presence.IsChildAgent == false) | 133 | if (presence.IsChildAgent == false) |
85 | { | 134 | { |
86 | IClientAPI client = presence.ControllingClient; | 135 | List<byte[]> param = compileWindlightSettings(m_scene.RegionInfo.WindlightSettings); |
87 | RegionMeta7WindlightData wl = m_scene.RegionInfo.WindlightSettings; | ||
88 | byte[] mBlock = new Byte[249]; | ||
89 | int pos = 0; | ||
90 | |||
91 | wl.waterColor.ToBytes(mBlock, 0); pos += 12; | ||
92 | Utils.FloatToBytes(wl.waterFogDensityExponent).CopyTo(mBlock, pos); pos += 4; | ||
93 | Utils.FloatToBytes(wl.underwaterFogModifier).CopyTo(mBlock, pos); pos += 4; | ||
94 | wl.reflectionWaveletScale.ToBytes(mBlock, pos); pos += 12; | ||
95 | Utils.FloatToBytes(wl.fresnelScale).CopyTo(mBlock, pos); pos += 4; | ||
96 | Utils.FloatToBytes(wl.fresnelOffset).CopyTo(mBlock, pos); pos += 4; | ||
97 | Utils.FloatToBytes(wl.refractScaleAbove).CopyTo(mBlock, pos); pos += 4; | ||
98 | Utils.FloatToBytes(wl.refractScaleBelow).CopyTo(mBlock, pos); pos += 4; | ||
99 | Utils.FloatToBytes(wl.blurMultiplier).CopyTo(mBlock, pos); pos += 4; | ||
100 | wl.bigWaveDirection.ToBytes(mBlock, pos); pos += 8; | ||
101 | wl.littleWaveDirection.ToBytes(mBlock, pos); pos += 8; | ||
102 | wl.normalMapTexture.ToBytes(mBlock, pos); pos += 16; | ||
103 | wl.horizon.ToBytes(mBlock, pos); pos += 16; | ||
104 | Utils.FloatToBytes(wl.hazeHorizon).CopyTo(mBlock, pos); pos += 4; | ||
105 | wl.blueDensity.ToBytes(mBlock, pos); pos += 16; | ||
106 | Utils.FloatToBytes(wl.hazeDensity).CopyTo(mBlock, pos); pos += 4; | ||
107 | Utils.FloatToBytes(wl.densityMultiplier).CopyTo(mBlock, pos); pos += 4; | ||
108 | Utils.FloatToBytes(wl.distanceMultiplier).CopyTo(mBlock, pos); pos += 4; | ||
109 | wl.sunMoonColor.ToBytes(mBlock, pos); pos += 16; | ||
110 | Utils.FloatToBytes(wl.sunMoonPosition).CopyTo(mBlock, pos); pos += 4; | ||
111 | wl.ambient.ToBytes(mBlock, pos); pos += 16; | ||
112 | Utils.FloatToBytes(wl.eastAngle).CopyTo(mBlock, pos); pos += 4; | ||
113 | Utils.FloatToBytes(wl.sunGlowFocus).CopyTo(mBlock, pos); pos += 4; | ||
114 | Utils.FloatToBytes(wl.sunGlowSize).CopyTo(mBlock, pos); pos += 4; | ||
115 | Utils.FloatToBytes(wl.sceneGamma).CopyTo(mBlock, pos); pos += 4; | ||
116 | Utils.FloatToBytes(wl.starBrightness).CopyTo(mBlock, pos); pos += 4; | ||
117 | wl.cloudColor.ToBytes(mBlock, pos); pos += 16; | ||
118 | wl.cloudXYDensity.ToBytes(mBlock, pos); pos += 12; | ||
119 | Utils.FloatToBytes(wl.cloudCoverage).CopyTo(mBlock, pos); pos += 4; | ||
120 | Utils.FloatToBytes(wl.cloudScale).CopyTo(mBlock, pos); pos += 4; | ||
121 | wl.cloudDetailXYDensity.ToBytes(mBlock, pos); pos += 12; | ||
122 | Utils.FloatToBytes(wl.cloudScrollX).CopyTo(mBlock, pos); pos += 4; | ||
123 | Utils.FloatToBytes(wl.cloudScrollY).CopyTo(mBlock, pos); pos += 4; | ||
124 | Utils.UInt16ToBytes(wl.maxAltitude).CopyTo(mBlock, pos); pos += 2; | ||
125 | mBlock[pos] = Convert.ToByte(wl.cloudScrollXLock); pos++; | ||
126 | mBlock[pos] = Convert.ToByte(wl.cloudScrollYLock); pos++; | ||
127 | mBlock[pos] = Convert.ToByte(wl.drawClassicClouds); pos++; | ||
128 | List<byte[]> param = new List<byte[]>(); | ||
129 | param.Add(mBlock); | ||
130 | |||
131 | client.SendGenericMessage("Windlight", param); | 136 | client.SendGenericMessage("Windlight", param); |
132 | } | 137 | } |
133 | } | 138 | } |
@@ -136,13 +141,37 @@ namespace OpenSim.Region.CoreModules.World.Meta7Windlight | |||
136 | //We probably don't want to spam chat with this.. probably | 141 | //We probably don't want to spam chat with this.. probably |
137 | //m_log.Debug("[WINDLIGHT]: Module disabled"); | 142 | //m_log.Debug("[WINDLIGHT]: Module disabled"); |
138 | } | 143 | } |
144 | } | ||
145 | public void SendProfileToClient(ScenePresence presence, RegionMeta7WindlightData wl) | ||
146 | { | ||
147 | IClientAPI client = presence.ControllingClient; | ||
148 | if (m_enableWindlight) | ||
149 | { | ||
150 | if (presence.IsChildAgent == false) | ||
151 | { | ||
152 | List<byte[]> param = compileWindlightSettings(wl); | ||
153 | client.SendGenericMessage("Windlight", param); | ||
154 | } | ||
155 | } | ||
156 | else | ||
157 | { | ||
158 | //We probably don't want to spam chat with this.. probably | ||
159 | //m_log.Debug("[WINDLIGHT]: Module disabled"); | ||
160 | } | ||
139 | } | 161 | } |
140 | private void EventManager_OnMakeRootAgent(ScenePresence presence) | 162 | private void EventManager_OnMakeRootAgent(ScenePresence presence) |
141 | { | 163 | { |
142 | m_log.Debug("[WINDLIGHT]: Sending windlight scene to new client"); | 164 | m_log.Debug("[WINDLIGHT]: Sending windlight scene to new client"); |
143 | SendProfileToClient(presence); | 165 | SendProfileToClient(presence); |
166 | } | ||
167 | private void EventManager_OnSendNewWindlightProfileTargeted(RegionMeta7WindlightData wl, UUID pUUID) | ||
168 | { | ||
169 | ScenePresence Sc; | ||
170 | if (m_scene.TryGetAvatar(pUUID,out Sc)) | ||
171 | { | ||
172 | SendProfileToClient(Sc,wl); | ||
173 | } | ||
144 | } | 174 | } |
145 | |||
146 | private void EventManager_OnSaveNewWindlightProfile() | 175 | private void EventManager_OnSaveNewWindlightProfile() |
147 | { | 176 | { |
148 | m_scene.ForEachScenePresence(SendProfileToClient); | 177 | m_scene.ForEachScenePresence(SendProfileToClient); |
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs index a86e263..68e73b1 100644 --- a/OpenSim/Region/Framework/Scenes/EventManager.cs +++ b/OpenSim/Region/Framework/Scenes/EventManager.cs | |||
@@ -194,7 +194,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
194 | 194 | ||
195 | public delegate void OnMakeRootAgentDelegate(ScenePresence presence); | 195 | public delegate void OnMakeRootAgentDelegate(ScenePresence presence); |
196 | public delegate void OnSaveNewWindlightProfileDelegate(); | 196 | public delegate void OnSaveNewWindlightProfileDelegate(); |
197 | public delegate void OnSendNewWindlightProfileTargetedDelegate(RegionMeta7WindlightData wl, UUID user); | ||
197 | public event OnMakeRootAgentDelegate OnMakeRootAgent; | 198 | public event OnMakeRootAgentDelegate OnMakeRootAgent; |
199 | public event OnSendNewWindlightProfileTargetedDelegate OnSendNewWindlightProfileTargeted; | ||
198 | public event OnSaveNewWindlightProfileDelegate OnSaveNewWindlightProfile; | 200 | public event OnSaveNewWindlightProfileDelegate OnSaveNewWindlightProfile; |
199 | 201 | ||
200 | public delegate void NewInventoryItemUploadComplete(UUID avatarID, UUID assetID, string name, int userlevel); | 202 | public delegate void NewInventoryItemUploadComplete(UUID avatarID, UUID assetID, string name, int userlevel); |
@@ -414,6 +416,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
414 | private ClientClosed handlerClientClosed = null; //OnClientClosed; | 416 | private ClientClosed handlerClientClosed = null; //OnClientClosed; |
415 | private OnMakeChildAgentDelegate handlerMakeChildAgent = null; //OnMakeChildAgent; | 417 | private OnMakeChildAgentDelegate handlerMakeChildAgent = null; //OnMakeChildAgent; |
416 | private OnSaveNewWindlightProfileDelegate handlerSaveNewWindlightProfile = null; //OnSaveNewWindlightProfile; | 418 | private OnSaveNewWindlightProfileDelegate handlerSaveNewWindlightProfile = null; //OnSaveNewWindlightProfile; |
419 | private OnSendNewWindlightProfileTargetedDelegate handlerSendNewWindlightProfileTargeted = null; //OnSendNewWindlightProfileTargeted; | ||
417 | private OnMakeRootAgentDelegate handlerMakeRootAgent = null; //OnMakeRootAgent; | 420 | private OnMakeRootAgentDelegate handlerMakeRootAgent = null; //OnMakeRootAgent; |
418 | private OnTerrainTickDelegate handlerTerrainTick = null; // OnTerainTick; | 421 | private OnTerrainTickDelegate handlerTerrainTick = null; // OnTerainTick; |
419 | private RegisterCapsEvent handlerRegisterCaps = null; // OnRegisterCaps; | 422 | private RegisterCapsEvent handlerRegisterCaps = null; // OnRegisterCaps; |
@@ -775,6 +778,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
775 | } | 778 | } |
776 | } | 779 | } |
777 | 780 | ||
781 | public void TriggerOnSendNewWindlightProfileTargeted(RegionMeta7WindlightData wl, UUID user) | ||
782 | { | ||
783 | handlerSendNewWindlightProfileTargeted = OnSendNewWindlightProfileTargeted; | ||
784 | if (handlerSendNewWindlightProfileTargeted != null) | ||
785 | { | ||
786 | handlerSendNewWindlightProfileTargeted(wl, user); | ||
787 | } | ||
788 | } | ||
789 | |||
778 | public void TriggerOnSaveNewWindlightProfile() | 790 | public void TriggerOnSaveNewWindlightProfile() |
779 | { | 791 | { |
780 | handlerSaveNewWindlightProfile = OnSaveNewWindlightProfile; | 792 | handlerSaveNewWindlightProfile = OnSaveNewWindlightProfile; |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 104d22b..20cae5d 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -1519,8 +1519,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
1519 | public void SaveTerrain() | 1519 | public void SaveTerrain() |
1520 | { | 1520 | { |
1521 | m_storageManager.DataStore.StoreTerrain(Heightmap.GetDoubles(), RegionInfo.RegionID); | 1521 | m_storageManager.DataStore.StoreTerrain(Heightmap.GetDoubles(), RegionInfo.RegionID); |
1522 | } | 1522 | } |
1523 | 1523 | ||
1524 | public void StoreWindlightProfile(RegionMeta7WindlightData wl) | 1524 | public void StoreWindlightProfile(RegionMeta7WindlightData wl) |
1525 | { | 1525 | { |
1526 | m_regInfo.WindlightSettings = wl; | 1526 | m_regInfo.WindlightSettings = wl; |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/CM_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/CM_Api.cs index 4cc2f0a..d4250c1 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/CM_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/CM_Api.cs | |||
@@ -229,8 +229,181 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
229 | 229 | ||
230 | return values; | 230 | return values; |
231 | 231 | ||
232 | } | 232 | } |
233 | |||
234 | private RegionMeta7WindlightData getWindlightProfileFromRules(LSL_List rules) | ||
235 | { | ||
236 | RegionMeta7WindlightData wl = (RegionMeta7WindlightData)m_host.ParentGroup.Scene.RegionInfo.WindlightSettings.Clone(); | ||
233 | 237 | ||
238 | LSL_List values = new LSL_List(); | ||
239 | int idx = 0; | ||
240 | while (idx < rules.Length) | ||
241 | { | ||
242 | uint rule = (uint)rules.GetLSLIntegerItem(idx); | ||
243 | LSL_Types.Quaternion iQ; | ||
244 | LSL_Types.Vector3 iV; | ||
245 | switch (rule) | ||
246 | { | ||
247 | case (int)ScriptBaseClass.WL_AMBIENT: | ||
248 | idx++; | ||
249 | iQ = rules.GetQuaternionItem(idx); | ||
250 | wl.ambient = new Vector4((float)iQ.x, (float)iQ.y, (float)iQ.z, (float)iQ.s); | ||
251 | break; | ||
252 | case (int)ScriptBaseClass.WL_BIG_WAVE_DIRECTION: | ||
253 | idx++; | ||
254 | iV = rules.GetVector3Item(idx); | ||
255 | wl.bigWaveDirection = new Vector2((float)iV.x, (float)iV.y); | ||
256 | break; | ||
257 | case (int)ScriptBaseClass.WL_BLUE_DENSITY: | ||
258 | idx++; | ||
259 | iQ = rules.GetQuaternionItem(idx); | ||
260 | wl.blueDensity = new Vector4((float)iQ.x, (float)iQ.y, (float)iQ.z, (float)iQ.s); | ||
261 | break; | ||
262 | case (int)ScriptBaseClass.WL_BLUR_MULTIPLIER: | ||
263 | idx++; | ||
264 | wl.blurMultiplier = (float)rules.GetLSLFloatItem(idx); | ||
265 | break; | ||
266 | case (int)ScriptBaseClass.WL_CLOUD_COLOR: | ||
267 | idx++; | ||
268 | iQ = rules.GetQuaternionItem(idx); | ||
269 | wl.cloudColor = new Vector4((float)iQ.x, (float)iQ.y, (float)iQ.z, (float)iQ.s); | ||
270 | break; | ||
271 | case (int)ScriptBaseClass.WL_CLOUD_COVERAGE: | ||
272 | idx++; | ||
273 | wl.cloudCoverage = (float)rules.GetLSLFloatItem(idx); | ||
274 | break; | ||
275 | case (int)ScriptBaseClass.WL_CLOUD_DETAIL_XY_DENSITY: | ||
276 | idx++; | ||
277 | iV = rules.GetVector3Item(idx); | ||
278 | wl.cloudDetailXYDensity = new Vector3((float)iV.x, (float)iV.y, (float)iV.z); | ||
279 | break; | ||
280 | case (int)ScriptBaseClass.WL_CLOUD_SCALE: | ||
281 | idx++; | ||
282 | wl.cloudScale = (float)rules.GetLSLFloatItem(idx); | ||
283 | break; | ||
284 | case (int)ScriptBaseClass.WL_CLOUD_SCROLL_X: | ||
285 | idx++; | ||
286 | wl.cloudScrollX = (float)rules.GetLSLFloatItem(idx); | ||
287 | break; | ||
288 | case (int)ScriptBaseClass.WL_CLOUD_SCROLL_X_LOCK: | ||
289 | idx++; | ||
290 | wl.cloudScrollXLock = rules.GetLSLIntegerItem(idx).value == 1 ? true : false; | ||
291 | break; | ||
292 | case (int)ScriptBaseClass.WL_CLOUD_SCROLL_Y: | ||
293 | idx++; | ||
294 | wl.cloudScrollY = (float)rules.GetLSLFloatItem(idx); | ||
295 | break; | ||
296 | case (int)ScriptBaseClass.WL_CLOUD_SCROLL_Y_LOCK: | ||
297 | idx++; | ||
298 | wl.cloudScrollYLock = rules.GetLSLIntegerItem(idx).value == 1 ? true : false; | ||
299 | break; | ||
300 | case (int)ScriptBaseClass.WL_CLOUD_XY_DENSITY: | ||
301 | idx++; | ||
302 | iV = rules.GetVector3Item(idx); | ||
303 | wl.cloudDetailXYDensity = new Vector3((float)iV.x, (float)iV.y, (float)iV.z); | ||
304 | break; | ||
305 | case (int)ScriptBaseClass.WL_DENSITY_MULTIPLIER: | ||
306 | idx++; | ||
307 | wl.densityMultiplier = (float)rules.GetLSLFloatItem(idx); | ||
308 | break; | ||
309 | case (int)ScriptBaseClass.WL_DISTANCE_MULTIPLIER: | ||
310 | idx++; | ||
311 | wl.distanceMultiplier = (float)rules.GetLSLFloatItem(idx); | ||
312 | break; | ||
313 | case (int)ScriptBaseClass.WL_DRAW_CLASSIC_CLOUDS: | ||
314 | idx++; | ||
315 | wl.drawClassicClouds = rules.GetLSLIntegerItem(idx).value == 1 ? true : false; | ||
316 | break; | ||
317 | case (int)ScriptBaseClass.WL_EAST_ANGLE: | ||
318 | idx++; | ||
319 | wl.eastAngle = (float)rules.GetLSLFloatItem(idx); | ||
320 | break; | ||
321 | case (int)ScriptBaseClass.WL_FRESNEL_OFFSET: | ||
322 | idx++; | ||
323 | wl.fresnelOffset = (float)rules.GetLSLFloatItem(idx); | ||
324 | break; | ||
325 | case (int)ScriptBaseClass.WL_FRESNEL_SCALE: | ||
326 | idx++; | ||
327 | wl.fresnelScale = (float)rules.GetLSLFloatItem(idx); | ||
328 | break; | ||
329 | case (int)ScriptBaseClass.WL_HAZE_DENSITY: | ||
330 | idx++; | ||
331 | wl.hazeDensity = (float)rules.GetLSLFloatItem(idx); | ||
332 | break; | ||
333 | case (int)ScriptBaseClass.WL_HAZE_HORIZON: | ||
334 | idx++; | ||
335 | wl.hazeHorizon = (float)rules.GetLSLFloatItem(idx); | ||
336 | break; | ||
337 | case (int)ScriptBaseClass.WL_HORIZON: | ||
338 | idx++; | ||
339 | iQ = rules.GetQuaternionItem(idx); | ||
340 | wl.horizon = new Vector4((float)iQ.x, (float)iQ.y, (float)iQ.z, (float)iQ.s); | ||
341 | break; | ||
342 | case (int)ScriptBaseClass.WL_LITTLE_WAVE_DIRECTION: | ||
343 | idx++; | ||
344 | iV = rules.GetVector3Item(idx); | ||
345 | wl.littleWaveDirection = new Vector2((float)iV.x, (float)iV.y); | ||
346 | break; | ||
347 | case (int)ScriptBaseClass.WL_MAX_ALTITUDE: | ||
348 | idx++; | ||
349 | wl.maxAltitude = (ushort)rules.GetLSLIntegerItem(idx).value; | ||
350 | break; | ||
351 | case (int)ScriptBaseClass.WL_NORMAL_MAP_TEXTURE: | ||
352 | idx++; | ||
353 | wl.normalMapTexture = new UUID(rules.GetLSLStringItem(idx).m_string); | ||
354 | break; | ||
355 | case (int)ScriptBaseClass.WL_REFLECTION_WAVELET_SCALE: | ||
356 | idx++; | ||
357 | iV = rules.GetVector3Item(idx); | ||
358 | wl.reflectionWaveletScale = new Vector3((float)iV.x, (float)iV.y, (float)iV.z); | ||
359 | break; | ||
360 | case (int)ScriptBaseClass.WL_REFRACT_SCALE_ABOVE: | ||
361 | idx++; | ||
362 | wl.refractScaleAbove = (float)rules.GetLSLFloatItem(idx); | ||
363 | break; | ||
364 | case (int)ScriptBaseClass.WL_REFRACT_SCALE_BELOW: | ||
365 | idx++; | ||
366 | wl.refractScaleBelow = (float)rules.GetLSLFloatItem(idx); | ||
367 | break; | ||
368 | case (int)ScriptBaseClass.WL_SCENE_GAMMA: | ||
369 | idx++; | ||
370 | wl.sceneGamma = (float)rules.GetLSLFloatItem(idx); | ||
371 | break; | ||
372 | case (int)ScriptBaseClass.WL_STAR_BRIGHTNESS: | ||
373 | idx++; | ||
374 | wl.starBrightness = (float)rules.GetLSLFloatItem(idx); | ||
375 | break; | ||
376 | case (int)ScriptBaseClass.WL_SUN_GLOW_FOCUS: | ||
377 | idx++; | ||
378 | wl.sunGlowFocus = (float)rules.GetLSLFloatItem(idx); | ||
379 | break; | ||
380 | case (int)ScriptBaseClass.WL_SUN_GLOW_SIZE: | ||
381 | idx++; | ||
382 | wl.sunGlowSize = (float)rules.GetLSLFloatItem(idx); | ||
383 | break; | ||
384 | case (int)ScriptBaseClass.WL_SUN_MOON_COLOR: | ||
385 | idx++; | ||
386 | iQ = rules.GetQuaternionItem(idx); | ||
387 | wl.sunMoonColor = new Vector4((float)iQ.x, (float)iQ.y, (float)iQ.z, (float)iQ.s); | ||
388 | break; | ||
389 | case (int)ScriptBaseClass.WL_UNDERWATER_FOG_MODIFIER: | ||
390 | idx++; | ||
391 | wl.underwaterFogModifier = (float)rules.GetLSLFloatItem(idx); | ||
392 | break; | ||
393 | case (int)ScriptBaseClass.WL_WATER_COLOR: | ||
394 | idx++; | ||
395 | iV = rules.GetVector3Item(idx); | ||
396 | wl.waterColor = new Vector3((float)iV.x, (float)iV.y, (float)iV.z); | ||
397 | break; | ||
398 | case (int)ScriptBaseClass.WL_WATER_FOG_DENSITY_EXPONENT: | ||
399 | idx++; | ||
400 | wl.waterFogDensityExponent = (float)rules.GetLSLFloatItem(idx); | ||
401 | break; | ||
402 | } | ||
403 | idx++; | ||
404 | } | ||
405 | return wl; | ||
406 | } | ||
234 | /// <summary> | 407 | /// <summary> |
235 | /// Set the current Windlight scene | 408 | /// Set the current Windlight scene |
236 | /// </summary> | 409 | /// </summary> |
@@ -242,188 +415,58 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
242 | { | 415 | { |
243 | CMShoutError("Careminster functions are not enabled."); | 416 | CMShoutError("Careminster functions are not enabled."); |
244 | return 0; | 417 | return 0; |
418 | } | ||
419 | if (!World.RegionInfo.EstateSettings.IsEstateManager(m_host.OwnerID) && World.GetScenePresence(m_host.OwnerID).GodLevel < 200) | ||
420 | { | ||
421 | CMShoutError("cmSetWindlightScene can only be used by estate managers or owners."); | ||
422 | return 0; | ||
245 | } | 423 | } |
246 | int success = 0; | 424 | int success = 0; |
247 | m_host.AddScriptLPS(1); | 425 | m_host.AddScriptLPS(1); |
248 | if (Meta7WindlightModule.EnableWindlight) | 426 | if (Meta7WindlightModule.EnableWindlight) |
249 | { | 427 | { |
250 | RegionMeta7WindlightData wl = m_host.ParentGroup.Scene.RegionInfo.WindlightSettings; | 428 | RegionMeta7WindlightData wl = getWindlightProfileFromRules(rules); |
251 | 429 | m_host.ParentGroup.Scene.StoreWindlightProfile(wl); | |
252 | LSL_List values = new LSL_List(); | 430 | success = 1; |
253 | int idx = 0; | 431 | } |
254 | success = 1; | 432 | else |
255 | while (idx < rules.Length) | 433 | { |
256 | { | 434 | CMShoutError("Windlight module is disabled"); |
257 | uint rule = (uint)rules.GetLSLIntegerItem(idx); | 435 | return 0; |
258 | LSL_Types.Quaternion iQ; | ||
259 | LSL_Types.Vector3 iV; | ||
260 | switch (rule) | ||
261 | { | ||
262 | case (int)ScriptBaseClass.WL_AMBIENT: | ||
263 | idx++; | ||
264 | iQ = rules.GetQuaternionItem(idx); | ||
265 | wl.ambient = new Vector4((float)iQ.x, (float)iQ.y, (float)iQ.z, (float)iQ.s); | ||
266 | break; | ||
267 | case (int)ScriptBaseClass.WL_BIG_WAVE_DIRECTION: | ||
268 | idx++; | ||
269 | iV = rules.GetVector3Item(idx); | ||
270 | wl.bigWaveDirection = new Vector2((float)iV.x, (float)iV.y); | ||
271 | break; | ||
272 | case (int)ScriptBaseClass.WL_BLUE_DENSITY: | ||
273 | idx++; | ||
274 | iQ = rules.GetQuaternionItem(idx); | ||
275 | wl.blueDensity = new Vector4((float)iQ.x, (float)iQ.y, (float)iQ.z, (float)iQ.s); | ||
276 | break; | ||
277 | case (int)ScriptBaseClass.WL_BLUR_MULTIPLIER: | ||
278 | idx++; | ||
279 | wl.blurMultiplier = (float)rules.GetLSLFloatItem(idx); | ||
280 | break; | ||
281 | case (int)ScriptBaseClass.WL_CLOUD_COLOR: | ||
282 | idx++; | ||
283 | iQ = rules.GetQuaternionItem(idx); | ||
284 | wl.cloudColor = new Vector4((float)iQ.x, (float)iQ.y, (float)iQ.z, (float)iQ.s); | ||
285 | break; | ||
286 | case (int)ScriptBaseClass.WL_CLOUD_COVERAGE: | ||
287 | idx++; | ||
288 | wl.cloudCoverage = (float)rules.GetLSLFloatItem(idx); | ||
289 | break; | ||
290 | case (int)ScriptBaseClass.WL_CLOUD_DETAIL_XY_DENSITY: | ||
291 | idx++; | ||
292 | iV = rules.GetVector3Item(idx); | ||
293 | wl.cloudDetailXYDensity = new Vector3((float)iV.x, (float)iV.y, (float)iV.z); | ||
294 | break; | ||
295 | case (int)ScriptBaseClass.WL_CLOUD_SCALE: | ||
296 | idx++; | ||
297 | wl.cloudScale = (float)rules.GetLSLFloatItem(idx); | ||
298 | break; | ||
299 | case (int)ScriptBaseClass.WL_CLOUD_SCROLL_X: | ||
300 | idx++; | ||
301 | wl.cloudScrollX = (float)rules.GetLSLFloatItem(idx); | ||
302 | break; | ||
303 | case (int)ScriptBaseClass.WL_CLOUD_SCROLL_X_LOCK: | ||
304 | idx++; | ||
305 | wl.cloudScrollXLock = rules.GetLSLIntegerItem(idx).value == 1 ? true : false; | ||
306 | break; | ||
307 | case (int)ScriptBaseClass.WL_CLOUD_SCROLL_Y: | ||
308 | idx++; | ||
309 | wl.cloudScrollY = (float)rules.GetLSLFloatItem(idx); | ||
310 | break; | ||
311 | case (int)ScriptBaseClass.WL_CLOUD_SCROLL_Y_LOCK: | ||
312 | idx++; | ||
313 | wl.cloudScrollYLock = rules.GetLSLIntegerItem(idx).value == 1 ? true : false; | ||
314 | break; | ||
315 | case (int)ScriptBaseClass.WL_CLOUD_XY_DENSITY: | ||
316 | idx++; | ||
317 | iV = rules.GetVector3Item(idx); | ||
318 | wl.cloudDetailXYDensity = new Vector3((float)iV.x, (float)iV.y, (float)iV.z); | ||
319 | break; | ||
320 | case (int)ScriptBaseClass.WL_DENSITY_MULTIPLIER: | ||
321 | idx++; | ||
322 | wl.densityMultiplier = (float)rules.GetLSLFloatItem(idx); | ||
323 | break; | ||
324 | case (int)ScriptBaseClass.WL_DISTANCE_MULTIPLIER: | ||
325 | idx++; | ||
326 | wl.distanceMultiplier = (float)rules.GetLSLFloatItem(idx); | ||
327 | break; | ||
328 | case (int)ScriptBaseClass.WL_DRAW_CLASSIC_CLOUDS: | ||
329 | idx++; | ||
330 | wl.drawClassicClouds = rules.GetLSLIntegerItem(idx).value == 1 ? true : false; | ||
331 | break; | ||
332 | case (int)ScriptBaseClass.WL_EAST_ANGLE: | ||
333 | idx++; | ||
334 | wl.eastAngle = (float)rules.GetLSLFloatItem(idx); | ||
335 | break; | ||
336 | case (int)ScriptBaseClass.WL_FRESNEL_OFFSET: | ||
337 | idx++; | ||
338 | wl.fresnelOffset = (float)rules.GetLSLFloatItem(idx); | ||
339 | break; | ||
340 | case (int)ScriptBaseClass.WL_FRESNEL_SCALE: | ||
341 | idx++; | ||
342 | wl.fresnelScale = (float)rules.GetLSLFloatItem(idx); | ||
343 | break; | ||
344 | case (int)ScriptBaseClass.WL_HAZE_DENSITY: | ||
345 | idx++; | ||
346 | wl.hazeDensity = (float)rules.GetLSLFloatItem(idx); | ||
347 | break; | ||
348 | case (int)ScriptBaseClass.WL_HAZE_HORIZON: | ||
349 | idx++; | ||
350 | wl.hazeHorizon = (float)rules.GetLSLFloatItem(idx); | ||
351 | break; | ||
352 | case (int)ScriptBaseClass.WL_HORIZON: | ||
353 | idx++; | ||
354 | iQ = rules.GetQuaternionItem(idx); | ||
355 | wl.horizon = new Vector4((float)iQ.x, (float)iQ.y, (float)iQ.z, (float)iQ.s); | ||
356 | break; | ||
357 | case (int)ScriptBaseClass.WL_LITTLE_WAVE_DIRECTION: | ||
358 | idx++; | ||
359 | iV = rules.GetVector3Item(idx); | ||
360 | wl.littleWaveDirection = new Vector2((float)iV.x, (float)iV.y); | ||
361 | break; | ||
362 | case (int)ScriptBaseClass.WL_MAX_ALTITUDE: | ||
363 | idx++; | ||
364 | wl.maxAltitude = (ushort)rules.GetLSLIntegerItem(idx).value; | ||
365 | break; | ||
366 | case (int)ScriptBaseClass.WL_NORMAL_MAP_TEXTURE: | ||
367 | idx++; | ||
368 | wl.normalMapTexture = new UUID(rules.GetLSLStringItem(idx).m_string); | ||
369 | break; | ||
370 | case (int)ScriptBaseClass.WL_REFLECTION_WAVELET_SCALE: | ||
371 | idx++; | ||
372 | iV = rules.GetVector3Item(idx); | ||
373 | wl.reflectionWaveletScale = new Vector3((float)iV.x, (float)iV.y, (float)iV.z); | ||
374 | break; | ||
375 | case (int)ScriptBaseClass.WL_REFRACT_SCALE_ABOVE: | ||
376 | idx++; | ||
377 | wl.refractScaleAbove = (float)rules.GetLSLFloatItem(idx); | ||
378 | break; | ||
379 | case (int)ScriptBaseClass.WL_REFRACT_SCALE_BELOW: | ||
380 | idx++; | ||
381 | wl.refractScaleBelow = (float)rules.GetLSLFloatItem(idx); | ||
382 | break; | ||
383 | case (int)ScriptBaseClass.WL_SCENE_GAMMA: | ||
384 | idx++; | ||
385 | wl.sceneGamma = (float)rules.GetLSLFloatItem(idx); | ||
386 | break; | ||
387 | case (int)ScriptBaseClass.WL_STAR_BRIGHTNESS: | ||
388 | idx++; | ||
389 | wl.starBrightness = (float)rules.GetLSLFloatItem(idx); | ||
390 | break; | ||
391 | case (int)ScriptBaseClass.WL_SUN_GLOW_FOCUS: | ||
392 | idx++; | ||
393 | wl.sunGlowFocus = (float)rules.GetLSLFloatItem(idx); | ||
394 | break; | ||
395 | case (int)ScriptBaseClass.WL_SUN_GLOW_SIZE: | ||
396 | idx++; | ||
397 | wl.sunGlowSize = (float)rules.GetLSLFloatItem(idx); | ||
398 | break; | ||
399 | case (int)ScriptBaseClass.WL_SUN_MOON_COLOR: | ||
400 | idx++; | ||
401 | iQ = rules.GetQuaternionItem(idx); | ||
402 | wl.sunMoonColor = new Vector4((float)iQ.x, (float)iQ.y, (float)iQ.z, (float)iQ.s); | ||
403 | break; | ||
404 | case (int)ScriptBaseClass.WL_UNDERWATER_FOG_MODIFIER: | ||
405 | idx++; | ||
406 | wl.underwaterFogModifier = (float)rules.GetLSLFloatItem(idx); | ||
407 | break; | ||
408 | case (int)ScriptBaseClass.WL_WATER_COLOR: | ||
409 | idx++; | ||
410 | iV = rules.GetVector3Item(idx); | ||
411 | wl.waterColor = new Vector3((float)iV.x, (float)iV.y, (float)iV.z); | ||
412 | break; | ||
413 | case (int)ScriptBaseClass.WL_WATER_FOG_DENSITY_EXPONENT: | ||
414 | idx++; | ||
415 | wl.waterFogDensityExponent = (float)rules.GetLSLFloatItem(idx); | ||
416 | break; | ||
417 | default: | ||
418 | success = 0; | ||
419 | break; | ||
420 | } | ||
421 | idx++; | ||
422 | } | ||
423 | m_host.ParentGroup.Scene.StoreWindlightProfile(wl); | ||
424 | |||
425 | } | 436 | } |
426 | return success; | 437 | return success; |
438 | } | ||
439 | /// <summary> | ||
440 | /// Set the current Windlight scene to a target avatar | ||
441 | /// </summary> | ||
442 | /// <param name="rules"></param> | ||
443 | /// <returns>success: true or false</returns> | ||
444 | public int cmSetWindlightSceneTargeted(LSL_List rules, LSL_Key target) | ||
445 | { | ||
446 | if (!m_CMFunctionsEnabled) | ||
447 | { | ||
448 | CMShoutError("Careminster functions are not enabled."); | ||
449 | return 0; | ||
450 | } | ||
451 | if (!World.RegionInfo.EstateSettings.IsEstateManager(m_host.OwnerID) && World.GetScenePresence(m_host.OwnerID).GodLevel < 200) | ||
452 | { | ||
453 | CMShoutError("cmSetWindlightSceneTargeted can only be used by estate managers or owners."); | ||
454 | return 0; | ||
455 | } | ||
456 | int success = 0; | ||
457 | m_host.AddScriptLPS(1); | ||
458 | if (Meta7WindlightModule.EnableWindlight) | ||
459 | { | ||
460 | RegionMeta7WindlightData wl = getWindlightProfileFromRules(rules); | ||
461 | World.EventManager.TriggerOnSendNewWindlightProfileTargeted(wl, new UUID(target.m_string)); | ||
462 | success = 1; | ||
463 | } | ||
464 | else | ||
465 | { | ||
466 | CMShoutError("Windlight module is disabled"); | ||
467 | return 0; | ||
468 | } | ||
469 | return success; | ||
427 | } | 470 | } |
428 | 471 | ||
429 | } | 472 | } |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ICM_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ICM_Api.cs index 9dd0b73..ef990a1 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ICM_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ICM_Api.cs | |||
@@ -15,6 +15,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces | |||
15 | { | 15 | { |
16 | // Windlight Functions | 16 | // Windlight Functions |
17 | LSL_List cmGetWindlightScene(LSL_List rules); | 17 | LSL_List cmGetWindlightScene(LSL_List rules); |
18 | int cmSetWindlightScene(LSL_List rules); | 18 | int cmSetWindlightScene(LSL_List rules); |
19 | int cmSetWindlightSceneTargeted(LSL_List rules, key target); | ||
19 | } | 20 | } |
20 | } | 21 | } |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/CM_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/CM_Stub.cs index e85d41e..5bc3a88 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/CM_Stub.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/CM_Stub.cs | |||
@@ -66,6 +66,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase | |||
66 | public int cmSetWindlightScene(LSL_List rules) | 66 | public int cmSetWindlightScene(LSL_List rules) |
67 | { | 67 | { |
68 | return m_CM_Functions.cmSetWindlightScene(rules); | 68 | return m_CM_Functions.cmSetWindlightScene(rules); |
69 | } | ||
70 | |||
71 | public int cmSetWindlightSceneTargeted(LSL_List rules, key target) | ||
72 | { | ||
73 | return m_CM_Functions.cmSetWindlightSceneTargeted(rules, target); | ||
69 | } | 74 | } |
70 | } | 75 | } |
71 | } | 76 | } |