Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
No results found
Show changes
Commits on Source (9)
......@@ -15,6 +15,10 @@ bin/
# Libraries
libs/
# Doctest generated files
*.gcna
*.gcdo
# Build directory
build/
......
......@@ -13,7 +13,7 @@
enum LogLevel
{
DEBUG, INFO, WARNING, ERROR, FATAL
DEBUG, INFO, WARNING, ERR, FATAL
};
class Logger
......
......@@ -4,6 +4,14 @@
#include <iostream>
#include <cstdint>
#ifdef __TEST_RUNNER__
#ifndef DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#endif // DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#include "doctest.h"
#include "testlist.hpp"
#endif // __TEST_RUNNER__
enum GenerationMethod
{
......@@ -11,10 +19,10 @@ enum GenerationMethod
Cave
};
#include "maths/maths.h"
#include "save-manager.h"
#include "game-state.h"
#include "world-hex-2d.h"
#include "world-map-3d.h"
#include "chunk.h"
#include "config-parser.h"
#include "game-engine.h"
......
......@@ -3,6 +3,7 @@
#include <cmath>
class Vec2
{
public:
......
#ifndef WORLD_MAP_3D_H
#define WORLD_MAP_3D_H
#include <unordered_map>
#include "chunk.h"
#include "logger.h"
class WorldMap3D
{
public:
WorldMap3D();
WorldMap3D( uint8_t width, uint8_t height, uint8_t depth);
~WorldMap3D();
void generateWorld();
Chunk* getChunk( int chunkX, int chunkY, int chunkZ );
private:
Logger& _logger;
std::unordered_map<int, std::unordered_map<int, std::unordered_map<int, Chunk*>>> chunks_;
uint8_t _width; // x
uint8_t _height; // y
uint8_t _depth; // z
};
#endif // WORLD_MAP_3D_H
This diff is collapsed.
......@@ -19,7 +19,7 @@ endif
# Compiler flags
# DEBUG BUILD
CXXFLAGS += -g
CXXFLAGS += -g --coverage -O0
# Linker Flags
LDFLAGS =
......@@ -33,8 +33,14 @@ INC_DIR = include
# Object files directory
BUILD_DIR = build
# Test directory
TEST_DIR = test
# Test Variables
TEST_MAIN = DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
TEST_FLAG = __TEST_RUNNER__
TEST_DEFINES = -D$(TEST_MAIN) -D$(TEST_FLAG)
TEST_TARGET = $(BIN_DIR)/test_runner
TEST_HEADER = lib/doctest
TEST_DIR = tests
TEST_BUILD_DIR = $(BUILD_DIR)/.test
# Executable directory
BIN_DIR = bin
......@@ -53,39 +59,41 @@ TEST_FILES = $(wildcard $(TEST_DIR)/**/*.test.cpp $(TEST_DIR)/*.test.cpp)
# Object files
OBJ_FILES = $(patsubst $(SRC_DIR)/%.cpp,$(BUILD_DIR)/%.o,$(SRC_FILES))
TEST_OBJ_FILES = $(patsubst $(TEST_DIR)/%.test.cpp,$(BUILD_DIR)/%.o,$(TEST_FILES))
# Define this for running console-only
CONSOLE_DEFINE = -Dconsole
TEST_OBJ_FILES = $(patsubst $(TEST_DIR)/%.test.hpp,$(TEST_BUILD_DIR)/%.test.o,$(TEST_FILES))
TEST_SRC_OBJ_FILES = $(patsubst $(SRC_DIR)/%.cpp,$(TEST_BUILD_DIR)/%.src.o,$(SRC_FILES))
# TEST_SRC_OBJ_FILES = $(patsubst $(SRC_DIR)/%.cpp,$(TEST_BUILD_DIR)/%.src.o,$(SRC_FILES))
# Output executable
TARGET = $(BIN_DIR)/game
TEST_TARGET = $(BIN_DIR)/test_runner
all: $(TARGET)
test: $(TEST_TARGET)
./$(TEST_TARGET)
$(TARGET): $(OBJ_FILES)
$(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJ_FILES) $(SDL_LIBRARY) $(SDL_OPTIONS)
console: $(OBJ_FILES)
$(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJ_FILES) $(CONSOLE_DEFINE)
$(TEST_TARGET): $(TEST_OBJ_FILES) $(TEST_SRC_OBJ_FILES)
$(CXX) $(CXXFLAGS) -o $(TEST_TARGET) $(TEST_OBJ_FILES) $(TEST_SRC_OBJ_FILES) $(SDL_LIBRARY) $(SDL_OPTIONS)
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.cpp ${INC_DIR}/*.h
$(TEST_BUILD_DIR)/%.src.o: $(SRC_DIR)/%.cpp ${INC_DIR}/%.h
@mkdir -p $(@D)
$(CXX) $(CXXFLAGS) $(TEST_DEFINES) $(LDFLAGS) -I$(INC_DIR) -I$(TEST_HEADER) -I$(TEST_DIR) -c -o $@ $<
$(TEST_BUILD_DIR)/%.test.o: $(SRC_DIR)/%.test.hpp $(SRC_DIR)/%.cpp ${INC_DIR}/%.h
@mkdir -p $(@D)
$(CXX) $(CXXFLAGS) $(TEST_DEFINES) $(LDFLAGS) -I$(INC_DIR) -I$(TEST_HEADER) -c -o $@ $<
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.cpp ${INC_DIR}/%.h
@mkdir -p $(@D)
$(CXX) $(CXXFLAGS) $(LDFLAGS) -I$(INC_DIR) -c -o $@ $<
clean:
rm -rf $(BIN_DIR)/* $(BUILD_DIR)/* test_runnr
rm -r ./*~
rm -r $(SRC_DIR)/*~ ${INC_DIR}/*~
run_tests: $(TEST_OBJ_FILES)
$(CXX) $(CXXFLAGS) $(LDFLAGS) $(INC_DIRS) -o ${TEST_TARGET} $^
./${TEST_TARGET}
$(BUILD_DIR)/%.o: $(TEST_DIR)/%.test.cpp
@mkdir -p $(@D)
$(CXX) $(CXXFLAGS) $(LDFLAGS) $(INC_DIRS) -c -o $@ $<
rm -rf $(TEST_BUILD_DIR)/* $(TEST_TARGET)
rm -rf $(BIN_DIR)/* $(BUILD_DIR)/*
rm -rf ./*~ ./*.swp ./*.gcno
rm -rf *~
run: $(TARGET)
./$(TARGET)
......@@ -11,7 +11,7 @@ void Logger::setLogLevel( LogLevel level )
void Logger::debug( const std::string& message ) { this->log( LogLevel::DEBUG, message ); }
void Logger::info( const std::string& message ) { this->log( LogLevel::INFO, message ); }
void Logger::warning( const std::string& message ) { this->log( LogLevel::WARNING, message ); }
void Logger::error( const std::string& message ) { this->log( LogLevel::ERROR, message ); }
void Logger::error( const std::string& message ) { this->log( LogLevel::ERR, message ); }
void Logger::fatal( const std::string& message ) { this->log( LogLevel::FATAL, message ); }
Logger::Logger()
......@@ -35,7 +35,7 @@ std::string Logger::logLevelToString( LogLevel level )
case LogLevel::DEBUG: return "DEBUG";
case LogLevel::INFO: return "INFO";
case LogLevel::WARNING: return "WARNING";
case LogLevel::ERROR: return "ERROR";
case LogLevel::ERR: return "ERROR";
case LogLevel::FATAL: return "FATAL";
default: return "UNKNOWN";
}
......@@ -47,7 +47,7 @@ std::string Logger::getLevelColour( LogLevel level )
case LogLevel::DEBUG: return BLK;
case LogLevel::INFO: return CYN;
case LogLevel::WARNING: return YEL;
case LogLevel::ERROR: return RED;
case LogLevel::ERR: return RED;
case LogLevel::FATAL: return MAG;
default: return CRESET;
}
......
#include "main.h"
#ifndef __TEST_RUNNER__
int main( int argc, char* argv[] ) {
const uint16_t SCREEN_HEIGHT = 600;
......@@ -58,4 +59,11 @@ int main( int argc, char* argv[] ) {
logger.info( "Process Ending" );
return 0;
}
// int /*WINAPI*/ WinMain(/*HINSTANCE hInstance, HINSTANCE, LPSTR, int*/) { main(); return 0; }
#else // __TEST_RUNNER__
//int /*WINAPI*/ WinMain(/*HINSTANCE hInstance, HINSTANCE, LPSTR, int*/) {
// main( 0, nullptr );
// return 0;
//}
#endif // __TEST_RUNNER__
File moved
#include "world-map-3d.h"
WorldMap3D::WorldMap3D()
:WorldMap3D( 5, 5, 5 )
{}
WorldMap3D::WorldMap3D(
uint8_t width,
uint8_t height,
uint8_t depth
) :
_logger( Logger::instance() ),
_width(width), _height(height), _depth(depth)
{
this->_logger.info( "Creating new world" );
this->generateWorld();
}
WorldMap3D::~WorldMap3D(){
this->_logger.info( "Cleaning world" );
// Clean Chunk Map
for( const auto& [keyX, value1] : this->chunks_)
{
for( const auto& [keyY, value2] : value1)
{
for( const auto& [keyZ, chunk] : value2)
{ delete chunk; }
}
}
}
Chunk* WorldMap3D::getChunk(int chunkX, int chunkY, int chunkZ)
{
auto chX = chunks_.find( chunkX );
if( chX != chunks_.end() )
{
auto chY = chX->second.find( chunkY );
if( chY != chX->second.end() )
{
auto chZ = chY->second.find( chunkZ );
if( chZ != chY->second.end() )
{ return chZ->second; }
}
}
return nullptr;
}
void WorldMap3D::generateWorld()
{
this->_logger.info( "Generating initial world" );
for( uint8_t x = 0; x < this->_width; x++ )
{
for( uint8_t y = 0; y < this->_height; y++ )
{
for( uint8_t z = 0; z < this->_depth; z++ )
{
Chunk* chunk = new Chunk( x, y, z );
this->chunks_[z][y][x] = chunk;
}
}
}
}
#include <iostream>
#include "doctest.h"
#include "maths/vec2.h"
TEST_CASE( "Testing Operator Comparisons" ) {
Vec2 a( 1, 5 );
Vec2 b( 2, 4 );
SUBCASE( "Addition" )
{
Vec2 c = a + b;
CHECK( c.x == 3 );
CHECK( c.y == 9 );
}
SUBCASE( "Subtraction" )
{
Vec2 c = a - b;
CHECK( c.x == -1 );
CHECK( c.y == 1 );
}
}
#ifndef __TESTLIST_INCLUDES__
#define __TESTLIST_INCLUDES__
#include "maths/vec2.test.hpp"
#endif // __TESTLIST_INCLUDES__