aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ClientStack
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs52
1 files changed, 38 insertions, 14 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index 5f8d8f1..90f0336 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -1390,11 +1390,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1390 /// Send the cloud matrix to the client 1390 /// Send the cloud matrix to the client
1391 /// </summary> 1391 /// </summary>
1392 /// <param name="windSpeeds">16x16 array of cloud densities</param> 1392 /// <param name="windSpeeds">16x16 array of cloud densities</param>
1393/*
1393 public virtual void SendCloudData(int version, float[] cloudDensity) 1394 public virtual void SendCloudData(int version, float[] cloudDensity)
1394 { 1395 {
1395 Util.FireAndForget(DoSendCloudData, cloudDensity, "LLClientView.SendCloudData"); 1396 Util.FireAndForget(DoSendCloudData, cloudDensity, "LLClientView.SendCloudData");
1396 } 1397 }
1397 1398*/
1398 // wind caching 1399 // wind caching
1399 private static int lastWindVersion = 0; 1400 private static int lastWindVersion = 0;
1400 private static List<LayerDataPacket> lastWindPackets = new List<LayerDataPacket>(); 1401 private static List<LayerDataPacket> lastWindPackets = new List<LayerDataPacket>();
@@ -1445,30 +1446,53 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1445 OutPacket(pkt, ThrottleOutPacketType.Wind); 1446 OutPacket(pkt, ThrottleOutPacketType.Wind);
1446 } 1447 }
1447 1448
1449 // cloud caching
1450 private static int lastCloudVersion = 0;
1451 private static List<LayerDataPacket> lastCloudPackets = new List<LayerDataPacket>();
1452
1448 /// <summary> 1453 /// <summary>
1449 /// Send cloud layer information to the client. 1454 /// Send cloud layer information to the client.
1450 /// </summary> 1455 /// </summary>
1451 /// <param name="o"></param> 1456 /// <param name="o"></param>
1452 private void DoSendCloudData(object o) 1457// private void DoSendCloudData(object o)
1458 public virtual void SendCloudData(int version, float[] cloudDensity)
1453 { 1459 {
1454 float[] cloudCover = (float[])o; 1460// float[] cloudDensity = (float[])o;
1455 TerrainPatch[] patches = new TerrainPatch[1]; 1461 bool isNewData;
1456 patches[0] = new TerrainPatch(); 1462 lock(lastCloudPackets)
1457 patches[0].Data = new float[16 * 16]; 1463 isNewData = lastCloudVersion != version;
1458 1464
1459 for (int y = 0; y < 16; y++) 1465 if(isNewData)
1460 { 1466 {
1461 for (int x = 0; x < 16; x++) 1467 TerrainPatch[] patches = new TerrainPatch[1];
1468 patches[0] = new TerrainPatch();
1469 patches[0].Data = new float[16 * 16];
1470
1471 for (int y = 0; y < 16; y++)
1472 {
1473 for (int x = 0; x < 16; x++)
1474 {
1475 patches[0].Data[y * 16 + x] = cloudDensity[y * 16 + x];
1476 }
1477 }
1478 // neither we or viewers have extended clouds
1479 byte layerType = (byte)TerrainPatch.LayerType.Cloud;
1480
1481 LayerDataPacket layerpack =
1482 OpenSimTerrainCompressor.CreateLayerDataPacketStandardSize(
1483 patches, layerType);
1484 layerpack.Header.Zerocoded = true;
1485 lock(lastCloudPackets)
1462 { 1486 {
1463 patches[0].Data[y * 16 + x] = cloudCover[y * 16 + x]; 1487 lastCloudPackets.Clear();
1488 lastCloudPackets.Add(layerpack);
1489 lastCloudVersion = version;
1464 } 1490 }
1465 } 1491 }
1466 // neither we or viewers have extended clouds
1467 byte layerType = (byte)TerrainPatch.LayerType.Cloud;
1468 1492
1469 LayerDataPacket layerpack = OpenSimTerrainCompressor.CreateLayerDataPacketStandardSize(patches, layerType); 1493 lock(lastCloudPackets)
1470 layerpack.Header.Zerocoded = true; 1494 foreach(LayerDataPacket pkt in lastCloudPackets)
1471 OutPacket(layerpack, ThrottleOutPacketType.Cloud); 1495 OutPacket(pkt, ThrottleOutPacketType.Cloud);
1472 } 1496 }
1473 1497
1474 /// <summary> 1498 /// <summary>