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 <cmath> | ||||
| #include "utility.hpp" | ||||
| #include "manager.hpp" | ||||
| #include "game.hpp" | ||||
| #include "player.hpp" | ||||
|  | @ -148,23 +149,29 @@ void Game::draw() { | |||
| 
 | ||||
| void Game::ensureCentered() { | ||||
|     std::vector<Player::Ptr>& players = getPlayers(); | ||||
| 
 | ||||
|     sf::Vector2f total_position; | ||||
|     sf::View camera = getCamera(); | ||||
|     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++) { | ||||
|         total_position += players[i]->getPosition(); | ||||
|         position_sum += players[i]->getPosition(); | ||||
|     } | ||||
| 
 | ||||
|     if (player_count == 0) { | ||||
|         // on évite la division par zéro
 | ||||
|         camera.setCenter(sf::Vector2f(0, 0)); | ||||
|         goal_center = sf::Vector2f(0, 0); | ||||
|     } else { | ||||
|         // 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); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue