Compare commits
No commits in common. 'c1baadc75588302423828827a25dcab029171cff' and '7e75cfa015ae299e8c5145d000f8a1ceb92246d6' have entirely different histories.
c1baadc755
...
7e75cfa015
@ -1,6 +0,0 @@
|
|||||||
[submodule "magnum"]
|
|
||||||
path = magnum
|
|
||||||
url = https://github.com/mosra/magnum.git
|
|
||||||
[submodule "corrade"]
|
|
||||||
path = corrade
|
|
||||||
url = https://github.com/mosra/corrade.git
|
|
@ -1,29 +1,29 @@
|
|||||||
//#include <SFML/Graphics/RectangleShape.hpp>
|
#include <SFML/Graphics/RectangleShape.hpp>
|
||||||
//#include "Bird.h"
|
#include "Bird.h"
|
||||||
//
|
|
||||||
//
|
|
||||||
//Bird::Bird(float x, float y, const std::shared_ptr<std::vector<sf::Texture>> texture_list) : position(x, y), texture_list(texture_list), momentum(1.0)
|
Bird::Bird(float x, float y, const std::shared_ptr<std::vector<sf::Texture>> texture_list) : position(x, y), texture_list(texture_list), momentum(1.0)
|
||||||
//{
|
{
|
||||||
// sprite = sf::Sprite(texture_list->at(0));
|
sprite = sf::Sprite(texture_list->at(0));
|
||||||
// sprite.setPosition(position);
|
sprite.setPosition(position);
|
||||||
//}
|
}
|
||||||
//
|
|
||||||
//void Bird::impulse(float p) {
|
void Bird::impulse(float p) {
|
||||||
// momentum = -p;
|
momentum = -p;
|
||||||
//}
|
}
|
||||||
//
|
|
||||||
//void Bird::tick(float step) {
|
void Bird::tick(float step) {
|
||||||
// momentum += gravity * step; // Impart gravity
|
momentum += gravity * step; // Impart gravity
|
||||||
// position.y += momentum;
|
position.y += momentum;
|
||||||
// sprite.setPosition(position);
|
sprite.setPosition(position);
|
||||||
//}
|
}
|
||||||
//
|
|
||||||
//void Bird::draw(sf::RenderTarget &target, sf::RenderStates states) const {
|
void Bird::draw(sf::RenderTarget &target, sf::RenderStates states) const {
|
||||||
// target.draw(sprite, states);
|
target.draw(sprite, states);
|
||||||
//}
|
}
|
||||||
//
|
|
||||||
//bool Bird::collides(sf::FloatRect bounds)
|
bool Bird::collides(sf::FloatRect bounds)
|
||||||
//{
|
{
|
||||||
// return sprite.getGlobalBounds().intersects(bounds);
|
return sprite.getGlobalBounds().intersects(bounds);
|
||||||
//}
|
}
|
||||||
//
|
|
||||||
|
@ -1,30 +1,30 @@
|
|||||||
//#ifndef FLOPPY_BIRD_BIRD_H
|
#ifndef FLOPPY_BIRD_BIRD_H
|
||||||
//#define FLOPPY_BIRD_BIRD_H
|
#define FLOPPY_BIRD_BIRD_H
|
||||||
//
|
|
||||||
//#include <SFML/Graphics/Sprite.hpp>
|
#include <SFML/Graphics/Sprite.hpp>
|
||||||
//#include <SFML/Graphics/Texture.hpp>
|
#include <SFML/Graphics/Texture.hpp>
|
||||||
//#include <SFML/Graphics/RenderTarget.hpp>
|
#include <SFML/Graphics/RenderTarget.hpp>
|
||||||
//#include <memory>
|
#include <memory>
|
||||||
//
|
|
||||||
//const float gravity = 9.8;
|
const float gravity = 9.8;
|
||||||
//
|
|
||||||
//class Bird : public sf::Drawable {
|
class Bird : public sf::Drawable {
|
||||||
//
|
|
||||||
// sf::Sprite sprite;
|
sf::Sprite sprite;
|
||||||
// std::shared_ptr<std::vector<sf::Texture>> texture_list;
|
std::shared_ptr<std::vector<sf::Texture>> texture_list;
|
||||||
//
|
|
||||||
// sf::Vector2f position;
|
sf::Vector2f position;
|
||||||
// float momentum;
|
float momentum;
|
||||||
//
|
|
||||||
//public:
|
public:
|
||||||
// Bird(float x, float y, const std::shared_ptr<std::vector<sf::Texture>> texture_list);
|
Bird(float x, float y, const std::shared_ptr<std::vector<sf::Texture>> texture_list);
|
||||||
//
|
|
||||||
// void impulse(float p);
|
void impulse(float p);
|
||||||
// void tick(float step);
|
void tick(float step);
|
||||||
// bool collides(sf::FloatRect bounds);
|
bool collides(sf::FloatRect bounds);
|
||||||
//
|
|
||||||
// virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const;
|
virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const;
|
||||||
//};
|
};
|
||||||
//
|
|
||||||
//
|
|
||||||
//#endif //FLOPPY_BIRD_BIRD_H
|
#endif //FLOPPY_BIRD_BIRD_H
|
||||||
|
@ -0,0 +1,368 @@
|
|||||||
|
# This script locates the SFML library
|
||||||
|
# ------------------------------------
|
||||||
|
#
|
||||||
|
# Usage
|
||||||
|
# -----
|
||||||
|
#
|
||||||
|
# When you try to locate the SFML libraries, you must specify which modules you want to use (system, window, graphics, network, audio, main).
|
||||||
|
# If none is given, the SFML_LIBRARIES variable will be empty and you'll end up linking to nothing.
|
||||||
|
# example:
|
||||||
|
# find_package(SFML COMPONENTS graphics window system) # find the graphics, window and system modules
|
||||||
|
#
|
||||||
|
# You can enforce a specific version, either MAJOR.MINOR or only MAJOR.
|
||||||
|
# If nothing is specified, the version won't be checked (i.e. any version will be accepted).
|
||||||
|
# example:
|
||||||
|
# find_package(SFML COMPONENTS ...) # no specific version required
|
||||||
|
# find_package(SFML 2 COMPONENTS ...) # any 2.x version
|
||||||
|
# find_package(SFML 2.4 COMPONENTS ...) # version 2.4 or greater
|
||||||
|
#
|
||||||
|
# By default, the dynamic libraries of SFML will be found. To find the static ones instead,
|
||||||
|
# you must set the SFML_STATIC_LIBRARIES variable to TRUE before calling find_package(SFML ...).
|
||||||
|
# Since you have to link yourself all the SFML dependencies when you link it statically, the following
|
||||||
|
# additional variables are defined: SFML_XXX_DEPENDENCIES and SFML_DEPENDENCIES (see their detailed
|
||||||
|
# description below).
|
||||||
|
# In case of static linking, the SFML_STATIC macro will also be defined by this script.
|
||||||
|
# example:
|
||||||
|
# set(SFML_STATIC_LIBRARIES TRUE)
|
||||||
|
# find_package(SFML 2 COMPONENTS network system)
|
||||||
|
#
|
||||||
|
# On Mac OS X if SFML_STATIC_LIBRARIES is not set to TRUE then by default CMake will search for frameworks unless
|
||||||
|
# CMAKE_FIND_FRAMEWORK is set to "NEVER" for example. Please refer to CMake documentation for more details.
|
||||||
|
# Moreover, keep in mind that SFML frameworks are only available as release libraries unlike dylibs which
|
||||||
|
# are available for both release and debug modes.
|
||||||
|
#
|
||||||
|
# If SFML is not installed in a standard path, you can use the SFML_ROOT CMake (or environment) variable
|
||||||
|
# to tell CMake where SFML is.
|
||||||
|
#
|
||||||
|
# Output
|
||||||
|
# ------
|
||||||
|
#
|
||||||
|
# This script defines the following variables:
|
||||||
|
# - For each specified module XXX (system, window, graphics, network, audio, main):
|
||||||
|
# - SFML_XXX_LIBRARY_DEBUG: the name of the debug library of the xxx module (set to SFML_XXX_LIBRARY_RELEASE is no debug version is found)
|
||||||
|
# - SFML_XXX_LIBRARY_RELEASE: the name of the release library of the xxx module (set to SFML_XXX_LIBRARY_DEBUG is no release version is found)
|
||||||
|
# - SFML_XXX_LIBRARY: the name of the library to link to for the xxx module (includes both debug and optimized names if necessary)
|
||||||
|
# - SFML_XXX_FOUND: true if either the debug or release library of the xxx module is found
|
||||||
|
# - SFML_XXX_DEPENDENCIES: the list of libraries the module depends on, in case of static linking
|
||||||
|
# - SFML_LIBRARIES: the list of all libraries corresponding to the required modules
|
||||||
|
# - SFML_FOUND: true if all the required modules are found
|
||||||
|
# - SFML_INCLUDE_DIR: the path where SFML headers are located (the directory containing the SFML/Config.hpp file)
|
||||||
|
# - SFML_DEPENDENCIES: the list of libraries SFML depends on, in case of static linking
|
||||||
|
#
|
||||||
|
# example:
|
||||||
|
# find_package(SFML 2 COMPONENTS system window graphics audio REQUIRED)
|
||||||
|
# include_directories(${SFML_INCLUDE_DIR})
|
||||||
|
# add_executable(myapp ...)
|
||||||
|
# target_link_libraries(myapp ${SFML_LIBRARIES})
|
||||||
|
|
||||||
|
# define the SFML_STATIC macro if static build was chosen
|
||||||
|
if(SFML_STATIC_LIBRARIES)
|
||||||
|
add_definitions(-DSFML_STATIC)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# define the list of search paths for headers and libraries
|
||||||
|
set(FIND_SFML_PATHS
|
||||||
|
${SFML_ROOT}
|
||||||
|
$ENV{SFML_ROOT}
|
||||||
|
~/Library/Frameworks
|
||||||
|
/Library/Frameworks
|
||||||
|
/usr/local
|
||||||
|
/usr
|
||||||
|
/sw
|
||||||
|
/opt/local
|
||||||
|
/opt/csw
|
||||||
|
/opt)
|
||||||
|
|
||||||
|
# find the SFML include directory
|
||||||
|
find_path(SFML_INCLUDE_DIR SFML/Config.hpp
|
||||||
|
PATH_SUFFIXES include
|
||||||
|
PATHS ${FIND_SFML_PATHS})
|
||||||
|
|
||||||
|
# check the version number
|
||||||
|
set(SFML_VERSION_OK TRUE)
|
||||||
|
if(SFML_FIND_VERSION AND SFML_INCLUDE_DIR)
|
||||||
|
# extract the major and minor version numbers from SFML/Config.hpp
|
||||||
|
# we have to handle framework a little bit differently:
|
||||||
|
if("${SFML_INCLUDE_DIR}" MATCHES "SFML.framework")
|
||||||
|
set(SFML_CONFIG_HPP_INPUT "${SFML_INCLUDE_DIR}/Headers/Config.hpp")
|
||||||
|
else()
|
||||||
|
set(SFML_CONFIG_HPP_INPUT "${SFML_INCLUDE_DIR}/SFML/Config.hpp")
|
||||||
|
endif()
|
||||||
|
FILE(READ "${SFML_CONFIG_HPP_INPUT}" SFML_CONFIG_HPP_CONTENTS)
|
||||||
|
STRING(REGEX REPLACE ".*#define SFML_VERSION_MAJOR ([0-9]+).*" "\\1" SFML_VERSION_MAJOR "${SFML_CONFIG_HPP_CONTENTS}")
|
||||||
|
STRING(REGEX REPLACE ".*#define SFML_VERSION_MINOR ([0-9]+).*" "\\1" SFML_VERSION_MINOR "${SFML_CONFIG_HPP_CONTENTS}")
|
||||||
|
STRING(REGEX REPLACE ".*#define SFML_VERSION_PATCH ([0-9]+).*" "\\1" SFML_VERSION_PATCH "${SFML_CONFIG_HPP_CONTENTS}")
|
||||||
|
if (NOT "${SFML_VERSION_PATCH}" MATCHES "^[0-9]+$")
|
||||||
|
set(SFML_VERSION_PATCH 0)
|
||||||
|
endif()
|
||||||
|
math(EXPR SFML_REQUESTED_VERSION "${SFML_FIND_VERSION_MAJOR} * 10000 + ${SFML_FIND_VERSION_MINOR} * 100 + ${SFML_FIND_VERSION_PATCH}")
|
||||||
|
|
||||||
|
# if we could extract them, compare with the requested version number
|
||||||
|
if (SFML_VERSION_MAJOR)
|
||||||
|
# transform version numbers to an integer
|
||||||
|
math(EXPR SFML_VERSION "${SFML_VERSION_MAJOR} * 10000 + ${SFML_VERSION_MINOR} * 100 + ${SFML_VERSION_PATCH}")
|
||||||
|
|
||||||
|
# compare them
|
||||||
|
if(SFML_VERSION LESS SFML_REQUESTED_VERSION)
|
||||||
|
set(SFML_VERSION_OK FALSE)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
# SFML version is < 2.0
|
||||||
|
if (SFML_REQUESTED_VERSION GREATER 10900)
|
||||||
|
set(SFML_VERSION_OK FALSE)
|
||||||
|
set(SFML_VERSION_MAJOR 1)
|
||||||
|
set(SFML_VERSION_MINOR x)
|
||||||
|
set(SFML_VERSION_PATCH x)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# find the requested modules
|
||||||
|
set(SFML_FOUND TRUE) # will be set to false if one of the required modules is not found
|
||||||
|
foreach(FIND_SFML_COMPONENT ${SFML_FIND_COMPONENTS})
|
||||||
|
string(TOLOWER ${FIND_SFML_COMPONENT} FIND_SFML_COMPONENT_LOWER)
|
||||||
|
string(TOUPPER ${FIND_SFML_COMPONENT} FIND_SFML_COMPONENT_UPPER)
|
||||||
|
set(FIND_SFML_COMPONENT_NAME sfml-${FIND_SFML_COMPONENT_LOWER})
|
||||||
|
|
||||||
|
# no suffix for sfml-main, it is always a static library
|
||||||
|
if(FIND_SFML_COMPONENT_LOWER STREQUAL "main")
|
||||||
|
# release library
|
||||||
|
find_library(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE
|
||||||
|
NAMES ${FIND_SFML_COMPONENT_NAME}
|
||||||
|
PATH_SUFFIXES lib64 lib
|
||||||
|
PATHS ${FIND_SFML_PATHS})
|
||||||
|
|
||||||
|
# debug library
|
||||||
|
find_library(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG
|
||||||
|
NAMES ${FIND_SFML_COMPONENT_NAME}-d
|
||||||
|
PATH_SUFFIXES lib64 lib
|
||||||
|
PATHS ${FIND_SFML_PATHS})
|
||||||
|
else()
|
||||||
|
# static release library
|
||||||
|
find_library(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_STATIC_RELEASE
|
||||||
|
NAMES ${FIND_SFML_COMPONENT_NAME}-s
|
||||||
|
PATH_SUFFIXES lib64 lib
|
||||||
|
PATHS ${FIND_SFML_PATHS})
|
||||||
|
|
||||||
|
# static debug library
|
||||||
|
find_library(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_STATIC_DEBUG
|
||||||
|
NAMES ${FIND_SFML_COMPONENT_NAME}-s-d
|
||||||
|
PATH_SUFFIXES lib64 lib
|
||||||
|
PATHS ${FIND_SFML_PATHS})
|
||||||
|
|
||||||
|
# dynamic release library
|
||||||
|
find_library(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DYNAMIC_RELEASE
|
||||||
|
NAMES ${FIND_SFML_COMPONENT_NAME}
|
||||||
|
PATH_SUFFIXES lib64 lib
|
||||||
|
PATHS ${FIND_SFML_PATHS})
|
||||||
|
|
||||||
|
# dynamic debug library
|
||||||
|
find_library(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DYNAMIC_DEBUG
|
||||||
|
NAMES ${FIND_SFML_COMPONENT_NAME}-d
|
||||||
|
PATH_SUFFIXES lib64 lib
|
||||||
|
PATHS ${FIND_SFML_PATHS})
|
||||||
|
|
||||||
|
# choose the entries that fit the requested link type
|
||||||
|
if(SFML_STATIC_LIBRARIES)
|
||||||
|
if(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_STATIC_RELEASE)
|
||||||
|
set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_STATIC_RELEASE})
|
||||||
|
endif()
|
||||||
|
if(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_STATIC_DEBUG)
|
||||||
|
set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_STATIC_DEBUG})
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
if(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DYNAMIC_RELEASE)
|
||||||
|
set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DYNAMIC_RELEASE})
|
||||||
|
endif()
|
||||||
|
if(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DYNAMIC_DEBUG)
|
||||||
|
set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DYNAMIC_DEBUG})
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG OR SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE)
|
||||||
|
# library found
|
||||||
|
set(SFML_${FIND_SFML_COMPONENT_UPPER}_FOUND TRUE)
|
||||||
|
|
||||||
|
# if both are found, set SFML_XXX_LIBRARY to contain both
|
||||||
|
if (SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG AND SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE)
|
||||||
|
set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY debug ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG}
|
||||||
|
optimized ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# if only one debug/release variant is found, set the other to be equal to the found one
|
||||||
|
if (SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG AND NOT SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE)
|
||||||
|
# debug and not release
|
||||||
|
set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG})
|
||||||
|
set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG})
|
||||||
|
endif()
|
||||||
|
if (SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE AND NOT SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG)
|
||||||
|
# release and not debug
|
||||||
|
set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE})
|
||||||
|
set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY ${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE})
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
# library not found
|
||||||
|
set(SFML_FOUND FALSE)
|
||||||
|
set(SFML_${FIND_SFML_COMPONENT_UPPER}_FOUND FALSE)
|
||||||
|
set(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY "")
|
||||||
|
set(FIND_SFML_MISSING "${FIND_SFML_MISSING} SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# mark as advanced
|
||||||
|
MARK_AS_ADVANCED(SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY
|
||||||
|
SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_RELEASE
|
||||||
|
SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DEBUG
|
||||||
|
SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_STATIC_RELEASE
|
||||||
|
SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_STATIC_DEBUG
|
||||||
|
SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DYNAMIC_RELEASE
|
||||||
|
SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY_DYNAMIC_DEBUG)
|
||||||
|
|
||||||
|
# add to the global list of libraries
|
||||||
|
set(SFML_LIBRARIES ${SFML_LIBRARIES} "${SFML_${FIND_SFML_COMPONENT_UPPER}_LIBRARY}")
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
# in case of static linking, we must also define the list of all the dependencies of SFML libraries
|
||||||
|
if(SFML_STATIC_LIBRARIES)
|
||||||
|
|
||||||
|
# detect the OS
|
||||||
|
if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
|
||||||
|
set(FIND_SFML_OS_WINDOWS 1)
|
||||||
|
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
||||||
|
set(FIND_SFML_OS_LINUX 1)
|
||||||
|
elseif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
|
||||||
|
set(FIND_SFML_OS_FREEBSD 1)
|
||||||
|
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||||
|
set(FIND_SFML_OS_MACOSX 1)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# start with an empty list
|
||||||
|
set(SFML_DEPENDENCIES)
|
||||||
|
set(FIND_SFML_DEPENDENCIES_NOTFOUND)
|
||||||
|
|
||||||
|
# macro that searches for a 3rd-party library
|
||||||
|
macro(find_sfml_dependency output friendlyname)
|
||||||
|
# No lookup in environment variables (PATH on Windows), as they may contain wrong library versions
|
||||||
|
find_library(${output} NAMES ${ARGN} PATHS ${FIND_SFML_PATHS} PATH_SUFFIXES lib NO_SYSTEM_ENVIRONMENT_PATH)
|
||||||
|
if(${${output}} STREQUAL "${output}-NOTFOUND")
|
||||||
|
unset(output)
|
||||||
|
set(FIND_SFML_DEPENDENCIES_NOTFOUND "${FIND_SFML_DEPENDENCIES_NOTFOUND} ${friendlyname}")
|
||||||
|
endif()
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
# sfml-system
|
||||||
|
list(FIND SFML_FIND_COMPONENTS "system" FIND_SFML_SYSTEM_COMPONENT)
|
||||||
|
if(NOT ${FIND_SFML_SYSTEM_COMPONENT} EQUAL -1)
|
||||||
|
|
||||||
|
# update the list -- these are only system libraries, no need to find them
|
||||||
|
if(FIND_SFML_OS_LINUX OR FIND_SFML_OS_FREEBSD OR FIND_SFML_OS_MACOSX)
|
||||||
|
set(SFML_SYSTEM_DEPENDENCIES "pthread")
|
||||||
|
endif()
|
||||||
|
if(FIND_SFML_OS_LINUX)
|
||||||
|
set(SFML_SYSTEM_DEPENDENCIES ${SFML_SYSTEM_DEPENDENCIES} "rt")
|
||||||
|
endif()
|
||||||
|
if(FIND_SFML_OS_WINDOWS)
|
||||||
|
set(SFML_SYSTEM_DEPENDENCIES "winmm")
|
||||||
|
endif()
|
||||||
|
set(SFML_DEPENDENCIES ${SFML_SYSTEM_DEPENDENCIES} ${SFML_DEPENDENCIES})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# sfml-network
|
||||||
|
list(FIND SFML_FIND_COMPONENTS "network" FIND_SFML_NETWORK_COMPONENT)
|
||||||
|
if(NOT ${FIND_SFML_NETWORK_COMPONENT} EQUAL -1)
|
||||||
|
|
||||||
|
# update the list -- these are only system libraries, no need to find them
|
||||||
|
if(FIND_SFML_OS_WINDOWS)
|
||||||
|
set(SFML_NETWORK_DEPENDENCIES "ws2_32")
|
||||||
|
endif()
|
||||||
|
set(SFML_DEPENDENCIES ${SFML_NETWORK_DEPENDENCIES} ${SFML_DEPENDENCIES})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# sfml-window
|
||||||
|
list(FIND SFML_FIND_COMPONENTS "window" FIND_SFML_WINDOW_COMPONENT)
|
||||||
|
if(NOT ${FIND_SFML_WINDOW_COMPONENT} EQUAL -1)
|
||||||
|
|
||||||
|
# find libraries
|
||||||
|
if(FIND_SFML_OS_LINUX OR FIND_SFML_OS_FREEBSD)
|
||||||
|
find_sfml_dependency(X11_LIBRARY "X11" X11)
|
||||||
|
find_sfml_dependency(LIBXCB_LIBRARIES "XCB" xcb libxcb)
|
||||||
|
find_sfml_dependency(X11_XCB_LIBRARY "X11-xcb" X11-xcb libX11-xcb)
|
||||||
|
find_sfml_dependency(XCB_RANDR_LIBRARY "xcb-randr" xcb-randr libxcb-randr)
|
||||||
|
find_sfml_dependency(XCB_IMAGE_LIBRARY "xcb-image" xcb-image libxcb-image)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(FIND_SFML_OS_LINUX)
|
||||||
|
find_sfml_dependency(UDEV_LIBRARIES "UDev" udev libudev)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# update the list
|
||||||
|
if(FIND_SFML_OS_WINDOWS)
|
||||||
|
set(SFML_WINDOW_DEPENDENCIES ${SFML_WINDOW_DEPENDENCIES} "opengl32" "winmm" "gdi32")
|
||||||
|
elseif(FIND_SFML_OS_LINUX)
|
||||||
|
set(SFML_WINDOW_DEPENDENCIES ${SFML_WINDOW_DEPENDENCIES} "GL" ${X11_LIBRARY} ${LIBXCB_LIBRARIES} ${X11_XCB_LIBRARY} ${XCB_RANDR_LIBRARY} ${XCB_IMAGE_LIBRARY} ${UDEV_LIBRARIES})
|
||||||
|
elseif(FIND_SFML_OS_FREEBSD)
|
||||||
|
set(SFML_WINDOW_DEPENDENCIES ${SFML_WINDOW_DEPENDENCIES} "GL" ${X11_LIBRARY} ${LIBXCB_LIBRARIES} ${X11_XCB_LIBRARY} ${XCB_RANDR_LIBRARY} ${XCB_IMAGE_LIBRARY} "usbhid")
|
||||||
|
elseif(FIND_SFML_OS_MACOSX)
|
||||||
|
set(SFML_WINDOW_DEPENDENCIES ${SFML_WINDOW_DEPENDENCIES} "-framework OpenGL -framework Foundation -framework AppKit -framework IOKit -framework Carbon")
|
||||||
|
endif()
|
||||||
|
set(SFML_DEPENDENCIES ${SFML_WINDOW_DEPENDENCIES} ${SFML_DEPENDENCIES})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# sfml-graphics
|
||||||
|
list(FIND SFML_FIND_COMPONENTS "graphics" FIND_SFML_GRAPHICS_COMPONENT)
|
||||||
|
if(NOT ${FIND_SFML_GRAPHICS_COMPONENT} EQUAL -1)
|
||||||
|
|
||||||
|
# find libraries
|
||||||
|
find_sfml_dependency(FREETYPE_LIBRARY "FreeType" freetype)
|
||||||
|
find_sfml_dependency(JPEG_LIBRARY "libjpeg" jpeg)
|
||||||
|
|
||||||
|
# update the list
|
||||||
|
set(SFML_GRAPHICS_DEPENDENCIES ${FREETYPE_LIBRARY} ${JPEG_LIBRARY})
|
||||||
|
set(SFML_DEPENDENCIES ${SFML_GRAPHICS_DEPENDENCIES} ${SFML_DEPENDENCIES})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# sfml-audio
|
||||||
|
list(FIND SFML_FIND_COMPONENTS "audio" FIND_SFML_AUDIO_COMPONENT)
|
||||||
|
if(NOT ${FIND_SFML_AUDIO_COMPONENT} EQUAL -1)
|
||||||
|
|
||||||
|
# find libraries
|
||||||
|
find_sfml_dependency(OPENAL_LIBRARY "OpenAL" openal openal32)
|
||||||
|
find_sfml_dependency(OGG_LIBRARY "Ogg" ogg)
|
||||||
|
find_sfml_dependency(VORBIS_LIBRARY "Vorbis" vorbis)
|
||||||
|
find_sfml_dependency(VORBISFILE_LIBRARY "VorbisFile" vorbisfile)
|
||||||
|
find_sfml_dependency(VORBISENC_LIBRARY "VorbisEnc" vorbisenc)
|
||||||
|
find_sfml_dependency(FLAC_LIBRARY "FLAC" FLAC)
|
||||||
|
|
||||||
|
# update the list
|
||||||
|
set(SFML_AUDIO_DEPENDENCIES ${OPENAL_LIBRARY} ${FLAC_LIBRARY} ${VORBISENC_LIBRARY} ${VORBISFILE_LIBRARY} ${VORBIS_LIBRARY} ${OGG_LIBRARY})
|
||||||
|
set(SFML_DEPENDENCIES ${SFML_DEPENDENCIES} ${SFML_AUDIO_DEPENDENCIES})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# handle errors
|
||||||
|
if(NOT SFML_VERSION_OK)
|
||||||
|
# SFML version not ok
|
||||||
|
set(FIND_SFML_ERROR "SFML found but version too low (requested: ${SFML_FIND_VERSION}, found: ${SFML_VERSION_MAJOR}.${SFML_VERSION_MINOR}.${SFML_VERSION_PATCH})")
|
||||||
|
set(SFML_FOUND FALSE)
|
||||||
|
elseif(SFML_STATIC_LIBRARIES AND FIND_SFML_DEPENDENCIES_NOTFOUND)
|
||||||
|
set(FIND_SFML_ERROR "SFML found but some of its dependencies are missing (${FIND_SFML_DEPENDENCIES_NOTFOUND})")
|
||||||
|
set(SFML_FOUND FALSE)
|
||||||
|
elseif(NOT SFML_FOUND)
|
||||||
|
# include directory or library not found
|
||||||
|
set(FIND_SFML_ERROR "Could NOT find SFML (missing: ${FIND_SFML_MISSING})")
|
||||||
|
endif()
|
||||||
|
if (NOT SFML_FOUND)
|
||||||
|
if(SFML_FIND_REQUIRED)
|
||||||
|
# fatal error
|
||||||
|
message(FATAL_ERROR ${FIND_SFML_ERROR})
|
||||||
|
elseif(NOT SFML_FIND_QUIETLY)
|
||||||
|
# error but continue
|
||||||
|
message("${FIND_SFML_ERROR}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# handle success
|
||||||
|
if(SFML_FOUND AND NOT SFML_FIND_QUIETLY)
|
||||||
|
message(STATUS "Found SFML ${SFML_VERSION_MAJOR}.${SFML_VERSION_MINOR}.${SFML_VERSION_PATCH} in ${SFML_INCLUDE_DIR}")
|
||||||
|
endif()
|
@ -1,38 +1,38 @@
|
|||||||
//#include "Pipe.h"
|
#include "Pipe.h"
|
||||||
//
|
|
||||||
//#include <utility>
|
#include <utility>
|
||||||
//
|
|
||||||
//Pipe::Pipe(float x, float y,
|
Pipe::Pipe(float x, float y,
|
||||||
// std::shared_ptr<sf::Texture> pipe_top_texture_s,
|
std::shared_ptr<sf::Texture> pipe_top_texture_s,
|
||||||
// std::shared_ptr<sf::Texture> pipe_shaft_texture_s,
|
std::shared_ptr<sf::Texture> pipe_shaft_texture_s,
|
||||||
// std::shared_ptr<sf::Shader> pipe_shaft_shader_s) :
|
std::shared_ptr<sf::Shader> pipe_shaft_shader_s) :
|
||||||
// position(x, y),
|
position(x, y),
|
||||||
// pipe_top_texture(std::move(pipe_top_texture_s)),
|
pipe_top_texture(std::move(pipe_top_texture_s)),
|
||||||
// pipe_shaft_texture(std::move(pipe_shaft_texture_s)),
|
pipe_shaft_texture(std::move(pipe_shaft_texture_s)),
|
||||||
// pipe_shaft_shader(std::move(pipe_shaft_shader_s)),
|
pipe_shaft_shader(std::move(pipe_shaft_shader_s)),
|
||||||
// momentum(1.0)
|
momentum(1.0)
|
||||||
//{
|
{
|
||||||
// pipe_top = sf::Sprite(*pipe_top_texture);
|
pipe_top = sf::Sprite(*pipe_top_texture);
|
||||||
// pipe_shaft = sf::Sprite(*pipe_shaft_texture);
|
pipe_shaft = sf::Sprite(*pipe_shaft_texture);
|
||||||
//
|
|
||||||
// pipe_top.setPosition(position);
|
pipe_top.setPosition(position);
|
||||||
//}
|
}
|
||||||
//
|
|
||||||
//void Pipe::tick(float step, float speed) {
|
void Pipe::tick(float step, float speed) {
|
||||||
// position.x += step * speed;
|
position.x += step * speed;
|
||||||
// pipe_top.setPosition(position);
|
pipe_top.setPosition(position);
|
||||||
//
|
|
||||||
// auto pos = pipe_top.getPosition();
|
auto pos = pipe_top.getPosition();
|
||||||
// pos.y += 25;
|
pos.y += 25;
|
||||||
// pipe_shaft.setPosition(pos);
|
pipe_shaft.setPosition(pos);
|
||||||
//}
|
}
|
||||||
//
|
|
||||||
//void Pipe::draw(sf::RenderTarget &target, sf::RenderStates states) const{
|
void Pipe::draw(sf::RenderTarget &target, sf::RenderStates states) const{
|
||||||
// states.shader = &*pipe_shaft_shader;
|
states.shader = &*pipe_shaft_shader;
|
||||||
// target.draw(pipe_top, states);
|
target.draw(pipe_top, states);
|
||||||
// target.draw(pipe_shaft, states);
|
target.draw(pipe_shaft, states);
|
||||||
//}
|
}
|
||||||
//
|
|
||||||
//bool Pipe::collides(sf::FloatRect bounds) {
|
bool Pipe::collides(sf::FloatRect bounds) {
|
||||||
// return false;
|
return false;
|
||||||
//}
|
}
|
||||||
|
@ -1,33 +1,33 @@
|
|||||||
//#ifndef FLOPPY_BIRD_PIPE_H
|
#ifndef FLOPPY_BIRD_PIPE_H
|
||||||
//#define FLOPPY_BIRD_PIPE_H
|
#define FLOPPY_BIRD_PIPE_H
|
||||||
//
|
|
||||||
//
|
|
||||||
//#include <SFML/Graphics/Sprite.hpp>
|
#include <SFML/Graphics/Sprite.hpp>
|
||||||
//#include <SFML/Graphics/Texture.hpp>
|
#include <SFML/Graphics/Texture.hpp>
|
||||||
//#include <SFML/Graphics/RenderTarget.hpp>
|
#include <SFML/Graphics/RenderTarget.hpp>
|
||||||
//#include <memory>
|
#include <memory>
|
||||||
//
|
|
||||||
//class Pipe : public sf::Drawable {
|
class Pipe : public sf::Drawable {
|
||||||
//
|
|
||||||
// sf::Sprite pipe_top;
|
sf::Sprite pipe_top;
|
||||||
// sf::Sprite pipe_shaft;
|
sf::Sprite pipe_shaft;
|
||||||
//
|
|
||||||
// std::shared_ptr<sf::Texture> pipe_top_texture;
|
std::shared_ptr<sf::Texture> pipe_top_texture;
|
||||||
// std::shared_ptr<sf::Texture> pipe_shaft_texture;
|
std::shared_ptr<sf::Texture> pipe_shaft_texture;
|
||||||
//
|
|
||||||
// std::shared_ptr<sf::Shader> pipe_shaft_shader;
|
std::shared_ptr<sf::Shader> pipe_shaft_shader;
|
||||||
//
|
|
||||||
// sf::Vector2f position;
|
sf::Vector2f position;
|
||||||
// float momentum;
|
float momentum;
|
||||||
//
|
|
||||||
//public:
|
public:
|
||||||
// Pipe(float x, float y, std::shared_ptr<sf::Texture> pipe_top_texture, std::shared_ptr<sf::Texture> pipe_shaft_texture, std::shared_ptr<sf::Shader> shader);
|
Pipe(float x, float y, std::shared_ptr<sf::Texture> pipe_top_texture, std::shared_ptr<sf::Texture> pipe_shaft_texture, std::shared_ptr<sf::Shader> shader);
|
||||||
//
|
|
||||||
// void tick(float step, float speed);
|
void tick(float step, float speed);
|
||||||
// bool collides(sf::FloatRect bounds);
|
bool collides(sf::FloatRect bounds);
|
||||||
//
|
|
||||||
// virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const;
|
virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const;
|
||||||
//};
|
};
|
||||||
//
|
|
||||||
//
|
|
||||||
//#endif //FLOPPY_BIRD_PIPE_H
|
#endif //FLOPPY_BIRD_PIPE_H
|
||||||
|
@ -1 +0,0 @@
|
|||||||
Subproject commit 8effd9c49dd2a1c0fdc9dc814cc2aefa0867421c
|
|
@ -1 +0,0 @@
|
|||||||
Subproject commit 632bf93a4e8adf03caa39830050c5abd5d27d109
|
|
@ -1,206 +1,179 @@
|
|||||||
|
#include <SFML/Window.hpp>
|
||||||
|
#include <SFML/Graphics.hpp>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <random>
|
#include <random>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <list>
|
#include <list>
|
||||||
#include "Bird.h"
|
#include "Bird.h"
|
||||||
#include "Pipe.h"
|
#include "Pipe.h"
|
||||||
#include "Magnum/GL/Renderer.h"
|
|
||||||
#include "Magnum/Math/Color.h"
|
|
||||||
|
|
||||||
#ifdef linux
|
#ifdef linux
|
||||||
#elif defined _WIN32
|
#elif defined _WIN32
|
||||||
#elif defined TARGET_OS_MAC
|
#elif defined TARGET_OS_MAC
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <Magnum/GL/DefaultFramebuffer.h>
|
const float g = 7.8;
|
||||||
#include <Magnum/Platform/Sdl2Application.h>
|
const int WINDOW_X = 600;
|
||||||
|
const int WINDOW_Y = 800;
|
||||||
|
|
||||||
|
float elap_time() {
|
||||||
|
static std::chrono::time_point<std::chrono::system_clock> start;
|
||||||
|
static bool started = false;
|
||||||
|
|
||||||
|
if (!started) {
|
||||||
|
start = std::chrono::system_clock::now();
|
||||||
|
started = true;
|
||||||
|
}
|
||||||
|
|
||||||
using namespace Magnum;
|
std::chrono::time_point<std::chrono::system_clock> now = std::chrono::system_clock::now();
|
||||||
|
std::chrono::duration<double> elapsed_time = now - start;
|
||||||
|
return static_cast<float>(elapsed_time.count());
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
std::mt19937 rng(time(NULL));
|
||||||
|
std::uniform_int_distribution<int> rgen(100, 400);
|
||||||
|
|
||||||
|
int pipe_dist = 200;
|
||||||
|
|
||||||
class MyApplication: public Platform::Application {
|
sf::RenderWindow window(sf::VideoMode(WINDOW_X, WINDOW_Y), "flappy");
|
||||||
public:
|
|
||||||
explicit MyApplication(const Arguments& arguments);
|
|
||||||
|
|
||||||
private:
|
std::shared_ptr<std::vector<sf::Texture>> texture_list = std::make_shared<std::vector<sf::Texture>>();
|
||||||
void drawEvent() override;
|
for (int i = 0; i < 4; i++) {
|
||||||
};
|
sf::Texture t;
|
||||||
|
t.loadFromFile("../Assets/bird.png", sf::IntRect(0, i*12, 34, 24));
|
||||||
|
texture_list->push_back(t);
|
||||||
|
}
|
||||||
|
|
||||||
MyApplication::MyApplication(const Arguments& arguments): Platform::Application{arguments} {
|
// Init flappy
|
||||||
/* TODO: Add your initialization code here */
|
Bird bird(WINDOW_X/2, WINDOW_Y/2, texture_list);
|
||||||
|
|
||||||
|
std::list<Pipe> pipes;
|
||||||
|
|
||||||
|
// Init world
|
||||||
|
sf::Texture background = sf::Texture(); background.loadFromFile("../Assets/sky.png");
|
||||||
|
sf::Sprite background_sprite = sf::Sprite(background); background_sprite.setPosition(0, 0); background_sprite.setScale(8, 8);
|
||||||
|
sf::Texture land = sf::Texture(); land.loadFromFile("../Assets/land.png");
|
||||||
|
sf::Sprite land_sprite = sf::Sprite(land); land_sprite.setPosition(0, WINDOW_Y - WINDOW_Y / 10); land_sprite.setScale(3, 2);
|
||||||
|
sf::Texture pipe_up, pipe_down = sf::Texture(); pipe_down.loadFromFile("../Assets/pipe-down.png"); pipe_up.loadFromFile("../Assets/pipe-up.png");
|
||||||
|
sf::Sprite pipe_up_sprite = sf::Sprite(pipe_up); sf::Sprite pipe_down_sprite = sf::Sprite(pipe_down);
|
||||||
|
sf::Texture pipe_shaft = sf::Texture(); pipe_shaft.loadFromFile("../Assets/pipe.png");
|
||||||
|
sf::Sprite pipe_shaft_sprite = sf::Sprite(pipe_shaft);
|
||||||
|
|
||||||
|
double momentum = 0;
|
||||||
|
float step_size = 0.005f;
|
||||||
|
double frame_time = 0.0, elapsed_time = 0.0, delta_time = 0.0, accumulator_time = 0.0, current_time = 0.0;
|
||||||
|
float speed = 250;
|
||||||
|
|
||||||
|
std::shared_ptr<sf::Shader> shader = std::make_shared<sf::Shader>();
|
||||||
|
if (!shader->loadFromFile("/home/mrh/source/floppy-bird/Assets/shaders/pipe_shader.vert", "/home/mrh/source/floppy-bird/Assets/shaders/pipe_shader.frag"))
|
||||||
|
{
|
||||||
|
std::cout << "asodijfoqijwef" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyApplication::drawEvent() {
|
while (window.isOpen())
|
||||||
|
{
|
||||||
|
sf::Event event; // Handle input
|
||||||
|
while (window.pollEvent(event)) {
|
||||||
|
if (event.type == sf::Event::Closed)
|
||||||
|
window.close();
|
||||||
|
if (event.type == sf::Event::MouseWheelScrolled)
|
||||||
|
if (event.mouseWheelScroll.wheel == sf::Mouse::VerticalWheel)
|
||||||
|
speed += event.mouseWheelScroll.delta * 20;
|
||||||
|
if(event.type == sf::Event::KeyPressed)
|
||||||
|
if (event.key.code == sf::Keyboard::Space)
|
||||||
|
bird.impulse(3.0);
|
||||||
|
if (event.type == sf::Event::MouseButtonPressed) {
|
||||||
|
if (event.mouseButton.button == sf::Mouse::Right)
|
||||||
|
pipe_dist -= 10;
|
||||||
|
if (event.mouseButton.button == sf::Mouse::Middle)
|
||||||
|
pipe_dist += 10;
|
||||||
|
if (event.mouseButton.button == sf::Mouse::Left)
|
||||||
|
bird.impulse(3.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Color4 r;
|
elapsed_time = elap_time(); // Handle time
|
||||||
GL::Renderer::setClearColor(Color4::red());
|
delta_time = elapsed_time - current_time;
|
||||||
GL::defaultFramebuffer.clear(GL::FramebufferClear::Color);
|
current_time = elapsed_time;
|
||||||
|
if (delta_time > 0.02f) {
|
||||||
|
delta_time = 0.02f;
|
||||||
|
}
|
||||||
|
accumulator_time += delta_time;
|
||||||
|
|
||||||
|
while ((accumulator_time - step_size) >= step_size) { // While the frame has sim time, update
|
||||||
|
accumulator_time -= step_size;
|
||||||
|
|
||||||
|
if (pipe_down_sprite.getPosition().x < -pipe_down_sprite.getGlobalBounds().width) {
|
||||||
|
pipe_down_sprite.setPosition(WINDOW_X, rgen(rng));
|
||||||
|
pipe_up_sprite.setPosition(WINDOW_X, pipe_down_sprite.getPosition().y + pipe_dist);
|
||||||
|
|
||||||
swapBuffers();
|
pipes.emplace_back(100, 100, std::make_shared<sf::Texture>(pipe_up), std::make_shared<sf::Texture>(pipe_shaft), shader);
|
||||||
|
std::cout << "added one" << std::endl;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pipe_up_sprite.setPosition(pipe_up_sprite.getPosition().x - step_size * speed, pipe_up_sprite.getPosition().y);
|
||||||
|
pipe_down_sprite.setPosition(pipe_down_sprite.getPosition().x - step_size * speed, pipe_down_sprite.getPosition().y);
|
||||||
|
}
|
||||||
|
if (background_sprite.getPosition().x + background_sprite.getGlobalBounds().width < WINDOW_X) {
|
||||||
|
background_sprite.setPosition(0, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
background_sprite.setPosition(background_sprite.getPosition().x - step_size * (speed - 100), background_sprite.getPosition().y);
|
||||||
|
if (land_sprite.getPosition().x + 10 + land_sprite.getGlobalBounds().width < WINDOW_X)
|
||||||
|
land_sprite.setPosition(14, land_sprite.getPosition().y);
|
||||||
|
else
|
||||||
|
land_sprite.setPosition(land_sprite.getPosition().x - step_size * speed, land_sprite.getPosition().y);
|
||||||
|
|
||||||
|
// Check collisions
|
||||||
|
if (bird.collides(pipe_up_sprite.getGlobalBounds()) ||
|
||||||
|
bird.collides(pipe_down_sprite.getGlobalBounds()) ||
|
||||||
|
bird.collides(land_sprite.getGlobalBounds())
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//std::cout << "dead!!!!!!!!" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
MAGNUM_APPLICATION_MAIN(MyApplication)
|
bird.tick(step_size);
|
||||||
|
for (auto pipe = pipes.begin(); pipe != pipes.end(); ++pipe)
|
||||||
|
{
|
||||||
|
pipe->tick(step_size, speed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const float g = 7.8;
|
window.draw(background_sprite, &*shader); // Render
|
||||||
const int WINDOW_X = 600;
|
window.draw(land_sprite);
|
||||||
const int WINDOW_Y = 800;
|
window.draw(bird);
|
||||||
|
window.draw(pipe_up_sprite);
|
||||||
|
window.draw(pipe_down_sprite);
|
||||||
|
|
||||||
float elap_time() {
|
for (auto ptr = pipes.begin(); ptr != pipes.end(); ++ptr)
|
||||||
static std::chrono::time_point<std::chrono::system_clock> start;
|
{
|
||||||
static bool started = false;
|
window.draw(*ptr);
|
||||||
|
}
|
||||||
|
|
||||||
if (!started) {
|
pipe_shaft_sprite.setPosition(pipe_up_sprite.getPosition()); // Render the bottom pipe
|
||||||
start = std::chrono::system_clock::now();
|
int y_pos = pipe_up_sprite.getPosition().y + pipe_up_sprite.getGlobalBounds().height;
|
||||||
started = true;
|
while (y_pos < WINDOW_Y) {
|
||||||
|
pipe_shaft_sprite.setPosition(pipe_shaft_sprite.getPosition().x, y_pos);
|
||||||
|
y_pos++;
|
||||||
|
window.draw(pipe_shaft_sprite);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::chrono::time_point<std::chrono::system_clock> now = std::chrono::system_clock::now();
|
y_pos = pipe_down_sprite.getPosition().y; // Render the top pipe
|
||||||
std::chrono::duration<double> elapsed_time = now - start;
|
while (y_pos > 0) {
|
||||||
return static_cast<float>(elapsed_time.count());
|
pipe_shaft_sprite.setPosition(pipe_shaft_sprite.getPosition().x, y_pos);
|
||||||
|
y_pos--;
|
||||||
|
window.draw(pipe_shaft_sprite);
|
||||||
|
}
|
||||||
|
|
||||||
|
window.display();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
//
|
|
||||||
//int main()
|
|
||||||
//{
|
|
||||||
// std::mt19937 rng(time(NULL));
|
|
||||||
// std::uniform_int_distribution<int> rgen(100, 400);
|
|
||||||
//
|
|
||||||
// int pipe_dist = 200;
|
|
||||||
|
|
||||||
//sf::RenderWindow window(sf::VideoMode(WINDOW_X, WINDOW_Y), "flappy");
|
|
||||||
|
|
||||||
// std::shared_ptr<std::vector<sf::Texture>> texture_list = std::make_shared<std::vector<sf::Texture>>();
|
|
||||||
// for (int i = 0; i < 4; i++) {
|
|
||||||
// sf::Texture t;
|
|
||||||
// t.loadFromFile("../Assets/bird.png", sf::IntRect(0, i*12, 34, 24));
|
|
||||||
// texture_list->push_back(t);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// // Init flappy
|
|
||||||
// Bird bird(WINDOW_X/2, WINDOW_Y/2, texture_list);
|
|
||||||
//
|
|
||||||
// std::list<Pipe> pipes;
|
|
||||||
//
|
|
||||||
// // Init world
|
|
||||||
// sf::Texture background = sf::Texture(); background.loadFromFile("../Assets/sky.png");
|
|
||||||
// sf::Sprite background_sprite = sf::Sprite(background); background_sprite.setPosition(0, 0); background_sprite.setScale(8, 8);
|
|
||||||
// sf::Texture land = sf::Texture(); land.loadFromFile("../Assets/land.png");
|
|
||||||
// sf::Sprite land_sprite = sf::Sprite(land); land_sprite.setPosition(0, WINDOW_Y - WINDOW_Y / 10); land_sprite.setScale(3, 2);
|
|
||||||
// sf::Texture pipe_up, pipe_down = sf::Texture(); pipe_down.loadFromFile("../Assets/pipe-down.png"); pipe_up.loadFromFile("../Assets/pipe-up.png");
|
|
||||||
// sf::Sprite pipe_up_sprite = sf::Sprite(pipe_up); sf::Sprite pipe_down_sprite = sf::Sprite(pipe_down);
|
|
||||||
// sf::Texture pipe_shaft = sf::Texture(); pipe_shaft.loadFromFile("../Assets/pipe.png");
|
|
||||||
// sf::Sprite pipe_shaft_sprite = sf::Sprite(pipe_shaft);
|
|
||||||
//
|
|
||||||
// double momentum = 0;
|
|
||||||
// float step_size = 0.005f;
|
|
||||||
// double frame_time = 0.0, elapsed_time = 0.0, delta_time = 0.0, accumulator_time = 0.0, current_time = 0.0;
|
|
||||||
// float speed = 250;
|
|
||||||
//
|
|
||||||
// std::shared_ptr<sf::Shader> shader = std::make_shared<sf::Shader>();
|
|
||||||
// if (!shader->loadFromFile("/home/mrh/source/floppy-bird/Assets/shaders/pipe_shader.vert", "/home/mrh/source/floppy-bird/Assets/shaders/pipe_shader.frag"))
|
|
||||||
// {
|
|
||||||
// std::cout << "asodijfoqijwef" << std::endl;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// while (window.isOpen())
|
|
||||||
// {
|
|
||||||
// sf::Event event; // Handle input
|
|
||||||
// while (window.pollEvent(event)) {
|
|
||||||
// if (event.type == sf::Event::Closed)
|
|
||||||
// window.close();
|
|
||||||
// if (event.type == sf::Event::MouseWheelScrolled)
|
|
||||||
// if (event.mouseWheelScroll.wheel == sf::Mouse::VerticalWheel)
|
|
||||||
// speed += event.mouseWheelScroll.delta * 20;
|
|
||||||
// if(event.type == sf::Event::KeyPressed)
|
|
||||||
// if (event.key.code == sf::Keyboard::Space)
|
|
||||||
// bird.impulse(3.0);
|
|
||||||
// if (event.type == sf::Event::MouseButtonPressed) {
|
|
||||||
// if (event.mouseButton.button == sf::Mouse::Right)
|
|
||||||
// pipe_dist -= 10;
|
|
||||||
// if (event.mouseButton.button == sf::Mouse::Middle)
|
|
||||||
// pipe_dist += 10;
|
|
||||||
// if (event.mouseButton.button == sf::Mouse::Left)
|
|
||||||
// bird.impulse(3.0);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// elapsed_time = elap_time(); // Handle time
|
|
||||||
// delta_time = elapsed_time - current_time;
|
|
||||||
// current_time = elapsed_time;
|
|
||||||
// if (delta_time > 0.02f) {
|
|
||||||
// delta_time = 0.02f;
|
|
||||||
// }
|
|
||||||
// accumulator_time += delta_time;
|
|
||||||
//
|
|
||||||
// while ((accumulator_time - step_size) >= step_size) { // While the frame has sim time, update
|
|
||||||
// accumulator_time -= step_size;
|
|
||||||
//
|
|
||||||
// if (pipe_down_sprite.getPosition().x < -pipe_down_sprite.getGlobalBounds().width) {
|
|
||||||
// pipe_down_sprite.setPosition(WINDOW_X, rgen(rng));
|
|
||||||
// pipe_up_sprite.setPosition(WINDOW_X, pipe_down_sprite.getPosition().y + pipe_dist);
|
|
||||||
//
|
|
||||||
// pipes.emplace_back(100, 100, std::make_shared<sf::Texture>(pipe_up), std::make_shared<sf::Texture>(pipe_shaft), shader);
|
|
||||||
// std::cout << "added one" << std::endl;
|
|
||||||
// }
|
|
||||||
// else {
|
|
||||||
// pipe_up_sprite.setPosition(pipe_up_sprite.getPosition().x - step_size * speed, pipe_up_sprite.getPosition().y);
|
|
||||||
// pipe_down_sprite.setPosition(pipe_down_sprite.getPosition().x - step_size * speed, pipe_down_sprite.getPosition().y);
|
|
||||||
// }
|
|
||||||
// if (background_sprite.getPosition().x + background_sprite.getGlobalBounds().width < WINDOW_X) {
|
|
||||||
// background_sprite.setPosition(0, 0);
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// background_sprite.setPosition(background_sprite.getPosition().x - step_size * (speed - 100), background_sprite.getPosition().y);
|
|
||||||
// if (land_sprite.getPosition().x + 10 + land_sprite.getGlobalBounds().width < WINDOW_X)
|
|
||||||
// land_sprite.setPosition(14, land_sprite.getPosition().y);
|
|
||||||
// else
|
|
||||||
// land_sprite.setPosition(land_sprite.getPosition().x - step_size * speed, land_sprite.getPosition().y);
|
|
||||||
//
|
|
||||||
// // Check collisions
|
|
||||||
// if (bird.collides(pipe_up_sprite.getGlobalBounds()) ||
|
|
||||||
// bird.collides(pipe_down_sprite.getGlobalBounds()) ||
|
|
||||||
// bird.collides(land_sprite.getGlobalBounds())
|
|
||||||
// )
|
|
||||||
// {
|
|
||||||
// //std::cout << "dead!!!!!!!!" << std::endl;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// bird.tick(step_size);
|
|
||||||
// for (auto pipe = pipes.begin(); pipe != pipes.end(); ++pipe)
|
|
||||||
// {
|
|
||||||
// pipe->tick(step_size, speed);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// window.draw(background_sprite, &*shader); // Render
|
|
||||||
// window.draw(land_sprite);
|
|
||||||
// window.draw(bird);
|
|
||||||
// window.draw(pipe_up_sprite);
|
|
||||||
// window.draw(pipe_down_sprite);
|
|
||||||
//
|
|
||||||
// for (auto ptr = pipes.begin(); ptr != pipes.end(); ++ptr)
|
|
||||||
// {
|
|
||||||
// window.draw(*ptr);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// pipe_shaft_sprite.setPosition(pipe_up_sprite.getPosition()); // Render the bottom pipe
|
|
||||||
// int y_pos = pipe_up_sprite.getPosition().y + pipe_up_sprite.getGlobalBounds().height;
|
|
||||||
// while (y_pos < WINDOW_Y) {
|
|
||||||
// pipe_shaft_sprite.setPosition(pipe_shaft_sprite.getPosition().x, y_pos);
|
|
||||||
// y_pos++;
|
|
||||||
// window.draw(pipe_shaft_sprite);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// y_pos = pipe_down_sprite.getPosition().y; // Render the top pipe
|
|
||||||
// while (y_pos > 0) {
|
|
||||||
// pipe_shaft_sprite.setPosition(pipe_shaft_sprite.getPosition().x, y_pos);
|
|
||||||
// y_pos--;
|
|
||||||
// window.draw(pipe_shaft_sprite);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// window.display();
|
|
||||||
// }
|
|
||||||
// return 0;
|
|
||||||
//
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
@ -1,598 +0,0 @@
|
|||||||
#.rst:
|
|
||||||
# Find Corrade
|
|
||||||
# ------------
|
|
||||||
#
|
|
||||||
# Finds the Corrade library. Basic usage::
|
|
||||||
#
|
|
||||||
# find_package(Corrade REQUIRED)
|
|
||||||
#
|
|
||||||
# This module tries to find the base Corrade library and then defines the
|
|
||||||
# following:
|
|
||||||
#
|
|
||||||
# Corrade_FOUND - Whether the base library was found
|
|
||||||
# CORRADE_LIB_SUFFIX_MODULE - Path to CorradeLibSuffix.cmake module
|
|
||||||
# CORRADE_INCLUDE_INSTALL_PREFIX - Prefix where to put platform-independent
|
|
||||||
# include and other files, defaults to ``.``. If a relative path is used,
|
|
||||||
# it's relative to :variable:`CMAKE_INSTALL_PREFIX`.
|
|
||||||
#
|
|
||||||
# This command will try to find only the base library, not the optional
|
|
||||||
# components, which are:
|
|
||||||
#
|
|
||||||
# Containers - Containers library
|
|
||||||
# PluginManager - PluginManager library
|
|
||||||
# TestSuite - TestSuite library
|
|
||||||
# Utility - Utility library
|
|
||||||
# rc - corrade-rc executable
|
|
||||||
#
|
|
||||||
# Example usage with specifying additional components is::
|
|
||||||
#
|
|
||||||
# find_package(Corrade REQUIRED Utility TestSuite)
|
|
||||||
#
|
|
||||||
# For each component is then defined:
|
|
||||||
#
|
|
||||||
# Corrade_*_FOUND - Whether the component was found
|
|
||||||
# Corrade::* - Component imported target
|
|
||||||
#
|
|
||||||
# The package is found if either debug or release version of each library is
|
|
||||||
# found. If both debug and release libraries are found, proper version is
|
|
||||||
# chosen based on actual build configuration of the project (i.e. Debug build
|
|
||||||
# is linked to debug libraries, Release build to release libraries).
|
|
||||||
#
|
|
||||||
# Corrade conditionally defines ``CORRADE_IS_DEBUG_BUILD`` preprocessor
|
|
||||||
# variable in case build configuration is ``Debug`` (not Corrade itself, but
|
|
||||||
# build configuration of the project using it). Useful e.g. for selecting
|
|
||||||
# proper plugin directory.
|
|
||||||
#
|
|
||||||
# Corrade defines the following custom target properties:
|
|
||||||
#
|
|
||||||
# CORRADE_CXX_STANDARD - C++ standard to require when compiling given
|
|
||||||
# target. Does nothing if :variable:`CMAKE_CXX_FLAGS` already contains
|
|
||||||
# particular standard setting flag or if given target contains
|
|
||||||
# :prop_tgt:`CMAKE_CXX_STANDARD` property. Allowed value is 11, 14 or 17.
|
|
||||||
# INTERFACE_CORRADE_CXX_STANDARD - C++ standard to require when using given
|
|
||||||
# target. Does nothing if :variable:`CMAKE_CXX_FLAGS` already contains
|
|
||||||
# particular standard setting flag or if given target contains
|
|
||||||
# :prop_tgt:`CMAKE_CXX_STANDARD` property. Allowed value is 11, 14 or 17.
|
|
||||||
# CORRADE_USE_PEDANTIC_FLAGS - Enable additional compiler/linker flags.
|
|
||||||
# Boolean.
|
|
||||||
#
|
|
||||||
# These properties are inherited from directory properties, meaning that if you
|
|
||||||
# set them on directories, they get implicitly set on all targets in given
|
|
||||||
# directory (with a possibility to do target-specific overrides). All Corrade
|
|
||||||
# libraries have the :prop_tgt:`INTERFACE_CORRADE_CXX_STANDARD` property set to
|
|
||||||
# 11, meaning that you will always have at least C++11 enabled once you link to
|
|
||||||
# any Corrade library.
|
|
||||||
#
|
|
||||||
# Features of found Corrade library are exposed in these variables:
|
|
||||||
#
|
|
||||||
# CORRADE_MSVC2019_COMPATIBILITY - Defined if compiled with compatibility
|
|
||||||
# mode for MSVC 2019
|
|
||||||
# CORRADE_MSVC2017_COMPATIBILITY - Defined if compiled with compatibility
|
|
||||||
# mode for MSVC 2017
|
|
||||||
# CORRADE_MSVC2015_COMPATIBILITY - Defined if compiled with compatibility
|
|
||||||
# mode for MSVC 2015
|
|
||||||
# CORRADE_BUILD_DEPRECATED - Defined if compiled with deprecated APIs
|
|
||||||
# included
|
|
||||||
# CORRADE_BUILD_STATIC - Defined if compiled as static libraries.
|
|
||||||
# Default are shared libraries.
|
|
||||||
# CORRADE_BUILD_STATIC_UNIQUE_GLOBALS - Defined if static libraries keep their
|
|
||||||
# globals unique even across different shared libraries. Enabled by default
|
|
||||||
# for static builds.
|
|
||||||
# CORRADE_BUILD_MULTITHREADED - Defined if compiled in a way that makes it
|
|
||||||
# possible to safely use certain Corrade features simultaenously in multiple
|
|
||||||
# threads
|
|
||||||
# CORRADE_TARGET_UNIX - Defined if compiled for some Unix flavor
|
|
||||||
# (Linux, BSD, macOS)
|
|
||||||
# CORRADE_TARGET_APPLE - Defined if compiled for Apple platforms
|
|
||||||
# CORRADE_TARGET_IOS - Defined if compiled for iOS (device or
|
|
||||||
# simulator)
|
|
||||||
# CORRADE_TARGET_IOS_SIMULATOR - Defined if compiled for iOS Simulator
|
|
||||||
# CORRADE_TARGET_WINDOWS - Defined if compiled for Windows
|
|
||||||
# CORRADE_TARGET_WINDOWS_RT - Defined if compiled for Windows RT
|
|
||||||
# CORRADE_TARGET_EMSCRIPTEN - Defined if compiled for Emscripten
|
|
||||||
# CORRADE_TARGET_ANDROID - Defined if compiled for Android
|
|
||||||
# CORRADE_TARGET_GCC - Defined if compiling with GCC or GCC-
|
|
||||||
# compatible Clang
|
|
||||||
# CORRADE_TARGET_CLANG - Defined if compiling with Clang or any of its
|
|
||||||
# variants
|
|
||||||
# CORRADE_TARGET_APPLE_CLANG - Defined if compiling with Apple's Clang
|
|
||||||
# CORRADE_TARGET_CLANG_CL - Defined if compiling with Clang-CL (Clang
|
|
||||||
# with a MSVC frontend)
|
|
||||||
# CORRADE_TARGET_MSVC - Defined if compiling with MSVC or Clang with
|
|
||||||
# a MSVC frontend
|
|
||||||
# CORRADE_TARGET_MINGW - Defined if compiling under MinGW
|
|
||||||
# CORRADE_PLUGINMANAGER_NO_DYNAMIC_PLUGIN_SUPPORT - Defined if PluginManager
|
|
||||||
# doesn't support dynamic plugin loading due to platform limitations
|
|
||||||
# CORRADE_TESTSUITE_TARGET_XCTEST - Defined if TestSuite is targetting Xcode
|
|
||||||
# XCTest
|
|
||||||
# CORRADE_UTILITY_USE_ANSI_COLORS - Defined if ANSI escape sequences are used
|
|
||||||
# for colored output with Utility::Debug on Windows
|
|
||||||
#
|
|
||||||
# Additionally these variables are defined for internal usage:
|
|
||||||
#
|
|
||||||
# CORRADE_INCLUDE_DIR - Root include dir
|
|
||||||
# CORRADE_*_LIBRARY_DEBUG - Debug version of given library, if found
|
|
||||||
# CORRADE_*_LIBRARY_RELEASE - Release version of given library, if found
|
|
||||||
# CORRADE_*_EXECUTABLE - Location of given executable, if found
|
|
||||||
# CORRADE_USE_MODULE - Path to UseCorrade.cmake module (included
|
|
||||||
# automatically)
|
|
||||||
# CORRADE_TESTSUITE_XCTEST_RUNNER - Path to XCTestRunner.mm.in file
|
|
||||||
# CORRADE_TESTSUITE_ADB_RUNNER - Path to AdbRunner.sh file
|
|
||||||
# CORRADE_PEDANTIC_COMPILER_OPTIONS - List of pedantic compiler options used
|
|
||||||
# for targets with :prop_tgt:`CORRADE_USE_PEDANTIC_FLAGS` enabled
|
|
||||||
# CORRADE_PEDANTIC_COMPILER_DEFINITIONS - List of pedantic compiler
|
|
||||||
# definitions used for targets with :prop_tgt:`CORRADE_USE_PEDANTIC_FLAGS`
|
|
||||||
# enabled
|
|
||||||
#
|
|
||||||
# Workflows without :prop_tgt:`IMPORTED` targets are deprecated and the
|
|
||||||
# following variables are included just for backwards compatibility and only if
|
|
||||||
# :variable:`CORRADE_BUILD_DEPRECATED` is enabled:
|
|
||||||
#
|
|
||||||
# CORRADE_CXX_FLAGS - Pedantic compile flags. Use
|
|
||||||
# :prop_tgt:`CORRADE_USE_PEDANTIC_FLAGS` property or
|
|
||||||
# :variable:`CORRADE_PEDANTIC_COMPILER_DEFINITIONS` /
|
|
||||||
# :variable:`CORRADE_PEDANTIC_COMPILER_OPTIONS` list variables instead.
|
|
||||||
#
|
|
||||||
# Corrade provides these macros and functions:
|
|
||||||
#
|
|
||||||
# .. command:: corrade_add_test
|
|
||||||
#
|
|
||||||
# Add unit test using Corrade's TestSuite::
|
|
||||||
#
|
|
||||||
# corrade_add_test(<test name>
|
|
||||||
# <sources>...
|
|
||||||
# [LIBRARIES <libraries>...]
|
|
||||||
# [FILES <files>...]
|
|
||||||
# [ARGUMENTS <arguments>...])
|
|
||||||
#
|
|
||||||
# Test name is also executable name. You can use ``LIBRARIES`` to specify
|
|
||||||
# libraries to link with instead of using :command:`target_link_libraries()`.
|
|
||||||
# The ``Corrade::TestSuite`` target is linked automatically to each test. Note
|
|
||||||
# that the :command:`enable_testing()` function must be called explicitly.
|
|
||||||
# Arguments passed after ``ARGUMENTS`` will be appended to the test
|
|
||||||
# command line. ``ARGUMENTS`` are supported everywhere except when
|
|
||||||
# ``CORRADE_TESTSUITE_TARGET_XCTEST`` is enabled.
|
|
||||||
#
|
|
||||||
# You can list files needed by the test in the ``FILES`` section. If given
|
|
||||||
# filename is relative, it is treated relatively to `CMAKE_CURRENT_SOURCE_DIR`.
|
|
||||||
# The files are added to the :prop_test:`REQUIRED_FILES` target property. On
|
|
||||||
# Emscripten they are bundled to the executable and available in the virtual
|
|
||||||
# filesystem root. On Android they are copied along the executable to the
|
|
||||||
# target. In case of Emscripten and Android, if the file is absolute or
|
|
||||||
# contains ``..``, only the leaf name is used. Alternatively you can have a
|
|
||||||
# filename formatted as ``<input>@<output>``, in which case the ``<input>`` is
|
|
||||||
# treated as local filesystem location and ``<output>`` as remote/virtual
|
|
||||||
# filesystem location. The remote location can't be absolute or contain ``..``
|
|
||||||
# / ``@`` characters.
|
|
||||||
#
|
|
||||||
# Unless :variable:`CORRADE_TESTSUITE_TARGET_XCTEST` is set, test cases on iOS
|
|
||||||
# targets are created as bundles with bundle identifier set to CMake project
|
|
||||||
# name by default. Use the cache variable :variable:`CORRADE_TESTSUITE_BUNDLE_IDENTIFIER_PREFIX`
|
|
||||||
# to change it to something else.
|
|
||||||
#
|
|
||||||
# .. command:: corrade_add_resource
|
|
||||||
#
|
|
||||||
# Compile data resources into application binary::
|
|
||||||
#
|
|
||||||
# corrade_add_resource(<name> <resources.conf>)
|
|
||||||
#
|
|
||||||
# Depends on ``Corrade::rc``, which is part of Corrade utilities. This command
|
|
||||||
# generates resource data using given configuration file in current build
|
|
||||||
# directory. Argument name is name under which the resources can be explicitly
|
|
||||||
# loaded. Variable ``<name>`` contains compiled resource filename, which is
|
|
||||||
# then used for compiling library / executable. On CMake >= 3.1 the
|
|
||||||
# `resources.conf` file can contain UTF-8-encoded filenames. Example usage::
|
|
||||||
#
|
|
||||||
# corrade_add_resource(app_resources resources.conf)
|
|
||||||
# add_executable(app source1 source2 ... ${app_resources})
|
|
||||||
#
|
|
||||||
# .. command:: corrade_add_plugin
|
|
||||||
#
|
|
||||||
# Add dynamic plugin::
|
|
||||||
#
|
|
||||||
# corrade_add_plugin(<plugin name>
|
|
||||||
# "<debug binary install dir>;<debug library install dir>"
|
|
||||||
# "<release binary install dir>;<release library install dir>"
|
|
||||||
# <metadata file>
|
|
||||||
# <sources>...)
|
|
||||||
#
|
|
||||||
# The macro adds a preprocessor directive ``CORRADE_DYNAMIC_PLUGIN`` when
|
|
||||||
# compiling ``<sources>``. Additional libraries can be linked in via
|
|
||||||
# :command:`target_link_libraries(plugin_name ...) <target_link_libraries>`.
|
|
||||||
# On DLL platforms, the plugin DLLs and metadata files are put into
|
|
||||||
# ``<debug binary install dir>`` / ``<release binary install dir>`` and the
|
|
||||||
# ``*.lib`` files into ``<debug library install dir>`` /
|
|
||||||
# ``<release library install dir>``. On non-DLL platforms everything is put
|
|
||||||
# into ``<debug library install dir>`` / ``<release library install dir>``.
|
|
||||||
#
|
|
||||||
# If the plugin interface disables plugin metadata files, the
|
|
||||||
# ``<metadata file>`` can be set to ``""``, in which case no metadata file is
|
|
||||||
# copied anywhere. Otherwise the metadata file is copied and renamed to
|
|
||||||
# ``<plugin name>``, retaining its original extension.
|
|
||||||
#
|
|
||||||
# corrade_add_plugin(<plugin name>
|
|
||||||
# <debug install dir>
|
|
||||||
# <release install dir>
|
|
||||||
# <metadata file>
|
|
||||||
# <sources>...)
|
|
||||||
#
|
|
||||||
# Unline the above version this puts everything into ``<debug install dir>`` on
|
|
||||||
# both DLL and non-DLL platforms. If ``<debug install dir>`` is set to
|
|
||||||
# :variable:`CMAKE_CURRENT_BINARY_DIR` (e.g. for testing purposes), the files
|
|
||||||
# are copied directly, without the need to perform install step. Note that the
|
|
||||||
# files are actually put into configuration-based subdirectory, i.e.
|
|
||||||
# ``${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}``. See documentation of
|
|
||||||
# :variable:`CMAKE_CFG_INTDIR` variable for more information.
|
|
||||||
#
|
|
||||||
# .. command:: corrade_add_static_plugin
|
|
||||||
#
|
|
||||||
# Add static plugin::
|
|
||||||
#
|
|
||||||
# corrade_add_static_plugin(<plugin name>
|
|
||||||
# "<binary install dir>;<library install dir>"
|
|
||||||
# <metadata file>
|
|
||||||
# <sources>...)
|
|
||||||
#
|
|
||||||
# The macro adds a preprocessor directive ``CORRADE_STATIC_PLUGIN`` when
|
|
||||||
# compiling ``<sources>``. Additional libraries can be linked in via
|
|
||||||
# :command:`target_link_libraries(plugin_name ...) <target_link_libraries>`.
|
|
||||||
# The ``<binary install dir>`` is ignored and included just for compatibility
|
|
||||||
# with the :command:`corrade_add_plugin` command, everything is installed into
|
|
||||||
# ``<library install dir>``. Note that plugins built in debug configuration
|
|
||||||
# (e.g. with :variable:`CMAKE_BUILD_TYPE` set to ``Debug``) have ``"-d"``
|
|
||||||
# suffix to make it possible to have both debug and release plugins installed
|
|
||||||
# alongside each other.
|
|
||||||
#
|
|
||||||
# If the plugin interface disables plugin metadata files, the
|
|
||||||
# ``<metadata file>`` can be set to ``""``, in which case no metadata file is
|
|
||||||
# used. Otherwise the metadata file is bundled and renamed to
|
|
||||||
# ``<plugin name>``, retaining its original extension.
|
|
||||||
#
|
|
||||||
# corrade_add_static_plugin(<plugin name>
|
|
||||||
# <install dir>
|
|
||||||
# <metadata file>
|
|
||||||
# <sources>...)
|
|
||||||
#
|
|
||||||
# Equivalent to the above with ``<library install dir>`` set to ``<install dir>``.
|
|
||||||
# If ``<install dir>`` is set to :variable:`CMAKE_CURRENT_BINARY_DIR` (e.g. for
|
|
||||||
# testing purposes), no installation rules are added.
|
|
||||||
#
|
|
||||||
# .. command:: corrade_find_dlls_for_libs
|
|
||||||
#
|
|
||||||
# Find corresponding DLLs for library files::
|
|
||||||
#
|
|
||||||
# corrade_find_dlls_for_libs(<output variable> <libs>...)
|
|
||||||
#
|
|
||||||
# Available only on Windows, for all ``*.lib`` files tries to find
|
|
||||||
# corresponding DLL file. Useful for bundling dependencies for e.g. WinRT
|
|
||||||
# packages.
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
|
||||||
# This file is part of Corrade.
|
|
||||||
#
|
|
||||||
# Copyright © 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016,
|
|
||||||
# 2017, 2018, 2019, 2020 Vladimír Vondruš <mosra@centrum.cz>
|
|
||||||
#
|
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
# copy of this software and associated documentation files (the "Software"),
|
|
||||||
# to deal in the Software without restriction, including without limitation
|
|
||||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
# and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
# Software is furnished to do so, subject to the following conditions:
|
|
||||||
#
|
|
||||||
# The above copyright notice and this permission notice shall be included
|
|
||||||
# in all copies or substantial portions of the Software.
|
|
||||||
#
|
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
||||||
# DEALINGS IN THE SOFTWARE.
|
|
||||||
#
|
|
||||||
|
|
||||||
# Root include dir
|
|
||||||
find_path(CORRADE_INCLUDE_DIR
|
|
||||||
NAMES Corrade/Corrade.h)
|
|
||||||
mark_as_advanced(CORRADE_INCLUDE_DIR)
|
|
||||||
|
|
||||||
# Configuration file
|
|
||||||
find_file(_CORRADE_CONFIGURE_FILE configure.h
|
|
||||||
HINTS ${CORRADE_INCLUDE_DIR}/Corrade/)
|
|
||||||
mark_as_advanced(_CORRADE_CONFIGURE_FILE)
|
|
||||||
|
|
||||||
# We need to open configure.h file from CORRADE_INCLUDE_DIR before we check for
|
|
||||||
# the components. Bail out with proper error message if it wasn't found. The
|
|
||||||
# complete check with all components is further below.
|
|
||||||
if(NOT CORRADE_INCLUDE_DIR)
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
find_package_handle_standard_args(Corrade
|
|
||||||
REQUIRED_VARS CORRADE_INCLUDE_DIR _CORRADE_CONFIGURE_FILE)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Read flags from configuration
|
|
||||||
file(READ ${_CORRADE_CONFIGURE_FILE} _corradeConfigure)
|
|
||||||
string(REGEX REPLACE ";" "\\\\;" _corradeConfigure "${_corradeConfigure}")
|
|
||||||
string(REGEX REPLACE "\n" ";" _corradeConfigure "${_corradeConfigure}")
|
|
||||||
set(_corradeFlags
|
|
||||||
MSVC2015_COMPATIBILITY
|
|
||||||
MSVC2017_COMPATIBILITY
|
|
||||||
MSVC2019_COMPATIBILITY
|
|
||||||
BUILD_DEPRECATED
|
|
||||||
BUILD_STATIC
|
|
||||||
BUILD_STATIC_UNIQUE_GLOBALS
|
|
||||||
BUILD_MULTITHREADED
|
|
||||||
TARGET_UNIX
|
|
||||||
TARGET_APPLE
|
|
||||||
TARGET_IOS
|
|
||||||
TARGET_IOS_SIMULATOR
|
|
||||||
TARGET_WINDOWS
|
|
||||||
TARGET_WINDOWS_RT
|
|
||||||
TARGET_EMSCRIPTEN
|
|
||||||
TARGET_ANDROID
|
|
||||||
# TARGET_X86 etc and TARGET_LIBCXX are not exposed to CMake as the meaning
|
|
||||||
# is unclear on platforms with multi-arch binaries or when mixing different
|
|
||||||
# STL implementations. TARGET_GCC etc are figured out via UseCorrade.cmake,
|
|
||||||
# as the compiler can be different when compiling the lib & when using it.
|
|
||||||
PLUGINMANAGER_NO_DYNAMIC_PLUGIN_SUPPORT
|
|
||||||
TESTSUITE_TARGET_XCTEST
|
|
||||||
UTILITY_USE_ANSI_COLORS)
|
|
||||||
foreach(_corradeFlag ${_corradeFlags})
|
|
||||||
list(FIND _corradeConfigure "#define CORRADE_${_corradeFlag}" _corrade_${_corradeFlag})
|
|
||||||
if(NOT _corrade_${_corradeFlag} EQUAL -1)
|
|
||||||
set(CORRADE_${_corradeFlag} 1)
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
# CMake module dir
|
|
||||||
find_path(_CORRADE_MODULE_DIR
|
|
||||||
NAMES UseCorrade.cmake CorradeLibSuffix.cmake
|
|
||||||
PATH_SUFFIXES share/cmake/Corrade)
|
|
||||||
mark_as_advanced(_CORRADE_MODULE_DIR)
|
|
||||||
|
|
||||||
set(CORRADE_USE_MODULE ${_CORRADE_MODULE_DIR}/UseCorrade.cmake)
|
|
||||||
set(CORRADE_LIB_SUFFIX_MODULE ${_CORRADE_MODULE_DIR}/CorradeLibSuffix.cmake)
|
|
||||||
|
|
||||||
# Ensure that all inter-component dependencies are specified as well
|
|
||||||
foreach(_component ${Corrade_FIND_COMPONENTS})
|
|
||||||
string(TOUPPER ${_component} _COMPONENT)
|
|
||||||
|
|
||||||
if(_component STREQUAL Containers)
|
|
||||||
set(_CORRADE_${_COMPONENT}_DEPENDENCIES Utility)
|
|
||||||
elseif(_component STREQUAL Interconnect)
|
|
||||||
set(_CORRADE_${_COMPONENT}_DEPENDENCIES Utility)
|
|
||||||
elseif(_component STREQUAL PluginManager)
|
|
||||||
set(_CORRADE_${_COMPONENT}_DEPENDENCIES Containers Utility rc)
|
|
||||||
elseif(_component STREQUAL TestSuite)
|
|
||||||
set(_CORRADE_${_COMPONENT}_DEPENDENCIES Utility Main) # see below
|
|
||||||
elseif(_component STREQUAL Utility)
|
|
||||||
set(_CORRADE_${_COMPONENT}_DEPENDENCIES Containers rc)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Mark the dependencies as required if the component is also required
|
|
||||||
if(Corrade_FIND_REQUIRED_${_component})
|
|
||||||
foreach(_dependency ${_CORRADE_${_COMPONENT}_DEPENDENCIES})
|
|
||||||
set(Corrade_FIND_REQUIRED_${_dependency} TRUE)
|
|
||||||
endforeach()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
list(APPEND _CORRADE_ADDITIONAL_COMPONENTS ${_CORRADE_${_COMPONENT}_DEPENDENCIES})
|
|
||||||
|
|
||||||
# Main is linked only in corrade_add_test(), not to everything that depends
|
|
||||||
# on TestSuite, so remove it from the list again once we filled the above
|
|
||||||
# variables
|
|
||||||
if(_component STREQUAL TestSuite)
|
|
||||||
set(_CORRADE_${_COMPONENT}_DEPENDENCIES Utility)
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
# Join the lists, remove duplicate components
|
|
||||||
if(_CORRADE_ADDITIONAL_COMPONENTS)
|
|
||||||
list(INSERT Corrade_FIND_COMPONENTS 0 ${_CORRADE_ADDITIONAL_COMPONENTS})
|
|
||||||
endif()
|
|
||||||
if(Corrade_FIND_COMPONENTS)
|
|
||||||
list(REMOVE_DUPLICATES Corrade_FIND_COMPONENTS)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Component distinction
|
|
||||||
set(_CORRADE_LIBRARY_COMPONENTS "^(Containers|Interconnect|Main|PluginManager|TestSuite|Utility)$")
|
|
||||||
if(CORRADE_TARGET_WINDOWS)
|
|
||||||
# CorradeMain is a real library only on windows, a dummy target elsewhere
|
|
||||||
set(_CORRADE_HEADER_ONLY_COMPONENTS "^(Containers)$")
|
|
||||||
else()
|
|
||||||
set(_CORRADE_HEADER_ONLY_COMPONENTS "^(Containers|Main)$")
|
|
||||||
endif()
|
|
||||||
set(_CORRADE_EXECUTABLE_COMPONENTS "^(rc)$")
|
|
||||||
|
|
||||||
# Find all components
|
|
||||||
foreach(_component ${Corrade_FIND_COMPONENTS})
|
|
||||||
string(TOUPPER ${_component} _COMPONENT)
|
|
||||||
|
|
||||||
# Create imported target in case the library is found. If the project is
|
|
||||||
# added as subproject to CMake, the target already exists and all the
|
|
||||||
# required setup is already done from the build tree.
|
|
||||||
if(TARGET Corrade::${_component})
|
|
||||||
set(Corrade_${_component}_FOUND TRUE)
|
|
||||||
else()
|
|
||||||
# Library (and not header-only) components
|
|
||||||
if(_component MATCHES ${_CORRADE_LIBRARY_COMPONENTS} AND NOT _component MATCHES ${_CORRADE_HEADER_ONLY_COMPONENTS})
|
|
||||||
add_library(Corrade::${_component} UNKNOWN IMPORTED)
|
|
||||||
|
|
||||||
# Try to find both debug and release version
|
|
||||||
find_library(CORRADE_${_COMPONENT}_LIBRARY_DEBUG Corrade${_component}-d)
|
|
||||||
find_library(CORRADE_${_COMPONENT}_LIBRARY_RELEASE Corrade${_component})
|
|
||||||
mark_as_advanced(CORRADE_${_COMPONENT}_LIBRARY_DEBUG
|
|
||||||
CORRADE_${_COMPONENT}_LIBRARY_RELEASE)
|
|
||||||
|
|
||||||
if(CORRADE_${_COMPONENT}_LIBRARY_RELEASE)
|
|
||||||
set_property(TARGET Corrade::${_component} APPEND PROPERTY
|
|
||||||
IMPORTED_CONFIGURATIONS RELEASE)
|
|
||||||
set_property(TARGET Corrade::${_component} PROPERTY
|
|
||||||
IMPORTED_LOCATION_RELEASE ${CORRADE_${_COMPONENT}_LIBRARY_RELEASE})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(CORRADE_${_COMPONENT}_LIBRARY_DEBUG)
|
|
||||||
set_property(TARGET Corrade::${_component} APPEND PROPERTY
|
|
||||||
IMPORTED_CONFIGURATIONS DEBUG)
|
|
||||||
set_property(TARGET Corrade::${_component} PROPERTY
|
|
||||||
IMPORTED_LOCATION_DEBUG ${CORRADE_${_COMPONENT}_LIBRARY_DEBUG})
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Header-only library components
|
|
||||||
if(_component MATCHES ${_CORRADE_HEADER_ONLY_COMPONENTS})
|
|
||||||
add_library(Corrade::${_component} INTERFACE IMPORTED)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Default include path names to look for for library / header-only
|
|
||||||
# components
|
|
||||||
if(_component MATCHES ${_CORRADE_LIBRARY_COMPONENTS})
|
|
||||||
set(_CORRADE_${_COMPONENT}_INCLUDE_PATH_SUFFIX Corrade/${_component})
|
|
||||||
set(_CORRADE_${_COMPONENT}_INCLUDE_PATH_NAMES ${_component}.h)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Executable components
|
|
||||||
if(_component MATCHES ${_CORRADE_EXECUTABLE_COMPONENTS})
|
|
||||||
add_executable(Corrade::${_component} IMPORTED)
|
|
||||||
|
|
||||||
find_program(CORRADE_${_COMPONENT}_EXECUTABLE corrade-${_component})
|
|
||||||
mark_as_advanced(CORRADE_${_COMPONENT}_EXECUTABLE)
|
|
||||||
|
|
||||||
if(CORRADE_${_COMPONENT}_EXECUTABLE)
|
|
||||||
set_property(TARGET Corrade::${_component} PROPERTY
|
|
||||||
IMPORTED_LOCATION ${CORRADE_${_COMPONENT}_EXECUTABLE})
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# No special setup for Containers library
|
|
||||||
|
|
||||||
# Interconnect library
|
|
||||||
if(_component STREQUAL Interconnect)
|
|
||||||
# Disable /OPT:ICF on MSVC, which merges functions with identical
|
|
||||||
# contents and thus breaks signal comparison
|
|
||||||
if(CORRADE_TARGET_WINDOWS AND CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
|
||||||
if(CMAKE_VERSION VERSION_LESS 3.13)
|
|
||||||
set_property(TARGET Corrade::${_component} PROPERTY
|
|
||||||
INTERFACE_LINK_LIBRARIES "-OPT:NOICF,REF")
|
|
||||||
else()
|
|
||||||
set_property(TARGET Corrade::${_component} PROPERTY
|
|
||||||
INTERFACE_LINK_OPTIONS "/OPT:NOICF,REF")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Main library
|
|
||||||
elseif(_component STREQUAL Main)
|
|
||||||
set(_CORRADE_${_COMPONENT}_INCLUDE_PATH_SUFFIX Corrade)
|
|
||||||
set(_CORRADE_${_COMPONENT}_INCLUDE_PATH_NAMES Corrade.h)
|
|
||||||
|
|
||||||
if(CORRADE_TARGET_WINDOWS)
|
|
||||||
if(NOT MINGW)
|
|
||||||
# Abusing INTERFACE_LINK_LIBRARIES because
|
|
||||||
# INTERFACE_LINK_OPTIONS is only since 3.13. They treat
|
|
||||||
# things with `-` in front as linker flags and fortunately
|
|
||||||
# I can use `-ENTRY` instead of `/ENTRY`.
|
|
||||||
# https://gitlab.kitware.com/cmake/cmake/issues/16543
|
|
||||||
set_property(TARGET Corrade::${_component} APPEND PROPERTY
|
|
||||||
INTERFACE_LINK_LIBRARIES "-ENTRY:$<$<NOT:$<BOOL:$<TARGET_PROPERTY:WIN32_EXECUTABLE>>>:wmainCRTStartup>$<$<BOOL:$<TARGET_PROPERTY:WIN32_EXECUTABLE>>:wWinMainCRTStartup>")
|
|
||||||
else()
|
|
||||||
set_property(TARGET Corrade::${_component} APPEND PROPERTY
|
|
||||||
INTERFACE_LINK_LIBRARIES "-municode")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# PluginManager library
|
|
||||||
elseif(_component STREQUAL PluginManager)
|
|
||||||
# -ldl is handled by Utility now
|
|
||||||
|
|
||||||
# TestSuite library has some additional files
|
|
||||||
elseif(_component STREQUAL TestSuite)
|
|
||||||
# XCTest runner file
|
|
||||||
if(CORRADE_TESTSUITE_TARGET_XCTEST)
|
|
||||||
find_file(CORRADE_TESTSUITE_XCTEST_RUNNER XCTestRunner.mm.in
|
|
||||||
PATH_SUFFIXES share/corrade/TestSuite)
|
|
||||||
set(CORRADE_TESTSUITE_XCTEST_RUNNER_NEEDED CORRADE_TESTSUITE_XCTEST_RUNNER)
|
|
||||||
|
|
||||||
# ADB runner file
|
|
||||||
elseif(CORRADE_TARGET_ANDROID)
|
|
||||||
find_file(CORRADE_TESTSUITE_ADB_RUNNER AdbRunner.sh
|
|
||||||
PATH_SUFFIXES share/corrade/TestSuite)
|
|
||||||
set(CORRADE_TESTSUITE_ADB_RUNNER_NEEDED CORRADE_TESTSUITE_ADB_RUNNER)
|
|
||||||
|
|
||||||
# Emscripten runner file
|
|
||||||
elseif(CORRADE_TARGET_EMSCRIPTEN)
|
|
||||||
find_file(CORRADE_TESTSUITE_EMSCRIPTEN_RUNNER EmscriptenRunner.html.in
|
|
||||||
PATH_SUFFIXES share/corrade/TestSuite)
|
|
||||||
set(CORRADE_TESTSUITE_EMSCRIPTEN_RUNNER_NEEDED CORRADE_TESTSUITE_EMSCRIPTEN_RUNNER)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Utility library (contains all setup that is used by others)
|
|
||||||
elseif(_component STREQUAL Utility)
|
|
||||||
# Top-level include directory
|
|
||||||
set_property(TARGET Corrade::${_component} APPEND PROPERTY
|
|
||||||
INTERFACE_INCLUDE_DIRECTORIES ${CORRADE_INCLUDE_DIR})
|
|
||||||
|
|
||||||
# Require (at least) C++11 for users
|
|
||||||
set_property(TARGET Corrade::${_component} PROPERTY
|
|
||||||
INTERFACE_CORRADE_CXX_STANDARD 11)
|
|
||||||
set_property(TARGET Corrade::${_component} APPEND PROPERTY
|
|
||||||
COMPATIBLE_INTERFACE_NUMBER_MAX CORRADE_CXX_STANDARD)
|
|
||||||
|
|
||||||
# Directory::libraryLocation() needs this
|
|
||||||
if(CORRADE_TARGET_UNIX)
|
|
||||||
set_property(TARGET Corrade::${_component} APPEND PROPERTY
|
|
||||||
INTERFACE_LINK_LIBRARIES ${CMAKE_DL_LIBS})
|
|
||||||
endif()
|
|
||||||
# AndroidLogStreamBuffer class needs to be linked to log library
|
|
||||||
if(CORRADE_TARGET_ANDROID)
|
|
||||||
set_property(TARGET Corrade::${_component} APPEND PROPERTY
|
|
||||||
INTERFACE_LINK_LIBRARIES "log")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Find library includes
|
|
||||||
if(_component MATCHES ${_CORRADE_LIBRARY_COMPONENTS})
|
|
||||||
find_path(_CORRADE_${_COMPONENT}_INCLUDE_DIR
|
|
||||||
NAMES ${_CORRADE_${_COMPONENT}_INCLUDE_PATH_NAMES}
|
|
||||||
HINTS ${CORRADE_INCLUDE_DIR}/${_CORRADE_${_COMPONENT}_INCLUDE_PATH_SUFFIX})
|
|
||||||
mark_as_advanced(_CORRADE_${_COMPONENT}_INCLUDE_DIR)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Add inter-library dependencies
|
|
||||||
if(_component MATCHES ${_CORRADE_LIBRARY_COMPONENTS} OR _component MATCHES ${_CORRADE_HEADER_ONLY_COMPONENTS})
|
|
||||||
foreach(_dependency ${_CORRADE_${_COMPONENT}_DEPENDENCIES})
|
|
||||||
if(_dependency MATCHES ${_CORRADE_LIBRARY_COMPONENTS} OR _dependency MATCHES ${_CORRADE_HEADER_ONLY_COMPONENTS})
|
|
||||||
set_property(TARGET Corrade::${_component} APPEND PROPERTY
|
|
||||||
INTERFACE_LINK_LIBRARIES Corrade::${_dependency})
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Decide if the component was found
|
|
||||||
if((_component MATCHES ${_CORRADE_LIBRARY_COMPONENTS} AND _CORRADE_${_COMPONENT}_INCLUDE_DIR AND (_component MATCHES ${_CORRADE_HEADER_ONLY_COMPONENTS} OR CORRADE_${_COMPONENT}_LIBRARY_RELEASE OR CORRADE_${_COMPONENT}_LIBRARY_DEBUG)) OR (_component MATCHES ${_CORRADE_EXECUTABLE_COMPONENTS} AND CORRADE_${_COMPONENT}_EXECUTABLE))
|
|
||||||
set(Corrade_${_component}_FOUND TRUE)
|
|
||||||
else()
|
|
||||||
set(Corrade_${_component}_FOUND FALSE)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
find_package_handle_standard_args(Corrade REQUIRED_VARS
|
|
||||||
CORRADE_INCLUDE_DIR
|
|
||||||
_CORRADE_MODULE_DIR
|
|
||||||
_CORRADE_CONFIGURE_FILE
|
|
||||||
${CORRADE_TESTSUITE_XCTEST_RUNNER_NEEDED}
|
|
||||||
${CORRADE_TESTSUITE_ADB_RUNNER_NEEDED}
|
|
||||||
${CORRADE_TESTSUITE_EMSCRIPTEN_RUNNER_NEEDED}
|
|
||||||
HANDLE_COMPONENTS)
|
|
||||||
|
|
||||||
# Finalize the finding process
|
|
||||||
include(${CORRADE_USE_MODULE})
|
|
||||||
|
|
||||||
# Installation dirs
|
|
||||||
set(CORRADE_INCLUDE_INSTALL_PREFIX "."
|
|
||||||
CACHE STRING "Prefix where to put platform-independent include and other files")
|
|
||||||
|
|
||||||
set(CORRADE_INCLUDE_INSTALL_DIR ${CORRADE_INCLUDE_INSTALL_PREFIX}/include/Corrade)
|
|
File diff suppressed because it is too large
Load Diff
@ -1,228 +0,0 @@
|
|||||||
#.rst:
|
|
||||||
# Find SDL2
|
|
||||||
# ---------
|
|
||||||
#
|
|
||||||
# Finds the SDL2 library. This module defines:
|
|
||||||
#
|
|
||||||
# SDL2_FOUND - True if SDL2 library is found
|
|
||||||
# SDL2::SDL2 - SDL2 imported target
|
|
||||||
#
|
|
||||||
# Additionally these variables are defined for internal usage:
|
|
||||||
#
|
|
||||||
# SDL2_LIBRARY_DEBUG - SDL2 debug library, if found
|
|
||||||
# SDL2_LIBRARY_RELEASE - SDL2 release library, if found
|
|
||||||
# SDL2_DLL_DEBUG - SDL2 debug DLL on Windows, if found
|
|
||||||
# SDL2_DLL_RELEASE - SDL2 release DLL on Windows, if found
|
|
||||||
# SDL2_INCLUDE_DIR - Root include dir
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
|
||||||
# This file is part of Magnum.
|
|
||||||
#
|
|
||||||
# Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
|
|
||||||
# 2020 Vladimír Vondruš <mosra@centrum.cz>
|
|
||||||
# Copyright © 2018 Jonathan Hale <squareys@googlemail.com>
|
|
||||||
#
|
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
# copy of this software and associated documentation files (the "Software"),
|
|
||||||
# to deal in the Software without restriction, including without limitation
|
|
||||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
# and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
# Software is furnished to do so, subject to the following conditions:
|
|
||||||
#
|
|
||||||
# The above copyright notice and this permission notice shall be included
|
|
||||||
# in all copies or substantial portions of the Software.
|
|
||||||
#
|
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
||||||
# DEALINGS IN THE SOFTWARE.
|
|
||||||
#
|
|
||||||
|
|
||||||
# In Emscripten SDL is linked automatically, thus no need to find the library.
|
|
||||||
# Also the includes are in SDL subdirectory, not SDL2.
|
|
||||||
if(CORRADE_TARGET_EMSCRIPTEN)
|
|
||||||
set(_SDL2_PATH_SUFFIXES SDL)
|
|
||||||
else()
|
|
||||||
set(_SDL2_PATH_SUFFIXES SDL2)
|
|
||||||
if(WIN32)
|
|
||||||
# Precompiled libraries for MSVC are in x86/x64 subdirectories
|
|
||||||
if(MSVC)
|
|
||||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
||||||
set(_SDL2_LIBRARY_PATH_SUFFIX lib/x64)
|
|
||||||
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
|
|
||||||
set(_SDL2_LIBRARY_PATH_SUFFIX lib/x86)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Both includes and libraries for MinGW are in some directory deep
|
|
||||||
# inside. There's also a CMake config file but it has HARDCODED path
|
|
||||||
# to /opt/local/i686-w64-mingw32, which doesn't make ANY SENSE,
|
|
||||||
# especially on Windows.
|
|
||||||
elseif(MINGW)
|
|
||||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
||||||
set(_SDL2_LIBRARY_PATH_SUFFIX x86_64-w64-mingw32/lib)
|
|
||||||
set(_SDL2_RUNTIME_PATH_SUFFIX x86_64-w64-mingw32/bin)
|
|
||||||
list(APPEND _SDL2_PATH_SUFFIXES x86_64-w64-mingw32/include/SDL2)
|
|
||||||
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
|
|
||||||
set(_SDL2_LIBRARY_PATH_SUFFIX i686-w64-mingw32/lib)
|
|
||||||
set(_SDL2_RUNTIME_PATH_SUFFIX i686-w64-mingw32/lib)
|
|
||||||
list(APPEND _SDL2_PATH_SUFFIXES i686-w64-mingw32/include/SDL2)
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
message(FATAL_ERROR "Unsupported compiler")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
find_library(SDL2_LIBRARY_RELEASE
|
|
||||||
# Compiling SDL2 from scratch on macOS creates dead libSDL2.so symlink
|
|
||||||
# which CMake somehow prefers before the SDL2-2.0.dylib file. Making
|
|
||||||
# the dylib first so it is preferred. Not sure how this maps to debug
|
|
||||||
# config though :/
|
|
||||||
NAMES SDL2-2.0 SDL2
|
|
||||||
PATH_SUFFIXES ${_SDL2_LIBRARY_PATH_SUFFIX})
|
|
||||||
find_library(SDL2_LIBRARY_DEBUG
|
|
||||||
NAMES SDL2d
|
|
||||||
PATH_SUFFIXES ${_SDL2_LIBRARY_PATH_SUFFIX})
|
|
||||||
# FPHSA needs one of the _DEBUG/_RELEASE variables to check that the
|
|
||||||
# library was found -- using SDL_LIBRARY, which will get populated by
|
|
||||||
# select_library_configurations() below.
|
|
||||||
set(SDL2_LIBRARY_NEEDED SDL2_LIBRARY)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include(SelectLibraryConfigurations)
|
|
||||||
select_library_configurations(SDL2)
|
|
||||||
|
|
||||||
# Include dir
|
|
||||||
find_path(SDL2_INCLUDE_DIR
|
|
||||||
# We must search file which is present only in SDL2 and not in SDL1.
|
|
||||||
# Apparently when both SDL.h and SDL_scancode.h are specified, CMake is
|
|
||||||
# happy enough that it found SDL.h and doesn't bother about the other.
|
|
||||||
#
|
|
||||||
# On macOS, where the includes are not in SDL2/SDL.h form (which would
|
|
||||||
# solve this issue), but rather SDL2.framework/Headers/SDL.h, CMake might
|
|
||||||
# find SDL.framework/Headers/SDL.h if SDL1 is installed, which is wrong.
|
|
||||||
NAMES SDL_scancode.h
|
|
||||||
PATH_SUFFIXES ${_SDL2_PATH_SUFFIXES})
|
|
||||||
|
|
||||||
# DLL on Windows
|
|
||||||
if(CORRADE_TARGET_WINDOWS)
|
|
||||||
find_file(SDL2_DLL_RELEASE
|
|
||||||
NAMES SDL2.dll
|
|
||||||
PATH_SUFFIXES ${_SDL2_RUNTIME_PATH_SUFFIX} ${_SDL2_LIBRARY_PATH_SUFFIX})
|
|
||||||
find_file(SDL2_DLL_DEBUG
|
|
||||||
NAMES SDL2d.dll # not sure?
|
|
||||||
PATH_SUFFIXES ${_SDL2_RUNTIME_PATH_SUFFIX} ${_SDL2_LIBRARY_PATH_SUFFIX})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# (Static) macOS / iOS dependencies
|
|
||||||
if(CORRADE_TARGET_APPLE AND SDL2_LIBRARY MATCHES ".*libSDL2.a$")
|
|
||||||
if(CORRADE_TARGET_IOS)
|
|
||||||
set(_SDL2_FRAMEWORKS
|
|
||||||
AudioToolbox
|
|
||||||
AVFoundation
|
|
||||||
CoreGraphics
|
|
||||||
CoreMotion
|
|
||||||
Foundation
|
|
||||||
GameController
|
|
||||||
Metal # needed since 2.0.8
|
|
||||||
QuartzCore
|
|
||||||
UIKit)
|
|
||||||
else()
|
|
||||||
# Those are needed when building SDL statically using its CMake project
|
|
||||||
set(_SDL2_FRAMEWORKS
|
|
||||||
iconv # should be in the system
|
|
||||||
AudioToolbox
|
|
||||||
AVFoundation
|
|
||||||
Carbon
|
|
||||||
Cocoa
|
|
||||||
CoreAudio
|
|
||||||
CoreVideo
|
|
||||||
ForceFeedback
|
|
||||||
Foundation
|
|
||||||
IOKit)
|
|
||||||
endif()
|
|
||||||
set(_SDL2_FRAMEWORK_LIBRARIES )
|
|
||||||
foreach(framework ${_SDL2_FRAMEWORKS})
|
|
||||||
find_library(_SDL2_${framework}_LIBRARY ${framework})
|
|
||||||
mark_as_advanced(_SDL2_${framework}_LIBRARY)
|
|
||||||
list(APPEND _SDL2_FRAMEWORK_LIBRARIES ${_SDL2_${framework}_LIBRARY})
|
|
||||||
list(APPEND _SDL2_FRAMEWORK_LIBRARY_NAMES _SDL2_${framework}_LIBRARY)
|
|
||||||
endforeach()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
find_package_handle_standard_args("SDL2" DEFAULT_MSG
|
|
||||||
${SDL2_LIBRARY_NEEDED}
|
|
||||||
${_SDL2_FRAMEWORK_LIBRARY_NAMES}
|
|
||||||
SDL2_INCLUDE_DIR)
|
|
||||||
|
|
||||||
if(NOT TARGET SDL2::SDL2)
|
|
||||||
if(SDL2_LIBRARY_NEEDED)
|
|
||||||
add_library(SDL2::SDL2 UNKNOWN IMPORTED)
|
|
||||||
|
|
||||||
# Work around BUGGY framework support on macOS
|
|
||||||
# https://cmake.org/Bug/view.php?id=14105
|
|
||||||
if(CORRADE_TARGET_APPLE AND SDL2_LIBRARY_RELEASE MATCHES "\\.framework$")
|
|
||||||
set_property(TARGET SDL2::SDL2 APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
|
|
||||||
set_property(TARGET SDL2::SDL2 PROPERTY IMPORTED_LOCATION_RELEASE ${SDL2_LIBRARY_RELEASE}/SDL2)
|
|
||||||
else()
|
|
||||||
if(SDL2_LIBRARY_RELEASE)
|
|
||||||
set_property(TARGET SDL2::SDL2 APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
|
|
||||||
set_property(TARGET SDL2::SDL2 PROPERTY IMPORTED_LOCATION_RELEASE ${SDL2_LIBRARY_RELEASE})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(SDL2_LIBRARY_DEBUG)
|
|
||||||
set_property(TARGET SDL2::SDL2 APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
|
|
||||||
set_property(TARGET SDL2::SDL2 PROPERTY IMPORTED_LOCATION_DEBUG ${SDL2_LIBRARY_DEBUG})
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Link additional `dl` and `pthread` libraries required by a static
|
|
||||||
# build of SDL on Unixy platforms (except Apple, where it is most
|
|
||||||
# probably some frameworks instead)
|
|
||||||
if(CORRADE_TARGET_UNIX AND NOT CORRADE_TARGET_APPLE AND (SDL2_LIBRARY_DEBUG MATCHES "${CMAKE_STATIC_LIBRARY_SUFFIX}$" OR SDL2_LIBRARY_RELEASE MATCHES "${CMAKE_STATIC_LIBRARY_SUFFIX}$"))
|
|
||||||
find_package(Threads REQUIRED)
|
|
||||||
set_property(TARGET SDL2::SDL2 APPEND PROPERTY
|
|
||||||
INTERFACE_LINK_LIBRARIES Threads::Threads ${CMAKE_DL_LIBS})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Link frameworks on macOS / iOS if we have a static SDL
|
|
||||||
if(CORRADE_TARGET_APPLE AND SDL2_LIBRARY MATCHES ".*libSDL2.a$")
|
|
||||||
set_property(TARGET SDL2::SDL2 APPEND PROPERTY
|
|
||||||
INTERFACE_LINK_LIBRARIES ${_SDL2_FRAMEWORK_LIBRARIES})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Windows dependencies for a static library. Unfortunately there's no
|
|
||||||
# easy way to figure out if a *.lib is static or dynamic, so we're
|
|
||||||
# adding only if a DLL is not found.
|
|
||||||
if(CORRADE_TARGET_WINDOWS AND NOT CORRADE_TARGET_WINDOWS_RT AND NOT SDL2_DLL_RELEASE AND NOT SDL2_DLL_DEBUG)
|
|
||||||
set_property(TARGET SDL2::SDL2 APPEND PROPERTY INTERFACE_LINK_LIBRARIES
|
|
||||||
# https://github.com/SDL-mirror/SDL/blob/release-2.0.10/CMakeLists.txt#L1338
|
|
||||||
user32 gdi32 winmm imm32 ole32 oleaut32 version uuid advapi32 setupapi shell32
|
|
||||||
# https://github.com/SDL-mirror/SDL/blob/release-2.0.10/CMakeLists.txt#L1384
|
|
||||||
dinput8)
|
|
||||||
# https://github.com/SDL-mirror/SDL/blob/release-2.0.10/CMakeLists.txt#L1422
|
|
||||||
# additionally has dxerr for MSVC if DirectX SDK is not used, but
|
|
||||||
# according to https://walbourn.github.io/wheres-dxerr-lib/ this
|
|
||||||
# thing is long deprecated.
|
|
||||||
if(MINGW)
|
|
||||||
set_property(TARGET SDL2::SDL2 APPEND PROPERTY INTERFACE_LINK_LIBRARIES
|
|
||||||
# https://github.com/SDL-mirror/SDL/blob/release-2.0.10/CMakeLists.txt#L1386
|
|
||||||
dxerr8
|
|
||||||
# https://github.com/SDL-mirror/SDL/blob/release-2.0.10/CMakeLists.txt#L1388
|
|
||||||
mingw32)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
else()
|
|
||||||
add_library(SDL2::SDL2 INTERFACE IMPORTED)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set_property(TARGET SDL2::SDL2 PROPERTY
|
|
||||||
INTERFACE_INCLUDE_DIRECTORIES ${SDL2_INCLUDE_DIR})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
mark_as_advanced(SDL2_INCLUDE_DIR)
|
|
Loading…
Reference in new issue