diff options
author | Teravus Ovares | 2008-09-25 11:46:05 +0000 |
---|---|---|
committer | Teravus Ovares | 2008-09-25 11:46:05 +0000 |
commit | 4004172106d2f736916bd2b3729edfce43699e1e (patch) | |
tree | a785022360ec66b51a05d7319cb3fe85c2ee145a /OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | |
parent | fixes a slight copy and paste bug in OGP module. (diff) | |
download | opensim-SC-4004172106d2f736916bd2b3729edfce43699e1e.zip opensim-SC-4004172106d2f736916bd2b3729edfce43699e1e.tar.gz opensim-SC-4004172106d2f736916bd2b3729edfce43699e1e.tar.bz2 opensim-SC-4004172106d2f736916bd2b3729edfce43699e1e.tar.xz |
* Adds some Wind
* A little wind wouldn't hurt anyone, right? This is the 'slightly breezy' setting.. hopefully you won't notice 'much' of a difference.
* It turns out the terrain patch routine is similar enough to the wind version that it can be used to hack together a breeze generator with a few mods.
* Not much configuration.. yet. You only get breeze updates in the general vicinity of your camera now to keep bandwidth usage down.. and we're not talking about 'much' movement at the moment.
* initial version... could use improvement I'm sure.
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | 93 |
1 files changed, 92 insertions, 1 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index 983e1a9..3a90cff 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | |||
@@ -1219,8 +1219,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1219 | 1219 | ||
1220 | LayerDataPacket layerpack = TerrainCompressor.CreateLandPacket(map, patches); | 1220 | LayerDataPacket layerpack = TerrainCompressor.CreateLandPacket(map, patches); |
1221 | layerpack.Header.Zerocoded = true; | 1221 | layerpack.Header.Zerocoded = true; |
1222 | 1222 | ||
1223 | OutPacket(layerpack, ThrottleOutPacketType.Land); | 1223 | OutPacket(layerpack, ThrottleOutPacketType.Land); |
1224 | |||
1224 | } | 1225 | } |
1225 | catch (Exception e) | 1226 | catch (Exception e) |
1226 | { | 1227 | { |
@@ -1229,6 +1230,96 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1229 | } | 1230 | } |
1230 | 1231 | ||
1231 | /// <summary> | 1232 | /// <summary> |
1233 | /// Send the region heightmap to the client | ||
1234 | /// </summary> | ||
1235 | /// <param name="map">heightmap</param> | ||
1236 | public virtual void SendWindData(float[] map) | ||
1237 | { | ||
1238 | ThreadPool.QueueUserWorkItem(new WaitCallback(DoSendWindData), (object)map); | ||
1239 | } | ||
1240 | |||
1241 | /// <summary> | ||
1242 | /// Send terrain layer information to the client. | ||
1243 | /// </summary> | ||
1244 | /// <param name="o"></param> | ||
1245 | private void DoSendWindData(object o) | ||
1246 | { | ||
1247 | float[] map = (float[])o; | ||
1248 | |||
1249 | try | ||
1250 | { | ||
1251 | for (int y = 0; y < 16; y++) | ||
1252 | { | ||
1253 | // For some terrains, sending more than one terrain patch at once results in a libsecondlife exception | ||
1254 | // see http://opensimulator.org/mantis/view.php?id=1662 | ||
1255 | //for (int x = 0; x < 16; x += 4) | ||
1256 | //{ | ||
1257 | // SendLayerPacket(map, y, x); | ||
1258 | // Thread.Sleep(150); | ||
1259 | //} | ||
1260 | for (int x = 0; x < 16; x++) | ||
1261 | { | ||
1262 | SendWindData(x, y, map); | ||
1263 | Thread.Sleep(35); | ||
1264 | } | ||
1265 | } | ||
1266 | } | ||
1267 | catch (Exception e) | ||
1268 | { | ||
1269 | m_log.Warn("[CLIENT]: ClientView.API.cs: SendLayerData() - Failed with exception " + e.ToString()); | ||
1270 | } | ||
1271 | } | ||
1272 | |||
1273 | /// <summary> | ||
1274 | /// Sends a set of four patches (x, x+1, ..., x+3) to the client | ||
1275 | /// </summary> | ||
1276 | /// <param name="map">heightmap</param> | ||
1277 | /// <param name="px">X coordinate for patches 0..12</param> | ||
1278 | /// <param name="py">Y coordinate for patches 0..15</param> | ||
1279 | // private void SendLayerPacket(float[] map, int y, int x) | ||
1280 | // { | ||
1281 | // int[] patches = new int[4]; | ||
1282 | // patches[0] = x + 0 + y * 16; | ||
1283 | // patches[1] = x + 1 + y * 16; | ||
1284 | // patches[2] = x + 2 + y * 16; | ||
1285 | // patches[3] = x + 3 + y * 16; | ||
1286 | |||
1287 | // Packet layerpack = LLClientView.TerrainManager.CreateLandPacket(map, patches); | ||
1288 | // OutPacket(layerpack, ThrottleOutPacketType.Land); | ||
1289 | // } | ||
1290 | |||
1291 | /// <summary> | ||
1292 | /// Sends a specified patch to a client | ||
1293 | /// </summary> | ||
1294 | /// <param name="px">Patch coordinate (x) 0..15</param> | ||
1295 | /// <param name="py">Patch coordinate (y) 0..15</param> | ||
1296 | /// <param name="map">heightmap</param> | ||
1297 | public void SendWindData(int px, int py, float[] map) | ||
1298 | { | ||
1299 | try | ||
1300 | { | ||
1301 | int[] patches = new int[1]; | ||
1302 | int patchx, patchy; | ||
1303 | patchx = px; | ||
1304 | patchy = py; | ||
1305 | |||
1306 | patches[0] = patchx + 0 + patchy * 16; | ||
1307 | |||
1308 | LayerDataPacket layerpack = TerrainCompressor.CreateWindPacket(map, patches); | ||
1309 | layerpack.Header.Zerocoded = true; | ||
1310 | |||
1311 | OutPacket(layerpack, ThrottleOutPacketType.Wind); | ||
1312 | |||
1313 | } | ||
1314 | catch (Exception e) | ||
1315 | { | ||
1316 | m_log.Warn("[client]: ClientView.API.cs: SendLayerData() - Failed with exception " + e.ToString()); | ||
1317 | } | ||
1318 | } | ||
1319 | |||
1320 | |||
1321 | |||
1322 | /// <summary> | ||
1232 | /// Tell the client that the given neighbour region is ready to receive a child agent. | 1323 | /// Tell the client that the given neighbour region is ready to receive a child agent. |
1233 | /// </summary> | 1324 | /// </summary> |
1234 | /// <param name="neighbourHandle"></param> | 1325 | /// <param name="neighbourHandle"></param> |