Console:
* Reorganised and added default handlers to main functions * Removed "regenerate" command, use "terrain regenerate" instead. * Added new "terrain seed" command to set the random seed * Added new "terrain load" command to load a terrain from disk * Added new "terrain save" command to save a terrain to disk Terrain: * Added new export and import functions for some common formats * Added new setSeed function to allow customising the random seed0.1-prestable
parent
ec790b8876
commit
258e62679a
|
@ -505,20 +505,92 @@ namespace OpenSim
|
|||
case "help":
|
||||
m_console.WriteLine("show users - show info about connected users");
|
||||
m_console.WriteLine("shutdown - disconnect all clients and shutdown");
|
||||
m_console.WriteLine("regenerate - regenerate the sim's terrain");
|
||||
break;
|
||||
|
||||
case "show":
|
||||
Show(cmdparams[0]);
|
||||
break;
|
||||
|
||||
case "regenerate":
|
||||
LocalWorld.RegenerateTerrain();
|
||||
case "terrain":
|
||||
RunTerrainCmd(cmdparams);
|
||||
break;
|
||||
|
||||
case "shutdown":
|
||||
Shutdown();
|
||||
break;
|
||||
|
||||
default:
|
||||
m_console.WriteLine("Unknown command");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Processes a terrain-specific command
|
||||
/// </summary>
|
||||
/// <remarks>TODO: Move this into BasicTerrain directly (no need to hard limit what each terrain engine can support)</remarks>
|
||||
/// <param name="args"></param>
|
||||
public void RunTerrainCmd(string[] args)
|
||||
{
|
||||
string command = args[0];
|
||||
switch (command)
|
||||
{
|
||||
case "help":
|
||||
m_console.WriteLine("terrain regenerate - rebuilds the sims terrain using a default algorithm");
|
||||
m_console.WriteLine("terrain seed <seed> - sets the random seed value to <seed>");
|
||||
m_console.WriteLine("terrain load <type> <filename> - loads a terrain from disk, type can be 'F32', 'F64' or 'IMG'");
|
||||
m_console.WriteLine("terrain save <type> <filename> - saves a terrain to disk, type can be 'F32' or 'F64'");
|
||||
break;
|
||||
|
||||
case "seed":
|
||||
LocalWorld.Terrain.setSeed(Convert.ToInt32(args[1]));
|
||||
break;
|
||||
|
||||
case "regenerate":
|
||||
LocalWorld.Terrain.hills();
|
||||
break;
|
||||
|
||||
case "load":
|
||||
switch (args[1].ToLower())
|
||||
{
|
||||
case "f32":
|
||||
LocalWorld.Terrain.loadFromFileF32(args[2]);
|
||||
break;
|
||||
|
||||
case "f64":
|
||||
LocalWorld.Terrain.loadFromFileF64(args[2]);
|
||||
break;
|
||||
|
||||
case "img":
|
||||
m_console.WriteLine("Error - IMG mode is presently unsupported.");
|
||||
break;
|
||||
|
||||
default:
|
||||
m_console.WriteLine("Unknown image or data format");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case "save":
|
||||
switch (args[1].ToLower())
|
||||
{
|
||||
case "f32":
|
||||
LocalWorld.Terrain.writeToFileF32(args[2]);
|
||||
break;
|
||||
|
||||
case "f64":
|
||||
LocalWorld.Terrain.writeToFileF64(args[2]);
|
||||
break;
|
||||
|
||||
default:
|
||||
m_console.WriteLine("Unknown image or data format");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
m_console.WriteLine("Unknown terrain command");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -102,6 +102,63 @@ namespace OpenSim.Terrain
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Loads a file consisting of 256x256 floats and imports it as an array into the map.
|
||||
/// </summary>
|
||||
/// <remarks>TODO: Move this to libTerrain itself</remarks>
|
||||
/// <param name="filename">The filename of the float array to import</param>
|
||||
public void loadFromFileF32(string filename)
|
||||
{
|
||||
System.IO.FileInfo file = new System.IO.FileInfo(filename);
|
||||
System.IO.FileStream s = file.Open(System.IO.FileMode.Open, System.IO.FileAccess.Read);
|
||||
System.IO.BinaryReader bs = new System.IO.BinaryReader(s);
|
||||
int x, y;
|
||||
for (x = 0; x < w; x++)
|
||||
{
|
||||
for (y = 0; y < h; y++)
|
||||
{
|
||||
heightmap.map[x, y] = (double)bs.ReadSingle();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void writeToFileF64(string filename)
|
||||
{
|
||||
System.IO.FileInfo file = new System.IO.FileInfo(filename);
|
||||
System.IO.FileStream s = file.Open(System.IO.FileMode.CreateNew, System.IO.FileAccess.Write);
|
||||
System.IO.BinaryWriter bs = new System.IO.BinaryWriter(s);
|
||||
|
||||
int x, y;
|
||||
for (x = 0; x < w; x++)
|
||||
{
|
||||
for (y = 0; y < h; y++)
|
||||
{
|
||||
bs.Write(heightmap.get(x,y));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void writeToFileF32(string filename)
|
||||
{
|
||||
System.IO.FileInfo file = new System.IO.FileInfo(filename);
|
||||
System.IO.FileStream s = file.Open(System.IO.FileMode.CreateNew, System.IO.FileAccess.Write);
|
||||
System.IO.BinaryWriter bs = new System.IO.BinaryWriter(s);
|
||||
|
||||
int x, y;
|
||||
for (x = 0; x < w; x++)
|
||||
{
|
||||
for (y = 0; y < h; y++)
|
||||
{
|
||||
bs.Write((float)heightmap.get(x, y));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void setSeed(int val)
|
||||
{
|
||||
heightmap.seed = val;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Raises land in a sphere around the specified coordinates
|
||||
/// </summary>
|
||||
|
|
Loading…
Reference in New Issue