コード例 #1
0
        void ParcelPropertiesRequestHandler(Packet packet, Agent agent)
        {
            ParcelPropertiesRequestPacket request = (ParcelPropertiesRequestPacket)packet;

            // TODO: Replace with HashSet when we switch to .NET 3.5
            List <int> parcels = new List <int>();

            // Convert the boundaries to integers
            int north = (int)Math.Round(request.ParcelData.North) / 4;
            int east  = (int)Math.Round(request.ParcelData.East) / 4;
            int south = (int)Math.Round(request.ParcelData.South) / 4;
            int west  = (int)Math.Round(request.ParcelData.West) / 4;

            // Find all of the parcels within the given boundaries
            int xLen = east - west;
            int yLen = north - south;

            for (int x = 0; x < xLen; x++)
            {
                for (int y = 0; y < yLen; y++)
                {
                    if (west + x < 64 && south + y < 64)
                    {
                        int currentParcelID = parcelOverlay[(south + y) * 64 + (west + x)];
                        if (!parcels.Contains(currentParcelID))
                        {
                            parcels.Add(currentParcelID);
                        }
                    }
                }
            }

            ParcelResult result = ParcelResult.NoData;

            if (parcels.Count == 1)
            {
                result = ParcelResult.Single;
            }
            else if (parcels.Count > 1)
            {
                result = ParcelResult.Multiple;
            }

            for (int i = 0; i < parcels.Count; i++)
            {
                SendParcelProperties(parcels[i], request.ParcelData.SequenceID, request.ParcelData.SnapSelection, result, agent);
            }
        }
コード例 #2
0
ファイル: Parcels.cs プロジェクト: jhurliman/simian
        private void ParcelPropertiesRequestHandler(Packet packet, LLAgent agent)
        {
            ParcelPropertiesRequestPacket request = (ParcelPropertiesRequestPacket)packet;

            HashSet <int> parcels = new HashSet <int>();

            // Convert the boundaries to integers
            int north = (int)Math.Round(request.ParcelData.North) / 4;
            int east  = (int)Math.Round(request.ParcelData.East) / 4;
            int south = (int)Math.Round(request.ParcelData.South) / 4;
            int west  = (int)Math.Round(request.ParcelData.West) / 4;

            // Find all of the parcels within the given boundaries
            int xLen = east - west;
            int yLen = north - south;

            for (int x = 0; x < xLen; x++)
            {
                for (int y = 0; y < yLen; y++)
                {
                    if (west + x < 64 && south + y < 64)
                    {
                        int currentParcelID = m_parcels.GetParcelID(west + x, south + y);
                        if (!parcels.Contains(currentParcelID))
                        {
                            parcels.Add(currentParcelID);
                        }
                    }
                }
            }

            ParcelResult result = ParcelResult.NoData;

            if (parcels.Count == 1)
            {
                result = ParcelResult.Single;
            }
            else if (parcels.Count > 1)
            {
                result = ParcelResult.Multiple;
            }

            foreach (int parcelID in parcels)
            {
                SendParcelProperties(parcelID, request.ParcelData.SequenceID, request.ParcelData.SnapSelection, result, agent);
            }
        }
コード例 #3
0
        /// <summary>
        ///
        /// </summary>
        public void FillParcels()
        {
            // Begins filling parcels
            ParcelDownloading = true;

            ParcelPropertiesRequestPacket tPacket = new ParcelPropertiesRequestPacket();

            tPacket.AgentData.AgentID     = Client.Self.ID;
            tPacket.AgentData.SessionID   = Client.Network.SessionID;
            tPacket.ParcelData.SequenceID = -10000;
            tPacket.ParcelData.West       = 0.0f;
            tPacket.ParcelData.South      = 0.0f;
            tPacket.ParcelData.East       = 0.0f;
            tPacket.ParcelData.North      = 0.0f;

            Client.Network.SendPacket((Packet)tPacket);
        }
コード例 #4
0
        /// <summary>
        /// 
        /// </summary>
        public void FillParcels()
        {
            // Begins filling parcels
            ParcelDownloading = true;

            ParcelPropertiesRequestPacket tPacket = new ParcelPropertiesRequestPacket();
            tPacket.AgentData.AgentID = Client.Self.ID;
            tPacket.AgentData.SessionID = Client.Network.SessionID;
            tPacket.ParcelData.SequenceID = -10000;
            tPacket.ParcelData.West = 0.0f;
            tPacket.ParcelData.South = 0.0f;
            tPacket.ParcelData.East = 0.0f;
            tPacket.ParcelData.North = 0.0f;

            Client.Network.SendPacket((Packet)tPacket);
        }
コード例 #5
0
ファイル: ParcelManager.cs プロジェクト: RavenB/gridsearch
        /// <summary>
        /// Request properties of parcels using a bounding box selection
        /// </summary>
        /// <param name="simulator">Simulator containing the parcel</param>
        /// <param name="north">Northern boundary of the parcel selection</param>
        /// <param name="east">Eastern boundary of the parcel selection</param>
        /// <param name="south">Southern boundary of the parcel selection</param>
        /// <param name="west">Western boundary of the parcel selection</param>
        /// <param name="sequenceID">An arbitrary integer that will be returned
        /// with the ParcelProperties reply, useful for distinguishing between
        /// different types of parcel property requests</param>
        /// <param name="snapSelection">A boolean that is returned with the
        /// ParcelProperties reply, useful for snapping focus to a single
        /// parcel</param>
        public void RequestParcelProperties(Simulator simulator, float north, float east, float south, float west,
            int sequenceID, bool snapSelection)
        {
            ParcelPropertiesRequestPacket request = new ParcelPropertiesRequestPacket();

            request.AgentData.AgentID = Client.Self.AgentID;
            request.AgentData.SessionID = Client.Self.SessionID;
            request.ParcelData.North = north;
            request.ParcelData.East = east;
            request.ParcelData.South = south;
            request.ParcelData.West = west;
            request.ParcelData.SequenceID = sequenceID;
            request.ParcelData.SnapSelection = snapSelection;

            Client.Network.SendPacket(request, simulator);
        }
コード例 #6
0
        private void ParcelPropertiesHandler(Packet packet, Simulator simulator)
        {
            ParcelPropertiesPacket properties = (ParcelPropertiesPacket)packet;

            byte[] Bitmap = properties.ParcelData.Bitmap;
            int LocalID = properties.ParcelData.LocalID;

            // Mark this area as downloaded
            int x, y, index, subindex;
            byte val;

            for (x = 0; x < 64; x++)
            {
                for (y = 0; y < 64; y++)
                {
                    if (simulator.Region.ParcelMarked[y, x] == 0)
                    {
                        index = ((x * 64) + y);
                        subindex = index % 8;
                        index /= 8;

                        val = Bitmap[index];

                        simulator.Region.ParcelMarked[y, x] = ((val >> subindex) & 1) == 1 ? LocalID : 0;
                    }
                }
            }

            // Fire off the next request, if we are downloading the whole sim
            bool hasTriggered = false;
            if (simulator.Region.ParcelDownloading)
            {
                for (x = 0; x < 64; x++)
                {
                    for (y = 0; y < 64; y++)
                    {
                        if (simulator.Region.ParcelMarked[x, y] == 0)
                        {
                            ParcelPropertiesRequestPacket tPacket = new ParcelPropertiesRequestPacket();
                            tPacket.AgentData.AgentID = Client.Network.AgentID;
                            tPacket.AgentData.SessionID = Client.Network.SessionID;
                            tPacket.ParcelData.SequenceID = -10000;
                            tPacket.ParcelData.West = (x * 4.0f);
                            tPacket.ParcelData.South = (y * 4.0f);
                            tPacket.ParcelData.East = (x * 4.0f) + 4.0f;
                            tPacket.ParcelData.North = (y * 4.0f) + 4.0f;

                            Client.Network.SendPacket(tPacket, simulator);

                            hasTriggered = true;

                            goto exit;
                        }
                    }
                }
            exit:
                ;
            }

            // This map is complete, fire callback
            if (!hasTriggered)
            {
                simulator.Region.FilledParcels();
            }

            Parcel parcel = null;

            lock (simulator.Region.Parcels)
            {
                if (!simulator.Region.Parcels.ContainsKey(LocalID))
                {
                    simulator.Region.Parcels[LocalID] = new Parcel(simulator);
                }

                parcel = simulator.Region.Parcels[LocalID];
            }

            // Save this parcels data
            // TODO: Lots of values are not being stored, Parcel needs to be expanded to take all the data.
            // August2006:  God help me should I have to type this out again... argh.
            // October2006: I really shouldnt have typed that.
            parcel.RequestResult       = properties.ParcelData.RequestResult;
            parcel.SequenceID          = properties.ParcelData.SequenceID;
            parcel.SnapSelection       = properties.ParcelData.SnapSelection;
            parcel.SelfCount           = properties.ParcelData.SelfCount;
            parcel.OtherCount          = properties.ParcelData.OtherCount;
            parcel.PublicCount         = properties.ParcelData.PublicCount;
            parcel.LocalID             = LocalID;
            parcel.OwnerID             = properties.ParcelData.OwnerID;
            parcel.IsGroupOwned        = properties.ParcelData.IsGroupOwned;
            parcel.AuctionID           = properties.ParcelData.AuctionID;
            //            parcel.ReservedNewbie      = properties.ParcelData.ReservedNewbie; // FIXME FIXME FIXME
            parcel.ClaimDate           = properties.ParcelData.ClaimDate;
            parcel.ClaimPrice          = properties.ParcelData.ClaimPrice;
            parcel.RentPrice           = properties.ParcelData.RentPrice;
            parcel.AABBMin             = properties.ParcelData.AABBMin;
            parcel.AABBMax             = properties.ParcelData.AABBMax;
            parcel.Bitmap              = properties.ParcelData.Bitmap;
            parcel.Area                = properties.ParcelData.Area;
            parcel.Status              = properties.ParcelData.Status;
            parcel.SimWideMaxObjects   = properties.ParcelData.SimWideMaxPrims;
            parcel.SimWideTotalObjects = properties.ParcelData.SimWideTotalPrims;
            parcel.MaxObjects          = properties.ParcelData.MaxPrims;
            parcel.TotalObjects        = properties.ParcelData.TotalPrims;
            parcel.OwnerObjects        = properties.ParcelData.OwnerPrims;
            parcel.GroupObjects        = properties.ParcelData.GroupPrims;
            parcel.OtherObjects        = properties.ParcelData.OtherPrims;
            parcel.ParcelObjectBonus   = properties.ParcelData.ParcelPrimBonus;
            parcel.OtherCleanTime      = properties.ParcelData.OtherCleanTime;
            parcel.ParcelFlags         = properties.ParcelData.ParcelFlags;
            parcel.SalePrice           = properties.ParcelData.SalePrice;
            parcel.Name                = Helpers.FieldToString(properties.ParcelData.Name);
            parcel.Desc                = Helpers.FieldToString(properties.ParcelData.Desc);
            parcel.MusicURL            = Helpers.FieldToString(properties.ParcelData.MusicURL);
            parcel.MediaURL            = Helpers.FieldToString(properties.ParcelData.MediaURL);
            parcel.MediaID             = properties.ParcelData.MediaID;
            parcel.MediaAutoScale      = properties.ParcelData.MediaAutoScale;
            parcel.GroupID             = properties.ParcelData.GroupID;
            parcel.PassPrice           = properties.ParcelData.PassPrice;
            parcel.PassHours           = properties.ParcelData.PassHours;
            parcel.Category            = properties.ParcelData.Category;
            parcel.AuthBuyerID         = properties.ParcelData.AuthBuyerID;
            parcel.SnapshotID          = properties.ParcelData.SnapshotID;
            parcel.UserLocation        = properties.ParcelData.UserLocation;
            parcel.UserLookAt          = properties.ParcelData.UserLookAt;
            parcel.LandingType         = properties.ParcelData.LandingType;
        }
コード例 #7
0
        private void ParcelPropertiesHandler(Packet packet, Simulator simulator)
        {
            ParcelPropertiesPacket properties = (ParcelPropertiesPacket)packet;

            byte[] Bitmap  = properties.ParcelData.Bitmap;
            int    LocalID = properties.ParcelData.LocalID;

            // Mark this area as downloaded
            int  x, y, index, subindex;
            byte val;

            for (x = 0; x < 64; x++)
            {
                for (y = 0; y < 64; y++)
                {
                    if (simulator.Region.ParcelMarked[y, x] == 0)
                    {
                        index    = ((x * 64) + y);
                        subindex = index % 8;
                        index   /= 8;

                        val = Bitmap[index];

                        simulator.Region.ParcelMarked[y, x] = ((val >> subindex) & 1) == 1 ? LocalID : 0;
                    }
                }
            }

            // Fire off the next request, if we are downloading the whole sim
            bool hasTriggered = false;

            if (simulator.Region.ParcelDownloading)
            {
                for (x = 0; x < 64; x++)
                {
                    for (y = 0; y < 64; y++)
                    {
                        if (simulator.Region.ParcelMarked[x, y] == 0)
                        {
                            ParcelPropertiesRequestPacket tPacket = new ParcelPropertiesRequestPacket();
                            tPacket.AgentData.AgentID     = Client.Network.AgentID;
                            tPacket.AgentData.SessionID   = Client.Network.SessionID;
                            tPacket.ParcelData.SequenceID = -10000;
                            tPacket.ParcelData.West       = (x * 4.0f);
                            tPacket.ParcelData.South      = (y * 4.0f);
                            tPacket.ParcelData.East       = (x * 4.0f) + 4.0f;
                            tPacket.ParcelData.North      = (y * 4.0f) + 4.0f;

                            Client.Network.SendPacket(tPacket, simulator);

                            hasTriggered = true;

                            goto exit;
                        }
                    }
                }
exit:
                ;
            }

            // This map is complete, fire callback
            if (!hasTriggered)
            {
                simulator.Region.FilledParcels();
            }

            Parcel parcel = null;

            lock (simulator.Region.Parcels)
            {
                if (!simulator.Region.Parcels.ContainsKey(LocalID))
                {
                    simulator.Region.Parcels[LocalID] = new Parcel(simulator);
                }

                parcel = simulator.Region.Parcels[LocalID];
            }

            // Save this parcels data
            // TODO: Lots of values are not being stored, Parcel needs to be expanded to take all the data.
            // August2006:  God help me should I have to type this out again... argh.
            // October2006: I really shouldnt have typed that.
            parcel.RequestResult = properties.ParcelData.RequestResult;
            parcel.SequenceID    = properties.ParcelData.SequenceID;
            parcel.SnapSelection = properties.ParcelData.SnapSelection;
            parcel.SelfCount     = properties.ParcelData.SelfCount;
            parcel.OtherCount    = properties.ParcelData.OtherCount;
            parcel.PublicCount   = properties.ParcelData.PublicCount;
            parcel.LocalID       = LocalID;
            parcel.OwnerID       = properties.ParcelData.OwnerID;
            parcel.IsGroupOwned  = properties.ParcelData.IsGroupOwned;
            parcel.AuctionID     = properties.ParcelData.AuctionID;
//            parcel.ReservedNewbie      = properties.ParcelData.ReservedNewbie; // FIXME FIXME FIXME
            parcel.ClaimDate           = properties.ParcelData.ClaimDate;
            parcel.ClaimPrice          = properties.ParcelData.ClaimPrice;
            parcel.RentPrice           = properties.ParcelData.RentPrice;
            parcel.AABBMin             = properties.ParcelData.AABBMin;
            parcel.AABBMax             = properties.ParcelData.AABBMax;
            parcel.Bitmap              = properties.ParcelData.Bitmap;
            parcel.Area                = properties.ParcelData.Area;
            parcel.Status              = properties.ParcelData.Status;
            parcel.SimWideMaxObjects   = properties.ParcelData.SimWideMaxPrims;
            parcel.SimWideTotalObjects = properties.ParcelData.SimWideTotalPrims;
            parcel.MaxObjects          = properties.ParcelData.MaxPrims;
            parcel.TotalObjects        = properties.ParcelData.TotalPrims;
            parcel.OwnerObjects        = properties.ParcelData.OwnerPrims;
            parcel.GroupObjects        = properties.ParcelData.GroupPrims;
            parcel.OtherObjects        = properties.ParcelData.OtherPrims;
            parcel.ParcelObjectBonus   = properties.ParcelData.ParcelPrimBonus;
            parcel.OtherCleanTime      = properties.ParcelData.OtherCleanTime;
            parcel.ParcelFlags         = properties.ParcelData.ParcelFlags;
            parcel.SalePrice           = properties.ParcelData.SalePrice;
            parcel.Name                = Helpers.FieldToString(properties.ParcelData.Name);
            parcel.Desc                = Helpers.FieldToString(properties.ParcelData.Desc);
            parcel.MusicURL            = Helpers.FieldToString(properties.ParcelData.MusicURL);
            parcel.MediaURL            = Helpers.FieldToString(properties.ParcelData.MediaURL);
            parcel.MediaID             = properties.ParcelData.MediaID;
            parcel.MediaAutoScale      = properties.ParcelData.MediaAutoScale;
            parcel.GroupID             = properties.ParcelData.GroupID;
            parcel.PassPrice           = properties.ParcelData.PassPrice;
            parcel.PassHours           = properties.ParcelData.PassHours;
            parcel.Category            = properties.ParcelData.Category;
            parcel.AuthBuyerID         = properties.ParcelData.AuthBuyerID;
            parcel.SnapshotID          = properties.ParcelData.SnapshotID;
            parcel.UserLocation        = properties.ParcelData.UserLocation;
            parcel.UserLookAt          = properties.ParcelData.UserLookAt;
            parcel.LandingType         = properties.ParcelData.LandingType;
        }