diff --git a/CMakeLists.txt b/CMakeLists.txt index e9fba91..c399a18 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -45,6 +45,7 @@ include_directories(${BOX2D_INCLUDE_DIRS}) find_package(ENTITYX REQUIRED CONFIG) include_directories(${ENTITYX_INCLUDE_DIRS}) +MESSAGE( STATUS "Entityx Lib: " ${ENTITYX_LIBRARIES} ) MESSAGE( STATUS "OpenGL Lib: " ${OPENGL_gl_LIBRARY} ) MESSAGE( STATUS "SDL2 Lib: " ${SDL2_LIBRARIES} ) MESSAGE( STATUS "SDL2_IMG Lib: " ${SDL2_IMAGE_LIBRARIES} ) diff --git a/assets/police_officer.png b/assets/police_officer.png index d4a8326..04b7c63 100644 Binary files a/assets/police_officer.png and b/assets/police_officer.png differ diff --git a/external/entityx-1.1.2/entityx-config.cmake b/external/entityx-1.1.2/entityx-config.cmake index 9f4d523..a4d3e30 100644 --- a/external/entityx-1.1.2/entityx-config.cmake +++ b/external/entityx-1.1.2/entityx-config.cmake @@ -1,10 +1,18 @@ set(ENTITYX_INCLUDE_DIRS "${CMAKE_CURRENT_LIST_DIR}") # Support both 32 and 64 bit builds -if (${CMAKE_SIZEOF_VOID_P} MATCHES 8) -else () - set(ENTITYX_LIBRARIES "${CMAKE_CURRENT_LIST_DIR}/build/Release/entityx.lib") - set(ENTITYX_DLL "${CMAKE_CURRENT_LIST_DIR}/build/Release/entityx.dll") -endif () +if (${CMAKE_BUILD_TYPE} MATCHES "DEBUG") + if (${CMAKE_SIZEOF_VOID_P} MATCHES 8) + else () + set(ENTITYX_LIBRARIES "${CMAKE_CURRENT_LIST_DIR}/build/Debug/entityx-d.lib") + set(ENTITYX_DLL "${CMAKE_CURRENT_LIST_DIR}/build/Debug/entityx.dll") + endif () +else (${CMAKE_BUILD_TYPE} MATCHES "DEBUG") + if (${CMAKE_SIZEOF_VOID_P} MATCHES 8) + else () + set(ENTITYX_LIBRARIES "${CMAKE_CURRENT_LIST_DIR}/build/Release/entityx.lib") + set(ENTITYX_DLL "${CMAKE_CURRENT_LIST_DIR}/build/Release/entityx.dll") + endif () +endif (${CMAKE_BUILD_TYPE} MATCHES "DEBUG") string(STRIP "${ENTITYX_LIBRARIES}" ENTITYX_LIBRARIES) \ No newline at end of file diff --git a/src/DarkRP2D.cpp b/src/DarkRP2D.cpp index fb4f31f..dd296ce 100644 --- a/src/DarkRP2D.cpp +++ b/src/DarkRP2D.cpp @@ -71,7 +71,7 @@ void DarkRP2D::loop(unsigned int delta) void DarkRP2D::update(unsigned int delta) { - gameScreen->update(); + gameScreen->update(delta); } void DarkRP2D::render(unsigned int delta) @@ -85,7 +85,7 @@ void DarkRP2D::render(unsigned int delta) Shader bitmapShader = assets->getShader("bitmapShader"); font->drawText(bitmapShader, "Hallo du noob", 25.0f, 25.0f, 1.f, glm::vec3(0.5f, 0.8f, 0.2f)); - gameScreen->render(); + gameScreen->render(delta); #ifndef NDEBUG // 1. Show a simple window. diff --git a/src/entities/Charakter.h b/src/entities/Charakter.h deleted file mode 100644 index e69de29..0000000 diff --git a/src/entities/MovementSystem.cpp b/src/entities/MovementSystem.cpp new file mode 100644 index 0000000..4baf666 --- /dev/null +++ b/src/entities/MovementSystem.cpp @@ -0,0 +1,16 @@ +#include "MovementSystem.h" +#include "components/Direction.h" +#include "components/Position.h" + +void MovementSystem::update(entityx::EntityManager &es, + entityx::EventManager &events, + entityx::TimeDelta dt) +{ + for (entityx::Entity entity : es.entities_with_components()) + { + entityx::ComponentHandle position = entity.component(); + entityx::ComponentHandle direction = entity.component(); + position.get()->x += direction.get()->x * dt; + position.get()->y += direction.get()->y * dt; + } +} \ No newline at end of file diff --git a/src/entities/MovementSystem.h b/src/entities/MovementSystem.h new file mode 100644 index 0000000..6ac5870 --- /dev/null +++ b/src/entities/MovementSystem.h @@ -0,0 +1,10 @@ +#ifndef MOVEMENTSYSTEM_H +#define MOVEMENTSYSTEM_H + +#include + +struct MovementSystem : public entityx::System { + void update(entityx::EntityManager &es, entityx::EventManager &events, entityx::TimeDelta dt) override; +}; + +#endif //MOVEMENTSYSTEM_H \ No newline at end of file diff --git a/src/entities/RenderSystem.cpp b/src/entities/RenderSystem.cpp new file mode 100644 index 0000000..a791c0b --- /dev/null +++ b/src/entities/RenderSystem.cpp @@ -0,0 +1,31 @@ +#include "RenderSystem.h" +#include "components/Renderable.h" +#include "components/Position.h" + +#include +#include + +void RenderSystem::update(entityx::EntityManager &es, + entityx::EventManager &events, + entityx::TimeDelta dt) +{ + for (entityx::Entity entity : es.entities_with_components()) + { + entityx::ComponentHandle meshContainer = entity.component(); + entityx::ComponentHandle pos = entity.component(); + + glm::mat4 model(1); + float x = pos.get()->x; + float y = pos.get()->y; + model = glm::translate(model, glm::vec3(x, y, 0.f)); + + glm::mat4 combined; + combined = _camera->getProjectionMatrix() * _camera->getViewMatrix() * model; + + //Drawing + Shader defaultShader = _assets->getShader(meshContainer.get()->_shaderName); + defaultShader.SetMatrix4("MVP", combined, true); + //Draw Mesh + _renderer->draw(*(meshContainer.get()->_mesh), defaultShader); + } +} \ No newline at end of file diff --git a/src/entities/RenderSystem.h b/src/entities/RenderSystem.h new file mode 100644 index 0000000..3477505 --- /dev/null +++ b/src/entities/RenderSystem.h @@ -0,0 +1,15 @@ +#pragma once + +#include +#include "../Renderer.h" +#include "../Camera.h" +#include "../Assets.h" + + +struct RenderSystem : public entityx::System { + RenderSystem(Renderer *renderer, OrtographicCamera *camera, Assets *assets) : _renderer(renderer), _camera(camera), _assets(assets) {} + void update(entityx::EntityManager &es, entityx::EventManager &events, entityx::TimeDelta dt) override; + Renderer *_renderer; + OrtographicCamera *_camera; + Assets *_assets; +}; \ No newline at end of file diff --git a/src/entities/components/Direction.h b/src/entities/components/Direction.h new file mode 100644 index 0000000..c08ee9e --- /dev/null +++ b/src/entities/components/Direction.h @@ -0,0 +1,11 @@ +#ifndef DIRECTION_H +#define DIRECTION_H + +struct Direction +{ + Direction(float x = 0.0f, float y = 0.0f) : x(x), y(y) {} + + float x, y; +}; + +#endif \ No newline at end of file diff --git a/src/entities/components/Renderable.h b/src/entities/components/Renderable.h new file mode 100644 index 0000000..6a2e775 --- /dev/null +++ b/src/entities/components/Renderable.h @@ -0,0 +1,12 @@ +#pragma once + +#include "../../Mesh.h" +#include + +struct Renderable +{ + Renderable(Mesh *mesh, std::string shaderName) : _mesh(mesh), _shaderName(shaderName) {} + + Mesh *_mesh; + std::string _shaderName; +}; \ No newline at end of file diff --git a/src/screens/GameScreen.cpp b/src/screens/GameScreen.cpp index 34e0e79..bfbee17 100644 --- a/src/screens/GameScreen.cpp +++ b/src/screens/GameScreen.cpp @@ -1,5 +1,10 @@ #include "GameScreen.h" -#include +#include "../entities/components/Position.h" +#include "../entities/components/Direction.h" +#include "../entities/components/Renderable.h" +#include "../entities/MovementSystem.h" +#include "../entities/RenderSystem.h" + #include #include @@ -26,9 +31,14 @@ GameScreen::GameScreen(Renderer *renderer, Assets *assets) camera = new OrtographicCamera(); //Create Entities - //entityx::EntityX ex; - //entityx::Entity charakter = ex.entities.create(); - //charakter.assign(); + entityx::Entity charakter = ex.entities.create(); + charakter.assign(); + charakter.assign(1.f,0.f); //apply speed right + charakter.assign(obj, "defaultShader"); + + ex.systems.add(); + ex.systems.add(renderer,camera,assets); + ex.systems.configure(); } GameScreen::~GameScreen() @@ -46,16 +56,18 @@ void GameScreen::pause() { } -void GameScreen::render() +void GameScreen::render(unsigned int delta) { - //Drawing + double dt = ((double) delta) * 0.001; //(10^-3) milli + ex.systems.update(dt); + /*//Drawing Shader defaultShader = assets->getShader("defaultShader"); defaultShader.SetMatrix4("MVP", camera->getCombinedMatrix(), true); //Draw Mesh - renderer->draw(*obj, defaultShader); + renderer->draw(*obj, defaultShader);*/ } -void GameScreen::update() +void GameScreen::update(unsigned int delta) { SDL_Event event; while (SDL_PollEvent(&event) != 0) @@ -66,6 +78,8 @@ void GameScreen::update() command->execute(*camera); } } + double dt = ((double) delta) * 0.001; //(10^-3) milli + ex.systems.update(dt); } void GameScreen::resize() diff --git a/src/screens/GameScreen.h b/src/screens/GameScreen.h index 01de0f7..1d0c32b 100644 --- a/src/screens/GameScreen.h +++ b/src/screens/GameScreen.h @@ -8,6 +8,8 @@ #include "../Camera.h" #include "../input/InputHandler.h" +#include + class GameScreen : public Screen { public: @@ -16,8 +18,8 @@ class GameScreen : public Screen virtual void hide() override; virtual void pause() override; - virtual void render() override; - virtual void update() override; + virtual void render(unsigned int delta) override; + virtual void update(unsigned int delta) override; virtual void resize() override; virtual void resume() override; virtual void show() override; @@ -31,6 +33,9 @@ class GameScreen : public Screen InputHandler *inputHandler; OrtographicCamera *camera; Mesh *obj; + + //Part of the class + entityx::EntityX ex; }; #endif \ No newline at end of file diff --git a/src/screens/Screen.h b/src/screens/Screen.h index 29cd2b2..c945b54 100644 --- a/src/screens/Screen.h +++ b/src/screens/Screen.h @@ -12,8 +12,8 @@ class Screen /* Called when this screen is no longer the current screen for a Game. */ virtual void hide() = 0; virtual void pause() = 0; - virtual void render() = 0; - virtual void update() = 0; + virtual void render(unsigned int delta) = 0; + virtual void update(unsigned int delta) = 0; virtual void resize() = 0; virtual void resume() = 0; virtual void show() = 0;