Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Comparing changes

Choose two branches to see what's changed or to start a new pull request. If you need to, you can also compare across forks.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also compare across forks.
base fork: Matael/Gravastre-2.0
base: 56226d3b4c
...
head fork: Matael/Gravastre-2.0
compare: bed897189b
  • 11 commits
  • 14 files changed
  • 0 commit comments
  • 1 contributor
View
1  .gitignore
@@ -1,2 +1,3 @@
Versions/*
*.elf
+*.swp
View
31 Configurateurs/Graphisme/fenetre.cpp
@@ -40,6 +40,11 @@ void fenetre::ecritureFichier() {
definition = 16;
if(ECRAN_Definition->currentText() == DEFINITION_8)
definition = 8;
+ int affichageTrajectoire = 1;
+ if(AFF_Trajectoire->currentText() == "Tous les astres")
+ affichageTrajectoire = 2;
+ else if(AFF_Trajectoire->currentText() == "Aucune trajectoire")
+ affichageTrajectoire = 0;
// on va écrire entièrement le fichier
// PREMIERE LIGNE
@@ -76,6 +81,8 @@ void fenetre::ecritureFichier() {
<<":"<< VAL_PrecisionZoom->value()
<<":"<< VAL_PasTabulation->value()
<<":"<< VAL_PrecisionClic->value()
+ <<":"<< affichageTrajectoire
+ <<":"<< AFF_BordTrajectoire->value()
<<":"<< inverserZoom
<<":"<< inverserDefil
<<":"<< activerMusique
@@ -294,7 +301,24 @@ QVBoxLayout* fenetre::INI_GroupeGraphique() {
QHBoxLayout* layBordSelection = new QHBoxLayout;
layBordSelection->addWidget(AFF_LabBordSelection);
layBordSelection->addWidget(AFF_BordSelection);
- // 2: TAILLE POLICE ASTRE NOM
+ // 2: TRAJECTOIRES
+ // widget
+ AFF_LabTrajectoire = new QLabel("Affichage des trajectoires", this);
+ AFF_Trajectoire = new QComboBox(this);
+ AFF_Trajectoire->addItem("Tous les astres");
+ AFF_Trajectoire->addItem("Seulement la sélection");
+ AFF_Trajectoire->addItem("Aucune trajectoire");
+ AFF_Trajectoire->setToolTip("Choisissez quels astres verront leur trajectoire affichée. Les calculs menés pour les affichages de trajectoires sont lourds, évitez donc d'afficher toutes les trajectoire quand 20 astres se promènent dans votre Univers.");
+ AFF_BordTrajectoire = new QDoubleSpinBox(this);
+ AFF_BordSelection->setRange(0.001,100);
+ AFF_BordSelection->setValue(0.3);
+ AFF_BordSelection->setToolTip("Taille des points représentant la trajectoire");
+ // Layouts
+ QHBoxLayout* layTrajectoire = new QHBoxLayout;
+ layTrajectoire->addWidget(AFF_LabTrajectoire);
+ layTrajectoire->addWidget(AFF_Trajectoire);
+ layTrajectoire->addWidget(AFF_BordTrajectoire);
+ // 3: TAILLE POLICE ASTRE NOM
// widget
AFF_LabTaillePolice = new QLabel("Taille de la police des astres",
this);
@@ -307,7 +331,7 @@ QVBoxLayout* fenetre::INI_GroupeGraphique() {
QHBoxLayout* layTaillePolice = new QHBoxLayout;
layTaillePolice->addWidget(AFF_LabTaillePolice);
layTaillePolice->addWidget(AFF_TaillePolice);
- // 3: POLICE UTILISEE
+ // 4: POLICE UTILISEE
// widget
AFF_LabPolice = new QLabel(GRAVASTRE_CHEMIN_POLICE, this);
AFF_Police = new QPushButton("Autre Police", this);
@@ -320,7 +344,7 @@ QVBoxLayout* fenetre::INI_GroupeGraphique() {
// connect
connect(AFF_Police, SIGNAL(clicked()),
this, SLOT(choisirCheminPolice()));
- // 4: COULEUR INTERFACE
+ // 5: COULEUR INTERFACE
// widget
AFF_LabCouleurInterface = new QLabel("Couleur de l'interface",
this);
@@ -338,6 +362,7 @@ QVBoxLayout* fenetre::INI_GroupeGraphique() {
this, SLOT(choisirCouleurInterface()));
// layout d'affichage
layAffichage->addLayout(layBordSelection);
+ layAffichage->addLayout(layTrajectoire);
layAffichage->addLayout(layTaillePolice);
layAffichage->addLayout(layPolice);
layAffichage->addLayout(layCouleurInterface);
View
3  Configurateurs/Graphisme/fenetre.h
@@ -45,6 +45,9 @@ class fenetre : public QWidget {
QGroupBox* groupAffichage;
QLabel* AFF_LabBordSelection;
QSpinBox* AFF_BordSelection;
+ QLabel* AFF_LabTrajectoire;
+ QComboBox* AFF_Trajectoire;
+ QDoubleSpinBox* AFF_BordTrajectoire;
QLabel* AFF_LabTaillePolice;
QSpinBox* AFF_TaillePolice;
QLabel* AFF_LabPolice;
View
15 Configurateurs/Univers/main.cpp
@@ -29,3 +29,18 @@ string num2str(float nb) {
+
+/*
+ * GESTION EXTERNE
+ */
+// diffuse l'erreur en argument et arrête le programme en FAILURE si arret vrai
+void FATAL_ERROR(string error, bool arret) {
+ ofstream err(FILE_ERR, ios::app);
+ err << error << "\n";
+ err.close();
+ if(arret)
+ exit(EXIT_FAILURE);
+}
+
+
+
View
7 Configurateurs/Univers/main.h
@@ -27,6 +27,7 @@
*/
// fonctions annexes
std::string num2str(float);
+ void FATAL_ERROR(std::string error, bool arret); // diffuse l'erreur en argument et arrête le programme en FAILURE si arret vrai
// énumération permettant de définir la façon dont est déterminée la position du satellite en fonction de l'astre
enum MODE_PLACEMENT {Position, Vitesse};
// Structures de simplification d'écriture
@@ -58,11 +59,13 @@ struct Couleur {
*/
// Général
#define PRGM_NOM "Configurateur de l'Univers de Gravastre"
- #define FICHIER_CIBLE "./Fichiers/AST.Alk"
- #define FICHIER_NOM_ASTRE "./Configurateurs/Univers/nomsAstres"
#define CHEMIN_GRAVASTRE "./Gravastre"
#define PRGM_LARGEUR 667
#define PRGM_HAUTEUR 500
+// Fichiers
+ #define FICHIER_CIBLE "./Fichiers/AST.Alk"
+ #define FICHIER_NOM_ASTRE "./Fichiers/nomsAstres"
+ #define FILE_ERR "Erreur.txt"
// Valeurs
#define TABLE_NB_COLONNE_ASTRE 6
View
2  Fichiers/INI.Alk
@@ -1,4 +1,4 @@
-1400:700:250:250:20:32:80:0:255:4:30:5:12:14:12:
+1400:700:250:250:20:32:80:0:255:4:30:5:12:14:12:2:0.3:
Fichiers/Ressources/NEUROPOLX.ttf:
20:1.1:100:5:0:0:1:
Fichiers/Ressources/WelcomeToNova-Emitremmus.flac:
View
0  Configurateurs/Univers/nomsAstres → Fichiers/nomsAstres
File renamed without changes
View
29 src_Gravastre/Astre.cpp
@@ -9,7 +9,7 @@ using namespace sf;
* CONSTRUCTEUR
*/
// nom coordonnées du centre, masse, diamètre, couleur, vitesse, accélération.
-Astre::Astre(Univers *u, String Nom, float x, float y, float masse, float diam, Color clr, float vx, float vy, bool aff) {
+Astre::Astre(Univers *u, String Nom, float x, float y, float masse, float diam, Color clr, float vx, float vy, bool trjt, bool aff) {
U = u;
a_pos.x = x;
a_pos.y = y;
@@ -18,6 +18,8 @@ Astre::Astre(Univers *u, String Nom, float x, float y, float masse, float diam,
a_acc.x = 0;
a_acc.y = 0;
affichage = aff;
+ affTrajectoire = trjt;
+ nbPointsTraj = 200;
a_masse = masse;
a_diam = diam;
a_clr = clr;
@@ -72,6 +74,13 @@ void Astre::calculsdt(std::vector<Astre*> astres) {
// modifie sa vitesse selon accélérations, puis sa position en fonction des vitesses
void Astre::Move() {
+ // on commence par s'occuper de la trajectoire : la position actuelle vas être insérée en fin de deque trjt, et la position en front vas être supprimée
+ if(affTrajectoire) {
+ trajectoire.push_back(Vector2f(a_pos));
+ if(trajectoire.size() >= nbPointsTraj)
+ trajectoire.pop_front();
+ }
+ // On gère maintenant le déplacement en lui-même
AddVit(a_acc.x, a_acc.y); // ajout de l'accélération à la vitesse
U->borneVitesse(&a_vit); // on borne la vitesse
AddPosition(a_vit.x, a_vit.y); // ajout de la vitesse à la position
@@ -110,6 +119,9 @@ Shape Astre::GetShape() {
shape = Shape::Circle(a_pos.x, a_pos.y, a_diam/2.0, a_clr, epaisseurBord, a_bclr);
return shape;
}
+std::deque<Vector2f> Astre::GetTrajectoire() {
+ return trajectoire;
+}
String Astre::GetNom() {
nom.SetPosition(a_pos.x + a_diam + 5, a_pos.y);
return nom;
@@ -131,6 +143,13 @@ float Astre::GetDiametre() {
return a_diam;
}
+void Astre::SetCouleur(Color c) {
+ a_clr = c;
+}
+Color Astre::GetCouleur() {
+ return a_clr;
+}
+
void Astre::SetSelection(bool s) {
estSelectionne = s;
}
@@ -138,6 +157,14 @@ bool Astre::GetSelection() {
return estSelectionne;
}
+void Astre::SetAffTrajectoire(bool t) {
+ affTrajectoire = t;
+}
+bool Astre::GetAffTrajectoire() {
+ return affTrajectoire;
+}
+
+
// Position
View
10 src_Gravastre/Astre.h
@@ -14,7 +14,7 @@ class Astre {
float, float, float, float,
sf::Color,
float = 0, float = 0,
- bool = 1);
+ bool = 0, bool = 1);
// METHODES
virtual void calculsdt(std::vector<Astre*>); // calcule les accélérations en fonction des astres envoyés en arguments
@@ -27,14 +27,19 @@ class Astre {
// Généraux
Univers *U;
virtual sf::Shape GetShape();
+ virtual std::deque<sf::Vector2f> GetTrajectoire();
sf::String GetNom();
void SetMasse(float);
void AddMasse(float);
float GetMasse();
void SetDiametre(float);
float GetDiametre();
+ void SetCouleur(sf::Color);
+ sf::Color GetCouleur();
void SetSelection(bool);
bool GetSelection();
+ void SetAffTrajectoire(bool);
+ bool GetAffTrajectoire();
// Position
void SetPosition(float, float);
sf::Vector2f GetPosition();
@@ -61,8 +66,11 @@ class Astre {
float a_diam;
sf::Color a_clr; // couleur majeure
sf::Color a_bclr; // couleur de bordure
+ std::deque<sf::Vector2f> trajectoire; // liste des points de trjt
+ unsigned int nbPointsTraj; // nombre de point max de trajectoire
// attribut extérieur
bool affichage; // si vrai, affichage en sortie standard
+ bool affTrajectoire; // si vrai, on stocke les coordonnées dans un deque dans l'optique de les afficher à l'écran.
bool estSelectionne; // vrai si cet Astre doit être mit en avant
};
View
48 src_Gravastre/RenduGraphique.cpp
@@ -17,7 +17,8 @@ RenduGraphique::RenduGraphique(bool aff, bool expl) {
INI_Valeurs(); // initialisation des valeurs utilisateurs
// création de l'univers
- U = new Univers(affichage, exemple, &police, SFML_TaillePolice);
+ U = new Univers(affichage, exemple, SFML_Trajectoire,
+ &police, SFML_TaillePolice);
if(affichage)
std::cout << "INI: \tUnivers initialisé\n";
// création de l'écran
@@ -100,15 +101,16 @@ void RenduGraphique::boucleMaitresse() {
// Musique
int statMsq = 1; // mit à faux si la musique n'est pas utilisable
Music msq;
- if(!msq.OpenFromFile(musique)) {
- FATAL_ERROR("INI: Le fichier de musique n'a pas été ouvert", false);
- statMsq = 0; // on ne doit pas agir sur la musique !
- } else if(!NAV_ActiverMusique) { // si pas musique autorisée
+ if(NAV_ActiverMusique) { // si musique autorisée
+ if(!msq.OpenFromFile(musique)) {
+ FATAL_ERROR("INI: Le fichier de musique n'a pas été ouvert", false);
+ statMsq = 0; // on ne doit pas agir sur la musique !
+ } else {
+ msq.Play();
+ msq.SetLoop(true); // on joue la musique en boucle
+ }
+ } else
statMsq = 0;
- } else {
- msq.Play();
- msq.SetLoop(true); // on joue la musique en boucle
- }
Event event; // évènement
// boucle évènementielle
@@ -414,6 +416,21 @@ void RenduGraphique::affichageSFML() {
for(unsigned int i = 0; i < U->getAstres().size(); i++) {
app->Draw((U->getAstres())[i]->GetShape());
app->Draw((U->getAstres())[i]->GetNom());
+ // gestion de l'affichage des trajectoires
+ if(SFML_Trajectoire == Toujours ||
+ (SFML_Trajectoire == Selection && selection == (U->getAstres())[i])){
+ std::deque<Vector2f> inter = (U->getAstres())[i]->GetTrajectoire();
+ //std::cout << inter.size() << std::endl;
+ for(unsigned int y = 0; y < inter.size(); y++) {
+ Shape point;
+ point = Shape::Circle(inter[y].x, inter[y].y, SFML_EpaisseurPointTrajectoire, (U->getAstres())[i]->GetCouleur());
+ app->Draw(point);
+ /*
+ std::cout << "X:"<< point.GetPosition().x
+ << " Y:"<< point.GetPosition().y
+ << std::endl; // */
+ }
+ }
}
// INTERFACE
// On reviens à une vue normale pour ces dessins, car ils s'impriment par dessus le reste et sont indépendant de la vue utilisée
@@ -640,6 +657,11 @@ void RenduGraphique::modificationAstre(bool ajout) {
AxeX = false;
etat[ETAT_AXE] = 'Y'; // l'axe considéré est modifié
break;
+ case Key::T:
+ // on inverse l'utilisation de la trajectoire
+ selection->SetAffTrajectoire(
+ !selection->GetAffTrajectoire());
+ break;
case Key::Back: // on retire la dernière case du tampon
if(tampon.size() == 0) break;
stmp = tampon;
@@ -833,6 +855,8 @@ void RenduGraphique::INI_Valeurs() {
SFML_TaillePolice = str2num((*val)[0][12]);
SFML_TaillePolBoiteInfo = str2num((*val)[0][13]);
SFML_TPolHauteInterface = str2num((*val)[0][14]);
+ SFML_Trajectoire = (AFF_TRAJECTOIRE)str2float((*val)[0][15]);
+ SFML_EpaisseurPointTrajectoire = str2float((*val)[0][16]);
// on essaye d'ouvrir la police
police = Font();
// si la chaine est vide
@@ -873,6 +897,8 @@ void RenduGraphique::valeursParDefaut() {
SFML_TaillePolice = 12;
SFML_TaillePolBoiteInfo = 14;
SFML_TPolHauteInterface = 12;
+ SFML_Trajectoire = Jamais;
+ SFML_EpaisseurPointTrajectoire = 0.3;
// on n'arrête pas le programme, mais on dit que ça a merdé
FATAL_ERROR("INI: le fichier de police n'a pas été ouvert", false);
// on prend comme police la police de base
@@ -895,12 +921,12 @@ void RenduGraphique::valeursParDefaut() {
// renvoi vrai si le vector n'a pas le nombre de cases attendu.
bool RenduGraphique::estCorrompu(std::vector<std::vector<std::string> >* vec) {
// le vector final doit avoir 4 cases
- // 0: 15 cases (valeurs entières SFML)
+ // 0: 17 cases (valeurs entières SFML)
// 1: 1 case (chemin vers la police)
// 2: 7 cases (valeurs de navigations)
// 3: 1 cases (valeurs de sortie)
if(vec->size() != 4) return true;
- if((*vec)[0].size() != 15) return true;
+ if((*vec)[0].size() != 17) return true;
if((*vec)[1].size() != 1) return true;
if((*vec)[2].size() != 7) return true;
if((*vec)[3].size() != 1) return true;
View
2  src_Gravastre/RenduGraphique.h
@@ -38,6 +38,8 @@ class RenduGraphique {
int SFML_TaillePolice; // taille de la police
int SFML_TaillePolBoiteInfo; // taille de la police pour BoiteInfoAstre
int SFML_TPolHauteInterface; // taille de la police pour la barre haute
+ AFF_TRAJECTOIRE SFML_Trajectoire; // affichage des trajectoire d'astres
+ float SFML_EpaisseurPointTrajectoire; // taille en px des point de trjt
sf::Font police; // police d'écriture
// valeurs de navigation
int NAV_PasFleche; // déplacement en px à l'appuis d'une flèche
View
37 src_Gravastre/Univers.cpp
@@ -6,8 +6,14 @@ using namespace std;
/*
* CONSTRUCTEUR
*/
-Univers::Univers(bool aff, bool expl, sf::Font *pol, int tPol) {
- affichage = aff;
+Univers::Univers(bool aff, bool expl, AFF_TRAJECTOIRE trjt,
+ sf::Font *pol, int tPol) {
+ affIndication = aff;
+ trajectoire = trjt;
+ if(trajectoire == Toujours || trajectoire == Selection)
+ affTrajectoire = true;
+ else
+ affTrajectoire = false;
exemple = expl;
police = pol;
taillePolice = tPol;
@@ -21,7 +27,7 @@ Univers::Univers(bool aff, bool expl, sf::Font *pol, int tPol) {
*/
Univers::~Univers() {
liberationMemoire();
- if(affichage)
+ if(affIndication)
cout << "MEM: Libération mémoire Univers terminée" <<endl;
}
@@ -85,7 +91,7 @@ void Univers::supprimerAstre(Astre *cible) {
astres.pop_back();
for(unsigned int i = 0; i < inter.size(); i++)
astres.push_back(inter[i]);
- if(affichage)
+ if(affIndication)
std::cout<<"L'astre N°"<<ID<<" a été supprimé"<<std::endl;
}
@@ -137,19 +143,19 @@ void Univers::listeAstreParDefaut() {
sf::String Lune(" et Lune", *police, taillePolice);
sf::String Mars("Mars", *police, taillePolice);
sf::String Chauffard("Chauffard", *police, taillePolice);
- astres.push_back(new Astre(this, Soleil, 122,0,1e13,14,sf::Color(255,255,0), 0,0));
+ astres.push_back(new Astre(this, Soleil, 122,0,1e13,14,sf::Color(255,255,0), 0,0, affTrajectoire, affIndication));
// Mercure
- astres.push_back(new Astre(this, Mercure, 122,120,1e07,4,sf::Color(255,125,0), 2.36,0));
+ astres.push_back(new Astre(this, Mercure, 122,120,1e07,4,sf::Color(255,125,0), 2.36,0, affTrajectoire, affIndication));
// Vénus
- astres.push_back(new Astre(this, Venus, 122,-210,1e07,4,sf::Color(255,0,125), -1.78,0));
+ astres.push_back(new Astre(this, Venus, 122,-210,1e07,4,sf::Color(255,0,125), -1.78,0, affTrajectoire, affIndication));
// Terre
- astres.push_back(new Astre(this, Terre, 422,0,1e07,4,sf::Color(0,0,255), 0,-1.49));
+ astres.push_back(new Astre(this, Terre, 422,0,1e07,4,sf::Color(0,0,255), 0,-1.49, affTrajectoire, affIndication));
// Lune
- astres.push_back(new Astre(this, Lune, 422.6,0,7e05,2,sf::Color(255,255,255), 0,-1.52334));
+ astres.push_back(new Astre(this, Lune, 422.6,0,7e05,2,sf::Color(255,255,255), 0,-1.52334, affTrajectoire, affIndication));
// Mars
- astres.push_back(new Astre(this, Mars, -328,0,1e07,4,sf::Color(255,0,0), 0,1.21));
+ astres.push_back(new Astre(this, Mars, -328,0,1e07,4,sf::Color(255,0,0), 0,1.21, affTrajectoire, affIndication));
// Chauffard
- astres.push_back(new Astre(this, Chauffard, -878,120,1e05,2,sf::Color(0,255,0), 3,0));
+ astres.push_back(new Astre(this, Chauffard, -878,120,1e05,2,sf::Color(0,255,0), 3,0, affTrajectoire, affIndication));
}
@@ -171,7 +177,7 @@ void Univers::INI_Astres() {
if(lfi.lecture() <= 0) { // gestion d'erreur en tout genre
FATAL_ERROR("INI: Le fichier FILE_AST n'a pas été ouvert", false);
listeAstreParDefaut(); // la liste d'astre ne peut être constituée à partir du fichier, on utilise donc les valeurs par défaut
- if(affichage)
+ if(affIndication)
cout << "INI: \tListe des Astres par défaut chargée" <<endl;
return;
} else {
@@ -180,7 +186,7 @@ void Univers::INI_Astres() {
if(estCorrompu(vec)) {
FATAL_ERROR("INI: Le fichier FILE_AST est corrompu", false);
listeAstreParDefaut(); // la liste d'astre ne peut être constituée à partir du fichier, on utilise donc les valeurs par défaut
- if(affichage)
+ if(affIndication)
cout << "INI: \tListe des Astres par défaut chargée" <<endl;
return;
}
@@ -205,11 +211,12 @@ void Univers::INI_Astres() {
clr, // arg couleur
str2float((*vec)[i][8])*CONVERTION_VIT, // arg VX
str2float((*vec)[i][9])*CONVERTION_VIT, // arg VY
- affichage // arg bool aff
+ affTrajectoire, // arg bool trjt
+ affIndication // arg bool aff
));
}
// affichages
- if(affichage)
+ if(affIndication)
cout << "INI: \tListe des Astres chargée" <<endl;
}
View
6 src_Gravastre/Univers.h
@@ -5,7 +5,7 @@
class Univers {
public:
// CONSTRUCTEUR ET DESTRUCTEUR
- Univers(bool aff, bool expl, sf::Font*, int);
+ Univers(bool aff, bool expl, AFF_TRAJECTOIRE, sf::Font*, int);
~Univers();
// METHODES
@@ -28,7 +28,9 @@ class Univers {
// valeurs utilisateurs
float G; // constante de gravitation universelle
int bV; // vitesse maximale
- bool affichage; // si vrai, utilisation de la sortie standard
+ AFF_TRAJECTOIRE trajectoire; // affichage des trajectoires des astres
+ bool affTrajectoire; // vrai si on doit afficher une trajectoire au -
+ bool affIndication; // si vrai, utilisation de la sortie standard
bool exemple; // vrai si utilisation de l'univers par défaut
// valeurs de texte
sf::Font *police;
View
6 src_Gravastre/main.h
@@ -54,7 +54,11 @@
// - boite d'information sur l'astre sélectionné
// - barre d'interface du haut
enum OBJET_INTERFACE {Dehors, BoiteInfo, Barre};
-
+ // Utilisé pour savoir comment afficher les trajectoires des astres
+ // - jamais (0)
+ // - seulement l'astre sélectionné (2)
+ // - toujours (2)
+ enum AFF_TRAJECTOIRE {Jamais=0, Selection=1, Toujours=2};

No commit comments for this range

Something went wrong with that request. Please try again.