*Land has now been linked to the StorageManager. Next step is to fill in the functions for the different datastore interfaces for Land Objects.
parent
8e8c26acac
commit
d845da215f
|
@ -289,17 +289,17 @@ namespace OpenSim.Framework.Data.MySQL
|
|||
return terret;
|
||||
}
|
||||
|
||||
public void RemoveLandObject(uint id)
|
||||
public void RemoveLandObject(uint id, LLUUID regionUUID)
|
||||
{
|
||||
}
|
||||
|
||||
public void StoreParcel(Land parcel)
|
||||
public void StoreLandObject(Land parcel, LLUUID regionUUID)
|
||||
{
|
||||
}
|
||||
|
||||
public List<Land> LoadLandObjects()
|
||||
public List<Framework.LandData> LoadLandObjects(LLUUID regionUUID)
|
||||
{
|
||||
return new List<Land>();
|
||||
return new List<LandData>();
|
||||
}
|
||||
|
||||
private void DisplayDataSet(DataSet ds, string title)
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
*
|
||||
*/
|
||||
using libsecondlife;
|
||||
|
||||
using System.Collections.Generic;
|
||||
namespace OpenSim.Framework
|
||||
{
|
||||
public class LandData
|
||||
|
@ -74,6 +74,8 @@ namespace OpenSim.Framework
|
|||
public LLVector3 userLocation = new LLVector3();
|
||||
public LLVector3 userLookAt = new LLVector3();
|
||||
|
||||
public List<ParcelManager.ParcelAccessEntry> parcelAccessList = new List<ParcelManager.ParcelAccessEntry>();
|
||||
|
||||
public LandData()
|
||||
{
|
||||
globalID = LLUUID.Random();
|
||||
|
@ -117,6 +119,17 @@ namespace OpenSim.Framework
|
|||
landData.userLocation = userLocation;
|
||||
landData.userLookAt = userLookAt;
|
||||
|
||||
landData.parcelAccessList.Clear();
|
||||
foreach (ParcelManager.ParcelAccessEntry entry in parcelAccessList)
|
||||
{
|
||||
ParcelManager.ParcelAccessEntry newEntry = new ParcelManager.ParcelAccessEntry();
|
||||
newEntry.AgentID = entry.AgentID;
|
||||
newEntry.Flags = entry.Flags;
|
||||
newEntry.Time = entry.Time;
|
||||
|
||||
landData.parcelAccessList.Add(newEntry);
|
||||
}
|
||||
|
||||
return landData;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -136,19 +136,17 @@ namespace OpenSim.Region.ClientStack
|
|||
{
|
||||
m_log.Verbose("PARCEL", "Found master avatar [" + masterAvatar.UUID.ToStringHyphenated() + "]");
|
||||
scene.RegionInfo.MasterAvatarAssignedUUID = masterAvatar.UUID;
|
||||
//TODO: Load parcels from storageManager
|
||||
}
|
||||
else
|
||||
{
|
||||
m_log.Verbose("PARCEL", "No master avatar found, using null.");
|
||||
scene.RegionInfo.MasterAvatarAssignedUUID = LLUUID.Zero;
|
||||
//TODO: Load parcels from storageManager
|
||||
}
|
||||
|
||||
scene.LandManager.resetSimLandObjects();
|
||||
|
||||
scene.LoadPrimsFromStorage(m_permissions);
|
||||
|
||||
scene.loadAllLandObjectsFromStorage();
|
||||
scene.performParcelPrimCountUpdate();
|
||||
scene.StartTimer();
|
||||
return scene;
|
||||
|
|
|
@ -50,9 +50,9 @@ namespace OpenSim.Region.Environment.Interfaces
|
|||
void StoreTerrain(double[,] terrain, LLUUID regionID);
|
||||
double[,] LoadTerrain(LLUUID regionID);
|
||||
|
||||
void StoreParcel(Land Parcel);
|
||||
void RemoveLandObject(uint ID);
|
||||
List<Land> LoadLandObjects();
|
||||
void StoreLandObject(Land Parcel,LLUUID regionUUID);
|
||||
void RemoveLandObject(uint ID, LLUUID regionUUID);
|
||||
List<Framework.LandData> LoadLandObjects(LLUUID regionUUID);
|
||||
|
||||
void Shutdown();
|
||||
}
|
||||
|
|
|
@ -32,6 +32,7 @@ using libsecondlife;
|
|||
using libsecondlife.Packets;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Region.Environment.Scenes;
|
||||
using OpenSim.Region.Environment.Interfaces;
|
||||
|
||||
namespace OpenSim.Region.Environment.LandManagement
|
||||
{
|
||||
|
@ -47,7 +48,6 @@ namespace OpenSim.Region.Environment.LandManagement
|
|||
|
||||
public LandData landData = new LandData();
|
||||
public List<SceneObjectGroup> primsOverMe = new List<SceneObjectGroup>();
|
||||
public List<libsecondlife.ParcelManager.ParcelAccessEntry> parcelAccessList = new List<ParcelManager.ParcelAccessEntry>();
|
||||
public Scene m_scene;
|
||||
|
||||
private bool[,] landBitmap = new bool[64,64];
|
||||
|
@ -93,21 +93,12 @@ namespace OpenSim.Region.Environment.LandManagement
|
|||
|
||||
//Place all new variables here!
|
||||
newLand.landBitmap = (bool[,]) (landBitmap.Clone());
|
||||
newLand.parcelAccessList.Clear();
|
||||
foreach (ParcelManager.ParcelAccessEntry entry in parcelAccessList)
|
||||
{
|
||||
ParcelManager.ParcelAccessEntry newEntry = new ParcelManager.ParcelAccessEntry();
|
||||
newEntry.AgentID = entry.AgentID;
|
||||
newEntry.Flags = entry.Flags;
|
||||
newEntry.Time = entry.Time;
|
||||
|
||||
newLand.parcelAccessList.Add(newEntry);
|
||||
}
|
||||
newLand.landData = landData.Copy();
|
||||
|
||||
return newLand;
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region Packet Request Handling
|
||||
|
@ -209,24 +200,30 @@ namespace OpenSim.Region.Environment.LandManagement
|
|||
if (remote_client.AgentId == landData.ownerID)
|
||||
{
|
||||
//Needs later group support
|
||||
landData.authBuyerID = packet.ParcelData.AuthBuyerID;
|
||||
landData.category = (Parcel.ParcelCategory) packet.ParcelData.Category;
|
||||
landData.landDesc = Helpers.FieldToUTF8String(packet.ParcelData.Desc);
|
||||
landData.groupID = packet.ParcelData.GroupID;
|
||||
landData.landingType = packet.ParcelData.LandingType;
|
||||
landData.mediaAutoScale = packet.ParcelData.MediaAutoScale;
|
||||
landData.mediaID = packet.ParcelData.MediaID;
|
||||
landData.mediaURL = Helpers.FieldToUTF8String(packet.ParcelData.MediaURL);
|
||||
landData.musicURL = Helpers.FieldToUTF8String(packet.ParcelData.MusicURL);
|
||||
landData.landName = Helpers.FieldToUTF8String(packet.ParcelData.Name);
|
||||
landData.landFlags = packet.ParcelData.ParcelFlags;
|
||||
landData.passHours = packet.ParcelData.PassHours;
|
||||
landData.passPrice = packet.ParcelData.PassPrice;
|
||||
landData.salePrice = packet.ParcelData.SalePrice;
|
||||
landData.snapshotID = packet.ParcelData.SnapshotID;
|
||||
landData.userLocation = packet.ParcelData.UserLocation;
|
||||
landData.userLookAt = packet.ParcelData.UserLookAt;
|
||||
LandData newData = landData.Copy();
|
||||
newData.authBuyerID = packet.ParcelData.AuthBuyerID;
|
||||
newData.category = (Parcel.ParcelCategory)packet.ParcelData.Category;
|
||||
newData.landDesc = Helpers.FieldToUTF8String(packet.ParcelData.Desc);
|
||||
newData.groupID = packet.ParcelData.GroupID;
|
||||
newData.landingType = packet.ParcelData.LandingType;
|
||||
newData.mediaAutoScale = packet.ParcelData.MediaAutoScale;
|
||||
newData.mediaID = packet.ParcelData.MediaID;
|
||||
newData.mediaURL = Helpers.FieldToUTF8String(packet.ParcelData.MediaURL);
|
||||
newData.musicURL = Helpers.FieldToUTF8String(packet.ParcelData.MusicURL);
|
||||
newData.landName = Helpers.FieldToUTF8String(packet.ParcelData.Name);
|
||||
newData.landFlags = packet.ParcelData.ParcelFlags;
|
||||
newData.passHours = packet.ParcelData.PassHours;
|
||||
newData.passPrice = packet.ParcelData.PassPrice;
|
||||
newData.salePrice = packet.ParcelData.SalePrice;
|
||||
newData.snapshotID = packet.ParcelData.SnapshotID;
|
||||
newData.userLocation = packet.ParcelData.UserLocation;
|
||||
newData.userLookAt = packet.ParcelData.UserLookAt;
|
||||
|
||||
m_scene.LandManager.updateLandObject(landData.localID, newData);
|
||||
|
||||
sendLandUpdateToAvatarsOverMe();
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -257,7 +254,7 @@ namespace OpenSim.Region.Environment.LandManagement
|
|||
public ParcelAccessListReplyPacket.ListBlock[] createAccessListArrayByFlag(ParcelManager.AccessList flag)
|
||||
{
|
||||
List<ParcelAccessListReplyPacket.ListBlock> list = new List<ParcelAccessListReplyPacket.ListBlock>();
|
||||
foreach (ParcelManager.ParcelAccessEntry entry in parcelAccessList)
|
||||
foreach (ParcelManager.ParcelAccessEntry entry in landData.parcelAccessList)
|
||||
{
|
||||
if (entry.Flags == flag)
|
||||
{
|
||||
|
@ -317,13 +314,15 @@ namespace OpenSim.Region.Environment.LandManagement
|
|||
|
||||
public void updateAccessList(uint flags, List<ParcelManager.ParcelAccessEntry> entries, IClientAPI remote_client)
|
||||
{
|
||||
LandData newData = landData.Copy();
|
||||
|
||||
if (entries.Count == 1 && entries[0].AgentID == LLUUID.Zero)
|
||||
{
|
||||
entries.Clear();
|
||||
}
|
||||
|
||||
List<ParcelManager.ParcelAccessEntry> toRemove = new List<ParcelManager.ParcelAccessEntry>();
|
||||
foreach (ParcelManager.ParcelAccessEntry entry in parcelAccessList)
|
||||
foreach (ParcelManager.ParcelAccessEntry entry in newData.parcelAccessList)
|
||||
{
|
||||
if (entry.Flags == (ParcelManager.AccessList)flags)
|
||||
{
|
||||
|
@ -333,7 +332,7 @@ namespace OpenSim.Region.Environment.LandManagement
|
|||
|
||||
foreach (ParcelManager.ParcelAccessEntry entry in toRemove)
|
||||
{
|
||||
parcelAccessList.Remove(entry);
|
||||
newData.parcelAccessList.Remove(entry);
|
||||
}
|
||||
foreach (ParcelManager.ParcelAccessEntry entry in entries)
|
||||
{
|
||||
|
@ -342,11 +341,14 @@ namespace OpenSim.Region.Environment.LandManagement
|
|||
temp.Time = new DateTime() ; //Pointless? Yes.
|
||||
temp.Flags = (ParcelManager.AccessList)flags;
|
||||
|
||||
if (!this.parcelAccessList.Contains(temp))
|
||||
if (!newData.parcelAccessList.Contains(temp))
|
||||
{
|
||||
this.parcelAccessList.Add(temp);
|
||||
newData.parcelAccessList.Add(temp);
|
||||
}
|
||||
}
|
||||
|
||||
m_scene.LandManager.updateLandObject(landData.localID, newData);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
@ -385,6 +387,7 @@ namespace OpenSim.Region.Environment.LandManagement
|
|||
new LLVector3((float) (max_x*4), (float) (max_y*4),
|
||||
(float) m_scene.Terrain.GetHeight((max_x*4), (max_y*4)));
|
||||
landData.area = tempArea;
|
||||
|
||||
}
|
||||
|
||||
public void updateLandBitmapByteArray()
|
||||
|
|
|
@ -31,6 +31,7 @@ using libsecondlife;
|
|||
using libsecondlife.Packets;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Region.Environment.Scenes;
|
||||
using OpenSim.Region.Environment.Interfaces;
|
||||
|
||||
namespace OpenSim.Region.Environment.LandManagement
|
||||
{
|
||||
|
@ -75,6 +76,34 @@ namespace OpenSim.Region.Environment.LandManagement
|
|||
|
||||
#endregion
|
||||
|
||||
#region Events and Triggers
|
||||
public delegate void LandObjectAdded(Land newParcel, LLUUID regionUUID);
|
||||
public delegate void LandObjectRemoved(uint localParcelID, LLUUID regionUUID);
|
||||
|
||||
public event LandObjectAdded OnLandObjectAdded;
|
||||
public event LandObjectRemoved OnLandObjectRemoved;
|
||||
|
||||
public void triggerLandObjectAdded(Land newParcel)
|
||||
{
|
||||
if (OnLandObjectAdded != null)
|
||||
{
|
||||
OnLandObjectAdded(newParcel, m_scene.RegionInfo.RegionID);
|
||||
}
|
||||
}
|
||||
public void triggerLandObjectRemoved(uint localParcelID)
|
||||
{
|
||||
if (OnLandObjectRemoved != null)
|
||||
{
|
||||
OnLandObjectRemoved(localParcelID, m_scene.RegionInfo.RegionID);
|
||||
}
|
||||
}
|
||||
public void triggerLandObjectUpdated(uint localParcelID, Land newParcel)
|
||||
{
|
||||
triggerLandObjectRemoved(localParcelID);
|
||||
triggerLandObjectAdded(newParcel);
|
||||
}
|
||||
|
||||
#endregion
|
||||
#region Member Variables
|
||||
|
||||
public Dictionary<int, Land> landList = new Dictionary<int, Land>();
|
||||
|
@ -100,13 +129,23 @@ namespace OpenSim.Region.Environment.LandManagement
|
|||
landIDList.Initialize();
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region Member Functions
|
||||
|
||||
#region Parcel From Storage Functions
|
||||
#region Land Object From Storage Functions
|
||||
|
||||
public void LandFromStorage(LandData data)
|
||||
public void IncomingLandObjectsFromStorage(List<LandData> data)
|
||||
{
|
||||
foreach (LandData parcel in data)
|
||||
{
|
||||
IncomingLandObjectFromStorage(parcel);
|
||||
}
|
||||
}
|
||||
|
||||
public void IncomingLandObjectFromStorage(LandData data)
|
||||
{
|
||||
Land new_land = new Land(data.ownerID, data.isGroupOwned, m_scene);
|
||||
new_land.landData = data.Copy();
|
||||
|
@ -116,6 +155,7 @@ namespace OpenSim.Region.Environment.LandManagement
|
|||
|
||||
public void NoLandDataFromStorage()
|
||||
{
|
||||
Console.WriteLine("No LandData in storage! Loading a single, flat parcel instead");
|
||||
resetSimLandObjects();
|
||||
}
|
||||
|
||||
|
@ -156,7 +196,7 @@ namespace OpenSim.Region.Environment.LandManagement
|
|||
}
|
||||
}
|
||||
landList[lastLandLocalID].forceUpdateLandInfo();
|
||||
|
||||
triggerLandObjectAdded(new_land);
|
||||
return new_land;
|
||||
}
|
||||
|
||||
|
@ -177,8 +217,21 @@ namespace OpenSim.Region.Environment.LandManagement
|
|||
}
|
||||
}
|
||||
}
|
||||
// TODO: Put event here for storage manager to bind to.
|
||||
landList.Remove(local_id);
|
||||
triggerLandObjectRemoved((uint)local_id);
|
||||
}
|
||||
|
||||
public void updateLandObject(int local_id, LandData newData)
|
||||
{
|
||||
if (landList.ContainsKey(local_id))
|
||||
{
|
||||
landList[local_id].landData = newData.Copy();
|
||||
triggerLandObjectUpdated((uint)local_id, landList[local_id]);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception("Could not update land object. Local ID '" + local_id + "' does not exist");
|
||||
}
|
||||
}
|
||||
|
||||
private void performFinalLandJoin(Land master, Land slave)
|
||||
|
@ -195,6 +248,7 @@ namespace OpenSim.Region.Environment.LandManagement
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
removeLandObject(slave.landData.localID);
|
||||
}
|
||||
|
||||
|
@ -293,7 +347,6 @@ namespace OpenSim.Region.Environment.LandManagement
|
|||
Land.modifyLandBitmapSquare(startLandObject.getLandBitmap(), start_x, start_y, end_x, end_y, false));
|
||||
landList[startLandObjectIndex].forceUpdateLandInfo();
|
||||
|
||||
|
||||
setPrimsTainted();
|
||||
|
||||
//Now add the new land object
|
||||
|
|
|
@ -225,10 +225,16 @@ namespace OpenSim.Region.Environment.Scenes
|
|||
m_physicalPrim = physicalPrim;
|
||||
m_sendTasksToChild = SendTasksToChild;
|
||||
|
||||
m_LandManager = new LandManager(this, m_regInfo);
|
||||
m_estateManager = new EstateManager(this, m_regInfo);
|
||||
m_eventManager = new EventManager();
|
||||
|
||||
m_LandManager = new LandManager(this, m_regInfo);
|
||||
|
||||
//Bind Storage Manager functions to some land manager functions for this scene
|
||||
m_LandManager.OnLandObjectAdded += new LandManager.LandObjectAdded(m_storageManager.DataStore.StoreLandObject);
|
||||
m_LandManager.OnLandObjectRemoved += new LandManager.LandObjectRemoved(m_storageManager.DataStore.RemoveLandObject);
|
||||
|
||||
m_estateManager = new EstateManager(this, m_regInfo);
|
||||
|
||||
m_permissionManager = permissionManager;
|
||||
m_permissionManager.Initialise(this);
|
||||
|
||||
|
@ -833,6 +839,24 @@ namespace OpenSim.Region.Environment.Scenes
|
|||
|
||||
#endregion
|
||||
|
||||
#region Load Land
|
||||
|
||||
public void loadAllLandObjectsFromStorage()
|
||||
{
|
||||
MainLog.Instance.Verbose("SCENE", "Loading land objects from storage");
|
||||
List<Framework.LandData> landData = m_storageManager.DataStore.LoadLandObjects(RegionInfo.RegionID);
|
||||
if (landData.Count == 0)
|
||||
{
|
||||
m_LandManager.NoLandDataFromStorage();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_LandManager.IncomingLandObjectsFromStorage(landData);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Primitives Methods
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -292,19 +292,19 @@ namespace OpenSim.DataStore.MSSQL
|
|||
return terret;
|
||||
}
|
||||
|
||||
public void RemoveLandObject(uint id)
|
||||
public void RemoveLandObject(uint id, LLUUID regionUUID)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void StoreParcel(Land parcel)
|
||||
public void StoreLandObject(Land parcel, LLUUID regionUUID)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public List<Land> LoadLandObjects()
|
||||
public List<Framework.LandData> LoadLandObjects(LLUUID regionUUID)
|
||||
{
|
||||
return new List<Land>();
|
||||
return new List<LandData>();
|
||||
}
|
||||
|
||||
public void Commit()
|
||||
|
|
|
@ -346,17 +346,17 @@ namespace OpenSim.DataStore.MonoSqlite
|
|||
}
|
||||
}
|
||||
|
||||
public void RemoveLandObject(uint id)
|
||||
public void RemoveLandObject(uint id, LLUUID regionUUID)
|
||||
{
|
||||
}
|
||||
|
||||
public void StoreParcel(Land parcel)
|
||||
public void StoreLandObject(Land parcel, LLUUID regionUUID)
|
||||
{
|
||||
}
|
||||
|
||||
public List<Land> LoadLandObjects()
|
||||
public List<Framework.LandData> LoadLandObjects(LLUUID regionUUID)
|
||||
{
|
||||
return new List<Land>();
|
||||
return new List<LandData>();
|
||||
}
|
||||
|
||||
public void Commit()
|
||||
|
|
|
@ -63,17 +63,17 @@ namespace OpenSim.DataStore.NullStorage
|
|||
return null;
|
||||
}
|
||||
|
||||
public void RemoveLandObject(uint id)
|
||||
public void RemoveLandObject(uint id, LLUUID regionUUID)
|
||||
{
|
||||
}
|
||||
|
||||
public void StoreParcel(Land land)
|
||||
public void StoreLandObject(Land land, LLUUID regionUUID)
|
||||
{
|
||||
}
|
||||
|
||||
public List<Land> LoadLandObjects()
|
||||
public List<Framework.LandData> LoadLandObjects(LLUUID regionUUID)
|
||||
{
|
||||
return new List<Land>();
|
||||
return new List<Framework.LandData>();
|
||||
}
|
||||
|
||||
public void Shutdown()
|
||||
|
|
Loading…
Reference in New Issue