From 2d57360cd4f1f1076e324a1236f7ab3ffaf17139 Mon Sep 17 00:00:00 2001
From: David Walter Seikel
Date: Sat, 6 Feb 2016 22:15:30 +1000
Subject: Add test terrain support.

---
 media/Test%20sim/index.omg   |  7 +++++++
 media/Test%20sim/terrain.omg | 20 ++++++++++++++++++++
 src/extantz/scenri.c         | 23 +++++++++++++++++++++--
 src/libraries/love.h         |  3 ++-
 4 files changed, 50 insertions(+), 3 deletions(-)
 create mode 100644 media/Test%20sim/terrain.omg

diff --git a/media/Test%20sim/index.omg b/media/Test%20sim/index.omg
index c9d3b71..cf3f78a 100644
--- a/media/Test%20sim/index.omg
+++ b/media/Test%20sim/index.omg
@@ -28,6 +28,13 @@ Stuffs =
         size = {1.0, 1.0, 1.0},
         rot = {1.0, 0.0, 0.0, 0.0},
       },
+      ['terrain'] = 
+      {
+        fileName = 'terrain.omg',
+        pos = {0.0, -5.0, 0.0},
+        size = {256.0, 256.0, 256.0},
+        rot = {1.0, 0.0, 0.0, 0.0},
+      },
     },
   },
 }
diff --git a/media/Test%20sim/terrain.omg b/media/Test%20sim/terrain.omg
new file mode 100644
index 0000000..b4edf81
--- /dev/null
+++ b/media/Test%20sim/terrain.omg
@@ -0,0 +1,20 @@
+Stuffs =
+{
+  name = "onefang's terrain",
+  description = 'Just a pretend terrain for testing SledjHamr.',
+  fake = 4,
+  uuid  = '12345678-1234-4321-abcd-01234terrain',
+  owner = '12345678-1234-4321-abcd-0123456789ab',
+  details = 
+  {
+    Mesh = 
+    {
+      kind = 'terrain',
+-- insert prim parameters here
+      materials =
+      {
+        [0] = {kind = 'face', texture = 'EarthDiffuse.png'},
+      },
+    },
+  },
+}
diff --git a/src/extantz/scenri.c b/src/extantz/scenri.c
index 1f51687..912aad9 100644
--- a/src/extantz/scenri.c
+++ b/src/extantz/scenri.c
@@ -421,7 +421,6 @@ Scene_Data *scenriAdd(Evas_Object *win)
   evas_object_event_callback_add(scene->image, EVAS_CALLBACK_MOUSE_DOWN, _on_mouse_down, scene);
 #endif
 
-
   elm_win_resize_object_add(win, scene->image);
 
   scene->L = luaL_newstate();
@@ -472,7 +471,7 @@ Scene_Data *scenriAdd(Evas_Object *win)
       "userdata,number", 0);
 
     // Pass the enums to scenriLua.
-    sprintf(buf, "MeshType = {cube = %d, mesh = %d, sphere = %d}", MT_CUBE, MT_MESH, MT_SPHERE);
+    sprintf(buf, "MeshType = {cube = %d, mesh = %d, sphere = %d, terrain = %d}", MT_CUBE, MT_MESH, MT_SPHERE, MT_TERRAIN);
     doLuaString(scene->L, buf, "scenriLua");
     sprintf(buf, "TextureType = {face = %d, normal = %d}", TT_FACE, TT_NORMAL);
     doLuaString(scene->L, buf, "scenriLua");
@@ -616,6 +615,7 @@ void stuffsSetup(ExtantzStuffs *stuffs, Scene_Data *scene, int fake)
 
   // Meshes
   // TODO - Write real generic cube and sphere stuff later.
+  //        This could be a switch.
   if (MT_CUBE == stuffs->stuffs.details.mesh->type)
   {
     Eo *cube;
@@ -654,6 +654,23 @@ void stuffsSetup(ExtantzStuffs *stuffs, Scene_Data *scene, int fake)
     );
     eina_array_push(stuffs->mesh, me);
   }
+  else if (MT_TERRAIN == stuffs->stuffs.details.mesh->type)
+  {
+    Eo *terrain;
+
+    eina_accessor_data_get(stuffs->aMaterial, 0, (void **) &mi);
+
+    terrain = eo_add(EVAS_CANVAS3D_PRIMITIVE_CLASS, scene->evas);
+    eo_do(terrain, evas_canvas3d_primitive_form_set(EVAS_CANVAS3D_MESH_PRIMITIVE_TERRAIN));
+
+    me = eo_add(EVAS_CANVAS3D_MESH_CLASS, scene->evas,
+         evas_canvas3d_mesh_from_primitive_set(0, terrain),
+      evas_canvas3d_mesh_frame_material_set(0, mi),
+
+      evas_canvas3d_mesh_shade_mode_set(EVAS_CANVAS3D_SHADE_MODE_DIFFUSE)
+    );
+    eina_array_push(stuffs->mesh, me);
+  }
   else
   {
     eina_accessor_data_get(stuffs->aMaterial, 0, (void **) &mi);
@@ -684,6 +701,8 @@ void stuffsSetup(ExtantzStuffs *stuffs, Scene_Data *scene, int fake)
     stuffs->animateStuffs = (aniStuffs) _animateSphere;
   else if (3 == fake)
     stuffs->animateStuffs = (aniStuffs) _animateSonic;
+//  else if (4 == fake)
+//    stuffs->animateStuffs = (aniStuffs) _animateSphere;
 
 }
 
diff --git a/src/libraries/love.h b/src/libraries/love.h
index 1e756f8..0fe6d31 100644
--- a/src/libraries/love.h
+++ b/src/libraries/love.h
@@ -116,7 +116,8 @@ typedef enum
 {
   MT_CUBE,
   MT_MESH,
-  MT_SPHERE
+  MT_SPHERE,
+  MT_TERRAIN
 } MeshType;
 
 
-- 
cgit v1.1