Lecture des objets depuis un fichier
This commit is contained in:
		
							parent
							
								
									57f7772b76
								
							
						
					
					
						commit
						9fb90a0371
					
				|  | @ -2,7 +2,6 @@ | |||
| #define __PTF_BLOCK_HPP__ | ||||
| 
 | ||||
| #include <SFML/Graphics.hpp> | ||||
| #include <fstream> | ||||
| #include "object.hpp" | ||||
| 
 | ||||
| class Block : public Object { | ||||
|  | @ -15,7 +14,7 @@ public: | |||
|      */ | ||||
|     static const unsigned int TYPE_ID; | ||||
| 
 | ||||
|     Block(float x, float y); | ||||
|     Block(); | ||||
|     virtual ~Block(); | ||||
| 
 | ||||
|     /**
 | ||||
|  |  | |||
|  | @ -2,6 +2,7 @@ | |||
| #define __PTF_OBJECT_HPP__ | ||||
| 
 | ||||
| #include <SFML/Graphics.hpp> | ||||
| #include <fstream> | ||||
| #include <memory> | ||||
| #include "collision.hpp" | ||||
| #include "manager.hpp" | ||||
|  | @ -17,9 +18,9 @@ private: | |||
| 
 | ||||
|     sf::VertexArray acceleration_line; | ||||
|     sf::VertexArray velocity_line; | ||||
|     mutable float inv_mass; | ||||
| 
 | ||||
|     float mass; | ||||
|     mutable float inv_mass; | ||||
|     float charge; | ||||
|     float restitution; | ||||
|     float static_friction; | ||||
|  | @ -33,9 +34,25 @@ protected: | |||
|     virtual sf::Vector2f getForces(const Manager& manager, const std::vector<ObjectPtr>& objects) const; | ||||
| 
 | ||||
| public: | ||||
|     Object(float x, float y); | ||||
|     /**
 | ||||
|      * Identifiants uniques des propriétés communes modifiables | ||||
|      */ | ||||
|     static const unsigned int PROP_MASS; | ||||
|     static const unsigned int PROP_CHARGE; | ||||
|     static const unsigned int PROP_RESTITUTION; | ||||
|     static const unsigned int PROP_STATIC_FRICTION; | ||||
|     static const unsigned int PROP_DYNAMIC_FRICTION; | ||||
|     static const unsigned int PROP_LAYER; | ||||
| 
 | ||||
|     Object(); | ||||
|     virtual ~Object(); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Charge les propriétés communes à tous les objets | ||||
|      * depuis le fichier donné dans l'objet donné | ||||
|      */ | ||||
|     static void load(std::ifstream& file, std::shared_ptr<Object> object); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Dessine l'objet dans la fenêtre donnée | ||||
|      */ | ||||
|  |  | |||
|  | @ -2,7 +2,6 @@ | |||
| #define __PTF_PLAYER_HPP__ | ||||
| 
 | ||||
| #include <SFML/Graphics.hpp> | ||||
| #include <fstream> | ||||
| #include "object.hpp" | ||||
| 
 | ||||
| class Player : public Object { | ||||
|  | @ -22,7 +21,7 @@ public: | |||
|      */ | ||||
|     static const unsigned int TYPE_ID; | ||||
| 
 | ||||
|     Player(float x, float y); | ||||
|     Player(); | ||||
|     virtual ~Player(); | ||||
| 
 | ||||
|     /**
 | ||||
|  |  | |||
										
											Binary file not shown.
										
									
								
							|  | @ -3,9 +3,9 @@ | |||
| #include "constants.hpp" | ||||
| #include "resource_manager.hpp" | ||||
| 
 | ||||
| const unsigned int Block::TYPE_ID = 1; | ||||
| const unsigned int Block::TYPE_ID = 2; | ||||
| 
 | ||||
| Block::Block(float x, float y) : Object(x, y) { | ||||
| Block::Block() : Object() { | ||||
|     // par défaut, les blocs ne sont pas déplaçables et ont
 | ||||
|     // donc une masse infinie, représentée par 0
 | ||||
|     setMass(0.f); | ||||
|  | @ -17,7 +17,13 @@ Block::Block(float x, float y) : Object(x, y) { | |||
| Block::~Block() {} | ||||
| 
 | ||||
| std::shared_ptr<Object> Block::load(std::ifstream& file) { | ||||
|     return std::shared_ptr<Object>(new Block(10, 10)); | ||||
|     std::shared_ptr<Object> object = std::shared_ptr<Object>(new Block); | ||||
| 
 | ||||
|     // lecture des propriétés communes des objets
 | ||||
|     Object::load(file, object); | ||||
|     file.seekg(1, file.cur); | ||||
| 
 | ||||
|     return object; | ||||
| } | ||||
| 
 | ||||
| void Block::draw(Manager& manager) { | ||||
|  |  | |||
|  | @ -2,20 +2,90 @@ | |||
| #include "constants.hpp" | ||||
| #include "collision.hpp" | ||||
| 
 | ||||
| Object::Object(float x, float y) : | ||||
|     acceleration(0, 0), velocity(0, 0), position(x, y), | ||||
| const unsigned int Object::PROP_MASS = 1; | ||||
| const unsigned int Object::PROP_CHARGE = 2; | ||||
| const unsigned int Object::PROP_RESTITUTION = 3; | ||||
| const unsigned int Object::PROP_STATIC_FRICTION = 4; | ||||
| const unsigned int Object::PROP_DYNAMIC_FRICTION = 5; | ||||
| const unsigned int Object::PROP_LAYER = 6; | ||||
| 
 | ||||
| Object::Object() : | ||||
|     acceleration(0, 0), velocity(0, 0), position(0, 0), | ||||
|     acceleration_line(sf::Lines, 2), | ||||
|     velocity_line(sf::Lines, 2), | ||||
|     mass(Constants::DEFAULT_MASS), | ||||
|     inv_mass(1.f / Constants::DEFAULT_MASS), | ||||
|     charge(Constants::DEFAULT_CHARGE), | ||||
|     restitution(Constants::DEFAULT_RESTITUTION), | ||||
|     inv_mass(-1.f), | ||||
| 
 | ||||
|     // valeurs par défaut pour les propriétés
 | ||||
|     // de tous les objets du jeu
 | ||||
|     mass(1.f), charge(0.f), | ||||
|     restitution(0.4f), | ||||
|     static_friction(0.4f), | ||||
|     dynamic_friction(0.2f), | ||||
|     layer(Constants::DEFAULT_LAYER) {} | ||||
|     layer(0) {} | ||||
| 
 | ||||
| Object::~Object() {} | ||||
| 
 | ||||
| void Object::load(std::ifstream& file, std::shared_ptr<Object> object) { | ||||
|     // lecture de la position de l'objet
 | ||||
|     float pos_x, pos_y; | ||||
| 
 | ||||
|     file.read(reinterpret_cast<char*>(&pos_x), sizeof(pos_x)); | ||||
|     file.read(reinterpret_cast<char*>(&pos_y), sizeof(pos_y)); | ||||
| 
 | ||||
|     object->setPosition(sf::Vector2f( | ||||
|         pos_x * Constants::GRID, pos_y * Constants::GRID | ||||
|     )); | ||||
| 
 | ||||
|     // lecture des propriétés facultatives
 | ||||
|     char prop_type = -1; | ||||
| 
 | ||||
|     while (file.read(&prop_type, 1)) { | ||||
|         switch (prop_type) { | ||||
|         case Object::PROP_MASS: | ||||
|             float mass; | ||||
|             file.read(reinterpret_cast<char*>(&mass), sizeof(mass)); | ||||
|             object->setMass(mass); | ||||
|             break; | ||||
| 
 | ||||
|         case Object::PROP_CHARGE: | ||||
|             float charge; | ||||
|             file.read(reinterpret_cast<char*>(&charge), sizeof(charge)); | ||||
|             object->setCharge(charge); | ||||
|             break; | ||||
| 
 | ||||
|         case Object::PROP_RESTITUTION: | ||||
|             float restitution; | ||||
|             file.read(reinterpret_cast<char*>(&restitution), sizeof(restitution)); | ||||
|             object->setRestitution(restitution); | ||||
|             break; | ||||
| 
 | ||||
|         case Object::PROP_STATIC_FRICTION: | ||||
|             float static_friction; | ||||
|             file.read(reinterpret_cast<char*>(&static_friction), sizeof(static_friction)); | ||||
|             object->setStaticFriction(static_friction); | ||||
|             break; | ||||
| 
 | ||||
|         case Object::PROP_DYNAMIC_FRICTION: | ||||
|             float dynamic_friction; | ||||
|             file.read(reinterpret_cast<char*>(&dynamic_friction), sizeof(dynamic_friction)); | ||||
|             object->setDynamicFriction(dynamic_friction); | ||||
|             break; | ||||
| 
 | ||||
|         case Object::PROP_LAYER: | ||||
|             char layer; | ||||
|             file.read(&layer, 1); | ||||
|             object->setLayer((int) layer - 127); | ||||
|             break; | ||||
| 
 | ||||
|         default: | ||||
|             // propriété de type inconnu : on recule
 | ||||
|             // d'un octet et on sort
 | ||||
|             file.seekg(-1, file.cur); | ||||
|             return; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| sf::Vector2f Object::getForces( | ||||
|     const Manager& manager, const std::vector<ObjectPtr>& objects | ||||
| ) const { | ||||
|  |  | |||
|  | @ -4,9 +4,9 @@ | |||
| #include <array> | ||||
| #include <iostream> | ||||
| 
 | ||||
| const unsigned int Player::TYPE_ID = 0; | ||||
| const unsigned int Player::TYPE_ID = 1; | ||||
| 
 | ||||
| Player::Player(float x, float y) : Object(x, y) { | ||||
| Player::Player() : Object() { | ||||
|     // déplacement de l'origine au centre de la balle
 | ||||
|     sprite.setOrigin(sf::Vector2f(getRadius(), getRadius())); | ||||
| } | ||||
|  | @ -14,19 +14,19 @@ Player::Player(float x, float y) : Object(x, y) { | |||
| Player::~Player() {} | ||||
| 
 | ||||
| std::shared_ptr<Object> Player::load(std::ifstream& file) { | ||||
|     float pos_x, pos_y; | ||||
|     std::shared_ptr<Object> object = std::shared_ptr<Object>(new Player); | ||||
|     std::shared_ptr<Player> player = std::dynamic_pointer_cast<Player>(object); | ||||
| 
 | ||||
|     file.read(reinterpret_cast<char*>(&pos_x), sizeof(pos_x)); | ||||
|     file.read(reinterpret_cast<char*>(&pos_y), sizeof(pos_y)); | ||||
|     // lecture du numéro de joueur
 | ||||
|     char player_number; | ||||
|     file.read(&player_number, 1); | ||||
|     player->setPlayerNumber(player_number); | ||||
| 
 | ||||
|     pos_x *= Constants::GRID; | ||||
|     pos_y *= Constants::GRID; | ||||
|     // lecture des propriétés communes des objets
 | ||||
|     Object::load(file, object); | ||||
|     file.seekg(1, file.cur); | ||||
| 
 | ||||
|     std::shared_ptr<Player> player = | ||||
|         std::shared_ptr<Player>(new Player(pos_x, pos_y)); | ||||
|     // player->setPlayerNumber(i);
 | ||||
| 
 | ||||
|     return std::dynamic_pointer_cast<Object>(player); | ||||
|     return object; | ||||
| } | ||||
| 
 | ||||
| sf::Vector2f Player::getForces(const Manager& manager, const std::vector<ObjectPtr>& objects) const { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue