From c303814346d0cac4e48790565821b28d437e9cb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matt=C3=A9o=20Delabre?= Date: Sat, 9 Apr 2016 17:37:12 +0200 Subject: [PATCH] =?UTF-8?q?Am=C3=A9liore=20l'animation=20de=20rotation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/level.hpp | 1 - src/level.cpp | 17 +++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/include/level.hpp b/include/level.hpp index 74e0ea8..d69cd4f 100644 --- a/include/level.hpp +++ b/include/level.hpp @@ -20,7 +20,6 @@ class Level : public State { private: sf::View camera; float camera_angle; - float camera_angle_animate; GravityDirection gravity_direction; sf::String name; diff --git a/src/level.cpp b/src/level.cpp index 3c123ae..e8b5149 100644 --- a/src/level.cpp +++ b/src/level.cpp @@ -3,6 +3,7 @@ #include "player.hpp" #include "block.hpp" #include "gravity_block.hpp" +#include #include #include #include @@ -29,8 +30,7 @@ std::map> object_type_map {GravityBlock::TYPE_ID, GravityBlock::load} }; -Level::Level(Manager& manager) : State(manager), - camera_angle(0.f), camera_angle_animate(0.f), +Level::Level(Manager& manager) : State(manager), camera_angle(180.f), gravity_direction(GravityDirection::SOUTH) {} Level::~Level() {} @@ -153,8 +153,17 @@ void Level::draw() { sf::RenderWindow& window = getWindow(); // animation de la rotation de la caméra - float change = (180 + (float) gravity_direction * 90 - camera_angle) * Constants::PHYSICS_TIME.asSeconds(); - camera.rotate(change); + float goal = std::fmod((float) gravity_direction * 90, 360); + float diff = goal - camera_angle; + float speed = diff * Constants::PHYSICS_TIME.asSeconds() * 5; + + if (std::abs(diff) < .05f) { + camera_angle = goal; + } else { + camera_angle += speed; + } + + camera.setRotation(camera_angle + 180); window.setView(camera); // efface la scène précédente et dessine la couche de fond