From 924ebc2ee9c21f7e55d5e0c536f537b6f25fc56c Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Sat, 21 Jun 2014 06:47:30 +1000 Subject: [PATCH] Created the generator hierarchy --- server/enemies/enemy_factory_interface.hpp | 11 ++--- server/enemies/makefile | 2 +- server/linit.cpp | 4 ++ server/mapgen/base_generator.cpp | 35 ++++++++++++++++ server/mapgen/base_generator.hpp | 48 ++++++++++++++++++++++ server/mapgen/caves_generator.cpp | 30 ++++++++++++++ server/mapgen/caves_generator.hpp | 38 +++++++++++++++++ server/mapgen/forests_generator.cpp | 30 ++++++++++++++ server/mapgen/forests_generator.hpp | 38 +++++++++++++++++ server/mapgen/generator_api.cpp | 37 +++++++++++++++++ server/mapgen/generator_api.hpp | 31 ++++++++++++++ server/mapgen/map_type.hpp | 33 +++++++++++++++ server/mapgen/overworld_generator.cpp | 7 +--- server/mapgen/overworld_generator.hpp | 20 ++------- server/mapgen/ruins_generator.cpp | 30 ++++++++++++++ server/mapgen/ruins_generator.hpp | 38 +++++++++++++++++ server/mapgen/towers_generator.cpp | 30 ++++++++++++++ server/mapgen/towers_generator.hpp | 38 +++++++++++++++++ server/rooms/makefile | 2 +- server/rooms/room_data.hpp | 12 ++---- 20 files changed, 475 insertions(+), 39 deletions(-) create mode 100644 server/mapgen/base_generator.cpp create mode 100644 server/mapgen/base_generator.hpp create mode 100644 server/mapgen/caves_generator.cpp create mode 100644 server/mapgen/caves_generator.hpp create mode 100644 server/mapgen/forests_generator.cpp create mode 100644 server/mapgen/forests_generator.hpp create mode 100644 server/mapgen/generator_api.cpp create mode 100644 server/mapgen/generator_api.hpp create mode 100644 server/mapgen/map_type.hpp create mode 100644 server/mapgen/ruins_generator.cpp create mode 100644 server/mapgen/ruins_generator.hpp create mode 100644 server/mapgen/towers_generator.cpp create mode 100644 server/mapgen/towers_generator.hpp diff --git a/server/enemies/enemy_factory_interface.hpp b/server/enemies/enemy_factory_interface.hpp index 335814e..8e97e78 100644 --- a/server/enemies/enemy_factory_interface.hpp +++ b/server/enemies/enemy_factory_interface.hpp @@ -23,7 +23,7 @@ #define ENEMYFACTORYINTERFACE_HPP_ #include "enemy_data.hpp" -#include "room_data.hpp" +#include "map_type.hpp" #include @@ -36,13 +36,14 @@ public: virtual void Generate(std::list* container) = 0; //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; } - RoomData::RoomType GetType() { return type; } int GetDifficulty() { return difficulty; } protected: - RoomData::RoomType type; - int difficulty; + MapType type; + int difficulty = 0; }; #endif diff --git a/server/enemies/makefile b/server/enemies/makefile index 5055ccf..8c2156a 100644 --- a/server/enemies/makefile +++ b/server/enemies/makefile @@ -1,5 +1,5 @@ #config -INCLUDES+=. ../rooms ../../common/gameplay ../../common/map ../../common/utilities +INCLUDES+=. ../mapgen ../../common/gameplay ../../common/map ../../common/utilities LIBS+= CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES)) diff --git a/server/linit.cpp b/server/linit.cpp index 13541f2..b23af1f 100644 --- a/server/linit.cpp +++ b/server/linit.cpp @@ -38,6 +38,8 @@ #include "region_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 static const luaL_Reg loadedlibs[] = { @@ -56,6 +58,8 @@ static const luaL_Reg loadedlibs[] = { //custom libs {LUA_REGIONLIBNAME, luaopen_regionapi}, {LUA_PAGERLIBNAME, luaopen_pagerapi}, + {LUA_ROOMLIBNAME, luaopen_roomapi}, + {LUA_GENERATORLIBNAME, luaopen_generatorapi}, {NULL, NULL} }; diff --git a/server/mapgen/base_generator.cpp b/server/mapgen/base_generator.cpp new file mode 100644 index 0000000..8ea5974 --- /dev/null +++ b/server/mapgen/base_generator.cpp @@ -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() { + // +} \ No newline at end of file diff --git a/server/mapgen/base_generator.hpp b/server/mapgen/base_generator.hpp new file mode 100644 index 0000000..ef93c38 --- /dev/null +++ b/server/mapgen/base_generator.hpp @@ -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 diff --git a/server/mapgen/caves_generator.cpp b/server/mapgen/caves_generator.cpp new file mode 100644 index 0000000..a2cbaed --- /dev/null +++ b/server/mapgen/caves_generator.cpp @@ -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() { + // +} \ No newline at end of file diff --git a/server/mapgen/caves_generator.hpp b/server/mapgen/caves_generator.hpp new file mode 100644 index 0000000..975ed8c --- /dev/null +++ b/server/mapgen/caves_generator.hpp @@ -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 diff --git a/server/mapgen/forests_generator.cpp b/server/mapgen/forests_generator.cpp new file mode 100644 index 0000000..5ff8127 --- /dev/null +++ b/server/mapgen/forests_generator.cpp @@ -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() { + // +} \ No newline at end of file diff --git a/server/mapgen/forests_generator.hpp b/server/mapgen/forests_generator.hpp new file mode 100644 index 0000000..e87d89e --- /dev/null +++ b/server/mapgen/forests_generator.hpp @@ -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 diff --git a/server/mapgen/generator_api.cpp b/server/mapgen/generator_api.cpp new file mode 100644 index 0000000..2593fb5 --- /dev/null +++ b/server/mapgen/generator_api.cpp @@ -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; +} diff --git a/server/mapgen/generator_api.hpp b/server/mapgen/generator_api.hpp new file mode 100644 index 0000000..a0b9fb3 --- /dev/null +++ b/server/mapgen/generator_api.hpp @@ -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 \ No newline at end of file diff --git a/server/mapgen/map_type.hpp b/server/mapgen/map_type.hpp new file mode 100644 index 0000000..3127e1a --- /dev/null +++ b/server/mapgen/map_type.hpp @@ -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 \ No newline at end of file diff --git a/server/mapgen/overworld_generator.cpp b/server/mapgen/overworld_generator.cpp index 2b56bba..8119158 100644 --- a/server/mapgen/overworld_generator.cpp +++ b/server/mapgen/overworld_generator.cpp @@ -22,12 +22,7 @@ #include "overworld_generator.hpp" 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() { diff --git a/server/mapgen/overworld_generator.hpp b/server/mapgen/overworld_generator.hpp index a3724be..e47026d 100644 --- a/server/mapgen/overworld_generator.hpp +++ b/server/mapgen/overworld_generator.hpp @@ -22,31 +22,17 @@ #ifndef OVERWORLDGENERATOR_HPP_ #define OVERWORLDGENERATOR_HPP_ -#include "chunk_data.hpp" - -#include "lua/lua.hpp" +#include "base_generator.hpp" #define OVERWORLD_GENERATOR_PSEUDOINDEX "OverworldGenerator" -constexpr int OVERWORLD_WIDTH = 256; -constexpr int OVERWORLD_HEIGHT = 256; - -//TODO: SuperGenerator API -//TODO: SuperGenerator DOCS -class OverworldGenerator { +class OverworldGenerator : public BaseGenerator { public: 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: - ChunkData chunks[OVERWORLD_WIDTH][OVERWORLD_HEIGHT]; - lua_State* luaState = nullptr; + // }; #endif diff --git a/server/mapgen/ruins_generator.cpp b/server/mapgen/ruins_generator.cpp new file mode 100644 index 0000000..24a7c3e --- /dev/null +++ b/server/mapgen/ruins_generator.cpp @@ -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() { + // +} \ No newline at end of file diff --git a/server/mapgen/ruins_generator.hpp b/server/mapgen/ruins_generator.hpp new file mode 100644 index 0000000..309bf45 --- /dev/null +++ b/server/mapgen/ruins_generator.hpp @@ -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 diff --git a/server/mapgen/towers_generator.cpp b/server/mapgen/towers_generator.cpp new file mode 100644 index 0000000..3e8a2c6 --- /dev/null +++ b/server/mapgen/towers_generator.cpp @@ -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() { + // +} \ No newline at end of file diff --git a/server/mapgen/towers_generator.hpp b/server/mapgen/towers_generator.hpp new file mode 100644 index 0000000..0dcb9d9 --- /dev/null +++ b/server/mapgen/towers_generator.hpp @@ -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 diff --git a/server/rooms/makefile b/server/rooms/makefile index 5eb6456..1316fb4 100644 --- a/server/rooms/makefile +++ b/server/rooms/makefile @@ -1,5 +1,5 @@ #config -INCLUDES+=. ../../common/map +INCLUDES+=. ../mapgen ../../common/map LIBS+= CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES)) diff --git a/server/rooms/room_data.hpp b/server/rooms/room_data.hpp index cf1b6cb..872ffb6 100644 --- a/server/rooms/room_data.hpp +++ b/server/rooms/room_data.hpp @@ -22,21 +22,15 @@ #ifndef ROOMDATA_HPP_ #define ROOMDATA_HPP_ +#include "map_type.hpp" + //map system #include "region_pager_lua.hpp" struct RoomData { - enum class RoomType { - OVERWORLD = 0, - RUINS = 1, - TOWERS = 2, - FORESTS = 3, - CAVE = 4, - }; - //members RegionPagerLua pager; - RoomType type; + MapType type; //TODO: collision map //TODO: NPCs?