diff --git a/common/utilities/simple_rng.hpp b/common/utilities/simple_rng.hpp new file mode 100644 index 0000000..52ca91b --- /dev/null +++ b/common/utilities/simple_rng.hpp @@ -0,0 +1,42 @@ +/* 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 SIMPLERNG_HPP_ +#define SIMPLERNG_HPP_ + +//a simple, stateless, random number generator +class SimpleRNG { +public: + SimpleRNG() { SetSeed(8891.0); } + SimpleRNG(double x) { SetSeed(x); } + + double SetSeed(double s) { return seed = s; } + double GetSeed() { return seed; } + + double operator()(double x) { + return (x + seed) * 11235.0 + 81321.0; + }; + +private: + double seed; +}; + +#endif \ No newline at end of file diff --git a/common/utilities/vector2.hpp b/common/utilities/vector2.hpp index 1d8882d..2be3d34 100644 --- a/common/utilities/vector2.hpp +++ b/common/utilities/vector2.hpp @@ -41,6 +41,11 @@ public: double SquaredLength() const { return x*x+y*y; } + void Normalize() { + double l = Length(); + x /= l; + y /= l; + } //Arithmetic operators Vector2 operator+(Vector2 v) const { @@ -97,15 +102,6 @@ public: template bool operator!=(T t) { return (x != t || y != t); } }; -//non-member templates (flip the order) -template Vector2 operator+(T t, Vector2 v) { return v + t; } -template Vector2 operator-(T t, Vector2 v) { return v - t; } -template Vector2 operator*(T t, Vector2 v) { return v * t; } -template Vector2 operator/(T t, Vector2 v) { return v / t; } - -template bool operator==(T t, Vector2 v) { return v == t; } -template bool operator!=(T t, Vector2 v) { return v != t; } - //This is explicitly a POD static_assert(std::is_pod::value, "Vector2 is not a POD"); diff --git a/server/chunk_data.hpp b/server/chunk_data.hpp new file mode 100644 index 0000000..c0c1621 --- /dev/null +++ b/server/chunk_data.hpp @@ -0,0 +1,44 @@ +/* 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 CHUNKDATA_HPP_ +#define CHUNKDATA_HPP_ + +#include "terrain_type.hpp" + +#include + +struct ChunkData { + enum class Moddable { + LOCKED, //do not change + HARD, //minor changes + SOFT, //major changes + CLEAR, //untouched + }; + + TerrainType type; +// int fountainCount; + Moddable mod; +}; + +static_assert(std::is_pod::value, "ChunkData is not a POD"); + +#endif diff --git a/server/overworld_generator.cpp b/server/overworld_generator.cpp new file mode 100644 index 0000000..2b56bba --- /dev/null +++ b/server/overworld_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 "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() { + // +} \ No newline at end of file diff --git a/server/overworld_generator.hpp b/server/overworld_generator.hpp new file mode 100644 index 0000000..a3724be --- /dev/null +++ b/server/overworld_generator.hpp @@ -0,0 +1,52 @@ +/* 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 OVERWORLDGENERATOR_HPP_ +#define OVERWORLDGENERATOR_HPP_ + +#include "chunk_data.hpp" + +#include "lua/lua.hpp" + +#define OVERWORLD_GENERATOR_PSEUDOINDEX "OverworldGenerator" + +constexpr int OVERWORLD_WIDTH = 256; +constexpr int OVERWORLD_HEIGHT = 256; + +//TODO: SuperGenerator API +//TODO: SuperGenerator DOCS +class OverworldGenerator { +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/terrain_type.hpp b/server/terrain_type.hpp new file mode 100644 index 0000000..aadfaa9 --- /dev/null +++ b/server/terrain_type.hpp @@ -0,0 +1,40 @@ +/* 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 TERRAINTYPE_HPP_ +#define TERRAINTYPE_HPP_ + +enum class TerrainType { + //default: something's wrong + NONE = 0, + + //standard overworld + PLAINS, + GRASS, + DIRT, + SAND, + WATER, + + //not used + LAST, +}; + +#endif