| 
									
										
										
										
											2016-04-17 21:12:19 +00:00
										 |  |  | #ifndef __SKIZZLE_GRAVITY_BLOCK_HPP__
 | 
					
						
							|  |  |  | #define __SKIZZLE_GRAVITY_BLOCK_HPP__
 | 
					
						
							| 
									
										
										
										
											2016-04-09 03:43:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-10 05:37:09 +00:00
										 |  |  | #include <SFML/Graphics.hpp>
 | 
					
						
							|  |  |  | #include <memory>
 | 
					
						
							| 
									
										
										
										
											2016-04-09 03:43:40 +00:00
										 |  |  | #include "block.hpp"
 | 
					
						
							| 
									
										
										
										
											2016-04-12 16:11:36 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class Game; | 
					
						
							|  |  |  | enum class GravityDirection; | 
					
						
							| 
									
										
										
										
											2016-04-09 03:43:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-18 10:11:24 +00:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * Le bloc de gravité est un bloc spécial qui change l'orientation | 
					
						
							|  |  |  |  * de la gravité dans une direction prédéfinie lorsqu'il est | 
					
						
							|  |  |  |  * activé par n'importe quel objet. Ce bloc ne peut être utilisé | 
					
						
							|  |  |  |  * qu'une seule fois par partie | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2016-04-09 03:43:40 +00:00
										 |  |  | class GravityBlock : public Block { | 
					
						
							| 
									
										
										
										
											2016-04-10 05:37:09 +00:00
										 |  |  | public: | 
					
						
							|  |  |  |     typedef std::shared_ptr<GravityBlock> Ptr; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-09 03:43:40 +00:00
										 |  |  | private: | 
					
						
							|  |  |  |     GravityDirection gravity_direction; | 
					
						
							| 
									
										
										
										
											2016-04-17 21:10:30 +00:00
										 |  |  |     sf::Sprite icon_sprite; | 
					
						
							|  |  |  |     float opacity; | 
					
						
							| 
									
										
										
										
											2016-04-17 12:20:49 +00:00
										 |  |  |     bool used; | 
					
						
							| 
									
										
										
										
											2016-04-09 03:43:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-10 05:37:09 +00:00
										 |  |  | protected: | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * Initialisation des propriétés du bloc de gravité donné | 
					
						
							|  |  |  |      * depuis le fichier donné | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     static void init(std::ifstream& file, Object::Ptr object); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-09 03:43:40 +00:00
										 |  |  | public: | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * Identifiant unique du type "bloc de gravité" | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     static const unsigned int TYPE_ID; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     GravityBlock(); | 
					
						
							|  |  |  |     virtual ~GravityBlock(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * Clone ce bloc de gravité en un bloc de gravité avec les mêmes propriétés | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2016-04-10 05:37:09 +00:00
										 |  |  |     virtual Object::Ptr clone() const; | 
					
						
							| 
									
										
										
										
											2016-04-09 03:43:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-09 03:51:55 +00:00
										 |  |  |     /**
 | 
					
						
							| 
									
										
										
										
											2016-04-17 21:10:30 +00:00
										 |  |  |      * Dessin du bloc dans la fenêtre donnée | 
					
						
							| 
									
										
										
										
											2016-04-09 03:51:55 +00:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2016-04-17 21:10:30 +00:00
										 |  |  |     virtual void draw(Level& level); | 
					
						
							| 
									
										
										
										
											2016-04-09 03:51:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-09 03:43:40 +00:00
										 |  |  |     /**
 | 
					
						
							|  |  |  |      * Appelé lorsque le bloc de gravité est activé par un objet | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2016-04-11 14:32:19 +00:00
										 |  |  |     virtual void activate(Game& game, Object::Ptr object); | 
					
						
							| 
									
										
										
										
											2016-04-09 03:43:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * Récupère l'identifiant de type des blocs de gravité | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     virtual unsigned int getTypeId() const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							| 
									
										
										
										
											2016-04-10 05:37:09 +00:00
										 |  |  |      * Chargement d'un bloc de gravité depuis le fichier donné | 
					
						
							| 
									
										
										
										
											2016-04-09 03:43:40 +00:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2016-04-10 05:37:09 +00:00
										 |  |  |     static Object::Ptr load(std::ifstream& file); | 
					
						
							| 
									
										
										
										
											2016-04-09 03:43:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-10 04:53:45 +00:00
										 |  |  |     /**
 | 
					
						
							|  |  |  |      * Sauvegarde le bloc de gravité dans le fichier donné | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     virtual void save(std::ofstream& file) const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-09 03:43:40 +00:00
										 |  |  |     /**
 | 
					
						
							|  |  |  |      * Récupère la direction de gravité du bloc changeur de gravité | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     GravityDirection getGravityDirection() const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * Modifie la direction de gravité du bloc | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     void setGravityDirection(GravityDirection set_gravity_direction); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif
 |