Looks very nice, great job!
I've looked at your code, I like it, it's nice and clean, though I have two tips:
1) There's almost reason to use
std::bind anymore
Code like this:
std::bind(&Player::applyForce, _1, sf::Vector2f(-40.f, 0.f))
Can be easily rewritten like this in C++14:
[force = sf::Vector2f(-40.f, 0.f)]
(auto& player)
{
player.applyForce(force);
}
2) Use
enum class instead of
enum.
* Enum class values can't be implicitly casted
* Enum classes are scoped (simple enums "leak" their values in scope which you declared them in)
Check out "Effective Modern C++" on why lambdas are better than
std::bind and why enum classes are awesome.