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
}
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)
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);
{
private:
public:
- GLuint tex;
+ GLuint tex = 0;
int width;
int height;
Texture() {};
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
}
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);
};
/**
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.