1
0

main.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. // Général
  2. #include <iostream>
  3. #include <box2d/box2d.h>
  4. // Locaux
  5. #include "Serveur.h"
  6. #include "description.h"
  7. #include "acteur.h"
  8. #include "AABBSightQuery.h"
  9. using namespace std;
  10. int main()
  11. {
  12. /// Introduction
  13. cout << "Lancement de Tank Réseau." << endl;
  14. /// Démarrage Box2D
  15. // Signalement
  16. cout << "Chargement du monde physique." << endl;
  17. // Monde Box2D
  18. b2Vec2 gravity(0.0f, 0.0f);
  19. b2World world( gravity );
  20. b2Vec2 dir;
  21. // Pramètres de simulation
  22. float timeStep = 1.0f / 60.0f;
  23. int32 velocityIterations = 8;
  24. int32 positionIterations = 3;
  25. /// Création des tanks
  26. // Signalement
  27. cout << "Création des tanks." << endl ;
  28. // Définitions
  29. b2BodyDef bodyDef;
  30. bodyDef.type = b2_dynamicBody;
  31. bodyDef.linearDamping = 10.0f ;
  32. b2PolygonShape dynamicBox;
  33. b2FixtureDef fixtureDef;
  34. fixtureDef.shape = &dynamicBox;
  35. // Création des paramètres
  36. dynamicBox.SetAsBox( TANK_WIDTH / 2.0f , TANK_WIDTH / 2.0f );
  37. fixtureDef.density = 1.0f;
  38. fixtureDef.friction = 0.3f;
  39. fixtureDef.restitution = 0.05f;
  40. b2Body* tank[2];
  41. // Tank A
  42. bodyDef.position.Set( 7.0f, 5.5f );
  43. bodyDef.userData.pointer = (uintptr_t) new Acteur({TANK_A});
  44. tank[ TANK_A ] = world.CreateBody( &bodyDef );
  45. tank[ TANK_A ]->CreateFixture( &fixtureDef );
  46. // Tank B
  47. bodyDef.position.Set( 7.0f, 3.5f );
  48. bodyDef.userData.pointer = (uintptr_t) new Acteur({TANK_B});
  49. tank[ TANK_B ] = world.CreateBody( &bodyDef );
  50. tank[ TANK_B ]->CreateFixture( &fixtureDef );
  51. // Requeteur
  52. AABBSightQuery myQuerer;
  53. b2AABB aabb;
  54. /// Initialisation du réseau
  55. // Signalement
  56. cout << "Création du serveur." << endl ;
  57. // Création du serveur
  58. Serveur monServeur( 25565, 2 );
  59. // Mise en branle
  60. if ( !monServeur.rendreUtilisable() )
  61. {
  62. cout << "Plantage du serveur !" << endl ;
  63. return 1;
  64. }
  65. // Annonce des identifiants
  66. unsigned int id, taille;
  67. id = TANK_A ;
  68. monServeur.envoyer( &id, id, sizeof(id) );
  69. id = TANK_B ;
  70. monServeur.envoyer( &id, id, sizeof(id) );
  71. /// Procédure
  72. // Signalement
  73. cout << "Début de la boucle infinie." << endl ;
  74. // Booléen d'arrêt
  75. bool stop( false );
  76. // Données de communication
  77. Cmd dataCmd;
  78. //vector<Entity> dataEntity;
  79. // Boucle
  80. while ( !stop )
  81. {
  82. // Recevoir les commandes de déplacement
  83. for ( id = 0; id < 2; id ++ )
  84. {
  85. monServeur.recevoir( &dataCmd, id, sizeof( Cmd ) );
  86. dir.Set( dataCmd.vx, dataCmd.vy );
  87. tank[id]->ApplyLinearImpulseToCenter( dir, true );
  88. }
  89. // Calculs physiques
  90. world.Step( timeStep, velocityIterations, positionIterations );
  91. // Requêtes AABB
  92. for ( id = 0; id < 2 ; id ++ )
  93. {
  94. myQuerer.clearData();
  95. dir = tank[id]->GetPosition();
  96. aabb.lowerBound.Set( dir.x - AABB_WIDTH / 2, dir.y - AABB_WIDTH / 32 * 9 );
  97. aabb.upperBound.Set( dir.x + AABB_WIDTH / 2, dir.y + AABB_WIDTH / 32 * 9 );
  98. world.QueryAABB( &myQuerer, aabb );
  99. taille = myQuerer.getSize();
  100. monServeur.envoyer( &taille, id, sizeof( unsigned int ) );
  101. monServeur.envoyer( myQuerer.getData(), id, myQuerer.getSize() );
  102. }
  103. /*dataEntity.clear();
  104. for ( id = 0; id < 2 ; id ++ )
  105. {
  106. dir = tank[id]->GetPosition();
  107. dataEntity.push_back({ dir.x, dir.y, DET_TANK, id });
  108. }
  109. for ( id = 0; id < 2 ; id ++ )
  110. {
  111. taille = dataEntity.size();
  112. monServeur.envoyer( &taille, id, sizeof( unsigned int ) );
  113. monServeur.envoyer( dataEntity.data(), id, taille * sizeof( Entity ) );
  114. }*/
  115. }
  116. return 0;
  117. }