From 906404a14a9552a784c243ec83dbc2424cdd255b Mon Sep 17 00:00:00 2001 From: Adam Frisby Date: Wed, 27 Feb 2008 09:35:48 +0000 Subject: * Committing file loaders - forgot yesterday. --- .../Modules/Terrain/FileLoaders/RAW32.cs | 43 +++++++++++ .../Modules/Terrain/FileLoaders/Terragen.cs | 89 ++++++++++++++++++++++ .../Environment/Modules/Terrain/TerrainModule.cs | 5 +- 3 files changed, 135 insertions(+), 2 deletions(-) create mode 100644 OpenSim/Region/Environment/Modules/Terrain/FileLoaders/RAW32.cs create mode 100644 OpenSim/Region/Environment/Modules/Terrain/FileLoaders/Terragen.cs diff --git a/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/RAW32.cs b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/RAW32.cs new file mode 100644 index 0000000..d0f5d07 --- /dev/null +++ b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/RAW32.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using OpenSim.Region.Environment.Modules.Terrain; +using OpenSim.Region.Environment.Interfaces; + +namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders +{ + public class RAW32 : ITerrainLoader + { + #region ITerrainLoader Members + + public ITerrainChannel LoadFile(string filename) + { + TerrainChannel retval = new TerrainChannel(); + + FileInfo file = new FileInfo(filename); + FileStream s = file.Open(FileMode.Open, FileAccess.Read); + BinaryReader bs = new BinaryReader(s); + int x, y; + for (y = 0; y < retval.Height; y++) + { + for (x = 0; x < retval.Width; x++) + { + retval[x, y] = bs.ReadSingle(); + } + } + + bs.Close(); + s.Close(); + + return retval; + } + + public void SaveFile(string filename) + { + throw new NotImplementedException(); + } + + #endregion + } +} diff --git a/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/Terragen.cs b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/Terragen.cs new file mode 100644 index 0000000..2443173 --- /dev/null +++ b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/Terragen.cs @@ -0,0 +1,89 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using OpenSim.Region.Environment.Modules.Terrain; +using OpenSim.Region.Environment.Interfaces; + +namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders +{ + /// + /// Terragen File Format Loader + /// Built from specification at + /// http://www.planetside.co.uk/terragen/dev/tgterrain.html + /// + class Terragen : ITerrainLoader + { + private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); + + #region ITerrainLoader Members + + public ITerrainChannel LoadFile(string filename) + { + TerrainChannel retval = new TerrainChannel(); + + FileInfo file = new FileInfo(filename); + FileStream s = file.Open(FileMode.Open, FileAccess.Read); + BinaryReader bs = new BinaryReader(s); + + bool eof = false; + + if (ASCIIEncoding.ASCII.GetString(bs.ReadBytes(16)) == "TERRAGENTERRAIN") + { + // Terragen file + while (eof == false) + { + int w = 256; + int h = 256; + string tmp = ASCIIEncoding.ASCII.GetString(bs.ReadBytes(4)); + switch (tmp) + { + case "SIZE": + int sztmp = bs.ReadInt16() + 1; + w = sztmp; + h = sztmp; + bs.ReadInt16(); + break; + case "XPTS": + w = bs.ReadInt16(); + bs.ReadInt16(); + break; + case "YPTS": + h = bs.ReadInt16(); + bs.ReadInt16(); + break; + case "ALTW": + eof = true; + Int16 heightScale = bs.ReadInt16(); + Int16 baseHeight = bs.ReadInt16(); + retval = new TerrainChannel(w, h); + int x, y; + for (x = 0; x < w; x++) + { + for (y = 0; y < h; y++) + { + retval[x, y] = (double)baseHeight + (double)bs.ReadInt16() * (double)heightScale / 65536.0; + } + } + break; + default: + bs.ReadInt32(); + break; + } + } + } + + bs.Close(); + s.Close(); + + return retval; + } + + public void SaveFile(string filename) + { + throw new NotImplementedException(); + } + + #endregion + } +} diff --git a/OpenSim/Region/Environment/Modules/Terrain/TerrainModule.cs b/OpenSim/Region/Environment/Modules/Terrain/TerrainModule.cs index d9fc2f4..22b5fd9 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/TerrainModule.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/TerrainModule.cs @@ -143,8 +143,9 @@ namespace OpenSim.Region.Environment.Modules.Terrain m_floodeffects[StandardTerrainEffects.Raise] = new FloodBrushes.RaiseArea(); // Float[256,256] array format (RAW32) - // m_loaders[".r32"] = new FileLoaders.RAW32(); - // m_loaders[".f32"] = m_loaders[".r32"]; + m_loaders[".r32"] = new FileLoaders.RAW32(); + m_loaders[".f32"] = m_loaders[".r32"]; + m_loaders[".ter"] = new FileLoaders.Terragen(); } public void LoadFromFile(string filename) -- cgit v1.1