diff --git a/CMakeLists.txt b/CMakeLists.txt index 2a25b98..1ae164e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.6 FATAL_ERROR) +cmake_minimum_required(VERSION 2.8 FATAL_ERROR) set(CMAKE_LEGACY_CYGWIN32 0) project(APG) @@ -10,23 +10,43 @@ set(VERSION_PATCH 0) set(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") message("Conifguring APG version ${VERSION}.") -file(GLOB_RECURSE SOURCES ${PROJECT_SOURCE_DIR}/src/*.cpp) -file(GLOB_RECURSE HEADERS ${PROJECT_SOURCE_DIR}/include/*.hpp) +file(GLOB_RECURSE APG_SOURCES ${PROJECT_SOURCE_DIR}/src/*.cpp) +file(GLOB_RECURSE APG_HEADERS ${PROJECT_SOURCE_DIR}/include/*.hpp) + +include(FindPkgConfig) +pkg_search_module(SDL2 REQUIRED sdl2) +pkg_search_module(SDL2IMAGE REQUIRED SDL2_image) find_package(OpenGL) find_package(GLUT) -find_package(SDL2) -find_package(SDL2_image) -find_package(tmxparser) set(CMAKE_CXX_COMPILER_ARG1 "-std=c++1y") -set(CMAKE_CXX_FLAGS_BASE "-Wall -Wextra -fPIC") +set(CMAKE_CXX_FLAGS_BASE "-Wall -Wextra -Wno-unused-parameter -fPIC") set(APG_DEBUG_FLAGS "-g3 -O0") set(APG_RELEASE_FLAGS "-g0 -O3") include_directories("include") -add_subdirectory("src") -add_subdirectory("test") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_BASE} ${APG_DEBUG_FLAGS}") +add_library(APG-d ${APG_SOURCES}) + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_BASE} ${APG_RELEASE_FLAGS}") +add_library(APG ${APG_SOURCES}) + +set (SDLRENDERTEST_SOURCES + test/APGSDLRenderTest.cpp) + +set (GLRENDERTEST_SOURCES + test/APGGLRenderTest.cpp) + +set (GLRENDERTESTTEST_FLAGS "") +set (SDLRENDERTEST_FLAGS "-DAPG_TEST_SDL") + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_BASE} ${APG_DEBUG_FLAGS} ${SDLRENDERTEST_FLAGS}") +add_executable(SDLRenderTest EXCLUDE_FROM_ALL ${SDLRENDERTEST_SOURCES}) +target_link_libraries(SDLRenderTest APG-d SDL2 SDL2_image GL GLU GLEW tmxparser) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_BASE} ${APG_DEBUG_FLAGS} ${GLRENDERTEST_FLAGS}") +add_executable(GLRenderTest EXCLUDE_FROM_ALL ${GLRENDERTEST_SOURCES}) +target_link_libraries(GLRenderTest APG-d SDL2 SDL2_image GL GLU GLEW tmxparser) diff --git a/include/APG/AnimatedSprite.hpp b/include/APG/AnimatedSprite.hpp index cb371d1..9b859d9 100644 --- a/include/APG/AnimatedSprite.hpp +++ b/include/APG/AnimatedSprite.hpp @@ -49,17 +49,15 @@ enum class AnimationMode { class AnimatedSprite { private: uint64_t currentFrame = 0; - uint64_t frameCount; + uint64_t frameCount; - float secondsPerFrame = 0.0f; - float animTime = 0.0f; + float secondsPerFrame = 0.0f; + float animTime = 0.0f; int animDir = 1; - AnimationMode animationMode; + AnimationMode animationMode; - std::vector frames; - - std::function modeHandler; + std::vector frames; void handleNormalMode_(); void handleLoopMode_(); diff --git a/include/APG/Texture.hpp b/include/APG/Texture.hpp index 19cb60e..dec3f71 100644 --- a/include/APG/Texture.hpp +++ b/include/APG/Texture.hpp @@ -76,8 +76,8 @@ class Texture : public ErrorBase { void generateTextureID(); void loadTexture(const std::string &fileName); - int32_t width = 0; - int32_t height = 0; + uint32_t width = 0; + uint32_t height = 0; float invWidth = 0.0f; float invHeight = 0.0f; @@ -119,11 +119,11 @@ class Texture : public ErrorBase { attachToShader(uniformName.c_str(), program); } - inline int32_t getWidth() const { + inline uint32_t getWidth() const { return width; } - inline int32_t getHeight() const { + inline uint32_t getHeight() const { return height; } diff --git a/src/AnimatedSprite.cpp b/src/AnimatedSprite.cpp index 10eb3de..1d4b60a 100644 --- a/src/AnimatedSprite.cpp +++ b/src/AnimatedSprite.cpp @@ -36,11 +36,12 @@ APG::AnimatedSprite::AnimatedSprite(float frameDuration, std::initializer_list sprites, AnimationMode animationMode) : - frameCount { sprites.size() }, secondsPerFrame { frameDuration }, animationMode { - animationMode } { + frameCount { sprites.size() }, secondsPerFrame { frameDuration } { for(Sprite *sprite : sprites) { frames.emplace_back(sprite); } + + setAnimationMode(animationMode); } APG::AnimatedSprite::AnimatedSprite(float frameDuration, @@ -56,11 +57,27 @@ APG::AnimatedSprite::AnimatedSprite(float frameDuration, void APG::AnimatedSprite::update(float deltaTime) { animTime += deltaTime; - modeHandler(); + switch(animationMode) { + case AnimationMode::NORMAL: + case AnimationMode::REVERSED: + handleNormalMode_(); + break; + + case AnimationMode::LOOP: + handleLoopMode_(); + break; + + case AnimationMode::LOOP_PINGPONG: + handleLoopPingPongMode_(); + break; + + default: break; + // + } } APG::Sprite *APG::AnimatedSprite::getFrame(uint16_t frameNumber) const { - return frames[currentFrame]; + return frames[frameNumber]; } void APG::AnimatedSprite::setAnimationMode(APG::AnimationMode mode) { @@ -69,25 +86,21 @@ void APG::AnimatedSprite::setAnimationMode(APG::AnimationMode mode) { switch(this->animationMode) { case AnimationMode::NORMAL: currentFrame = 0; - modeHandler = &handleNormalMode_(); break; case AnimationMode::REVERSED: currentFrame = frameCount - 1; - dir = -1; - modeHandler = &handleNormalMode_(); + animDir = -1; break; case AnimationMode::LOOP: currentFrame = 0; - dir = 1; - modeHandler = &handleLoopMode_(); + animDir = 1; break; case AnimationMode::LOOP_PINGPONG: currentFrame = 0; - dir = 1; - modeHandler = &handleLoopPingPongMode_(); + animDir = 1; break; } } diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt deleted file mode 100644 index 3392488..0000000 --- a/src/CMakeLists.txt +++ /dev/null @@ -1,23 +0,0 @@ -set (APG_SOURCES - AnimatedSprite.cpp - ErrorBase.cpp - Game.cpp - Mesh.cpp - SDLGame.cpp - ShaderProgram.cpp - SpriteBatch.cpp - Sprite.cpp - SXXDL.cpp - Texture.cpp - TmxRenderer.cpp - VAO.cpp - VertexAttribute.cpp - VertexAttributeList.cpp - VertexBufferObject.cpp) - -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_BASE} ${APG_DEBUG_FLAGS}") -add_library(APG-d ${APG_SOURCES}) - -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_BASE} ${APG_RELEASE_FLAGS}") -add_library(APG ${APG_SOURCES}) - diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt deleted file mode 100644 index 976720f..0000000 --- a/test/CMakeLists.txt +++ /dev/null @@ -1,16 +0,0 @@ -set (SDLRENDERTEST_SOURCES - APGSDLRenderTest.cpp) - -set (GLRENDERTEST_SOURCES - APGGLRenderTest.cpp) - -set (GLRENDERTESTTEST_FLAGS "") -set (SDLRENDERTEST_FLAGS "-DAPG_TEST_SDL") - -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_BASE} ${APG_DEBUG_FLAGS} ${SDLRENDERTEST_FLAGS}") -add_executable(SDLRenderTest EXCLUDE_FROM_ALL ${SDLRENDERTEST_SOURCES} -target_link_libraries(SDLRenderTest APG-d) - -add_executable(GLRenderTest EXCLUDE_FROM_ALL ${GLRENDERTEST_SOURCES}) -target_link_libraries(GLRenderTest APG-d) -