| 
									
										
										
										
											2016-03-08 22:28:50 +00:00
										 |  |  | #ifndef __PTF_OBJECT_HPP__
 | 
					
						
							|  |  |  | #define __PTF_OBJECT_HPP__
 | 
					
						
							| 
									
										
										
										
											2016-03-08 17:07:09 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include <SFML/Graphics.hpp>
 | 
					
						
							| 
									
										
										
										
											2016-03-13 18:07:35 +00:00
										 |  |  | #include <memory>
 | 
					
						
							| 
									
										
										
										
											2016-03-13 16:03:56 +00:00
										 |  |  | #include "engine_state.hpp"
 | 
					
						
							| 
									
										
										
										
											2016-03-08 17:07:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-15 21:00:03 +00:00
										 |  |  | class Block; | 
					
						
							|  |  |  | class Ball; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 17:07:09 +00:00
										 |  |  | class Object { | 
					
						
							| 
									
										
										
										
											2016-03-15 16:08:21 +00:00
										 |  |  | private: | 
					
						
							|  |  |  |     sf::Vector2f acceleration; | 
					
						
							|  |  |  |     sf::Vector2f velocity; | 
					
						
							| 
									
										
										
										
											2016-03-08 17:07:09 +00:00
										 |  |  |     sf::Vector2f position; | 
					
						
							| 
									
										
										
										
											2016-03-15 16:08:21 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     sf::VertexArray accelerationLine; | 
					
						
							|  |  |  |     sf::VertexArray velocityLine; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     float mass; | 
					
						
							| 
									
										
										
										
											2016-03-15 21:09:40 +00:00
										 |  |  |     float inv_mass; | 
					
						
							| 
									
										
										
										
											2016-03-14 20:43:27 +00:00
										 |  |  |     float charge; | 
					
						
							| 
									
										
										
										
											2016-03-15 21:00:03 +00:00
										 |  |  |     float restitution; | 
					
						
							| 
									
										
										
										
											2016-03-14 20:41:20 +00:00
										 |  |  |     int layer; | 
					
						
							| 
									
										
										
										
											2016-03-08 17:07:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-15 16:08:21 +00:00
										 |  |  | protected: | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * Calcule les forces appliquées à l'objet | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     virtual sf::Vector2f getForces(EngineState& state); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 17:07:09 +00:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2016-03-14 20:11:09 +00:00
										 |  |  |     Object(float x, float y); | 
					
						
							| 
									
										
										
										
											2016-03-09 18:53:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 17:07:09 +00:00
										 |  |  |     /**
 | 
					
						
							|  |  |  |      * Dessine l'objet dans la fenêtre donnée | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2016-03-15 16:08:21 +00:00
										 |  |  |     virtual void draw(sf::RenderWindow& window); | 
					
						
							| 
									
										
										
										
											2016-03-08 17:07:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 18:48:42 +00:00
										 |  |  |     /**
 | 
					
						
							|  |  |  |      * Met à jour l'objet juste avant le dessin d'une frame | 
					
						
							| 
									
										
										
										
											2016-03-08 22:27:44 +00:00
										 |  |  |      * Reçoit l'état actuel du moteur | 
					
						
							| 
									
										
										
										
											2016-03-08 18:48:42 +00:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2016-03-15 16:08:21 +00:00
										 |  |  |     virtual void update(EngineState& state); | 
					
						
							| 
									
										
										
										
											2016-03-08 18:48:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-13 18:07:35 +00:00
										 |  |  |     /**
 | 
					
						
							|  |  |  |      * Récupère la boîte englobante de l'objet | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     virtual std::unique_ptr<sf::FloatRect> getAABB() = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-15 21:00:03 +00:00
										 |  |  |     /**
 | 
					
						
							|  |  |  |      * Calcule la normale de la collision de cet objet avec un autre | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     virtual bool getNormal(Object& obj, sf::Vector2f& normal); | 
					
						
							|  |  |  |     virtual bool getNormal(Ball& obj, sf::Vector2f& normal) = 0; | 
					
						
							|  |  |  |     virtual bool getNormal(Block& obj, sf::Vector2f& normal) = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-15 16:08:21 +00:00
										 |  |  |     /**
 | 
					
						
							|  |  |  |      * Récupère l'accélération de l'objet | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     sf::Vector2f getAcceleration(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * Récupère la vitesse de l'objet | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     sf::Vector2f getVelocity(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * Modifie la vitesse de l'objet | 
					
						
							|  |  |  |      * (à utiliser avec précaution, préférer modifier les forces) | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     void setVelocity(sf::Vector2f set_velocity); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 18:48:42 +00:00
										 |  |  |     /**
 | 
					
						
							| 
									
										
										
										
											2016-03-14 20:41:20 +00:00
										 |  |  |      * Récupère la position de l'objet | 
					
						
							| 
									
										
										
										
											2016-03-08 18:48:42 +00:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2016-03-14 20:41:20 +00:00
										 |  |  |     sf::Vector2f getPosition(); | 
					
						
							| 
									
										
										
										
											2016-03-08 18:48:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 17:07:09 +00:00
										 |  |  |     /**
 | 
					
						
							| 
									
										
										
										
											2016-03-15 16:08:21 +00:00
										 |  |  |      * Récupère la masse de l'objet | 
					
						
							| 
									
										
										
										
											2016-03-08 17:07:09 +00:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2016-03-15 16:08:21 +00:00
										 |  |  |     float getMass(); | 
					
						
							| 
									
										
										
										
											2016-03-14 20:41:20 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-15 21:09:40 +00:00
										 |  |  |     /**
 | 
					
						
							|  |  |  |      * Récupère l'inverse de la masse de l'objet (en cache) | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     float getMassInvert(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-14 20:41:20 +00:00
										 |  |  |     /**
 | 
					
						
							| 
									
										
										
										
											2016-03-15 16:08:21 +00:00
										 |  |  |      * Modifie la masse de l'objet | 
					
						
							| 
									
										
										
										
											2016-03-14 20:41:20 +00:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2016-03-15 16:08:21 +00:00
										 |  |  |     void setMass(float set_mass); | 
					
						
							| 
									
										
										
										
											2016-03-08 17:07:09 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * Récupère la charge de l'objet | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2016-03-14 20:43:27 +00:00
										 |  |  |     float getCharge(); | 
					
						
							| 
									
										
										
										
											2016-03-09 18:53:08 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * Modifie la charge de l'objet | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2016-03-14 20:43:27 +00:00
										 |  |  |     void setCharge(float set_charge); | 
					
						
							| 
									
										
										
										
											2016-03-15 16:08:21 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-15 21:00:03 +00:00
										 |  |  |     /**
 | 
					
						
							|  |  |  |      * Récupère le coefficient de restitution de l'objet | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     float getRestitution(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * Modifie le coefficient de restitution de l'objet | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     void setRestitution(float set_restitution); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-15 16:08:21 +00:00
										 |  |  |     /**
 | 
					
						
							|  |  |  |      * Récupère la couche d'affichage de l'objet | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     unsigned int getLayer(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * Modifie la couche d'affichage de l'objet | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     void setLayer(unsigned int set_layer); | 
					
						
							| 
									
										
										
										
											2016-03-08 17:07:09 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 18:48:42 +00:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * Classe de comparaison des couches deux objets | 
					
						
							|  |  |  |  * Renvoie "true" si le premier objet est sur une couche | 
					
						
							|  |  |  |  * qui doit être dessinée avant celle du second | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2016-03-10 21:47:53 +00:00
										 |  |  | struct ObjectCompare { | 
					
						
							| 
									
										
										
										
											2016-03-14 20:11:09 +00:00
										 |  |  | 	bool operator()(Object* const &t1, Object* const &t2); | 
					
						
							| 
									
										
										
										
											2016-03-08 18:48:42 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 17:07:09 +00:00
										 |  |  | #endif
 |