]> code.bitgloo.com Git - clyne/gamedev2.git/commitdiff
Ability to pass world data into Lua
authorAndy Belle-Isle <drumsetmonkey@gmail.com>
Thu, 12 Sep 2019 22:16:06 +0000 (18:16 -0400)
committerAndy Belle-Isle <drumsetmonkey@gmail.com>
Thu, 12 Sep 2019 22:16:06 +0000 (18:16 -0400)
Scripts/world.lua
src/engine.cpp
src/script.cpp
src/texture.hpp
src/world.cpp
src/world.hpp

index a6224aba3ad87f081ad538d40d335dea7bf66146..54fcdc06696b48e5759e3399c3d3e860e70f97cc 100644 (file)
@@ -20,24 +20,29 @@ world = {
     Layers = 2,
     Generate = function(self)
         math.randomseed(self.Seed)
-        self.data = {}
+        --self.data = {}
         for Z = 0,self.Layers do
-            self.data[Z] = {}
+            --self.data[Z] = {}
             for X = 0,250 do
-                self.data[Z][X] = {}
+                --self.data[Z][X] = {}
                 YGen = math.floor(6*math.sin(X/20) + Z) + 64
                 YDepth = math.random(2,5)
                 for Y = 0,128 do
                     if Y == YGen then
-                        self.data[Z][X][Y] = 0
+                        --self.data[Z][X][Y] = 0
+                        self:setData(X, Y, Z, 0);
                     elseif Y < YGen and Y > (YGen - YDepth) then
-                        self.data[Z][X][Y] = 1
+                        --self.data[Z][X][Y] = 1
+                        self:setData(X, Y, Z, 1);
                     elseif Y < YGen then
-                        self.data[Z][X][Y] = 2
+                        --self.data[Z][X][Y] = 2
+                        self:setData(X, Y, Z, 2);
                     end
+                    --print(X..","..Y..","..Z);
                 end
             end
         end
+        print("Done with world gen");
     end
 }
 
index ecc6501e5b14f883a327a7958536b729e34e9e6d..6e6a0e56ced7fa5d53fb1d46715a41c2523b1a2b 100644 (file)
@@ -147,9 +147,11 @@ void Engine::run(void)
     GameState::save("save.json", entities);
 
     // Remove all Lua references from entities
-    entities.each<Scripted>([](entityx::Entity, Scripted &f){ f.cleanup(); });
-    entities.each<EventListener>([](entityx::Entity, EventListener &f){
+    entities.each<Scripted>([](entityx::Entity, Scripted &f) { 
         f.cleanup(); });
+    entities.each<EventListener>([](entityx::Entity, EventListener &f) {
+        f.cleanup(); });
+    systems.system<WorldSystem>()->cleanup();
 }
 
 bool Engine::shouldRun(void)
index f52391f57a123eb04227344189cf04e65dcc1906..7d043750e9c4a2164c8a893f6cf7de82db4774fe 100644 (file)
@@ -127,6 +127,14 @@ void ScriptSystem::scriptExport(void)
             sol::constructors<Physics(void), Physics()>(),
             "standing", &Physics::standing);
 
+    lua.new_usertype<World>("World",
+            sol::constructors<World(sol::object), World(void)>(),
+            "generate", &World::generate,
+            "Seed", sol::property(&World::setSeed, &World::getSeed),
+            "Layers", sol::property(&World::setLayers, &World::getLayers),
+            "setData", &World::setData);
+
+
     auto gamespace = lua["game"].get_or_create<sol::table>();
     gamespace.set_function("spawn", entitySpawn);
     gamespace.set_function("worldRegister", worldRegister);
index 4483d0f6f9620c4077a9cfd16fd992d492a042d3..25fed54f07fddef0fc61a4ebe257517fb7d3da90 100644 (file)
@@ -31,7 +31,7 @@ class Texture
 {
 private:
 public:
-    GLuint tex;
+    GLuint tex = 0;
     int width;
     int height;
     Texture() {};
index 63769a9e49206623c404ebd08f8e7755365ff8cd..9e289eac8aad1e7f9bda804b46b40476e3f9cdd0 100644 (file)
 World::World(sol::object ref)
 {
     if (ref.get_type() == sol::type::table) {
-
+        sol::table tab = ref;
+        if (tab["Seed"] == sol::type::number) {
+            seed = tab["Seed"];
+        }
+        if (tab["Layers"] == sol::type::number) {
+            layers = tab["Layers"];
+        }
+        if (tab["Generate"] == sol::type::function) {
+            generate = tab["Generate"];
+        }
     } else {
         // TODO better logging
         std::cerr << "World paramaters must be stored in a table" << std::endl;
     }
+    generate(this);
+}
+
+void World::setData(unsigned int x,
+                    unsigned int y,
+                    unsigned int z,
+                    unsigned int d)
+{
+    (void)x;
+    (void)y;
+    (void)z;
+    (void)d;
+
+    // TODO actually do stuff here
 }
 
 
index 4ceca94be565cf2070c68cecee3d2286ba7f93a7..c0e6098321817bf1666900a0f841c30a0f981582 100644 (file)
@@ -37,11 +37,39 @@ struct WorldMaterial
 class World
 {
 private:
+    unsigned int seed;
+    unsigned int layers;
+
+    std::vector<std::vector<std::vector<unsigned int>>> data;
     std::vector<unsigned int> registry;
-    std::vector<std::vector<unsigned int>> worldData;
 public:
+    World() {}
     World(sol::object ref);
-    ~World() {}
+    ~World() {
+        generate = sol::nil;
+        registry.clear();
+        data.clear();
+    }
+
+    sol::function generate;
+
+    /* SEED */
+    unsigned int getSeed() {return seed;}
+    void setSeed(unsigned int s) {seed = s;}
+
+    /* LAYERS */
+    unsigned int getLayers() {return layers;}
+    // If we change the amount of layers, we have to regenerate the world
+    void setLayers(unsigned int l) {
+        layers = l;
+        generate();
+    }
+
+    /* DATA */
+    void setData(unsigned int x, 
+                 unsigned int y,
+                 unsigned int z,
+                 unsigned int d);
 };
 
 /**
@@ -57,9 +85,16 @@ public:
     WorldSystem(void):
         currentWorld(nullptr) {}
 
-    ~WorldSystem(void) {}
+    ~WorldSystem(void) {
+        currentWorld = nullptr;
+        worlds.clear();
+    }
 
     World* addWorld(sol::object);
+    void cleanup()
+    {
+        worlds.clear();
+    }
 
     /**
      * Prepares the system for running.