Advertisement
Lynix

Indentawhat?

Nov 2nd, 2015
259
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 56.93 KB | None | 0 0
  1. /*The MIT License (MIT)
  2.  
  3. Copyright (c) 2015 Chapuis Paul
  4.  
  5. Permission is hereby granted, free of charge, to any person obtaining a copy
  6. of this software and associated documentation files (the "Software"), to deal
  7. in the Software without restriction, including without limitation the rights
  8. to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  9. copies of the Software, and to permit persons to whom the Software is
  10. furnished to do so, subject to the following conditions:
  11.  
  12. The above copyright notice and this permission notice shall be included in all
  13. copies or substantial portions of the Software.
  14.  
  15. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16. IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17. FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  18. AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19. LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  20. OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  21. SOFTWARE.*/#include <cmath>
  22. #include <sstream>
  23. #include <fstream>
  24. #include <ctime>
  25. #include <cstdio>
  26. #include "windows.h"
  27. #include <SFML/Network.hpp>
  28. #include "affichage.h"
  29. #include "Vaisseau.h"
  30. #include <sys/time.h>
  31. #include <chrono>
  32. #include <list>
  33. #ifndef BUFFER_OFFSET
  34. #define BUFFER_OFFSET(offset) ((char*)NULL + (offset))
  35. #endif
  36. #include <queue>
  37. #include "envoiSecurise2.h"
  38. bool finDuThread(true);
  39. void ThreadReseau()
  40. {
  41. std::chrono::time_point<std::chrono::system_clock> FPS;
  42.  
  43. while(finDuThread)
  44. {
  45.  
  46. }
  47. }
  48. uint16_t identification(sf::RenderWindow *window, conversation*TCP, sf::Font *police, std::list<joueur>::iterator player, affichage *Vaisseau, bool &ok)
  49. {
  50. bool little;
  51.         uint16_t nombre50(10);
  52.     uint8_t *octet50(reinterpret_cast<uint8_t*>(&nombre50));
  53.     if(octet50[1] == 10)
  54.     {
  55. little = false;
  56.     }
  57.     else
  58.     {
  59. little = true;
  60.     }
  61. bool versionOK(false);
  62. sf::Texture connexion;
  63. sf::Sprite connexion2;
  64. connexion.loadFromFile("identification.png");
  65. connexion2.setTexture(connexion);
  66. connexion2.setPosition(sf::Vector2f(0, 0));
  67. bool continuer(true);
  68. sf::Text Pseudo;
  69. sf::Text MotDePasse;
  70. std::string pseudo2("Pseudo");
  71. std::wstring motDePasse2(L"*****");
  72. Pseudo.setFont(*police);
  73. Pseudo.setCharacterSize(40);
  74. Pseudo.setString(pseudo2);
  75. Pseudo.setPosition(sf::Vector2f(300,288));
  76. Pseudo.setColor(sf::Color::Red);
  77. MotDePasse.setFont(*police);
  78. MotDePasse.setCharacterSize(40);
  79. MotDePasse.setString(motDePasse2);
  80. MotDePasse.setPosition(sf::Vector2f(300,388));
  81. MotDePasse.setColor(sf::Color::Black);
  82. std::chrono::time_point<std::chrono::system_clock> limite;
  83. int selection(0);
  84. sf::Text acceptationContrat;
  85. std::string contrat ("Copyright (c) 2015 Chapuis Paul");
  86. contrat.push_back(10);
  87. contrat.push_back(10);
  88. contrat+="Ce logiciel est distribue sous licence MIT.";
  89. acceptationContrat.setString(contrat);
  90. acceptationContrat.setPosition(sf::Vector2f(0,0));
  91. acceptationContrat.setCharacterSize(20);
  92. acceptationContrat.setColor(sf::Color::Black);
  93. acceptationContrat.setFont(*police);
  94. float rapport1(1);
  95. float rapport2(1);
  96. std::string etat2("Etat : Aucunes tentatives.");
  97. sf::Text etat;
  98. etat.setFont(*police);
  99. etat.setCharacterSize(40);
  100. etat.setString(etat2);
  101. etat.setPosition(sf::Vector2f(200,500));
  102. etat.setColor(sf::Color::Black);
  103. std::string ancienPseudo;
  104. uint16_t identifiant16bits(0);
  105. int8_t confirmation[3];
  106. uint8_t identification2(5);
  107. uint16_t version(0);
  108. confirmation[0] = *reinterpret_cast<int8_t*>(&identification2);
  109. int8_t *octetIdentification(reinterpret_cast<int8_t*>(&version));
  110. if(little)
  111. {
  112. confirmation[1] = octetIdentification[1];
  113. confirmation[2] = octetIdentification[0];
  114. }
  115. else
  116. {
  117. confirmation[1] = octetIdentification[0];
  118. confirmation[2] = octetIdentification[1];
  119. }
  120. TCP->envoyer(confirmation, 3);
  121. while(continuer)
  122. {
  123. if(TCP->erreur)
  124. {
  125. etat2 = "Erreur : Serveur non-accessible";
  126. }
  127. if(std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now()-limite).count()>=16)
  128. {window->clear(sf::Color::Black);
  129. window->draw(connexion2);
  130. window->draw(Pseudo);
  131. window->draw(MotDePasse);
  132. window->draw(etat);
  133. window->draw(acceptationContrat);
  134. window->display();
  135. limite = std::chrono::system_clock::now();
  136. }
  137.  
  138. sf::Event event;
  139. if(window->pollEvent(event))
  140. {
  141. if (event.type == sf::Event::TextEntered)
  142. {
  143. if(selection == 0)
  144. {
  145. if (event.text.unicode < 128 && event.text.unicode != 8&&event.text.unicode != 13 &&event.text.unicode != 9&& pseudo2.size() < 254)
  146. pseudo2.push_back(event.text.unicode);
  147. }
  148. else if (selection == 1)
  149. {
  150. if (event.text.unicode < 256 && event.text.unicode != 8&&event.text.unicode != 13 &&event.text.unicode != 9&& motDePasse2.size() < 254)
  151. motDePasse2.push_back(event.text.unicode);
  152. }
  153. if(event.text.unicode == 8)
  154. {
  155. if(selection == 0 && pseudo2.size() > 0)
  156. {
  157.    pseudo2 = pseudo2.substr(0, pseudo2.size()-1);
  158. }
  159. else if(selection==1 && motDePasse2.size() > 0)
  160. {
  161. motDePasse2 = motDePasse2.substr(0, motDePasse2.size()-1);
  162. }
  163. }
  164. std::string pseudo3;
  165. std::wstring motDePasse3;
  166. std::wstring motDePasse4;
  167. motDePasse4.clear();
  168. for(unsigned int nombre(0); nombre < motDePasse2.size(); ++nombre)
  169. {
  170. motDePasse4.push_back('*');
  171. }
  172. Pseudo.setString(pseudo2);
  173. MotDePasse.setString(motDePasse4);
  174. sf::FloatRect limites = Pseudo.getLocalBounds();
  175.         if(limites.width >= 170) ///################################################################"
  176.         {
  177. //(800-x)
  178. bool continuer = true;
  179. unsigned int nombre2(0);
  180. /// trouver le nombre le plus à droite.
  181. nombre2 = pseudo2.size()-1;
  182. float position2 = Pseudo.findCharacterPos(nombre2).x;
  183. unsigned int nombre3(0);
  184. for(unsigned int nombre(pseudo2.size()); nombre >0 && continuer; --nombre)
  185. {
  186. sf::Vector2f positionCharacter = Pseudo.findCharacterPos(nombre);
  187. if(position2-positionCharacter.x >= 170)
  188. {
  189. continuer = false;
  190. nombre3 = nombre;
  191. }
  192. }
  193. for(unsigned int nombre(nombre3); nombre < pseudo2.size(); ++nombre)
  194. {
  195. pseudo3.push_back(pseudo2[nombre]);
  196. }
  197. Pseudo.setString(pseudo3);
  198.         }
  199. sf::FloatRect limites2 = MotDePasse.getLocalBounds();
  200.         if(limites2.width >= 170) ///################################################################"
  201.         {
  202. bool continuer = true;
  203. unsigned int nombre2(0);
  204. /// trouver le nombre le plus à droite.
  205. nombre2 = motDePasse4.size()-1;
  206. float position2 = MotDePasse.findCharacterPos(nombre2).x;
  207. unsigned int nombre3(0);
  208. for(unsigned int nombre(motDePasse4.size()); nombre >0 && continuer; --nombre)
  209. {
  210. sf::Vector2f positionCharacter = MotDePasse.findCharacterPos(nombre);
  211. if(position2-positionCharacter.x >= 170)
  212. {
  213. continuer = false;
  214. nombre3 = nombre;
  215. }
  216. }
  217. for(unsigned int nombre(nombre3); nombre < motDePasse4.size(); ++nombre)
  218. {
  219. motDePasse3.push_back('*');
  220. }
  221. MotDePasse.setString(motDePasse3);
  222.         }
  223.  
  224. if(event.text.unicode == uint32_t(13) && pseudo2.size() > 0 && motDePasse2.size() > 0 && versionOK)
  225. {
  226. uint16_t taille2(0);
  227. taille2 += pseudo2.size();
  228. taille2 += motDePasse2.size()*4;
  229. taille2 += 3;
  230. int8_t tableau[taille2];
  231. uint8_t identifiant(0);
  232. tableau[0] = *reinterpret_cast<int8_t*>(&identifiant);
  233. uint8_t taillePseudo(pseudo2.size());
  234. uint8_t tailleMdp(motDePasse2.size());
  235. tableau[1] = *reinterpret_cast<int8_t*>(&taillePseudo);
  236. tableau[2] = *reinterpret_cast<int8_t*>(&tailleMdp);
  237. uint16_t positionInitialisation(3);
  238. for(unsigned int nombre(0); nombre < pseudo2.size(); ++nombre)
  239. {
  240. tableau[positionInitialisation] = pseudo2[nombre];
  241. ++positionInitialisation;
  242.  
  243. }
  244. for(unsigned int nombre(0); nombre < motDePasse2.size(); ++nombre)
  245. {
  246. uint32_t caractere = motDePasse2[nombre];
  247. int8_t *octet = reinterpret_cast<int8_t*>(&caractere);
  248. if(little)
  249. {
  250. tableau[positionInitialisation] = octet[3];
  251. ++positionInitialisation;
  252. tableau[positionInitialisation] = octet[2];
  253. ++positionInitialisation;
  254. tableau[positionInitialisation] = octet[1];
  255. ++positionInitialisation;
  256. tableau[positionInitialisation] = octet[0];
  257. ++positionInitialisation;
  258. }
  259. else
  260. {
  261. tableau[positionInitialisation] = octet[0];
  262. ++positionInitialisation;
  263. tableau[positionInitialisation] = octet[1];
  264. ++positionInitialisation;
  265. tableau[positionInitialisation] = octet[2];
  266. ++positionInitialisation;
  267. tableau[positionInitialisation] = octet[3];
  268. ++positionInitialisation;
  269. }
  270. }
  271. TCP->envoyer(tableau, taille2);
  272. ancienPseudo = pseudo2;
  273. pseudo2.clear();
  274. motDePasse2.clear();
  275. }
  276. }
  277. else if (event.type == sf::Event::Closed)
  278. {
  279. ok = false;
  280. return 0;
  281. }
  282. else if (event.type == sf::Event::KeyPressed)
  283. {
  284. if (event.key.code == sf::Keyboard::Down)
  285. {
  286. if(selection != 1)
  287. {++selection;
  288. Pseudo.setColor(sf::Color::Black);
  289. MotDePasse.setColor(sf::Color::Red);
  290. }
  291. }
  292. else if (event.key.code == sf::Keyboard::Up)
  293. {
  294. if(selection != 0)
  295. {--selection;
  296. Pseudo.setColor(sf::Color::Red);
  297. MotDePasse.setColor(sf::Color::Black);
  298. }
  299. }
  300. }
  301. }
  302.  
  303. TCP->actualiser();
  304. if(TCP->resultat.size() > 0)
  305. {
  306.  
  307. std::deque<int8_t> receptionIdentifiant = TCP->resultat[0];
  308. TCP->resultat.pop_front();
  309. uint8_t motif(0);
  310. motif = *reinterpret_cast<uint8_t*>(&receptionIdentifiant[0]);
  311. if(motif == 7)
  312. {
  313.  
  314. int8_t *octet(reinterpret_cast<int8_t*>(&identifiant16bits));
  315. if(little)
  316. {
  317. octet[0] = receptionIdentifiant[2];
  318. octet[1] = receptionIdentifiant[1];
  319. }
  320. else
  321. {
  322. octet[0] = receptionIdentifiant[1];
  323. octet[1] = receptionIdentifiant[2];
  324. }
  325. player->modele = *reinterpret_cast<uint8_t*>(&receptionIdentifiant[3]);
  326. player->empire = *reinterpret_cast<uint8_t*>(&receptionIdentifiant[4]);
  327. player->id = identifiant16bits;
  328. player->pseudo = ancienPseudo;
  329. if(player->modele == 0)
  330. {
  331. player->modelisation = Vaisseau;
  332. player->vitesseMax = 4;
  333. }
  334. else
  335. {
  336. player->modelisation = Vaisseau;
  337. player->vitesseMax = 4;
  338. }
  339. if(player->empire == 0)
  340. {
  341. player->couleur = 'r';
  342. }
  343. else if(player->empire == 1)
  344. {
  345. player->couleur = 'v';
  346. }
  347. else if(player->empire == 2)
  348. {
  349. player->couleur = 'b';
  350. }
  351. else if(player->empire == 3)
  352. {
  353. player->couleur = 'r';
  354. }
  355. else if(player->empire == 4)
  356. {
  357. player->couleur = 'b';
  358. }
  359. continuer = false;
  360. }
  361. else if (motif == 0)
  362. {
  363. uint8_t resultatConnecte(0);
  364. resultatConnecte = *reinterpret_cast<uint8_t*>(&receptionIdentifiant[1]);
  365. if(resultatConnecte == 1)
  366. {
  367. etat2 = "Etat : Identification reussi.";
  368. etat.setString(etat2);
  369. }
  370. else if (resultatConnecte == 0)
  371. {
  372. etat2 = "Etat : Echec de l'identification.";
  373. etat.setString(etat2);
  374. }
  375. }
  376. else if (motif == 9)
  377. {
  378. uint8_t resultat = *reinterpret_cast<int8_t*>(&receptionIdentifiant[1]);
  379. if(resultat == 1)
  380. {
  381. versionOK = true;
  382. }
  383. else
  384. {
  385. etat2 = "Etat : Version non-compatible.";
  386. etat.setString(etat2);
  387. }
  388. }
  389. }
  390. }
  391. return identifiant16bits;
  392. }
  393. point calculerPoint(anglePts angles)
  394. {
  395. double X3 = cos(angles.angleY * 3.14159265358979323846/180) * angles.longueur1;
  396. double Z3 = cos(angles.angleY * 3.14159265358979323846/180) * angles.longueur1;
  397. double Y3 = sin(angles.angleY *3.14159265358979323846/180) * angles.longueur1;
  398.  
  399. X3 *= cos(angles.angleX * 3.14159265358979323846/180);
  400. Z3 *= sin(angles.angleX * 3.14159265358979323846/180);
  401. return point (X3, Y3, Z3);
  402. }
  403. double calculerAngle(double angle)
  404. {
  405. return sin(angle * 3.14159265358979323846/180);
  406. }
  407. double calculerAngle2(double angle)
  408. {
  409. return cos(angle *3.14159265358979323846/180);
  410. }
  411. int main(){
  412. sf::Color couleursDorigine[324];
  413. for(unsigned int nombre(0); nombre < 324; ++nombre)
  414. {
  415. couleursDorigine[nombre] = sf::Color(0, 0, 0, 255);
  416. }
  417. uint8_t gachette2(0);
  418. uint8_t axe_X2(1);
  419. uint8_t axe_Y2(1);
  420.     uint8_t positionX(0);
  421.     uint8_t positionY(0);
  422.     uint16_t identifiant16bits(0);
  423.     std::chrono::time_point<std::chrono::system_clock> commandes;
  424.     std::chrono::time_point<std::chrono::system_clock> timeOut;
  425.      std::chrono::time_point<std::chrono::system_clock> defilementCredits;
  426. int8_t paquetUDP[10240];
  427. bool little;
  428.         uint16_t nombre50(10);
  429.     uint8_t *octet50(reinterpret_cast<uint8_t*>(&nombre50));
  430.     if(octet50[1] == 10)
  431.     {
  432. little = false;
  433.     }
  434.     else
  435.     {
  436. little = true;
  437.     }
  438. if(CLOCKS_PER_SEC < 1000)
  439. {
  440.  
  441. }
  442. sf::ContextSettings settings(24, 0, 0, 3,3);
  443. sf::RenderWindow window(sf::VideoMode(800, 600), "Fly in Celarivers", sf::Style::Default, settings);
  444.  
  445. GLenum initialisationGLEW( glewInit());
  446. if(initialisationGLEW != GLEW_OK)
  447. {
  448. return 0;}
  449.  
  450. std::string shader1("#version 150 core");
  451. shader1+=char(10);
  452. shader1+="in vec3 in_Vertex;";
  453. shader1+=char(10);
  454. shader1+="in vec3 in_Color;";
  455. shader1+=char(10);
  456. shader1+="uniform mat4 projection;";
  457. shader1+=char(10);
  458. shader1+="uniform mat4 modelview;";
  459. shader1+=char(10);
  460. shader1+="out vec3 color;";
  461. shader1+=char(10);
  462. shader1+="void main()";
  463. shader1+=char(10);
  464. shader1+="{";
  465. shader1+=char(10);
  466. shader1+="gl_Position = projection * modelview * vec4(in_Vertex, 1.0);";
  467. shader1+=char(10);
  468. shader1+="color = in_Color;";
  469. shader1+=char(10);
  470. shader1+="}";
  471.  
  472. std::string shader2 ("#version 150 core");
  473. shader2+= char(10);
  474. shader2+="in vec3 color;";
  475. shader2+= char(10);
  476. shader2+="out vec4 out_Color;";
  477. shader2+= char(10);
  478. shader2+="void main()";
  479. shader2+= char(10);
  480. shader2+="{";
  481. shader2+= char(10);
  482. shader2+="out_Color = vec4(color, 1.0);";
  483. shader2+= char(10);
  484. shader2+="}";
  485.  
  486. std::string shader3("#version 150 core");
  487. shader3+=char(10);
  488. shader3+="in vec3 in_Vertex;";
  489. shader3+=char(10);
  490. shader3+="uniform mat4 projection;";
  491. shader3+=char(10);
  492. shader3+="uniform mat4 modelview;";
  493. shader3+=char(10);
  494. shader3+="void main()";
  495. shader3+=char(10);
  496. shader3+="{";
  497. shader3+=char(10);
  498. shader3+="gl_Position = projection * modelview * vec4(in_Vertex, 1.0);";
  499. shader3+=char(10);
  500. shader3+="}";
  501. std::string shader4 ("#version 150 core");
  502. shader4+= char(10);
  503. shader4+="out vec4 out_Color;";
  504. shader4+= char(10);
  505. shader4+="void main()";
  506. shader4+= char(10);
  507. shader4+="{";
  508. shader4+= char(10);
  509. shader4+="out_Color = vec4(0.0,1.0,0.0, 1.0);";
  510. shader4+= char(10);
  511. shader4+="}";
  512. Affichage2 shader;
  513. Affichage2 shaderTextures;
  514.  
  515. shader.charger(shader1, shader2);
  516. shaderTextures.charger(shader3, shader4);
  517.  
  518. glm::mat4 projection = glm::perspective(70.0, (double) 800/600,1.0,800.0);
  519. glm::mat4 modelview = glm::mat4(1.0);
  520. anglePts angles;
  521. angles.angleX=0;
  522. angles.angleY=0;
  523. angles.longueur1 = 1;
  524. point position(0, 0, 0);
  525. anglePts angleCamera;
  526. angleCamera.angleX=0;
  527. angleCamera.angleY=0;
  528. angleCamera.longueur1 = 15;
  529. affichage Vaisseau;
  530. if(!Vaisseau.chargerFichier("vaisseau Jeux.obj", 0, 1, "vaisseau Jeux.mtl"))
  531. {
  532. return 0;
  533. }
  534. int element(0);
  535.  
  536. Vaisseau.charger2(0);
  537. joueur scorpion(0, anglePts(70, 0, 0, 0, 0), &Vaisseau, point(250, 6, 0), 'b', "Kayaba", 300,  0);
  538. joueur scorpion2(0, anglePts(0, 0, 0, 0, 0), &Vaisseau, point(245, 0, 3), 'v', "Midorima", 300,  0);
  539. std::string ipServeur = "celarivers.ddns.net";
  540. //std::string ipServeur = "127.0.0.1";
  541. sf::IpAddress IPserveur2(ipServeur);
  542.  
  543. sf::TcpSocket connexion;
  544. sf::UdpSocket connexion2;
  545.  
  546. connexion.setBlocking(false);
  547. connexion2.setBlocking(false);
  548. bool connecte(false);
  549. sf::Socket::Status status = connexion.connect(ipServeur, 53425);
  550. int8_t paquet[10240];
  551. conversation TCP;
  552. TCP.paquet = paquet;
  553. TCP.TCP = &connexion;
  554.  
  555. if (status == sf::Socket::Done || status == sf::Socket::NotReady)
  556. {
  557.  connecte = true;
  558.  
  559. }
  560. else if (status == sf::Socket::Error)
  561. {
  562.  
  563. }
  564. if(connecte == false)
  565. {
  566.  
  567. return 0;
  568. }
  569.  
  570.  
  571. sf::Font police;
  572. if(!police.loadFromFile("arial.ttf"))
  573. {
  574. return 0;
  575. }
  576. std::list<joueur> joueurs;
  577. joueurs.emplace_back();
  578. bool ok (true);
  579. identifiant16bits = identification(&window, &TCP, &police, joueurs.begin(), &Vaisseau, ok);
  580. if(ok)
  581. {
  582. if(connexion2.bind(53427) != sf::Socket::Status::Done)
  583. {
  584.  
  585. }
  586.  
  587. std::string texte;
  588. texte = "message";
  589. sf::Text messagesTchat;
  590. sf::Text texteVitesse;
  591. messagesTchat.setFont(police);
  592. messagesTchat.setString(texte);
  593. messagesTchat.setPosition(sf::Vector2f(16, 575));
  594. messagesTchat.setCharacterSize(10);
  595. messagesTchat.setColor(sf::Color::Black);
  596.  
  597. texteVitesse.setFont(police);
  598. texteVitesse.setPosition(sf::Vector2f(800-130, 245));
  599. texteVitesse.setCharacterSize(15);
  600. texteVitesse.setColor(sf::Color::Black);
  601.     double tailleFenetrelongueur;
  602.     double tailleFenetrelargeur;
  603.     double rotationX (0);
  604.     double rotationY (0);
  605.     double nombreD=60;
  606.     //Cube.comparerR(cube2);
  607.     sf::Texture skybox;
  608.     sf::Texture conversation;
  609.     bool modificationCouleur(true);
  610.  
  611.     sf::Texture radar ;
  612.     sf::Texture Carte;
  613. sf::Texture speed;
  614. Carte.loadFromFile("Carte.png");
  615. skybox.loadFromFile("skybox espace.png");
  616. conversation.loadFromFile("Conversation.png");
  617. conversation.setSmooth(true);
  618. sf::Sprite Conversation;
  619. sf::Sprite Carte2;
  620. sf::Sprite speed2;
  621.  
  622.     sf::Texture menu ;
  623.     sf::Texture menuSelection;
  624.     sf::Texture menuNormal;
  625. menu.loadFromFile("menu.png");
  626. menuSelection.loadFromFile("selectionne.png");
  627. menuNormal.loadFromFile("non-selectionne.png");
  628. menuSelection.setSmooth(true);
  629. menuNormal.setSmooth(true);
  630. sf::Sprite spriteMenuNormal;
  631. sf::Sprite spriteMenuSelection;
  632. spriteMenuNormal.setTexture(menuNormal);
  633. spriteMenuSelection.setTexture(menuSelection);
  634. spriteMenuNormal.setScale(0.75, 0.75);
  635. spriteMenuSelection.setScale(0.75, 0.75);
  636. uint8_t choix(1);
  637. sf::Text les_textesMenu[1];
  638. sf::Vector2f lesPositionsMenu[1];
  639. sf::Vector2f lesPositionsTexteMenu[1];
  640. lesPositionsMenu[0] = sf::Vector2f(15, 340);
  641. les_textesMenu[0].setCharacterSize(25);
  642. les_textesMenu[0].setFont(police);
  643. les_textesMenu[0].setString("Credits");
  644. les_textesMenu[0].setColor(sf::Color::Red);
  645. les_textesMenu[0].setPosition(sf::Vector2f(22, 337));
  646. menu.setSmooth(true);
  647. sf::Sprite menu2;
  648. menu2.setTexture(menu);
  649. sf::Vector2f positionMenu(-127.0, 0);
  650. menu2.setPosition(positionMenu);
  651. bool affichageMenu(false);
  652. bool ouvrirMenu(false);
  653. bool menuOuvert(false);
  654. bool fermerMenu(false);
  655. std::chrono::time_point<std::chrono::system_clock> tempsMenu;
  656. float positionInferieur(-172.0);
  657. menu2.setScale(0.75, 0.75);
  658. positionInferieur *= 0.75;
  659. bool creditsOuverts(false);
  660. uint8_t identifiantFenetreCredits(0);
  661. std::unique_ptr<sf::RenderWindow> fenetreCredits;
  662. sf::Text texteCredits;
  663. std::string texteDuCredit("CREDITS : ");
  664. texteDuCredit.push_back(10);
  665. texteDuCredit.push_back(10);
  666. texteDuCredit += "Programmation : Paul Chapuis";
  667. texteDuCredit.push_back(10);
  668. texteDuCredit += "Modelisations : Abdelkrim Benhabib";
  669. texteDuCredit.push_back(10);
  670. texteDuCredit.push_back(10);
  671. texteDuCredit+="REMERCIEMENTS : ";
  672. texteDuCredit.push_back(10);texteDuCredit.push_back(10);
  673. texteDuCredit+="Fly in Celarivers utilise SFML, merci a Laurent Gomila pour avoir conçu SFML. (http://www.sfml-dev.org/index-fr.php)";
  674. texteDuCredit.push_back(10);
  675. texteDuCredit+="Fly in Celarivers utilise OpenGL, Glew, Glm, merci a Khronos pour avoir concu des outils. (https://www.opengl.org/)";
  676. texteDuCredit.push_back(10);
  677. texteDuCredit+="Merci a Lynix, Soin, gbdivers, Bacelar, Str4nger, votre aide a ete précieuse ! ";
  678. texteDuCredit.push_back(10);
  679. texteDuCredit.push_back(10);
  680. texteDuCredit+="Fly in celarivers est distribue sous licence MIT";
  681. texteDuCredit.push_back(10);
  682. texteDuCredit+="LICENCE : ";
  683. texteDuCredit.push_back(10);texteDuCredit.push_back(10);
  684. texteDuCredit+="The MIT License (MIT)";
  685. texteDuCredit.push_back(10);
  686. texteDuCredit.push_back(10);
  687. texteDuCredit+="Copyright (c) 2015 Chapuis Paul";
  688. texteDuCredit.push_back(10);
  689. texteDuCredit.push_back(10);
  690. texteDuCredit+="Permission is hereby granted, free of charge, to any person obtaining a copy";
  691. texteDuCredit.push_back(10);
  692. texteDuCredit+="of this software and associated documentation files (the ""Software""), to deal";
  693. texteDuCredit.push_back(10);
  694. texteDuCredit+="in the Software without restriction, including without limitation the rights";
  695. texteDuCredit.push_back(10);
  696. texteDuCredit+="to use, copy, modify, merge, publish, distribute, sublicense, and/or sell";
  697. texteDuCredit.push_back(10);
  698. texteDuCredit+="copies of the Software, and to permit persons to whom the Software is";
  699. texteDuCredit.push_back(10);
  700. texteDuCredit+="furnished to do so, subject to the following conditions:";
  701. texteDuCredit.push_back(10);
  702. texteDuCredit.push_back(10);
  703. texteDuCredit+="The above copyright notice and this permission notice shall be included in all";
  704. texteDuCredit.push_back(10);
  705. texteDuCredit+="copies or substantial portions of the Software.";
  706. texteDuCredit.push_back(10);
  707. texteDuCredit.push_back(10);
  708. texteDuCredit+="THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR";
  709. texteDuCredit.push_back(10);
  710. texteDuCredit+="IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,";
  711. texteDuCredit.push_back(10);
  712. texteDuCredit+="FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE";
  713. texteDuCredit.push_back(10);
  714. texteDuCredit+="AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER";
  715. texteDuCredit.push_back(10);
  716. texteDuCredit+="LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,";
  717. texteDuCredit.push_back(10);
  718. texteDuCredit+="OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE";
  719. texteDuCredit.push_back(10);
  720. texteDuCredit+="SOFTWARE.";
  721. texteCredits.setString(texteDuCredit);
  722. texteCredits.setFont(police);
  723. texteCredits.setCharacterSize(10);
  724. sf::Vector2f positionCredits(0, 20);
  725. texteCredits.setPosition(sf::Vector2f(0, 20));
  726. texteCredits.setColor(sf::Color::Black);
  727. uint8_t selectionMenuX(0);
  728. uint8_t selectionMenuY(0);
  729. Conversation.setTexture(conversation);
  730. speed.loadFromFile("vitesse.png");
  731. speed2.setTexture(speed);
  732. Carte2.setTexture(Carte);
  733. Conversation.setPosition(sf::Vector2f(0,295));
  734. Carte2.setScale(0.5, 0.5);
  735. speed2.setScale(0.5, 0.5);
  736. Carte2.setPosition(sf::Vector2f(800-237, 0)); //19.5 + 198
  737. speed2.setPosition(sf::Vector2f(800-237, 237));
  738. std::vector<std::vector<sf::Vertex> > vertices;
  739. unsigned int x(0);
  740. unsigned int y(0);
  741. for(unsigned int nombre(0); nombre < 324; ++nombre)
  742. {
  743. vertices.push_back(std::vector<sf::Vertex>());
  744. for(unsigned int nombre2(0); nombre2 < 4; ++nombre2)
  745. {
  746. vertices[vertices.size()-1].push_back(sf::Vertex());
  747. vertices[vertices.size()-1][0].color = couleursDorigine[nombre];
  748. vertices[vertices.size()-1][0].position=sf::Vector2f(582.0 + (x*11),19.5+(y*11));
  749. vertices[vertices.size()-1].push_back(sf::Vertex());
  750. vertices[vertices.size()-1][1].color = couleursDorigine[nombre];
  751. vertices[vertices.size()-1][1].position=sf::Vector2f(582.0 + ((x+1)*11),19.5+(y*11));
  752. vertices[vertices.size()-1].push_back(sf::Vertex());
  753. vertices[vertices.size()-1][2].color = couleursDorigine[nombre];
  754. vertices[vertices.size()-1][2].position=sf::Vector2f(582.0 + ((x+1)*11),19.5+((y+1)*11));
  755. vertices[vertices.size()-1].push_back(sf::Vertex());
  756. vertices[vertices.size()-1][3].color = couleursDorigine[nombre];
  757. vertices[vertices.size()-1][3].position=sf::Vector2f(582.0 + (x*11),19.5+((y+1)*11));
  758. }
  759. ++x;
  760. if(x == 18)
  761. {x=0;
  762. ++y;
  763.  
  764. }
  765. }
  766. bool running = true;
  767. double angleX(0);
  768. double angleY(0);
  769. point camera(0 , 0, 0);
  770. unsigned int compteurFPS(0);
  771. const GLubyte *version(glGetString(GL_VERSION));
  772. std::vector <float> ligne2;
  773. bool prison(true);
  774. for(int nombre(-250); nombre <= 250; nombre+=50)
  775. {
  776. ligne2.push_back(float(nombre));
  777. ligne2.push_back(250.0);
  778. ligne2.push_back(250.0);
  779. ligne2.push_back(float(nombre));
  780. ligne2.push_back(-250.0);
  781. ligne2.push_back(250.0);
  782. ligne2.push_back(float(nombre));
  783. ligne2.push_back(250.0);
  784. ligne2.push_back(-250.0);
  785. ligne2.push_back(float(nombre));
  786. ligne2.push_back(-250.0);
  787. ligne2.push_back(-250.0);
  788. }
  789.  
  790. for(int nombre(-250); nombre <= 250; nombre+=50)
  791. {
  792. ligne2.push_back(250.0);
  793. ligne2.push_back(250.0);
  794. ligne2.push_back(float(nombre));
  795. ligne2.push_back(250.0);
  796. ligne2.push_back(-250.0);
  797. ligne2.push_back(float(nombre));
  798. ligne2.push_back(-250.0);
  799. ligne2.push_back(250.0);
  800. ligne2.push_back(float(nombre));
  801. ligne2.push_back(-250.0);
  802. ligne2.push_back(-250.0);
  803. ligne2.push_back(float(nombre));
  804. }
  805.  
  806. for(int nombre(-250); nombre <= 250; nombre+=50)
  807. {
  808. ligne2.push_back(250.0);
  809. ligne2.push_back(float(nombre));
  810. ligne2.push_back(250.0);
  811. ligne2.push_back(-250.0);
  812. ligne2.push_back(float(nombre));
  813. ligne2.push_back(250.0);
  814. ligne2.push_back(250.0);
  815. ligne2.push_back(float(nombre));
  816. ligne2.push_back(-250.0);
  817. ligne2.push_back(-250.0);
  818. ligne2.push_back(float(nombre));
  819. ligne2.push_back(-250.0);
  820.  
  821. }
  822.  
  823. for(int nombre(-250); nombre <= 250; nombre+=50)
  824. {
  825. ligne2.push_back(250.0);
  826. ligne2.push_back(float(nombre));
  827. ligne2.push_back(250.0);
  828. ligne2.push_back(250.0);
  829. ligne2.push_back(float(nombre));
  830. ligne2.push_back(-250.0);
  831. ligne2.push_back(-250.0);
  832. ligne2.push_back(float(nombre));
  833. ligne2.push_back(250.0);
  834. ligne2.push_back(-250.0);
  835. ligne2.push_back(float(nombre));
  836. ligne2.push_back(-250.0);
  837. }
  838. for(int nombre(-250); nombre <= 250; nombre+=50)
  839. {
  840. ligne2.push_back(float(nombre));
  841. ligne2.push_back(-250.0);
  842. ligne2.push_back(250.0);
  843. ligne2.push_back(float(nombre));
  844. ligne2.push_back(-250.0);
  845. ligne2.push_back(-250.0);
  846. ligne2.push_back(float(nombre));
  847. ligne2.push_back(250.0);
  848. ligne2.push_back(250.0);
  849. ligne2.push_back(float(nombre));
  850. ligne2.push_back(250.0);
  851. ligne2.push_back(-250.0);
  852. }
  853. for(int nombre(-250); nombre <= 250; nombre+=50)
  854. {
  855. ligne2.push_back(250.0);
  856. ligne2.push_back(250.0);
  857. ligne2.push_back(float(nombre));
  858. ligne2.push_back(-250.0);
  859. ligne2.push_back(250.0);
  860. ligne2.push_back(float(nombre));
  861. ligne2.push_back(250.0);
  862. ligne2.push_back(-250.0);
  863. ligne2.push_back(float(nombre));
  864. ligne2.push_back(-250.0);
  865. ligne2.push_back(-250.0);
  866. ligne2.push_back(float(nombre));
  867. }
  868. GLuint vboLignes2(0);
  869. glGenBuffers(1, &vboLignes2);
  870. glBindBuffer(GL_ARRAY_BUFFER,vboLignes2);
  871. uint16_t taille3 = ligne2.size() * sizeof(float);
  872. glBufferData(GL_ARRAY_BUFFER, taille3,ligne2.data(), GL_STATIC_DRAW);
  873. glBindBuffer(GL_ARRAY_BUFFER, 0);
  874. std::vector<float> lignes;
  875. bool pairImpair(true);
  876. for(int nombre(-250); nombre <= 250; nombre+=10)
  877. {
  878. if(pairImpair)
  879. {
  880. lignes.push_back(nombre);
  881. lignes.push_back(-255);
  882. lignes.push_back(-255);
  883. lignes.push_back(nombre+10);
  884. lignes.push_back(-255);
  885. lignes.push_back(-255);
  886. lignes.push_back(nombre);
  887. lignes.push_back(255);
  888. lignes.push_back(-255);
  889. lignes.push_back(nombre+10);
  890. lignes.push_back(255);
  891. lignes.push_back(-255);
  892. lignes.push_back(nombre);
  893. lignes.push_back(-255);
  894. lignes.push_back(255);
  895. lignes.push_back(nombre+10);
  896. lignes.push_back(-255);
  897. lignes.push_back(255);
  898. lignes.push_back(nombre);
  899. lignes.push_back(255);
  900. lignes.push_back(255);
  901. lignes.push_back(nombre+10);
  902. lignes.push_back(255);
  903. lignes.push_back(255);
  904. lignes.push_back(-255);
  905. lignes.push_back(-255);
  906. lignes.push_back(nombre);
  907. lignes.push_back(-255);
  908. lignes.push_back(-255);
  909. lignes.push_back(nombre+10);
  910. lignes.push_back(255);
  911. lignes.push_back(-255);
  912. lignes.push_back(nombre);
  913. lignes.push_back(255);
  914. lignes.push_back(-255);
  915. lignes.push_back(nombre+10);
  916. lignes.push_back(-255);
  917. lignes.push_back(255);
  918. lignes.push_back(nombre);
  919. lignes.push_back(-255);
  920. lignes.push_back(255);
  921. lignes.push_back(nombre+10);
  922. lignes.push_back(255);
  923. lignes.push_back(255);
  924. lignes.push_back(nombre);
  925. lignes.push_back(255);
  926. lignes.push_back(255);
  927. lignes.push_back(nombre+10);
  928. lignes.push_back(-255);
  929. lignes.push_back(nombre);
  930. lignes.push_back(-255);
  931. lignes.push_back(-255);
  932. lignes.push_back(nombre+10);
  933. lignes.push_back(-255);
  934. lignes.push_back(255);
  935. lignes.push_back(nombre);
  936. lignes.push_back(-255);
  937. lignes.push_back(255);
  938. lignes.push_back(nombre+10);
  939. lignes.push_back(-255);
  940. lignes.push_back(-255);
  941. lignes.push_back(nombre);
  942. lignes.push_back(255);
  943. lignes.push_back(-255);
  944. lignes.push_back(nombre+10);
  945. lignes.push_back(255);
  946. lignes.push_back(255);
  947. lignes.push_back(nombre);
  948. lignes.push_back(255);
  949. lignes.push_back(255);
  950. lignes.push_back(nombre+10);
  951. lignes.push_back(255);
  952. }
  953. if(pairImpair)
  954. pairImpair = false;
  955. else if (pairImpair == false)
  956. pairImpair = true;
  957.  
  958. }
  959. double taille = lignes.size();
  960. GLuint vboLignes(0);
  961. glGenBuffers(1, &vboLignes);
  962. glBindBuffer(GL_ARRAY_BUFFER,vboLignes);
  963. taille = lignes.size() * sizeof(float);
  964. glBufferData(GL_ARRAY_BUFFER, taille,lignes.data(), GL_STATIC_DRAW);
  965. glBindBuffer(GL_ARRAY_BUFFER, 0);
  966. sf::Clock frequenceAxes;
  967.  
  968.  
  969.  
  970.  
  971.  
  972.  
  973.  
  974.  
  975.  
  976.  
  977.  
  978.  
  979.  
  980.  
  981.  
  982.  
  983. unsigned int compteurBoucles(0);
  984. bool mesure(false);
  985. std::chrono::time_point<std::chrono::system_clock> Clavier;
  986. std::chrono::time_point<std::chrono::system_clock> Fps;
  987. std::chrono::time_point<std::chrono::system_clock> Clavier2;
  988. unsigned int calibrageFps(16);
  989. unsigned int calibrageClavier(24);
  990. unsigned int compteurFps2(0);
  991. unsigned int compteurClavier(10);
  992. unsigned int compteurClavier2(0);
  993. unsigned int une_seconde = time(0);
  994. unsigned int une_seconde2 = time(0);
  995. sf::Clock frequenceA;
  996. sf::Clock frequenceClavier;
  997. sf::Thread reseau(&ThreadReseau);
  998. //reseau.launch();
  999. sf::Mutex mutex;
  1000. float attente(40);
  1001. timeOut = std::chrono::system_clock::now();
  1002. bool texte2(false);
  1003. sf::Text Messages;
  1004. Messages.setFont(police);
  1005. Messages.setPosition(sf::Vector2f(8, 288));
  1006. Messages.setCharacterSize(10);
  1007. Messages.setColor(sf::Color::Black);
  1008. std::vector<sf::Vertex> differences;
  1009. std::string les_messages;
  1010. Messages.setString(les_messages);
  1011. std::vector<std::string> historiqueMessages; // ne pas compter les 10
  1012. float longueurs[128];
  1013. float longueurs2[128];
  1014. for(uint8_t nombre(0); nombre < 128; ++nombre)
  1015. {
  1016. longueurs[nombre] = police.getGlyph(nombre, 10, false).bounds.width;
  1017. longueurs2[nombre] = police.getGlyph(nombre, 10, false).advance;
  1018. }
  1019. sf::Text explicationCommandes;
  1020. std::wstring explications (L"F1 : Communiquer avec les autres joueurs.");
  1021. explications.push_back(uint32_t(10));
  1022. explications += L"F2 : Afficher le menu.";
  1023. explications.push_back(uint32_t(10));
  1024. explications += L"F3 : Changer de vue.";
  1025. explications.push_back(uint32_t(10));
  1026. explicationCommandes.setColor(sf::Color(255, 255, 255, 255));
  1027. explicationCommandes.setString(explications);
  1028. explicationCommandes.setCharacterSize(25);
  1029. explicationCommandes.setStyle( sf::Text::Bold);
  1030. explicationCommandes.setPosition(sf::Vector2f(0,0));
  1031. explicationCommandes.setFont(police);
  1032. bool effacement(false);
  1033. std::chrono::time_point<std::chrono::system_clock> tempsEffacement;
  1034. tempsEffacement = std::chrono::system_clock::now();
  1035. bool efface(false);
  1036. uint8_t valeurEffacement(255);
  1037.     while (running)
  1038.     {
  1039. if(ouvrirMenu && std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now()-tempsMenu).count()>= 20)
  1040. {
  1041.  
  1042. ++positionMenu.x;
  1043. ++positionMenu.x;
  1044. ++positionMenu.x;
  1045. menu2.setPosition(positionMenu);
  1046. if(positionMenu.x >=0.0)
  1047. {
  1048. ouvrirMenu = false;
  1049. menuOuvert = true;
  1050. }
  1051. tempsMenu = std::chrono::system_clock::now();
  1052. }
  1053. else if(fermerMenu && std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now()-tempsMenu).count()>= 20)
  1054. {
  1055.  
  1056. --positionMenu.x;
  1057. --positionMenu.x;
  1058. --positionMenu.x;
  1059. menu2.setPosition(positionMenu);
  1060. if(positionMenu.x <= positionInferieur)
  1061. {
  1062. fermerMenu = false;
  1063. menuOuvert = false;
  1064. affichageMenu = false;
  1065. }
  1066. tempsMenu = std::chrono::system_clock::now();
  1067. }
  1068. if(efface == false)
  1069. {
  1070. if(effacement == false&&std::chrono::duration_cast<std::chrono::seconds>(std::chrono::system_clock::now()-tempsEffacement).count()>= 5)
  1071. {
  1072. effacement = true;
  1073. tempsEffacement = std::chrono::system_clock::now();
  1074. }
  1075. else if (effacement && std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now()-tempsEffacement).count()>= 20)
  1076. {
  1077. tempsEffacement = std::chrono::system_clock::now();
  1078. --valeurEffacement;
  1079. explicationCommandes.setColor(sf::Color(255, 255, 255, valeurEffacement));
  1080. if(valeurEffacement == 0)
  1081. efface=true;
  1082. }
  1083. }
  1084. if(TCP.erreur)
  1085. {
  1086. return 0;
  1087. }
  1088.         sf::Event event;
  1089.  
  1090.  
  1091.         while (window.pollEvent(event))
  1092.         {
  1093.  
  1094.             if (event.type == sf::Event::Closed)
  1095.             {running = false;
  1096.             mutex.lock();
  1097.             finDuThread = false;
  1098.             mutex.unlock();
  1099.             }else if (event.type == sf::Event::Resized)
  1100.             {glViewport(0, 0, event.size.width, event.size.height);
  1101.             tailleFenetrelongueur = event.size.width;
  1102.             tailleFenetrelargeur = event.size.height;
  1103.             }
  1104.             else if(event.type == sf::Event::TextEntered && texte2)
  1105.             {
  1106.         if (event.text.unicode < 128 && event.text.unicode != 8&&event.text.unicode != 13 &&event.text.unicode != 9&& texte.size() < 254)
  1107.         texte += static_cast<char>(event.text.unicode);
  1108.         if(event.text.unicode == 8)
  1109.         if(texte.size() > 0)
  1110.         texte = texte.substr(0, texte.size()-1);
  1111.         std::string texte3;//110
  1112.         messagesTchat.setString(texte);
  1113.         sf::FloatRect limites = messagesTchat.getLocalBounds();
  1114.         if(limites.width >= 80) ///################################################################"
  1115.         {
  1116. //(800-x)
  1117. bool continuer = true;
  1118. unsigned int nombre2(0);
  1119. /// trouver le nombre le plus à droite.
  1120. nombre2 = texte.size()-1;
  1121. float position2 = messagesTchat.findCharacterPos(nombre2).x;
  1122. unsigned int nombre3(0);
  1123. for(unsigned int nombre(texte.size()); nombre >0 && continuer; --nombre)
  1124. {
  1125. sf::Vector2f positionCharacter = messagesTchat.findCharacterPos(nombre);
  1126. if(position2-positionCharacter.x >= 80)
  1127. {
  1128. continuer = false;
  1129. nombre3 = nombre;
  1130. }
  1131. }
  1132. for(unsigned int nombre(nombre3); nombre < texte.size(); ++nombre)
  1133. {
  1134. texte3.push_back(texte[nombre]);
  1135. }
  1136. messagesTchat.setString(texte3);
  1137.         }
  1138.         else
  1139.         {
  1140.     messagesTchat.setString(texte);
  1141.         }
  1142.  
  1143.         if(event.text.unicode == 13 && texte.size() > 0)
  1144.         {
  1145. int8_t data[texte.size()+2];
  1146. uint8_t taille = texte.size();
  1147. uint8_t type =1;
  1148. data[0] = *reinterpret_cast<int8_t*>(&type);
  1149. data[1] = *reinterpret_cast<int8_t*>(&taille);
  1150. uint16_t positionData(0);
  1151. for(uint16_t nombre(2); nombre <taille+2; ++nombre)
  1152. {
  1153. data[nombre] = *reinterpret_cast<int8_t*>(&texte[positionData]);
  1154. ++positionData;
  1155. }
  1156. TCP.envoyer(data, taille+2);
  1157.             texte.clear();
  1158.             texte3.clear();
  1159.             messagesTchat.setString(texte3);
  1160.         }
  1161.             }
  1162.             else if(event.type == sf::Event::KeyPressed)
  1163.             {
  1164.             if(event.key.code == sf::Keyboard::F1)
  1165.             {
  1166.             if(texte2)
  1167.             {
  1168.                 texte2 = false;
  1169.                 messagesTchat.setColor(sf::Color::Black);
  1170.             }
  1171.  
  1172.             else
  1173.             {
  1174.                texte2 = true;
  1175.             messagesTchat.setColor(sf::Color::Red);
  1176.             }
  1177.  
  1178.  
  1179.  
  1180.             }
  1181.             else if (event.key.code == sf::Keyboard::F2)
  1182.             {
  1183.             if(ouvrirMenu || menuOuvert)
  1184.             {
  1185.             fermerMenu = true;
  1186.             ouvrirMenu = false;
  1187.             }
  1188.             else
  1189.             {
  1190.             ouvrirMenu = true;
  1191.             affichageMenu = true;
  1192.             fermerMenu = false;
  1193.             }}
  1194.             else if(menuOuvert)
  1195.             {
  1196.             if (event.key.code == sf::Keyboard::Up)
  1197.             {
  1198. if(bool(choix-1 == 0) == false)
  1199. {
  1200. les_textesMenu[choix-1].setColor(sf::Color::Black);
  1201. --choix;
  1202. les_textesMenu[choix-1].setColor(sf::Color::Red);
  1203. }
  1204.  
  1205.             }
  1206.             else if (event.key.code == sf::Keyboard::Down)
  1207. {
  1208. if(bool(choix+1 == 2) == false)
  1209. {
  1210. les_textesMenu[choix-1].setColor(sf::Color::Black);
  1211. ++choix;
  1212. les_textesMenu[choix-1].setColor(sf::Color::Red);
  1213. }
  1214. }
  1215. else if (event.key.code == sf::Keyboard::Return)
  1216. {
  1217. if(choix == 1) // Le joueur souhaite voir les crédits
  1218. {
  1219. if(creditsOuverts == false)
  1220. {
  1221. creditsOuverts = true;
  1222. fenetreCredits.reset(new sf::RenderWindow(sf::VideoMode(600,264), "Crédits", sf::Style::Default, settings));
  1223. }
  1224.  
  1225. }
  1226. }
  1227.             }
  1228.  
  1229.             }
  1230.             }
  1231. if(std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now()-Clavier2).count()>=30 && texte2==false &&menuOuvert == false)
  1232. {
  1233. if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
  1234. {
  1235. --angleCamera.angleX;
  1236. --angleCamera.angleX;
  1237. }
  1238. else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
  1239. {
  1240. ++angleCamera.angleX;
  1241. ++angleCamera.angleX;
  1242. }
  1243. if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
  1244. {
  1245. ++angleCamera.angleY;
  1246. ++angleCamera.angleY;
  1247. }
  1248. else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
  1249. {
  1250. --angleCamera.angleY;
  1251. --angleCamera.angleY;
  1252. }
  1253.  
  1254. if(angleCamera.angleX < 0)
  1255. angleCamera.angleX =360;
  1256. else if(angleCamera.angleX > 360)
  1257. angleCamera.angleX = 0;
  1258. if(angleCamera.angleY < 0)
  1259. angleCamera.angleY =360;
  1260. else if(angleCamera.angleY > 360)
  1261. angleCamera.angleY = 0;
  1262.  
  1263. Clavier2 = std::chrono::system_clock::now();
  1264. }
  1265. if(creditsOuverts)
  1266. {
  1267. sf::Event event2;
  1268. while(fenetreCredits->pollEvent(event2))
  1269. {
  1270. if(event2.type == sf::Event::Closed)
  1271. {
  1272. fenetreCredits->close();
  1273. creditsOuverts = false;
  1274. }
  1275. }
  1276. }
  1277. if(std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now()-defilementCredits).count()>=100 && creditsOuverts)
  1278. {
  1279. --positionCredits.y;
  1280. if(positionCredits.y <= -200)
  1281. {
  1282. fenetreCredits->close();
  1283. creditsOuverts=false;
  1284. }
  1285. texteCredits.setPosition(positionCredits);
  1286. defilementCredits = std::chrono::system_clock::now();
  1287. }
  1288. if(sf::milliseconds(16) < frequenceA.getElapsedTime())
  1289. //if(std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now()-Fps).count()>=16)
  1290. {
  1291. if(creditsOuverts)
  1292. {
  1293. fenetreCredits->setActive();
  1294. fenetreCredits->clear(sf::Color::Blue);
  1295. fenetreCredits->draw(texteCredits);
  1296. fenetreCredits->display();
  1297. }
  1298.  
  1299. window.setActive();
  1300. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  1301. glEnable(GL_DEPTH_TEST);
  1302. point pointCamera = calculerPoint(angleCamera);
  1303. std::list<joueur>::iterator iterateur;
  1304. bool continuer = true;
  1305. std::list<joueur>::iterator iterateur2;
  1306. for(iterateur = joueurs.begin(); iterateur != joueurs.end() && continuer; ++iterateur)
  1307. {
  1308. if(iterateur->id==identifiant16bits)
  1309. {iterateur2 = iterateur;
  1310. continuer = false;
  1311. }}
  1312. point position2 = iterateur2->getPosition();
  1313. std::ostringstream ss;
  1314. ss << iterateur2->vitesse;
  1315. std::string la_vitesse(ss.str());
  1316. la_vitesse+=" m/sec";
  1317. texteVitesse.setString(la_vitesse);
  1318. pointCamera.setX(pointCamera.getX()+position2.getX());
  1319. pointCamera.setY(pointCamera.getY()+position2.getY());
  1320. pointCamera.setZ(pointCamera.getZ()+position2.getZ());
  1321. glm::mat4 projection = glm::perspective(70.0, (double) 800/600,1.0,1000.0);
  1322. glm::mat4 modelview = glm::lookAt(glm::vec3(pointCamera.getX(), pointCamera.getY(), pointCamera.getZ()), glm::vec3(position2.getX(), position2.getY(), position2.getZ()), glm::vec3(0, 1, 0));
  1323. glUseProgram(shader.getProgram());/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  1324. /*for(unsigned int nombre(0); nombre < 15; ++nombre)
  1325. scorpion.afficher(modelview, projection, shader.getProgram());
  1326. scorpion2.afficher(modelview, projection, shader.getProgram());*/
  1327.  
  1328. for(iterateur = joueurs.begin(); iterateur != joueurs.end(); ++iterateur)
  1329. iterateur->afficher(modelview, projection, shader.getProgram());
  1330. glUseProgram(shaderTextures.getProgram());
  1331. glUniformMatrix4fv(glGetUniformLocation(shader.getProgram(), "modelview"), 1, GL_FALSE,glm::value_ptr(modelview));
  1332. glUniformMatrix4fv(glGetUniformLocation(shader.getProgram(), "projection"), 1, GL_FALSE,glm::value_ptr(projection));
  1333. if(prison)
  1334. {
  1335. glBindBuffer(GL_ARRAY_BUFFER, vboLignes2);
  1336. glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0,BUFFER_OFFSET(0));
  1337. glEnableVertexAttribArray(0);
  1338. glDrawArrays(GL_LINES, 0, ligne2.size()/3);
  1339. glDisableVertexAttribArray(0);
  1340. }
  1341. else
  1342. {
  1343. glBindBuffer(GL_ARRAY_BUFFER, vboLignes);
  1344. glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0,BUFFER_OFFSET(0));
  1345. glEnableVertexAttribArray(0);
  1346. glDrawArrays(GL_LINES, 0, lignes.size()/3);
  1347. glDisableVertexAttribArray(0);
  1348. }
  1349.  
  1350. glBindBuffer(GL_ARRAY_BUFFER,0);
  1351. glUseProgram(0);
  1352. window.pushGLStates();
  1353.  
  1354. //scorpion.afficherPseudo(modelview,projection,shader.getProgram(),window,police);
  1355. //scorpion2.afficherPseudo(modelview,projection,shader.getProgram(),window,police);
  1356. for(iterateur = joueurs.begin(); iterateur != joueurs.end(); ++iterateur)
  1357. iterateur->afficherPseudo(modelview,projection,shader.getProgram(),window,police);
  1358. window.draw(Conversation);
  1359. for(unsigned int nombre(0); nombre < differences.size()/4; ++nombre)
  1360. window.draw(&differences[nombre*4], 4, sf::Quads);
  1361.  
  1362. window.draw(messagesTchat);
  1363. window.draw(Carte2);
  1364.  
  1365. for(unsigned int nombre(0); nombre < 18*18; ++nombre)
  1366. window.draw(&vertices[nombre][0], vertices[nombre].size(), sf::Quads);
  1367. //window.draw(&vertices2[0], vertices2.size(), sf::Lines);
  1368. window.draw(speed2);
  1369. window.draw(texteVitesse);
  1370. window.draw(Messages);
  1371. if(affichageMenu)
  1372. window.draw(menu2);
  1373. if(menuOuvert && fermerMenu == false)
  1374. {
  1375. for(unsigned int nombre(0); nombre < 1; ++ nombre)
  1376. {
  1377.  
  1378. if(choix-1 == nombre)
  1379. {
  1380. spriteMenuSelection.setPosition(lesPositionsMenu[nombre]);
  1381. window.draw(spriteMenuSelection);
  1382. window.draw(les_textesMenu[nombre]);
  1383. }
  1384. else
  1385. {
  1386. spriteMenuNormal.setPosition(lesPositionsMenu[nombre]);
  1387. window.draw(spriteMenuNormal);
  1388. window.draw(les_textesMenu[nombre]);
  1389. }
  1390. }
  1391.  
  1392. }
  1393. if(efface == false)
  1394. window.draw(explicationCommandes);
  1395. window.popGLStates();
  1396. window.display();
  1397. if(position.getZ() > 250)
  1398. position.setZ(-250);
  1399. if(position.getZ() < -250)
  1400. position.setZ(250);
  1401. if(position.getX() > 250)
  1402. position.setX (-250);
  1403. if(position.getX() < -250)
  1404. position.setX (250);
  1405. if(position.getY() > 250)
  1406. position.setY(-250);
  1407. if(position.getY() < -250)
  1408. position.setY(250);
  1409. /*fps2 = clock();
  1410. fps2*CLOCKS_PER_SEC/1000;*/
  1411. //Fps = std::chrono::system_clock::now();
  1412.  
  1413. frequenceA.restart();
  1414. ++compteurFPS;}
  1415. /// gérer la connection
  1416. std::size_t received(0);
  1417. short unsigned int port(53427);
  1418. sf::IpAddress Serveur;
  1419. connexion2.receive(paquetUDP, std::size_t(1500), received,Serveur, port);
  1420.  
  1421. if(received > 0 && IPserveur2 == Serveur)
  1422. {
  1423. uint8_t identifiant(0);
  1424. identifiant = *reinterpret_cast<uint8_t*>(&paquetUDP[0]);
  1425. if(identifiant == 0 && joueurs.size() > 0)
  1426. {
  1427. if(received > 1)
  1428. {
  1429. uint8_t nombreJoueurs(0);
  1430. nombreJoueurs = *reinterpret_cast<uint8_t*>(&paquetUDP[1]);
  1431. uint16_t taillePossible(4*3);
  1432. taillePossible *= nombreJoueurs;
  1433. taillePossible += nombreJoueurs*4;
  1434. taillePossible += nombreJoueurs*3;
  1435. taillePossible += nombreJoueurs*2;
  1436. taillePossible += 2;
  1437. taillePossible += nombreJoueurs*4;
  1438.  
  1439. if(received >= taillePossible)
  1440. {
  1441. uint16_t positionBuffer(2);
  1442. std::vector<uint16_t> identifiants;
  1443. std::vector<point> les_points;
  1444. std::vector<uint16_t> angles;
  1445. std::vector<uint8_t> commandes;
  1446. std::vector<float> vitesses;
  1447. for(unsigned int nombre(0); nombre < nombreJoueurs; ++nombre)
  1448. {
  1449. uint16_t ID(0);
  1450. int8_t *octet(reinterpret_cast<int8_t*>(&ID));
  1451. if(little)
  1452. {
  1453. octet[1] = *reinterpret_cast<int8_t*>(&paquetUDP[positionBuffer]);
  1454. ++positionBuffer;
  1455. octet[0] = *reinterpret_cast<int8_t*>(&paquetUDP[positionBuffer]);
  1456. ++positionBuffer;
  1457.  
  1458. }
  1459. else
  1460. {
  1461. octet[0] = *reinterpret_cast<int8_t*>(&paquetUDP[positionBuffer]);
  1462. ++positionBuffer;
  1463. octet[1] = *reinterpret_cast<int8_t*>(&paquetUDP[positionBuffer]);
  1464. ++positionBuffer;
  1465. }
  1466. identifiants.push_back(ID);
  1467. }
  1468. for(unsigned int nombre(0); nombre < nombreJoueurs; ++nombre)
  1469. {
  1470. float tableauFloat[3];
  1471. for(unsigned int nombre2(0); nombre2 < 3; ++nombre2)
  1472. {
  1473. float nombre3(0);
  1474.  int8_t *octet(reinterpret_cast<int8_t*>(&nombre3));
  1475. if(little)
  1476. {
  1477. octet[3] = *reinterpret_cast<int8_t*>(&paquetUDP[positionBuffer]);
  1478. ++positionBuffer;
  1479. octet[2] = *reinterpret_cast<int8_t*>(&paquetUDP[positionBuffer]);
  1480. ++positionBuffer;
  1481. octet[1] = *reinterpret_cast<int8_t*>(&paquetUDP[positionBuffer]);
  1482. ++positionBuffer;
  1483. octet[0] = *reinterpret_cast<int8_t*>(&paquetUDP[positionBuffer]);
  1484. ++positionBuffer;
  1485. }
  1486. else
  1487. {
  1488. octet[0] = *reinterpret_cast<int8_t*>(&paquetUDP[positionBuffer]);
  1489. ++positionBuffer;
  1490. octet[1] = *reinterpret_cast<int8_t*>(&paquetUDP[positionBuffer]);
  1491. ++positionBuffer;
  1492. octet[2] = *reinterpret_cast<int8_t*>(&paquetUDP[positionBuffer]);
  1493. ++positionBuffer;
  1494. octet[3] = *reinterpret_cast<int8_t*>(&paquetUDP[positionBuffer]);
  1495. ++positionBuffer;
  1496. }
  1497. tableauFloat[nombre2] = nombre3;
  1498. }
  1499. les_points.push_back(point(tableauFloat[0], tableauFloat[1],tableauFloat[2]));
  1500. }
  1501. /// les points sonts faits.
  1502. // angles
  1503. for(unsigned int nombre(0); nombre < nombreJoueurs*2; ++nombre)
  1504. {
  1505. int16_t angle(0);
  1506. int8_t *octet(reinterpret_cast<int8_t*>(&angle));
  1507. if(little)
  1508. {
  1509. octet[1] = *reinterpret_cast<int8_t*>(&paquetUDP[positionBuffer]);
  1510. ++positionBuffer;
  1511. octet[0] = *reinterpret_cast<int8_t*>(&paquetUDP[positionBuffer]);
  1512. ++positionBuffer;
  1513. }
  1514. else
  1515. {
  1516. octet[0] = *reinterpret_cast<int8_t*>(&paquetUDP[positionBuffer]);
  1517. ++positionBuffer;
  1518. octet[1] = *reinterpret_cast<int8_t*>(&paquetUDP[positionBuffer]);
  1519. ++positionBuffer;
  1520. }
  1521. angles.push_back(angle);
  1522. }
  1523. /// angles fait
  1524. // faire commandes
  1525. for(unsigned int nombre(0); nombre < nombreJoueurs; ++nombre)
  1526. {
  1527. commandes.push_back(*reinterpret_cast<uint8_t*>(&paquetUDP[positionBuffer]));
  1528. ++positionBuffer;
  1529. commandes.push_back(*reinterpret_cast<uint8_t*>(&paquetUDP[positionBuffer]));
  1530. ++positionBuffer;
  1531. commandes.push_back(*reinterpret_cast<uint8_t*>(&paquetUDP[positionBuffer]));
  1532. ++positionBuffer;
  1533. }
  1534. /// commandes fini
  1535. // faire vitesses
  1536. for(unsigned int nombre(0); nombre < nombreJoueurs; ++nombre)
  1537. {
  1538. float vitesse(0);
  1539. int8_t *octet(reinterpret_cast<int8_t*>(&vitesse));
  1540. if(little)
  1541. {
  1542. octet[3]= *reinterpret_cast<uint8_t*>(&paquetUDP[positionBuffer]);
  1543. ++positionBuffer;
  1544. octet[2]=*reinterpret_cast<uint8_t*>(&paquetUDP[positionBuffer]);
  1545. ++positionBuffer;
  1546. octet[1]=*reinterpret_cast<uint8_t*>(&paquetUDP[positionBuffer]);
  1547. ++positionBuffer;
  1548. octet[0]=*reinterpret_cast<uint8_t*>(&paquetUDP[positionBuffer]);
  1549. ++positionBuffer;
  1550. }
  1551. else
  1552. {
  1553. octet[0]=*reinterpret_cast<uint8_t*>(&paquetUDP[positionBuffer]);
  1554. ++positionBuffer;
  1555. octet[1]=*reinterpret_cast<uint8_t*>(&paquetUDP[positionBuffer]);
  1556. ++positionBuffer;
  1557. octet[2]=*reinterpret_cast<uint8_t*>(&paquetUDP[positionBuffer]);
  1558. ++positionBuffer;
  1559. octet[3]=*reinterpret_cast<uint8_t*>(&paquetUDP[positionBuffer]);
  1560. ++positionBuffer;
  1561. }
  1562. vitesses.push_back(vitesse);
  1563. }
  1564. // utilisation des informations précédemment acquises
  1565. // nous avons les identifiants
  1566. // une petite comparaison est nécessaire pour chaque joueur
  1567. std::list<joueur>::iterator iterateur;
  1568. for(iterateur = joueurs.begin(); iterateur != joueurs.end(); ++iterateur)
  1569. {
  1570. bool continuer = true;
  1571. for(unsigned int nombre(0); nombre < identifiants.size() && continuer; ++nombre)
  1572. {
  1573. if(iterateur->id == identifiants[nombre])
  1574. {
  1575. uint8_t positionDonnees = nombre;
  1576. continuer = false;
  1577. uint16_t positionAngles(positionDonnees*2);
  1578. uint16_t positionCommandes(positionDonnees*3);
  1579. iterateur->miseAjour(les_points[positionDonnees], angles[positionAngles], angles[positionAngles+1], commandes[positionCommandes], commandes[positionCommandes+1], commandes[positionCommandes+2], vitesses[positionDonnees]);
  1580. ///########################################################################################################################################################################################################################################################################################
  1581. }
  1582. }
  1583. }
  1584. }
  1585. }
  1586. }
  1587.  
  1588. }
  1589. TCP.actualiser();
  1590. if(TCP.resultat.size() > 0)
  1591. {
  1592.  
  1593. uint8_t identifiant(0);
  1594. std::deque<int8_t> buffer = TCP.resultat[0];
  1595. TCP.resultat.pop_back();
  1596. identifiant = *reinterpret_cast<uint8_t*>(&buffer[0]);
  1597. if(identifiant == 0)
  1598. {
  1599.  
  1600. }
  1601. else if (identifiant == 1)// texte
  1602. {
  1603. unsigned int limiteX(110);
  1604. unsigned int limiteY(270);
  1605. std::string texteRecu;
  1606. std::string texteRecu2;
  1607. uint16_t tailleTexte(0);
  1608. int8_t *octet(reinterpret_cast<int8_t*>(&tailleTexte));
  1609. if(little)
  1610. {
  1611. octet[0] = *reinterpret_cast<int8_t*>(&buffer[2]);
  1612. octet[1] = *reinterpret_cast<int8_t*>(&buffer[1]);
  1613. }
  1614. else
  1615. {
  1616. octet[0] = *reinterpret_cast<int8_t*>(&buffer[1]);
  1617. octet[1] = *reinterpret_cast<int8_t*>(&buffer[2]);
  1618. }
  1619. for(uint16_t nombre(3); nombre < tailleTexte+3; ++nombre)
  1620. {
  1621. texteRecu2.push_back(*reinterpret_cast<char*>(&buffer[nombre]));
  1622. }
  1623. /// se charger de la réception.
  1624. if(modificationCouleur)
  1625. modificationCouleur = false;
  1626. else
  1627. modificationCouleur = true;
  1628. texteRecu.push_back(10);
  1629. texteRecu+= texteRecu2;
  1630. Messages.setString(texteRecu);
  1631. sf::FloatRect limites;
  1632. limites = Messages.getLocalBounds();
  1633. char caractere(10);
  1634. if(limites.width > limiteX)
  1635. {
  1636. std::vector<uint32_t> les10;
  1637. float longueurLigne(0);
  1638. for(unsigned int nombre(0); nombre < texteRecu.size(); ++nombre)
  1639. {
  1640. if(texteRecu[nombre] != 10)
  1641. {
  1642. if(nombre != texteRecu.size()-1)
  1643. {longueurLigne+=police.getKerning(texteRecu[nombre], texteRecu[nombre+1], 10);}
  1644. longueurLigne+=longueurs2[texteRecu[nombre]];
  1645. }
  1646. if(longueurLigne >= limiteX)
  1647. {
  1648. les10.push_back(nombre);
  1649. longueurLigne=0;
  1650. }}
  1651. for(unsigned int nombre(0); nombre < les10.size(); ++nombre)
  1652. {
  1653. texteRecu.insert(les10[nombre], &caractere);
  1654. }
  1655. }
  1656. historiqueMessages.push_back(texteRecu);
  1657. les_messages+=historiqueMessages[historiqueMessages.size()-1];
  1658. Messages.setString(les_messages);
  1659. limites = Messages.getLocalBounds();
  1660. unsigned int debut(0);
  1661. unsigned int fin(0);
  1662. unsigned int compteur = historiqueMessages[historiqueMessages.size()-1].size();
  1663. debut = les_messages.size() - compteur;
  1664. fin = les_messages.size();
  1665. float plusHaut(Messages.findCharacterPos(debut).y);
  1666. float plusBas(Messages.findCharacterPos(debut).y);
  1667. for(unsigned int nombre(debut); nombre < fin; ++nombre)
  1668. {
  1669. float valeurY = Messages.findCharacterPos(nombre).y;
  1670. if(plusHaut > valeurY)
  1671. plusHaut = valeurY;
  1672. if(plusBas < valeurY)
  1673. plusBas = valeurY;
  1674.  
  1675. }
  1676. if(modificationCouleur)
  1677. {differences.push_back(sf::Vertex(sf::Vector2f(float(6), plusHaut+float(12)), sf::Color(255,0,0,100)));
  1678. differences.push_back(sf::Vertex(sf::Vector2f(float(126), plusHaut+float(12)), sf::Color(255,0,0,100)));
  1679. differences.push_back(sf::Vertex(sf::Vector2f(float(126), plusBas+float(12)), sf::Color(255,0,0,100)));
  1680. differences.push_back(sf::Vertex(sf::Vector2f(float(6), plusBas+float(12)), sf::Color(255,0,0,100)));
  1681. }
  1682. else
  1683. {
  1684. differences.push_back(sf::Vertex(sf::Vector2f(float(6), plusHaut+float(12)), sf::Color(0,255,0,100)));
  1685. differences.push_back(sf::Vertex(sf::Vector2f(float(126), plusHaut+float(12)), sf::Color(0,255,0,100)));
  1686. differences.push_back(sf::Vertex(sf::Vector2f(float(126), plusBas+float(12)), sf::Color(0,255,0,100)));
  1687. differences.push_back(sf::Vertex(sf::Vector2f(float(6), plusBas+float(12)), sf::Color(0,255,0,100)));
  1688. }
  1689. limites = Messages.getLocalBounds();
  1690. while(limites.height > limiteY)
  1691. {
  1692. for(unsigned int nombre(0); nombre < 4; ++nombre)
  1693. differences.erase(differences.begin());
  1694. //12
  1695. unsigned int compteur2(0);
  1696. unsigned int fin2(historiqueMessages[0].size());
  1697. for(unsigned int nombre(0); nombre < fin2; ++nombre)
  1698. {
  1699. if(les_messages[nombre] == 10)
  1700. ++compteur2;
  1701. }
  1702. for(unsigned int nombre(0); nombre < differences.size(); ++nombre)
  1703. {
  1704. differences[nombre].position.y-=12*compteur2;
  1705. }
  1706. for(unsigned int nombre(0); nombre < fin2; ++nombre)
  1707. les_messages.erase(les_messages.begin());
  1708. historiqueMessages.erase(historiqueMessages.begin());
  1709. Messages.setString(les_messages);
  1710. limites = Messages.getLocalBounds();
  1711. }
  1712. }
  1713. else if (identifiant == 2)
  1714. {
  1715.  
  1716. }
  1717. else if (identifiant == 3) // ajout d'un joueur
  1718. {
  1719. uint16_t positionBuffer(1);
  1720. std::list<joueur>::iterator iterateur;
  1721. bool valide(true);
  1722. uint16_t ID(0);
  1723. if(little)
  1724. {
  1725. int8_t *octet (reinterpret_cast<int8_t*>(&ID));
  1726. octet[0] = buffer[1];
  1727. octet[1] = buffer[2];
  1728. int8_t octet2(0);
  1729. octet2=octet[0];
  1730. octet[0] = octet[1];
  1731. octet[1] = octet2;
  1732. }
  1733. else
  1734. {
  1735. int8_t *octet (reinterpret_cast<int8_t*>(&ID));
  1736. octet[0] = buffer[1];
  1737. octet[1] = buffer[2];
  1738. }
  1739.  
  1740. for(iterateur = joueurs.begin(); iterateur != joueurs.end() && valide; ++iterateur)
  1741. {
  1742. if(ID == iterateur->id)
  1743. valide = false;
  1744. }
  1745.  
  1746.  
  1747.  
  1748.  
  1749. if(valide)
  1750. {
  1751. joueurs.push_back(joueur());
  1752. iterateur = joueurs.begin();
  1753. iterateur->id = ID;
  1754. iterateur->modele = *reinterpret_cast<uint8_t*>(&buffer[3]);
  1755. iterateur->empire = *reinterpret_cast<uint8_t*>(&buffer[4]);
  1756. uint8_t taillePseudonyme(0);
  1757. taillePseudonyme = *reinterpret_cast<uint8_t*>(&buffer[5]);
  1758. if(buffer.size() >= taillePseudonyme + 6)
  1759. {
  1760. uint16_t positionBuffer(6);
  1761. std::string pseudonyme;
  1762. for(unsigned int nombre(0); nombre < taillePseudonyme; ++nombre)
  1763. {
  1764. pseudonyme.push_back( *reinterpret_cast<char*>(&buffer[positionBuffer]));
  1765. ++positionBuffer;
  1766. }
  1767. iterateur->pseudo = pseudonyme;
  1768. }
  1769. else
  1770. {
  1771. joueurs.erase(iterateur);
  1772. }
  1773. }
  1774. }
  1775. else if (identifiant == 4) // supression d'un joueur
  1776. {
  1777. uint16_t ID(0);
  1778. if(little)
  1779. {
  1780. int8_t *octet (reinterpret_cast<int8_t*>(&ID));
  1781. octet[0] = buffer[2];
  1782. octet[1] = buffer[1];
  1783. }
  1784. else
  1785. {
  1786. int8_t *octet (reinterpret_cast<int8_t*>(&ID));
  1787. octet[0] = buffer[1];
  1788. octet[1] = buffer[2];
  1789. }
  1790. if(ID != identifiant16bits)
  1791. {
  1792. if(joueurs.size() > 0)
  1793. {
  1794. std::list<joueur>::iterator nombre;
  1795. bool continuer = true;
  1796. for(nombre = joueurs.begin(); nombre != joueurs.end() && continuer; ++nombre)
  1797. {
  1798. if(nombre->id == ID)
  1799. {
  1800. joueurs.erase(nombre);
  1801. continuer = false;
  1802. }
  1803. }
  1804. }
  1805. }
  1806. }
  1807. else if (identifiant == 5) /// garder le joueur ayant l'ID = identifiant16bits
  1808. {
  1809. std::list<joueur>::iterator iterateur;
  1810. std::list<joueur>::iterator iterateur2;
  1811. while(joueurs.size() != 1)
  1812. {
  1813. bool continuer = true;
  1814. for(iterateur = joueurs.begin(); iterateur!=joueurs.end() && continuer; ++iterateur)
  1815. {
  1816. if(iterateur->id != identifiant16bits)
  1817. {iterateur2 = iterateur;
  1818. continuer = false;
  1819. }
  1820. }
  1821. joueurs.erase(iterateur2);
  1822. }
  1823. vertices[(18*positionY)+positionX][0].color = couleursDorigine[(18*positionY)+positionX];
  1824. vertices[(18*positionY)+positionX][1].color = couleursDorigine[(18*positionY)+positionX];
  1825. vertices[(18*positionY)+positionX][2].color = couleursDorigine[(18*positionY)+positionX];
  1826. vertices[(18*positionY)+positionX][3].color = couleursDorigine[(18*positionY)+positionX];
  1827. positionX = *reinterpret_cast<uint8_t*>(&buffer[1]);
  1828. positionY = *reinterpret_cast<uint8_t*>(&buffer[2]);
  1829.  
  1830. vertices[(18*positionY)+positionX][0].color = sf::Color(255, 0, 0, 255);
  1831. vertices[(18*positionY)+positionX][1].color = sf::Color(255, 0, 0, 255);
  1832. vertices[(18*positionY)+positionX][2].color = sf::Color(255, 0, 0, 255);
  1833. vertices[(18*positionY)+positionX][3].color = sf::Color(255, 0, 0, 255);
  1834. }
  1835. else if (identifiant == 6)
  1836. {
  1837. uint8_t nombreJoueurs(0);
  1838. nombreJoueurs = *reinterpret_cast<uint8_t*>(&buffer[1]);
  1839. joueur traitementJoueurs[nombreJoueurs];
  1840. uint16_t positionBuffer(2);
  1841. uint8_t taillesPseudos[nombreJoueurs];
  1842. for(unsigned int nombre(0); nombre < nombreJoueurs; ++nombre)
  1843. {
  1844. taillesPseudos[nombre] = *reinterpret_cast<uint8_t*>(&buffer[positionBuffer]);
  1845. ++positionBuffer;
  1846. }
  1847. for(unsigned int nombre(0); nombre < nombreJoueurs; ++nombre)
  1848. for(unsigned int nombre1(0); nombre1 < taillesPseudos[nombre]; ++nombre1)
  1849. {
  1850. traitementJoueurs[nombre].pseudo.push_back(*reinterpret_cast<char*>(&buffer[positionBuffer]));
  1851. ++positionBuffer;
  1852. }
  1853. if(little) //   ID
  1854. {
  1855. for(unsigned int nombre(0); nombre < nombreJoueurs; ++nombre)
  1856. {
  1857. uint16_t ID(0);
  1858. int8_t *octet (reinterpret_cast<int8_t*>(&ID));
  1859. octet[0] = buffer[positionBuffer];
  1860. ++positionBuffer;
  1861. octet[1] = buffer[positionBuffer];
  1862. ++positionBuffer;
  1863. int8_t octet2(0);
  1864. octet2=octet[0];
  1865. octet[0] = octet[1];
  1866. octet[1] = octet2;
  1867. traitementJoueurs[nombre].id = ID;
  1868. }
  1869. }
  1870. else
  1871. {
  1872. for(unsigned int nombre(0); nombre < nombreJoueurs; ++nombre)
  1873. {
  1874. uint16_t ID(0);
  1875. int8_t *octet (reinterpret_cast<int8_t*>(&ID));
  1876. octet[0] = buffer[positionBuffer];
  1877. ++positionBuffer;
  1878. octet[1] = buffer[positionBuffer];
  1879. ++positionBuffer;
  1880. traitementJoueurs[nombre].id = ID;
  1881. }
  1882. }
  1883. /// empire, modèles
  1884. for(unsigned int nombre(0); nombre < nombreJoueurs; ++nombre)
  1885. {
  1886. traitementJoueurs[nombre].empire = *reinterpret_cast<uint8_t*>(&buffer[positionBuffer]);
  1887. ++positionBuffer;
  1888. traitementJoueurs[nombre].modele =*reinterpret_cast<uint8_t*>(& buffer[positionBuffer]);
  1889. ++positionBuffer;
  1890. }
  1891. for(unsigned int nombre(0); nombre < nombreJoueurs; nombre)
  1892. joueurs.push_back(traitementJoueurs[nombre]);
  1893. }
  1894. }
  1895.  
  1896. if(frequenceClavier.getElapsedTime() >= sf::milliseconds(200) /*clavier>clavier2+25*/)
  1897. //if(std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now()-Clavier).count()>=calibrageClavier)
  1898. {
  1899. uint8_t gachette(0);
  1900. uint8_t axe_X(1);
  1901. uint8_t axe_Y(1);
  1902. ++compteurClavier;
  1903.         if(texte2==false &&menuOuvert == false) {
  1904. if(sf::Keyboard::isKeyPressed(sf::Keyboard::A))
  1905.             {
  1906. gachette = 1;
  1907.             }
  1908.     if(sf::Keyboard::isKeyPressed(sf::Keyboard::Numpad4))
  1909.             {
  1910. axe_X = 0;
  1911.             }
  1912.             if(sf::Keyboard::isKeyPressed(sf::Keyboard::Numpad6))
  1913.             {
  1914. axe_X = 2;
  1915.             }
  1916.             if(sf::Keyboard::isKeyPressed(sf::Keyboard::Numpad8))
  1917.             {
  1918. axe_Y = 2;
  1919.             }
  1920.             if(sf::Keyboard::isKeyPressed(sf::Keyboard::Numpad2))
  1921.             {
  1922. axe_Y = 0;
  1923.             }
  1924.          }
  1925.  
  1926.         frequenceClavier.restart();
  1927.         if((std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now()-timeOut).count()>=5000) == false)
  1928.         {int8_t paquet[4];
  1929.         uint8_t identifiant(0);
  1930.         paquet[0] = *reinterpret_cast<int8_t*>(&identifiant);
  1931.          paquet[1] = *reinterpret_cast<int8_t*>(&gachette);
  1932.           paquet[2] = *reinterpret_cast<int8_t*>(&axe_X);
  1933.           paquet[3] = *reinterpret_cast<int8_t*>(&axe_Y);
  1934.         connexion2.send(paquet, 4,IPserveur2,53426);}
  1935. if(axe_X != axe_X2 || gachette != gachette2 || axe_Y != axe_Y2)
  1936. {
  1937. timeOut = std::chrono::system_clock::now();
  1938. }
  1939. }
  1940.  
  1941.  
  1942.  
  1943.  
  1944.  
  1945.  
  1946.  
  1947.  
  1948.         if(std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now()-commandes).count()>=attente)
  1949.         {
  1950.         if(joueurs.size()>0)
  1951.         {
  1952.           std::list<joueur>::iterator iterateur;
  1953.           for(iterateur = joueurs.begin(); iterateur != joueurs.end(); ++iterateur)
  1954.           {
  1955.            iterateur->update();
  1956.           }
  1957.         }
  1958.         commandes = std::chrono::system_clock::now();
  1959.         }
  1960. }
  1961. }
  1962. uint8_t identifiant(4);
  1963. int8_t tableau[1];
  1964. tableau[0] = *reinterpret_cast<int8_t*>(&identifiant);
  1965. TCP.envoyer(tableau, 1);
  1966.     return 0;
  1967. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement