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
+{
+    /// <summary>
+    /// Terragen File Format Loader
+    /// Built from specification at
+    /// http://www.planetside.co.uk/terragen/dev/tgterrain.html
+    /// </summary>
+    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