public OSDMap PackRegionInfoData() { OSDMap args = new OSDMap(); args["region_id"] = OSD.FromUUID(RegionID); if ((RegionName != null) && !RegionName.Equals("")) { args["region_name"] = OSD.FromString(RegionName); } args["region_xloc"] = OSD.FromString(RegionLocX.ToString()); args["region_yloc"] = OSD.FromString(RegionLocY.ToString()); if (RegionType != string.Empty) { args["region_type"] = OSD.FromString(RegionType); } args["region_size_x"] = OSD.FromInteger(RegionSizeX); args["region_size_y"] = OSD.FromInteger(RegionSizeY); args["region_size_z"] = OSD.FromInteger(RegionSizeZ); args["InfiniteRegion"] = OSD.FromBoolean(InfiniteRegion); args["scope_id"] = OSD.FromUUID(ScopeID); args["all_scope_ids"] = AllScopeIDs.ToOSDArray(); args["object_capacity"] = OSD.FromInteger(m_objectCapacity); args["region_type"] = OSD.FromString(RegionType); args["see_into_this_sim_from_neighbor"] = OSD.FromBoolean(SeeIntoThisSimFromNeighbor); args["startupType"] = OSD.FromInteger((int)Startup); args["RegionSettings"] = RegionSettings.ToOSD(); args["GridSecureSessionID"] = GridSecureSessionID; if (EnvironmentSettings != null) { args["EnvironmentSettings"] = EnvironmentSettings; } args["OpenRegionSettings"] = OpenRegionSettings.ToOSD(); if (RegionTerrain != string.Empty) { args["region_terrain"] = OSD.FromString(RegionTerrain); } args["region_area"] = OSD.FromInteger(RegionArea); return(args); }
public void UnpackRegionInfoData(OSDMap args) { if (args.ContainsKey("region_id")) RegionID = args["region_id"].AsUUID(); if (args.ContainsKey("region_name")) RegionName = args["region_name"].AsString(); if (args.ContainsKey("http_port")) UInt32.TryParse(args["http_port"].AsString(), out m_httpPort); if (args.ContainsKey("region_xloc")) { int locx; Int32.TryParse(args["region_xloc"].AsString(), out locx); RegionLocX = locx; } if (args.ContainsKey("region_yloc")) { int locy; Int32.TryParse(args["region_yloc"].AsString(), out locy); RegionLocY = locy; } if (args.ContainsKey("region_type")) m_regionType = args["region_type"].AsString(); if (args.ContainsKey("scope_id")) ScopeID = args["scope_id"].AsUUID(); if (args.ContainsKey("all_scope_ids")) AllScopeIDs = ((OSDArray) args["all_scope_ids"]).ConvertAll<UUID>(o => o); if (args.ContainsKey("region_size_x")) RegionSizeX = args["region_size_x"].AsInteger(); if (args.ContainsKey("region_size_y")) RegionSizeY = args["region_size_y"].AsInteger(); if (args.ContainsKey("region_size_z")) RegionSizeZ = args["region_size_z"].AsInteger(); if (args.ContainsKey("object_capacity")) m_objectCapacity = args["object_capacity"].AsInteger(); if (args.ContainsKey("region_type")) RegionType = args["region_type"].AsString(); if (args.ContainsKey("see_into_this_sim_from_neighbor")) SeeIntoThisSimFromNeighbor = args["see_into_this_sim_from_neighbor"].AsBoolean(); if (args.ContainsKey("startupType")) Startup = (StartupType) args["startupType"].AsInteger(); if (args.ContainsKey("InfiniteRegion")) InfiniteRegion = args["InfiniteRegion"].AsBoolean(); if (args.ContainsKey("RegionSettings")) { RegionSettings = new RegionSettings(); RegionSettings.FromOSD((OSDMap) args["RegionSettings"]); } if (args.ContainsKey("GridSecureSessionID")) GridSecureSessionID = args["GridSecureSessionID"]; if (args.ContainsKey("OpenRegionSettings")) { OpenRegionSettings = new OpenRegionSettings(); OpenRegionSettings.FromOSD((OSDMap) args["OpenRegionSettings"]); } else OpenRegionSettings = new OpenRegionSettings(); if (args.ContainsKey("EnvironmentSettings")) EnvironmentSettings = args["EnvironmentSettings"]; if (args.ContainsKey("region_terrain")) m_regionTerrain = args["region_terrain"].AsString(); if (args.ContainsKey("region_area")) RegionArea = (uint) args["region_area"].AsInteger(); }
/// <summary> /// Deserialize settings /// </summary> /// <param name="serializedSettings"></param> /// <returns></returns> /// <exception cref="System.Xml.XmlException"></exception> public static RegionSettings Deserialize(string serializedSettings, UUID RegionID) { RegionSettings settings = new RegionSettings(); StringReader sr = new StringReader(serializedSettings); XmlTextReader xtr = new XmlTextReader(sr); xtr.ReadStartElement("RegionSettings"); xtr.ReadStartElement("General"); while (xtr.Read() && xtr.NodeType != XmlNodeType.EndElement) { switch (xtr.Name) { case "AllowDamage": settings.AllowDamage = bool.Parse(xtr.ReadElementContentAsString()); break; case "AllowLandResell": settings.AllowLandResell = bool.Parse(xtr.ReadElementContentAsString()); break; case "AllowLandJoinDivide": settings.AllowLandJoinDivide = bool.Parse(xtr.ReadElementContentAsString()); break; case "BlockFly": settings.BlockFly = bool.Parse(xtr.ReadElementContentAsString()); break; case "BlockLandShowInSearch": settings.BlockShowInSearch = bool.Parse(xtr.ReadElementContentAsString()); break; case "BlockTerraform": settings.BlockTerraform = bool.Parse(xtr.ReadElementContentAsString()); break; case "DisableCollisions": settings.DisableCollisions = bool.Parse(xtr.ReadElementContentAsString()); break; case "DisablePhysics": settings.DisablePhysics = bool.Parse(xtr.ReadElementContentAsString()); break; case "DisableScripts": settings.DisableScripts = bool.Parse(xtr.ReadElementContentAsString()); break; case "MaturityRating": settings.Maturity = int.Parse(xtr.ReadElementContentAsString()); break; case "RestrictPushing": settings.RestrictPushing = bool.Parse(xtr.ReadElementContentAsString()); break; case "AgentLimit": settings.AgentLimit = int.Parse(xtr.ReadElementContentAsString()); break; case "ObjectBonus": settings.ObjectBonus = double.Parse(xtr.ReadElementContentAsString(), Culture.NumberFormatInfo); break; } } xtr.ReadEndElement(); xtr.ReadStartElement("GroundTextures"); while (xtr.Read() && xtr.NodeType != XmlNodeType.EndElement) { switch (xtr.Name) { case "Texture1": settings.TerrainTexture1 = UUID.Parse(xtr.ReadElementContentAsString()); break; case "Texture2": settings.TerrainTexture2 = UUID.Parse(xtr.ReadElementContentAsString()); break; case "Texture3": settings.TerrainTexture3 = UUID.Parse(xtr.ReadElementContentAsString()); break; case "Texture4": settings.TerrainTexture4 = UUID.Parse(xtr.ReadElementContentAsString()); break; case "ElevationLowSW": settings.Elevation1SW = double.Parse(xtr.ReadElementContentAsString(), Culture.NumberFormatInfo); break; case "ElevationLowNW": settings.Elevation1NW = double.Parse(xtr.ReadElementContentAsString(), Culture.NumberFormatInfo); break; case "ElevationLowSE": settings.Elevation1SE = double.Parse(xtr.ReadElementContentAsString(), Culture.NumberFormatInfo); break; case "ElevationLowNE": settings.Elevation1NE = double.Parse(xtr.ReadElementContentAsString(), Culture.NumberFormatInfo); break; case "ElevationHighSW": settings.Elevation2SW = double.Parse(xtr.ReadElementContentAsString(), Culture.NumberFormatInfo); break; case "ElevationHighNW": settings.Elevation2NW = double.Parse(xtr.ReadElementContentAsString(), Culture.NumberFormatInfo); break; case "ElevationHighSE": settings.Elevation2SE = double.Parse(xtr.ReadElementContentAsString(), Culture.NumberFormatInfo); break; case "ElevationHighNE": settings.Elevation2NE = double.Parse(xtr.ReadElementContentAsString(), Culture.NumberFormatInfo); break; } } xtr.ReadEndElement(); xtr.ReadStartElement("Terrain"); while (xtr.Read() && xtr.NodeType != XmlNodeType.EndElement) { switch (xtr.Name) { case "WaterHeight": settings.WaterHeight = double.Parse(xtr.ReadElementContentAsString(), Culture.NumberFormatInfo); break; case "TerrainRaiseLimit": settings.TerrainRaiseLimit = double.Parse(xtr.ReadElementContentAsString(), Culture.NumberFormatInfo); break; case "TerrainLowerLimit": settings.TerrainLowerLimit = double.Parse(xtr.ReadElementContentAsString(), Culture.NumberFormatInfo); break; case "UseEstateSun": settings.UseEstateSun = bool.Parse(xtr.ReadElementContentAsString()); break; case "FixedSun": settings.FixedSun = bool.Parse(xtr.ReadElementContentAsString()); break; } } xtr.ReadEndElement(); // OAR 0.8 format addition, may not be present in older files if (xtr.IsStartElement("Telehub")) { xtr.ReadStartElement("Telehub"); while (xtr.Read () && xtr.NodeType != XmlNodeType.EndElement) { switch (xtr.Name) { case "TelehubObject": { settings.TeleHub.RegionID = RegionID; settings.TeleHub.ObjectUUID = UUID.Parse (xtr.ReadElementContentAsString ()); break; } case "SpawnPoint": settings.TeleHub.SpawnPos.Add (Vector3.Parse (xtr.ReadElementContentAsString ())); break; case "TelehubName": settings.TeleHub.Name = xtr.ReadElementContentAsString (); break; } } } xtr.ReadEndElement(); xtr.Close(); return settings; }
public static string Serialize(RegionSettings settings) { StringWriter sw = new StringWriter(); XmlTextWriter xtw = new XmlTextWriter(sw) {Formatting = Formatting.Indented}; xtw.WriteStartDocument(); xtw.WriteStartElement("RegionSettings"); xtw.WriteStartElement("General"); xtw.WriteElementString("AllowDamage", settings.AllowDamage.ToString()); xtw.WriteElementString("AllowLandResell", settings.AllowLandResell.ToString()); xtw.WriteElementString("AllowLandJoinDivide", settings.AllowLandJoinDivide.ToString()); xtw.WriteElementString("BlockFly", settings.BlockFly.ToString()); xtw.WriteElementString("BlockLandShowInSearch", settings.BlockShowInSearch.ToString()); xtw.WriteElementString("BlockTerraform", settings.BlockTerraform.ToString()); xtw.WriteElementString("DisableCollisions", settings.DisableCollisions.ToString()); xtw.WriteElementString("DisablePhysics", settings.DisablePhysics.ToString()); xtw.WriteElementString("DisableScripts", settings.DisableScripts.ToString()); xtw.WriteElementString("MaturityRating", settings.Maturity.ToString()); xtw.WriteElementString("RestrictPushing", settings.RestrictPushing.ToString()); xtw.WriteElementString("AgentLimit", settings.AgentLimit.ToString()); xtw.WriteElementString("ObjectBonus", settings.ObjectBonus.ToString()); xtw.WriteEndElement(); xtw.WriteStartElement("GroundTextures"); xtw.WriteElementString("Texture1", settings.TerrainTexture1.ToString()); xtw.WriteElementString("Texture2", settings.TerrainTexture2.ToString()); xtw.WriteElementString("Texture3", settings.TerrainTexture3.ToString()); xtw.WriteElementString("Texture4", settings.TerrainTexture4.ToString()); xtw.WriteElementString("ElevationLowSW", settings.Elevation1SW.ToString()); xtw.WriteElementString("ElevationLowNW", settings.Elevation1NW.ToString()); xtw.WriteElementString("ElevationLowSE", settings.Elevation1SE.ToString()); xtw.WriteElementString("ElevationLowNE", settings.Elevation1NE.ToString()); xtw.WriteElementString("ElevationHighSW", settings.Elevation2SW.ToString()); xtw.WriteElementString("ElevationHighNW", settings.Elevation2NW.ToString()); xtw.WriteElementString("ElevationHighSE", settings.Elevation2SE.ToString()); xtw.WriteElementString("ElevationHighNE", settings.Elevation2NE.ToString()); xtw.WriteEndElement(); xtw.WriteStartElement("Terrain"); xtw.WriteElementString("WaterHeight", settings.WaterHeight.ToString()); xtw.WriteElementString("TerrainRaiseLimit", settings.TerrainRaiseLimit.ToString()); xtw.WriteElementString("TerrainLowerLimit", settings.TerrainLowerLimit.ToString()); xtw.WriteElementString("UseEstateSun", settings.UseEstateSun.ToString()); xtw.WriteElementString("FixedSun", settings.FixedSun.ToString()); // XXX: Need to expose interface to get sun phase information from sun module // xtw.WriteStartElement("SunPhase", // OAR format 0.8 xtw.WriteStartElement("Telehub"); if (settings.TeleHub.ObjectUUID != UUID.Zero) { xtw.WriteElementString("TelehubObject", settings.TeleHub.ObjectUUID.ToString()); xtw.WriteElementString("TelehubName", settings.TeleHub.Name); foreach( var point in settings.TeleHub.SpawnPos) xtw.WriteElementString("SpawnPoint", point.ToString()); } xtw.WriteEndElement(); xtw.WriteEndElement(); xtw.WriteEndElement(); xtw.Close(); return sw.ToString(); }
warp_Object CreateTerrain(WarpRenderer renderer, bool textureTerrain) { ITerrainChannel terrain = m_scene.RequestModuleInterface <ITerrainChannel> (); float diffX = 1.0f; //(float) m_scene.RegionInfo.RegionSizeX/(float) Constants.RegionSize; float diffY = 1.0f; //(float) m_scene.RegionInfo.RegionSizeY/(float) Constants.RegionSize; int newRsX = m_scene.RegionInfo.RegionSizeX / (int)diffX; int newRsY = m_scene.RegionInfo.RegionSizeY / (int)diffY; warp_Object obj = new warp_Object(newRsX * newRsY, ((newRsX - 1) * (newRsY - 1) * 2)); for (float y = 0; y < m_scene.RegionInfo.RegionSizeY; y += diffY) { for (float x = 0; x < m_scene.RegionInfo.RegionSizeX; x += diffX) { float t_height = terrain [(int)x, (int)y]; float waterHeight = (float)m_scene.RegionInfo.RegionSettings.WaterHeight; //clamp to eliminate artifacts t_height = Utils.Clamp(t_height, waterHeight - 0.5f, waterHeight + 0.5f); if (t_height < 0.0f) { t_height = 0.0f; } warp_Vector pos = ConvertVector(x / diffX, y / diffY, t_height); obj.addVertex( new warp_Vertex(pos, x / m_scene.RegionInfo.RegionSizeX, (m_scene.RegionInfo.RegionSizeY - y) / (m_scene.RegionInfo.RegionSizeY))); } } const float normal_map_reduction = 2.0f; //2.0f-2.5f is the sweet spot for (float y = 0; y < m_scene.RegionInfo.RegionSizeY; y += diffY) { for (float x = 0; x < m_scene.RegionInfo.RegionSizeX; x += diffX) { float newX = x / diffX; float newY = y / diffY; if (newX < newRsX - 1 && newY < newRsY - 1) { int v = (int)(newY * newRsX + newX); // Normal Vector3 v1 = new Vector3(newX, newY, (terrain [(int)x, (int)y]) / normal_map_reduction); Vector3 v2 = new Vector3(newX + 1, newY, (terrain [(int)x + 1, (int)y]) / normal_map_reduction); Vector3 v3 = new Vector3(newX, newY + 1, (terrain [(int)x, (int)(y + 1)]) / normal_map_reduction); warp_Vector norm = ConvertVector(SurfaceNormal(v1, v2, v3)); norm = norm.reverse(); obj.vertex(v).n = norm; // Triangle 1 obj.addTriangle( v, v + 1, v + newRsX); // Triangle 2 obj.addTriangle( v + newRsX + 1, v + newRsX, v + 1); } } } renderer.Scene.addObject("Terrain", obj); renderer.Scene.sceneobject("Terrain").setPos(0.0f, 0.0f, 0.0f); UUID [] textureIDs = new UUID [4]; float [] startHeights = new float [4]; float [] heightRanges = new float [4]; RegionSettings regionInfo = m_scene.RegionInfo.RegionSettings; textureIDs [0] = regionInfo.TerrainTexture1; textureIDs [1] = regionInfo.TerrainTexture2; textureIDs [2] = regionInfo.TerrainTexture3; textureIDs [3] = regionInfo.TerrainTexture4; startHeights [0] = (float)regionInfo.Elevation1SW; startHeights [1] = (float)regionInfo.Elevation1NW; startHeights [2] = (float)regionInfo.Elevation1SE; startHeights [3] = (float)regionInfo.Elevation1NE; heightRanges [0] = (float)regionInfo.Elevation2SW; heightRanges [1] = (float)regionInfo.Elevation2NW; heightRanges [2] = (float)regionInfo.Elevation2SE; heightRanges [3] = (float)regionInfo.Elevation2NE; uint globalX, globalY; Utils.LongToUInts(m_scene.RegionInfo.RegionHandle, out globalX, out globalY); Bitmap image = TerrainSplat.Splat(terrain, textureIDs, startHeights, heightRanges, new Vector3d(globalX, globalY, 0.0), m_scene.AssetService, textureTerrain); warp_Texture texture = new warp_Texture(image); warp_Material material = new warp_Material(texture); material.setReflectivity(0); // reduces tile seams a bit thanks lkalif renderer.Scene.addMaterial("TerrainColor", material); renderer.SetObjectMaterial("Terrain", "TerrainColor"); image.Dispose(); return(obj); }
public void UnpackRegionInfoData(OSDMap args) { if (args.ContainsKey("region_id")) { RegionID = args["region_id"].AsUUID(); } if (args.ContainsKey("region_name")) { RegionName = args["region_name"].AsString(); } if (args.ContainsKey("http_port")) { uint.TryParse(args["http_port"].AsString(), out m_httpPort); } if (args.ContainsKey("region_xloc")) { int locx; int.TryParse(args["region_xloc"].AsString(), out locx); RegionLocX = locx; } if (args.ContainsKey("region_yloc")) { int locy; int.TryParse(args["region_yloc"].AsString(), out locy); RegionLocY = locy; } if (args.ContainsKey("region_type")) { m_regionType = args["region_type"].AsString(); } if (args.ContainsKey("scope_id")) { ScopeID = args["scope_id"].AsUUID(); } if (args.ContainsKey("all_scope_ids")) { AllScopeIDs = ((OSDArray)args["all_scope_ids"]).ConvertAll <UUID>(o => o); } if (args.ContainsKey("region_size_x")) { RegionSizeX = args["region_size_x"].AsInteger(); } if (args.ContainsKey("region_size_y")) { RegionSizeY = args["region_size_y"].AsInteger(); } if (args.ContainsKey("region_size_z")) { RegionSizeZ = args["region_size_z"].AsInteger(); } if (args.ContainsKey("object_capacity")) { m_objectCapacity = args["object_capacity"].AsInteger(); } if (args.ContainsKey("region_type")) { RegionType = args["region_type"].AsString(); } if (args.ContainsKey("see_into_this_sim_from_neighbor")) { SeeIntoThisSimFromNeighbor = args["see_into_this_sim_from_neighbor"].AsBoolean(); } if (args.ContainsKey("startupType")) { Startup = (StartupType)args["startupType"].AsInteger(); } if (args.ContainsKey("InfiniteRegion")) { InfiniteRegion = args["InfiniteRegion"].AsBoolean(); } if (args.ContainsKey("RegionSettings")) { RegionSettings = new RegionSettings(); RegionSettings.FromOSD((OSDMap)args["RegionSettings"]); } if (args.ContainsKey("GridSecureSessionID")) { GridSecureSessionID = args["GridSecureSessionID"]; } if (args.ContainsKey("OpenRegionSettings")) { OpenRegionSettings = new OpenRegionSettings(); OpenRegionSettings.FromOSD((OSDMap)args["OpenRegionSettings"]); } else { OpenRegionSettings = new OpenRegionSettings(); } if (args.ContainsKey("EnvironmentSettings")) { EnvironmentSettings = args["EnvironmentSettings"]; } if (args.ContainsKey("region_terrain")) { m_regionTerrain = args["region_terrain"].AsString(); } if (args.ContainsKey("region_area")) { RegionArea = (uint)args["region_area"].AsInteger(); } }