/// <summary> /// /// </summary> /// <param name="west"></param> /// <param name="south"></param> /// <param name="east"></param> /// <param name="north"></param> public void ParcelJoin(float west, float south, float east, float north) { ParcelJoinPacket join = new ParcelJoinPacket(); join.AgentData.AgentID = Client.Network.AgentID; join.AgentData.SessionID = Client.Network.SessionID; join.ParcelData.East = east; join.ParcelData.North = north; join.ParcelData.South = south; join.ParcelData.West = west; // FIXME: Region needs a reference to it's parent Simulator //Client.Network.SendPacket((Packet)join, this.Simulator); }
/// <summary> /// /// </summary> /// <param name="west"></param> /// <param name="south"></param> /// <param name="east"></param> /// <param name="north"></param> public void ParcelJoin(float west, float south, float east, float north) { ParcelJoinPacket join = new ParcelJoinPacket(); join.AgentData.AgentID = Client.Network.AgentID; join.AgentData.SessionID = Client.Network.SessionID; join.ParcelData.East = east; join.ParcelData.North = north; join.ParcelData.South = south; join.ParcelData.West = west; // FIXME: Region needs a reference to it's parent Simulator //Client.Network.SendPacket((Packet)join, this.Simulator); }
/// <summary> /// Join two parcels of land creating a single parcel /// </summary> /// <param name="simulator"></param> /// <param name="west"></param> /// <param name="south"></param> /// <param name="east"></param> /// <param name="north"></param> public void ParcelJoin(Simulator simulator, float west, float south, float east, float north) { ParcelJoinPacket join = new ParcelJoinPacket(); join.AgentData.AgentID = Client.Self.AgentID; join.AgentData.SessionID = Client.Self.SessionID; join.ParcelData.East = east; join.ParcelData.North = north; join.ParcelData.South = south; join.ParcelData.West = west; Client.Network.SendPacket(join, simulator); }
private void ParcelJoinHandler(Packet packet, LLAgent agent) { ParcelJoinPacket join = (ParcelJoinPacket)packet; int startX = (int)Math.Round(join.ParcelData.West) / 4; int startY = (int)Math.Round(join.ParcelData.South) / 4; int endX = ((int)Math.Round(join.ParcelData.East) / 4) - 1; int endY = ((int)Math.Round(join.ParcelData.North) / 4) - 1; if (startX < 0 || startY < 0 || endX < startX || endY < startY || endX > 63 || endY > 63 || startX > endX || startY > endY) { m_log.Warn(agent.Name + String.Format(" sent invalid ParcelJoin: West {0} South {1} East {2} North {3}", join.ParcelData.West, join.ParcelData.South, join.ParcelData.East, join.ParcelData.North)); return; } int largestArea = 0; Vector3 aabbMin, aabbMax; // Get the selected parcels List <SceneParcel> selectedParcels = new List <SceneParcel>(); for (int y = startY; y <= endY; y++) { for (int x = startX; x <= endX; x++) { SceneParcel parcel; if (m_parcels.TryGetParcel(m_parcels.GetParcelID(x, y), out parcel)) { if (!selectedParcels.Contains(parcel) && m_permissions.CanEditParcel(agent, parcel)) { // Largest parcel is the "master" parcel that smaller parcels are joined into int area = ParcelManager.GetParcelArea(parcel, out aabbMin, out aabbMax); if (area > largestArea) { largestArea = area; selectedParcels.Insert(0, parcel); } else { selectedParcels.Add(parcel); } } } } } // Enough parcels selected check if (selectedParcels.Count < 2) { m_scene.PresenceAlert(this, agent, "Not enough leased parcels in selection to join"); return; } // Same owner check for (int i = 1; i < selectedParcels.Count; i++) { if (selectedParcels[i].OwnerID != selectedParcels[0].OwnerID) { m_scene.PresenceAlert(this, agent, "All parcels must have the same owner before joining"); return; } } m_parcels.JoinParcels(selectedParcels); // Broadcast the new parcel overlay info m_scene.ForEachPresence(SendParcelOverlay); }
/// <summary> /// /// </summary> /// <param name="west"></param> /// <param name="south"></param> /// <param name="east"></param> /// <param name="north"></param> public void ParcelJoin(float west, float south, float east, float north) { ParcelJoinPacket join = new ParcelJoinPacket(); join.AgentData.AgentID = Client.Network.AgentID; join.AgentData.SessionID = Client.Network.SessionID; join.ParcelData.East = east; join.ParcelData.North = north; join.ParcelData.South = south; join.ParcelData.West = west; SendPacket(join, true); }