mirror of
https://github.com/opensim/opensim.git
synced 2026-08-04 16:22:50 +08:00
Merge branch 'master' of ssh://diva@opensimulator.org/var/git/opensim
This commit is contained in:
@@ -1435,6 +1435,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
/// <param name="map">heightmap</param>
|
||||
public virtual void SendLayerData(float[] map)
|
||||
{
|
||||
DoSendLayerData((object)map);
|
||||
ThreadPool.QueueUserWorkItem(DoSendLayerData, map);
|
||||
}
|
||||
|
||||
@@ -1450,16 +1451,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
{
|
||||
for (int y = 0; y < 16; y++)
|
||||
{
|
||||
// For some terrains, sending more than one terrain patch at once results in a libsecondlife exception
|
||||
// see http://opensimulator.org/mantis/view.php?id=1662
|
||||
//for (int x = 0; x < 16; x += 4)
|
||||
//{
|
||||
// SendLayerPacket(map, y, x);
|
||||
// Thread.Sleep(150);
|
||||
//}
|
||||
for (int x = 0; x < 16; x++)
|
||||
for (int x = 0; x < 16; x += 4)
|
||||
{
|
||||
SendLayerData(x, y, LLHeightFieldMoronize(map));
|
||||
SendLayerPacket(LLHeightFieldMoronize(map), y, x);
|
||||
Thread.Sleep(35);
|
||||
}
|
||||
}
|
||||
@@ -1476,17 +1470,54 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
/// <param name="map">heightmap</param>
|
||||
/// <param name="px">X coordinate for patches 0..12</param>
|
||||
/// <param name="py">Y coordinate for patches 0..15</param>
|
||||
// private void SendLayerPacket(float[] map, int y, int x)
|
||||
// {
|
||||
// int[] patches = new int[4];
|
||||
// patches[0] = x + 0 + y * 16;
|
||||
// patches[1] = x + 1 + y * 16;
|
||||
// patches[2] = x + 2 + y * 16;
|
||||
// patches[3] = x + 3 + y * 16;
|
||||
private void SendLayerPacket(float[] map, int y, int x)
|
||||
{
|
||||
int[] patches = new int[4];
|
||||
patches[0] = x + 0 + y * 16;
|
||||
patches[1] = x + 1 + y * 16;
|
||||
patches[2] = x + 2 + y * 16;
|
||||
patches[3] = x + 3 + y * 16;
|
||||
|
||||
// Packet layerpack = LLClientView.TerrainManager.CreateLandPacket(map, patches);
|
||||
// OutPacket(layerpack, ThrottleOutPacketType.Land);
|
||||
// }
|
||||
LayerDataPacket layerpack;
|
||||
try
|
||||
{
|
||||
layerpack = TerrainCompressor.CreateLandPacket(map, patches);
|
||||
layerpack.Header.Zerocoded = true;
|
||||
layerpack.Header.Reliable = true;
|
||||
|
||||
if (layerpack.Length > 1000) // Oversize packet was created
|
||||
{
|
||||
for (int xa = 0 ; xa < 4 ; xa++)
|
||||
{
|
||||
// Send oversize packet in individual patches
|
||||
//
|
||||
SendLayerData(x+xa, y, map);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
OutPacket(layerpack, ThrottleOutPacketType.Land);
|
||||
}
|
||||
}
|
||||
catch (OverflowException e)
|
||||
{
|
||||
for (int xa = 0 ; xa < 4 ; xa++)
|
||||
{
|
||||
// Send oversize packet in individual patches
|
||||
//
|
||||
SendLayerData(x+xa, y, map);
|
||||
}
|
||||
}
|
||||
catch (IndexOutOfRangeException e)
|
||||
{
|
||||
for (int xa = 0 ; xa < 4 ; xa++)
|
||||
{
|
||||
// Bad terrain, send individual chunks
|
||||
//
|
||||
SendLayerData(x+xa, y, map);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sends a specified patch to a client
|
||||
@@ -1507,6 +1538,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
|
||||
LayerDataPacket layerpack = TerrainCompressor.CreateLandPacket(((map.Length==65536)? map : LLHeightFieldMoronize(map)), patches);
|
||||
layerpack.Header.Zerocoded = true;
|
||||
layerpack.Header.Reliable = true;
|
||||
|
||||
OutPacket(layerpack, ThrottleOutPacketType.Land);
|
||||
|
||||
@@ -1556,7 +1588,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||
/// <param name="windSpeeds">16x16 array of wind speeds</param>
|
||||
public virtual void SendWindData(Vector2[] windSpeeds)
|
||||
{
|
||||
ThreadPool.QueueUserWorkItem(new WaitCallback(DoSendWindData), (object)windSpeeds);
|
||||
DoSendWindData((object)windSpeeds);
|
||||
// ThreadPool.QueueUserWorkItem(new WaitCallback(DoSendWindData), (object)windSpeeds);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -34,6 +34,7 @@ using OpenMetaverse;
|
||||
using OpenMetaverse.Packets;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Tests.Common;
|
||||
using OpenSim.Tests.Common.Mock;
|
||||
|
||||
namespace OpenSim.Region.ClientStack.LindenUDP.Tests
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user