diff options
Diffstat (limited to 'OpenSim/Region/ClientStack/LindenUDP')
-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> |