123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- // Général
- #include <iostream>
- #include <box2d/box2d.h>
- // Locaux
- #include "Serveur.h"
- #include "description.h"
- #include "acteur.h"
- #include "AABBSightQuery.h"
- using namespace std;
- int main()
- {
- /// Introduction
- cout << "Lancement de Tank Réseau." << endl;
- /// Démarrage Box2D
- // Signalement
- cout << "Chargement du monde physique." << endl;
- // Monde Box2D
- b2Vec2 gravity(0.0f, 0.0f);
- b2World world( gravity );
- b2Vec2 dir;
- // Pramètres de simulation
- float timeStep = 1.0f / 60.0f;
- int32 velocityIterations = 8;
- int32 positionIterations = 3;
- /// Création des tanks
- // Signalement
- cout << "Création des tanks." << endl ;
- // Définitions
- b2BodyDef bodyDef;
- bodyDef.type = b2_dynamicBody;
- bodyDef.linearDamping = 10.0f ;
- b2PolygonShape dynamicBox;
- b2FixtureDef fixtureDef;
- fixtureDef.shape = &dynamicBox;
- // Création des paramètres
- dynamicBox.SetAsBox( TANK_WIDTH / 2.0f , TANK_WIDTH / 2.0f );
- fixtureDef.density = 1.0f;
- fixtureDef.friction = 0.3f;
- fixtureDef.restitution = 0.05f;
- b2Body* tank[2];
- // Tank A
- bodyDef.position.Set( 7.0f, 5.5f );
- bodyDef.userData.pointer = (uintptr_t) new Acteur({TANK_A});
- tank[ TANK_A ] = world.CreateBody( &bodyDef );
- tank[ TANK_A ]->CreateFixture( &fixtureDef );
- // Tank B
- bodyDef.position.Set( 7.0f, 3.5f );
- bodyDef.userData.pointer = (uintptr_t) new Acteur({TANK_B});
- tank[ TANK_B ] = world.CreateBody( &bodyDef );
- tank[ TANK_B ]->CreateFixture( &fixtureDef );
- // Requeteur
- AABBSightQuery myQuerer;
- b2AABB aabb;
- /// Initialisation du réseau
- // Signalement
- cout << "Création du serveur." << endl ;
- // Création du serveur
- Serveur monServeur( 25565, 2 );
- // Mise en branle
- if ( !monServeur.rendreUtilisable() )
- {
- cout << "Plantage du serveur !" << endl ;
- return 1;
- }
- // Annonce des identifiants
- unsigned int id, taille;
- id = TANK_A ;
- monServeur.envoyer( &id, id, sizeof(id) );
- id = TANK_B ;
- monServeur.envoyer( &id, id, sizeof(id) );
- /// Procédure
- // Signalement
- cout << "Début de la boucle infinie." << endl ;
- // Booléen d'arrêt
- bool stop( false );
- // Données de communication
- Cmd dataCmd;
- //vector<Entity> dataEntity;
- // Boucle
- while ( !stop )
- {
- // Recevoir les commandes de déplacement
- for ( id = 0; id < 2; id ++ )
- {
- monServeur.recevoir( &dataCmd, id, sizeof( Cmd ) );
- dir.Set( dataCmd.vx, dataCmd.vy );
- tank[id]->ApplyLinearImpulseToCenter( dir, true );
- }
- // Calculs physiques
- world.Step( timeStep, velocityIterations, positionIterations );
- // Requêtes AABB
- for ( id = 0; id < 2 ; id ++ )
- {
- myQuerer.clearData();
- dir = tank[id]->GetPosition();
- aabb.lowerBound.Set( dir.x - AABB_WIDTH / 2, dir.y - AABB_WIDTH / 32 * 9 );
- aabb.upperBound.Set( dir.x + AABB_WIDTH / 2, dir.y + AABB_WIDTH / 32 * 9 );
- world.QueryAABB( &myQuerer, aabb );
- taille = myQuerer.getSize();
- monServeur.envoyer( &taille, id, sizeof( unsigned int ) );
- monServeur.envoyer( myQuerer.getData(), id, myQuerer.getSize() );
- }
- /*dataEntity.clear();
- for ( id = 0; id < 2 ; id ++ )
- {
- dir = tank[id]->GetPosition();
- dataEntity.push_back({ dir.x, dir.y, DET_TANK, id });
- }
- for ( id = 0; id < 2 ; id ++ )
- {
- taille = dataEntity.size();
- monServeur.envoyer( &taille, id, sizeof( unsigned int ) );
- monServeur.envoyer( dataEntity.data(), id, taille * sizeof( Entity ) );
- }*/
- }
- return 0;
- }
|