Positionnement fluide de la caméra
This commit is contained in:
		
							parent
							
								
									774b60464c
								
							
						
					
					
						commit
						c537f2eac0
					
				
							
								
								
									
										19
									
								
								src/game.cpp
								
								
								
								
							
							
						
						
									
										19
									
								
								src/game.cpp
								
								
								
								
							|  | @ -1,5 +1,6 @@ | ||||||
| #include <iostream> | #include <iostream> | ||||||
| #include <cmath> | #include <cmath> | ||||||
|  | #include "utility.hpp" | ||||||
| #include "manager.hpp" | #include "manager.hpp" | ||||||
| #include "game.hpp" | #include "game.hpp" | ||||||
| #include "player.hpp" | #include "player.hpp" | ||||||
|  | @ -148,23 +149,29 @@ void Game::draw() { | ||||||
| 
 | 
 | ||||||
| void Game::ensureCentered() { | void Game::ensureCentered() { | ||||||
|     std::vector<Player::Ptr>& players = getPlayers(); |     std::vector<Player::Ptr>& players = getPlayers(); | ||||||
| 
 |  | ||||||
|     sf::Vector2f total_position; |  | ||||||
|     sf::View camera = getCamera(); |  | ||||||
|     unsigned int player_count = players.size(); |     unsigned int player_count = players.size(); | ||||||
| 
 | 
 | ||||||
|  |     sf::View camera = getCamera(); | ||||||
|  |     sf::Vector2f previous_center = camera.getCenter(); | ||||||
|  |     sf::Vector2f position_sum, goal_center; | ||||||
|  | 
 | ||||||
|     for (unsigned int i = 0; i < player_count; i++) { |     for (unsigned int i = 0; i < player_count; i++) { | ||||||
|         total_position += players[i]->getPosition(); |         position_sum += players[i]->getPosition(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (player_count == 0) { |     if (player_count == 0) { | ||||||
|         // on évite la division par zéro
 |         // on évite la division par zéro
 | ||||||
|         camera.setCenter(sf::Vector2f(0, 0)); |         goal_center = sf::Vector2f(0, 0); | ||||||
|     } else { |     } else { | ||||||
|         // on place la caméra à la position médiane de tous les joueurs
 |         // on place la caméra à la position médiane de tous les joueurs
 | ||||||
|         camera.setCenter(total_position / (float) player_count); |         goal_center = position_sum / (float) player_count; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     // on anime le centre vers la nouvelle position
 | ||||||
|  |     previous_center.x = Utility::animateValue(previous_center.x, 5, goal_center.x); | ||||||
|  |     previous_center.y = Utility::animateValue(previous_center.y, 5, goal_center.y); | ||||||
|  | 
 | ||||||
|  |     camera.setCenter(previous_center); | ||||||
|     setCamera(camera); |     setCamera(camera); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue