Example #1
0
        private void SendTerrainPacket(QueuedInterestListEvent[] eventDatas, IScenePresence presence)
        {
            const int PATCHES_PER_PACKET = 3;

            if (!(presence is LLAgent) || presence.InterestList == null)
            {
                return;
            }
            LLAgent agent = (LLAgent)presence;

            List <int> patches = new List <int>(PATCHES_PER_PACKET);

            for (int i = 0; i < eventDatas.Length; i++)
            {
                int[] state = (int[])eventDatas[i].Event.State;
                int   x     = state[0];
                int   y     = state[1];

                patches.Add(y * 16 + x);

                if (patches.Count == PATCHES_PER_PACKET || i == eventDatas.Length - 1)
                {
                    LayerDataPacket packet = TerrainCompressor.CreateLandPacket(m_terrain.GetHeightmap(), patches.ToArray());
                    m_udp.SendPacket(agent, packet, ThrottleCategory.Land, false);
                    patches = new List <int>(PATCHES_PER_PACKET);
                }
            }
        }
Example #2
0
 void SendLayerData(Agent agent)
 {
     lock (heightmap)
     {
         for (int y = 0; y < 16; y++)
         {
             for (int x = 0; x < 16; x++)
             {
                 int[] patches = new int[1];
                 patches[0] = (y * 16) + x;
                 LayerDataPacket layer = TerrainCompressor.CreateLandPacket(heightmap, patches);
                 server.UDP.SendPacket(agent.AgentID, layer, PacketCategory.Terrain);
             }
         }
     }
 }