Created the generator hierarchy

This commit is contained in:
Kayne Ruse
2014-06-21 06:47:30 +10:00
parent d3bf099a98
commit 924ebc2ee9
20 changed files with 475 additions and 39 deletions
+6 -5
View File
@@ -23,7 +23,7 @@
#define ENEMYFACTORYINTERFACE_HPP_ #define ENEMYFACTORYINTERFACE_HPP_
#include "enemy_data.hpp" #include "enemy_data.hpp"
#include "room_data.hpp" #include "map_type.hpp"
#include <list> #include <list>
@@ -36,13 +36,14 @@ public:
virtual void Generate(std::list<EnemyData>* container) = 0; virtual void Generate(std::list<EnemyData>* container) = 0;
//control the difficulty of the room //control the difficulty of the room
RoomData::RoomType SetType(RoomData::RoomType t) { return type = t; } MapType SetType(MapType t) { return type = t; }
MapType GetType() { return type; }
int SetDifficulty(int d) { return difficulty = d; } int SetDifficulty(int d) { return difficulty = d; }
RoomData::RoomType GetType() { return type; }
int GetDifficulty() { return difficulty; } int GetDifficulty() { return difficulty; }
protected: protected:
RoomData::RoomType type; MapType type;
int difficulty; int difficulty = 0;
}; };
#endif #endif
+1 -1
View File
@@ -1,5 +1,5 @@
#config #config
INCLUDES+=. ../rooms ../../common/gameplay ../../common/map ../../common/utilities INCLUDES+=. ../mapgen ../../common/gameplay ../../common/map ../../common/utilities
LIBS+= LIBS+=
CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES)) CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES))
+4
View File
@@ -38,6 +38,8 @@
#include "region_api.hpp" #include "region_api.hpp"
#include "pager_api.hpp" #include "pager_api.hpp"
#include "room_api.hpp"
#include "generator_api.hpp"
//these libs are loaded by lua.c and are readily available to any Lua program //these libs are loaded by lua.c and are readily available to any Lua program
static const luaL_Reg loadedlibs[] = { static const luaL_Reg loadedlibs[] = {
@@ -56,6 +58,8 @@ static const luaL_Reg loadedlibs[] = {
//custom libs //custom libs
{LUA_REGIONLIBNAME, luaopen_regionapi}, {LUA_REGIONLIBNAME, luaopen_regionapi},
{LUA_PAGERLIBNAME, luaopen_pagerapi}, {LUA_PAGERLIBNAME, luaopen_pagerapi},
{LUA_ROOMLIBNAME, luaopen_roomapi},
{LUA_GENERATORLIBNAME, luaopen_generatorapi},
{NULL, NULL} {NULL, NULL}
}; };
+35
View File
@@ -0,0 +1,35 @@
/* Copyright: (c) Kayne Ruse 2014
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
#include "base_generator.hpp"
BaseGenerator::BaseGenerator() {
for (int i = 0; i < MAP_WIDTH; i++) {
for (int j = 0; j < MAP_HEIGHT; j++) {
chunks[i][j].type = TerrainType::NONE;
chunks[i][j].mod = ChunkData::Moddable::CLEAR;
}
}
}
BaseGenerator::~BaseGenerator() {
//
}
+48
View File
@@ -0,0 +1,48 @@
/* Copyright: (c) Kayne Ruse 2014
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
#ifndef BASEGENERATOR_HPP_
#define BASEGENERATOR_HPP_
#include "chunk_data.hpp"
#include "lua/lua.hpp"
constexpr int MAP_WIDTH = 256;
constexpr int MAP_HEIGHT = 256;
class BaseGenerator {
public:
BaseGenerator();
virtual ~BaseGenerator();
//accessors and mutators
virtual ChunkData* GetChunk(int x, int y) { return &chunks[x][y]; }
lua_State* SetLuaState(lua_State* L) { return luaState = L; }
lua_State* GetLuaState() { return luaState; }
protected:
ChunkData chunks[MAP_WIDTH][MAP_HEIGHT];
lua_State* luaState = nullptr;
};
#endif
+30
View File
@@ -0,0 +1,30 @@
/* Copyright: (c) Kayne Ruse 2014
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
#include "caves_generator.hpp"
CavesGenerator::CavesGenerator() {
//
}
CavesGenerator::~CavesGenerator() {
//
}
+38
View File
@@ -0,0 +1,38 @@
/* Copyright: (c) Kayne Ruse 2014
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
#ifndef CAVESGENERATOR_HPP_
#define CAVESGENERATOR_HPP_
#include "base_generator.hpp"
#define CAVES_GENERATOR_PSEUDOINDEX "CavesGenerator"
class CavesGenerator : public BaseGenerator {
public:
CavesGenerator();
~CavesGenerator();
private:
//
};
#endif
+30
View File
@@ -0,0 +1,30 @@
/* Copyright: (c) Kayne Ruse 2014
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
#include "forests_generator.hpp"
ForestsGenerator::ForestsGenerator() {
//
}
ForestsGenerator::~ForestsGenerator() {
//
}
+38
View File
@@ -0,0 +1,38 @@
/* Copyright: (c) Kayne Ruse 2014
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
#ifndef FORESTSGENERATOR_HPP_
#define FORESTSGENERATOR_HPP_
#include "base_generator.hpp"
#define FORESTS_GENERATOR_PSEUDOINDEX "ForestsGenerator"
class ForestsGenerator : public BaseGenerator {
public:
ForestsGenerator();
~ForestsGenerator();
private:
//
};
#endif
+37
View File
@@ -0,0 +1,37 @@
/* Copyright: (c) Kayne Ruse 2014
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
#include "generator_api.hpp"
static int getGenerator(lua_State* L) {
//TODO: return a generator based on the given parameter
return 0;
}
static const luaL_Reg generatorlib[] = {
{"getgenerator", getGenerator},
{nullptr, nullptr}
};
LUAMOD_API int luaopen_generatorapi(lua_State* L) {
luaL_newlib(L, generatorlib);
return 1;
}
+31
View File
@@ -0,0 +1,31 @@
/* Copyright: (c) Kayne Ruse 2014
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
#ifndef GENERATORAPI_HPP_
#define GENERATORAPI_HPP_
#include "lua/lua.hpp"
#define LUA_GENERATORLIBNAME "generator"
LUAMOD_API int luaopen_generatorapi(lua_State* L);
#endif
+33
View File
@@ -0,0 +1,33 @@
/* Copyright: (c) Kayne Ruse 2014
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
#ifndef MAPTYPE_HPP_
#define MAPTYPE_HPP_
enum class MapType {
OVERWORLD = 0,
RUINS = 1,
TOWERS = 2,
FORESTS = 3,
CAVES = 4,
};
#endif
+1 -6
View File
@@ -22,12 +22,7 @@
#include "overworld_generator.hpp" #include "overworld_generator.hpp"
OverworldGenerator::OverworldGenerator() { OverworldGenerator::OverworldGenerator() {
for (int i = 0; i < OVERWORLD_WIDTH; i++) { //
for (int j = 0; j < OVERWORLD_HEIGHT; j++) {
chunks[i][j].type = TerrainType::NONE;
chunks[i][j].mod = ChunkData::Moddable::CLEAR;
}
}
} }
OverworldGenerator::~OverworldGenerator() { OverworldGenerator::~OverworldGenerator() {
+3 -17
View File
@@ -22,31 +22,17 @@
#ifndef OVERWORLDGENERATOR_HPP_ #ifndef OVERWORLDGENERATOR_HPP_
#define OVERWORLDGENERATOR_HPP_ #define OVERWORLDGENERATOR_HPP_
#include "chunk_data.hpp" #include "base_generator.hpp"
#include "lua/lua.hpp"
#define OVERWORLD_GENERATOR_PSEUDOINDEX "OverworldGenerator" #define OVERWORLD_GENERATOR_PSEUDOINDEX "OverworldGenerator"
constexpr int OVERWORLD_WIDTH = 256; class OverworldGenerator : public BaseGenerator {
constexpr int OVERWORLD_HEIGHT = 256;
//TODO: SuperGenerator API
//TODO: SuperGenerator DOCS
class OverworldGenerator {
public: public:
OverworldGenerator(); OverworldGenerator();
~OverworldGenerator(); ~OverworldGenerator();
//accessors and mutators
ChunkData* GetChunk(int x, int y) { return &chunks[x][y]; }
lua_State* SetLuaState(lua_State* L) { return luaState = L; }
lua_State* GetLuaState() { return luaState; }
private: private:
ChunkData chunks[OVERWORLD_WIDTH][OVERWORLD_HEIGHT]; //
lua_State* luaState = nullptr;
}; };
#endif #endif
+30
View File
@@ -0,0 +1,30 @@
/* Copyright: (c) Kayne Ruse 2014
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
#include "ruins_generator.hpp"
RuinsGenerator::RuinsGenerator() {
//
}
RuinsGenerator::~RuinsGenerator() {
//
}
+38
View File
@@ -0,0 +1,38 @@
/* Copyright: (c) Kayne Ruse 2014
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
#ifndef RUINSGENERATOR_HPP_
#define RUINSGENERATOR_HPP_
#include "base_generator.hpp"
#define RUINS_GENERATOR_PSEUDOINDEX "RuinsGenerator"
class RuinsGenerator : public BaseGenerator {
public:
RuinsGenerator();
~RuinsGenerator();
private:
//
};
#endif
+30
View File
@@ -0,0 +1,30 @@
/* Copyright: (c) Kayne Ruse 2014
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
#include "towers_generator.hpp"
TowersGenerator::TowersGenerator() {
//
}
TowersGenerator::~TowersGenerator() {
//
}
+38
View File
@@ -0,0 +1,38 @@
/* Copyright: (c) Kayne Ruse 2014
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
#ifndef TOWERSGENERATOR_HPP_
#define TOWERSGENERATOR_HPP_
#include "base_generator.hpp"
#define TOWERS_GENERATOR_PSEUDOINDEX "TowersGenerator"
class TowersGenerator : public BaseGenerator {
public:
TowersGenerator();
~TowersGenerator();
private:
//
};
#endif
+1 -1
View File
@@ -1,5 +1,5 @@
#config #config
INCLUDES+=. ../../common/map INCLUDES+=. ../mapgen ../../common/map
LIBS+= LIBS+=
CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES)) CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES))
+3 -9
View File
@@ -22,21 +22,15 @@
#ifndef ROOMDATA_HPP_ #ifndef ROOMDATA_HPP_
#define ROOMDATA_HPP_ #define ROOMDATA_HPP_
#include "map_type.hpp"
//map system //map system
#include "region_pager_lua.hpp" #include "region_pager_lua.hpp"
struct RoomData { struct RoomData {
enum class RoomType {
OVERWORLD = 0,
RUINS = 1,
TOWERS = 2,
FORESTS = 3,
CAVE = 4,
};
//members //members
RegionPagerLua pager; RegionPagerLua pager;
RoomType type; MapType type;
//TODO: collision map //TODO: collision map
//TODO: NPCs? //TODO: NPCs?