Merge branch 'master' of github.com:matteodelabre/projet-cmi
This commit is contained in:
		
						commit
						701673253a
					
				|  | @ -11,9 +11,9 @@ namespace Collision { | |||
|     typedef std::map<std::pair<unsigned int, unsigned int>, collision_data> collision_dispatcher; | ||||
|     extern collision_dispatcher dispatch; | ||||
| 
 | ||||
|     bool ballToBlock(Object& objA, Object& objB, sf::Vector2f& normal, float& depth); | ||||
|     bool blockToBall(Object& objA, Object& objB, sf::Vector2f& normal, float& depth); | ||||
|     bool ballToBall(Object& objA, Object& objB, sf::Vector2f& normal, float& depth); | ||||
|     bool playerToBlock(Object& objA, Object& objB, sf::Vector2f& normal, float& depth); | ||||
|     bool blockToPlayer(Object& objA, Object& objB, sf::Vector2f& normal, float& depth); | ||||
|     bool playerToPlayer(Object& objA, Object& objB, sf::Vector2f& normal, float& depth); | ||||
|     bool blockToBlock(Object& objA, Object& objB, sf::Vector2f& normal, float& depth); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -45,3 +45,4 @@ public: | |||
| }; | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
|  |  | |||
|  | @ -7,7 +7,7 @@ | |||
| #include "resource_manager.hpp" | ||||
| 
 | ||||
| class Block; | ||||
| class Ball; | ||||
| class Player; | ||||
| 
 | ||||
| class Object { | ||||
| private: | ||||
|  |  | |||
|  | @ -1,14 +1,15 @@ | |||
| #ifndef __PTF_BALL_HPP__ | ||||
| #define __PTF_BALL_HPP__ | ||||
| #ifndef __PTF_PLAYER_HPP__ | ||||
| #define __PTF_PLAYER_HPP__ | ||||
| 
 | ||||
| #include <SFML/Graphics.hpp> | ||||
| #include <iostream> | ||||
| #include "object.hpp" | ||||
| #include "engine_state.hpp" | ||||
| 
 | ||||
| class Ball : public Object { | ||||
| class Player : public Object { | ||||
| private: | ||||
|     sf::Sprite sprite; | ||||
|     unsigned int player_number; | ||||
| 
 | ||||
| protected: | ||||
|     /**
 | ||||
|  | @ -17,7 +18,7 @@ protected: | |||
|     virtual sf::Vector2f getForces(EngineState& state); | ||||
| 
 | ||||
| public: | ||||
|     Ball(float x, float y); | ||||
|     Player(float x, float y); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Dessine la balle dans la fenêtre donnée | ||||
|  | @ -39,6 +40,16 @@ public: | |||
|      * Renvoie le rayon de la balle | ||||
|      */ | ||||
|     float getRadius(); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Renvoie le numéro du joueur | ||||
|      */ | ||||
|     unsigned int getPlayerNumber(); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Modifie le numéro du joueur | ||||
|      */ | ||||
|     void setPlayerNumber(unsigned int set_number); | ||||
| }; | ||||
| 
 | ||||
| #endif | ||||
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1.4 KiB | 
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 2.1 KiB | 
							
								
								
									
										53
									
								
								src/ball.cpp
								
								
								
								
							
							
						
						
									
										53
									
								
								src/ball.cpp
								
								
								
								
							|  | @ -1,53 +0,0 @@ | |||
| #include "ball.hpp" | ||||
| #include "block.hpp" | ||||
| #include "constants.hpp" | ||||
| #include <array> | ||||
| #include <iostream> | ||||
| 
 | ||||
| Ball::Ball(float x, float y) : Object(x, y) { | ||||
|     // déplacement de l'origine au centre de la balle
 | ||||
|     sprite.setOrigin(sf::Vector2f(getRadius(), getRadius())); | ||||
| } | ||||
| 
 | ||||
| sf::Vector2f Ball::getForces(EngineState& state) { | ||||
|     sf::Vector2f forces = Object::getForces(state); | ||||
| 
 | ||||
|     // déplacement de la balle après appui sur les touches de direction
 | ||||
|     if (state.keys[sf::Keyboard::Left]) { | ||||
|         forces += sf::Vector2f(-Constants::MOVE, 0); | ||||
|     } | ||||
| 
 | ||||
|     if (state.keys[sf::Keyboard::Right]) { | ||||
|         forces += sf::Vector2f(Constants::MOVE, 0); | ||||
|     } | ||||
| 
 | ||||
|     return forces; | ||||
| } | ||||
| 
 | ||||
| void Ball::draw(sf::RenderWindow& window, ResourceManager& resources) { | ||||
|     Object::draw(window, resources); | ||||
| 
 | ||||
|     // utilisation de la texture
 | ||||
| 	sprite.setTexture(resources.getTexture("ball.png")); | ||||
| 
 | ||||
|     // déplacement du sprite à la position de la balle
 | ||||
|     sprite.rotate(getVelocity().x * .1f); | ||||
|     sprite.setPosition(getPosition()); | ||||
|     window.draw(sprite); | ||||
| } | ||||
| 
 | ||||
| std::unique_ptr<sf::FloatRect> Ball::getAABB() { | ||||
|     return std::unique_ptr<sf::FloatRect>(new sf::FloatRect( | ||||
|         getPosition().x - getRadius(), | ||||
|         getPosition().y - getRadius(), | ||||
|         2 * getRadius(), 2 * getRadius() | ||||
|     )); | ||||
| } | ||||
| 
 | ||||
| unsigned int Ball::getTypeId() { | ||||
|     return Ball::TYPE_ID; | ||||
| } | ||||
| 
 | ||||
| float Ball::getRadius() { | ||||
|     return 10 * getMass(); | ||||
| } | ||||
|  | @ -1,5 +1,5 @@ | |||
| #include "block.hpp" | ||||
| #include "ball.hpp" | ||||
| #include "player.hpp" | ||||
| #include "constants.hpp" | ||||
| #include "resource_manager.hpp" | ||||
| 
 | ||||
|  | @ -16,7 +16,7 @@ void Block::draw(sf::RenderWindow& window, ResourceManager& resources) { | |||
|     Object::draw(window, resources); | ||||
| 
 | ||||
|     // utilisation de la texture
 | ||||
| 	sprite.setTexture(resources.getTexture("block.png")); | ||||
| 	sprite.setTexture(resources.getTexture("block.bmp")); | ||||
| 
 | ||||
|     // coloration du bloc en fonction de sa charge
 | ||||
|     if (getCharge() > 0) { | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| #include "collision.hpp" | ||||
| #include "ball.hpp" | ||||
| #include "player.hpp" | ||||
| #include "block.hpp" | ||||
| #include "object.hpp" | ||||
| #include <utility> | ||||
|  | @ -9,21 +9,21 @@ namespace Collision { | |||
|     // initialisation du dictionnaire associant les types
 | ||||
|     // impliqués dans une collision à leur fonction de résolution
 | ||||
|     collision_dispatcher dispatch = { | ||||
|         {std::make_pair(Ball::TYPE_ID, Block::TYPE_ID), &ballToBlock}, | ||||
|         {std::make_pair(Block::TYPE_ID, Ball::TYPE_ID), &blockToBall}, | ||||
|         {std::make_pair(Ball::TYPE_ID, Ball::TYPE_ID), &ballToBall}, | ||||
|         {std::make_pair(Player::TYPE_ID, Block::TYPE_ID), &ballToBlock}, | ||||
|         {std::make_pair(Block::TYPE_ID, Player::TYPE_ID), &blockToBall}, | ||||
|         {std::make_pair(Player::TYPE_ID, Player::TYPE_ID), &ballToBall}, | ||||
|         {std::make_pair(Block::TYPE_ID, Block::TYPE_ID), &blockToBlock} | ||||
|     }; | ||||
| 
 | ||||
|     bool ballToBlock(Object& objA, Object& objB, sf::Vector2f& normal, float& depth) { | ||||
|         Ball ball = dynamic_cast<Ball&>(objA); | ||||
|         Player player = dynamic_cast<Player&>(objA); | ||||
|         Block block = dynamic_cast<Block&>(objB); | ||||
| 
 | ||||
|         // recherche du point le plus proche du centre de la
 | ||||
|         // balle sur le bloc. On regarde la position relative
 | ||||
|         // du cercle par rapport au bloc
 | ||||
|         std::unique_ptr<sf::FloatRect> aabb = block.getAABB(); | ||||
|         sf::Vector2f relpos = block.getPosition() - ball.getPosition(); | ||||
|         sf::Vector2f relpos = block.getPosition() - player.getPosition(); | ||||
|         sf::Vector2f closest = relpos; | ||||
| 
 | ||||
|         // on restreint la position relative pour rester
 | ||||
|  |  | |||
							
								
								
									
										17
									
								
								src/main.cpp
								
								
								
								
							
							
						
						
									
										17
									
								
								src/main.cpp
								
								
								
								
							|  | @ -1,4 +1,4 @@ | |||
| #include "ball.hpp" | ||||
| #include "player.hpp" | ||||
| #include "block.hpp" | ||||
| #include "engine.hpp" | ||||
| #include "constants.hpp" | ||||
|  | @ -8,8 +8,10 @@ | |||
| int main() { | ||||
|     Engine engine; | ||||
| 
 | ||||
|     Ball ball1(3.5f * Constants::GRID, 10 * Constants::GRID); | ||||
|     Ball ball2(18.5f * Constants::GRID, 10 * Constants::GRID); | ||||
|     Player player1(3.5f * Constants::GRID, 10 * Constants::GRID); | ||||
|     player1.setPlayerNumber(1); | ||||
|     Player player2(18.5f * Constants::GRID, 10 * Constants::GRID); | ||||
|     player2.setPlayerNumber(2); | ||||
|     Block block01(2 * Constants::GRID, 10 * Constants::GRID); | ||||
|     Block block02(2 * Constants::GRID, 11 * Constants::GRID); | ||||
|     Block block03(3 * Constants::GRID, 11 * Constants::GRID); | ||||
|  | @ -33,13 +35,13 @@ int main() { | |||
|     Block block21(20 * Constants::GRID, 11 * Constants::GRID); | ||||
|     Block block22(11 * Constants::GRID, 10 * Constants::GRID); | ||||
| 
 | ||||
|     ball1.setCharge(-.01f); | ||||
|     ball2.setCharge(-.01f); | ||||
|     player1.setCharge(-.01f); | ||||
|     player2.setCharge(-.01f); | ||||
|     block22.setCharge(1.f); | ||||
|     block22.setMass(2); | ||||
| 
 | ||||
|     engine.addObject(ball1); | ||||
|     engine.addObject(ball2); | ||||
|     engine.addObject(player1); | ||||
|     engine.addObject(player2); | ||||
|     engine.addObject(block01); | ||||
|     engine.addObject(block02); | ||||
|     engine.addObject(block03); | ||||
|  | @ -74,3 +76,4 @@ int main() { | |||
| 
 | ||||
|     return EXIT_SUCCESS; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -0,0 +1,73 @@ | |||
| #include "player.hpp" | ||||
| #include "block.hpp" | ||||
| #include "constants.hpp" | ||||
| #include <array> | ||||
| #include <iostream> | ||||
| 
 | ||||
| Player::Player(float x, float y) : Object(x, y) { | ||||
|     // déplacement de l'origine au centre de la balle
 | ||||
|     sprite.setOrigin(sf::Vector2f(getRadius(), getRadius())); | ||||
| } | ||||
| 
 | ||||
| sf::Vector2f Player::getForces(EngineState& state) { | ||||
|     sf::Vector2f forces = Object::getForces(state); | ||||
| 
 | ||||
|     //commandes du joueur 1
 | ||||
|     if(player_number==1){ | ||||
|         // déplacement de la balle après appui sur les touches de direction
 | ||||
|         if (state.keys[sf::Keyboard::Left]) { | ||||
|             forces += sf::Vector2f(-Constants::MOVE, 0); | ||||
|         } | ||||
| 
 | ||||
|         if (state.keys[sf::Keyboard::Right]) { | ||||
|             forces += sf::Vector2f(Constants::MOVE, 0); | ||||
|         } | ||||
|     } | ||||
|     else{ | ||||
|         if(state.keys[sf::Keyboard::Q]){ | ||||
|             forces += sf::Vector2f(-Constants::MOVE, 0); | ||||
|         } | ||||
| 
 | ||||
|         if(state.keys[sf::Keyboard::D]){ | ||||
|             forces += sf::Vector2f(Constants::MOVE, 0); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     return forces; | ||||
| } | ||||
| 
 | ||||
| void Player::draw(sf::RenderWindow& window, ResourceManager& resources) { | ||||
|     Object::draw(window, resources); | ||||
| 
 | ||||
|     // utilisation de la texture
 | ||||
| 	sprite.setTexture(resources.getTexture("ball.bmp")); | ||||
| 
 | ||||
|     // déplacement du sprite à la position de la balle
 | ||||
|     sprite.rotate(getVelocity().x * .1f); | ||||
|     sprite.setPosition(getPosition()); | ||||
|     window.draw(sprite); | ||||
| } | ||||
| 
 | ||||
| std::unique_ptr<sf::FloatRect> Player::getAABB() { | ||||
|     return std::unique_ptr<sf::FloatRect>(new sf::FloatRect( | ||||
|         getPosition().x - getRadius(), | ||||
|         getPosition().y - getRadius(), | ||||
|         2 * getRadius(), 2 * getRadius() | ||||
|     )); | ||||
| } | ||||
| 
 | ||||
| unsigned int Player::getTypeId() { | ||||
|     return Player::TYPE_ID; | ||||
| } | ||||
| 
 | ||||
| float Player::getRadius() { | ||||
|     return 10 * getMass(); | ||||
| } | ||||
| 
 | ||||
| unsigned int Player::getPlayerNumber() { | ||||
|     return player_number; | ||||
| } | ||||
| 
 | ||||
| void Player::setPlayerNumber(unsigned int set_number) { | ||||
|     player_number = set_number; | ||||
| } | ||||
		Loading…
	
		Reference in New Issue