00001
00002
00009
00010
#include "affichage.h"
00011
#include "ctrl_fenetre.h"
00012
#include "ctrl_jeu.h"
00013
#include "ctrl_particule.h"
00014
#include "ctrl_son.h"
00015
#include "ctrl_entite.h"
00016
#include "entite_arme.h"
00017
#include "entite_bonus.h"
00018
#include "entite_ennemi.h"
00019
#include "entite_joueur.h"
00020
#include "xml_score.h"
00021
#include "fx_etoile.h"
00022
#include "fx_explosion.h"
00023
#include "texture_manager.h"
00024
00025
CGameManager* CGameManager::m_pGameManager = 0;
00026
00027
00028
00029 CGameManager::CGameManager ()
00030 {
00031 m_pGameManager = 0;
00032 m_pJoueur1 = 0;
00033 m_pJoueur2 = 0;
00034 m_uiNiveau = 0;
00035 m_bNiveau =
true;
00036 m_Etat =
ETAT_JEU_JEU;
00037
00038
00039
CSoundManager::Instance () ->
ActiverCanauxJeu ();
00040 }
00041
00042 CGameManager::~CGameManager ()
00043 {
00044
00045
CSoundManager::Instance () ->
DeactiverCanauxJeu ();
00046
00047
00048
CEntityManager::Kill ();
00049
00050
00051
CParticleManager::Kill ();
00052 }
00053
00054
00055
00056 CGameManager*
CGameManager::Instance ()
00057 {
00058
if (m_pGameManager == 0)
00059 m_pGameManager =
new CGameManager;
00060
return m_pGameManager;
00061 }
00062
00063
00064 void CGameManager::Kill ()
00065 {
00066
if (m_pGameManager != 0)
00067 {
00068
delete m_pGameManager;
00069 m_pGameManager = 0;
00070 }
00071 }
00072
00073 bool CGameManager::IsCreate ()
00074 {
00075
return m_pGameManager != 0;
00076 }
00077
00078
void CGameManager::EnregistrerScore ()
00079 {
00080
SScore Score;
00081
00082
00083
CXMLScore XMLScore;
00084 XMLScore.
Charger (FICHIER_XML_SCORE);
00085
00086
00087
SJoueur Joueur1;
00088 Joueur1.
m_szNom = m_TypeJoueur[0].
GetNom ();
00089 Joueur1.
m_uiScore = m_TypeJoueur[0].
GetScore ();
00090 Joueur1.
m_uiNiveau = m_TypeJoueur[0].
GetNiveau ();
00091 Score.
m_Joueur.push_back (Joueur1);
00092
00093
00094
if (m_uiTypeJoueur == 2)
00095 {
00096
SJoueur Joueur2;
00097 Joueur2.
m_szNom = m_TypeJoueur[1].
GetNom ();
00098 Joueur2.
m_uiScore = m_TypeJoueur[1].
GetScore ();
00099 Joueur2.
m_uiNiveau = m_TypeJoueur[1].
GetNiveau ();
00100 Score.
m_Joueur.push_back (Joueur2);
00101 }
00102
00103
00104 XMLScore.
AjouterScore (Score);
00105 XMLScore.
Sauver ();
00106 }
00107
00108
void CGameManager::GererNiveau ()
00109 {
00110
CEntityManager *pControleurEntite =
CEntityManager::Instance ();
00111
00112
00113
if (m_pJoueur1 == 0 && m_pJoueur2 == 0 && m_Etat !=
ETAT_JEU_DEFAITE)
00114 {
00115 m_Etat =
ETAT_JEU_DEFAITE;
00116 EnregistrerScore ();
00117 }
00118
00119
00120
if (m_bNiveau && pControleurEntite->
GetStatistique ().
m_uiEnnemiDetruit == m_XMLNiveaux.
GetEnnemiNombre (m_uiNiveau))
00121 {
00122 m_bNiveau =
false;
00123 m_NiveauTimer.
Init ();
00124 }
00125
00126
00127
if (!m_bNiveau && (m_NiveauTimer.
GetTime () >
TEMPS_ENTRE_NIVEAU))
00128 {
00129 m_bNiveau =
true;
00130 m_uiNiveau++;
00131 pControleurEntite->
Init ();
00132
00133
if (m_uiNiveau >= m_XMLNiveaux.
GetNiveauNombre ())
00134 {
00135
00136 m_uiNiveau = m_XMLNiveaux.
GetNiveauNombre () - 1;
00137 m_Etat =
ETAT_JEU_VICTOIRE;
00138 m_TypeJoueur[0].
SetNiveau (m_uiNiveau + 1);
00139
if (m_uiTypeJoueur == 2)
00140 m_TypeJoueur[1].
SetNiveau (m_uiNiveau + 1);
00141
00142 EnregistrerScore ();
00143
00144
00145
for (
int i = 0; i < 8; i++)
00146 {
00147
CCouleur Couleur (RandFloat (0, 1), RandFloat (0, 1), RandFloat (0, 1));
00148
CExplosion::Create (0, 32,
CVecteur (RandFloat (0, FENETRE_LARGEUR), RandFloat (0, FENETRE_HAUTEUR)), RandInt (100, 200), RandFloat (1, 4), Couleur);
00149 }
00150 }
00151 }
00152 }
00153
00154 void CGameManager::Update ()
00155 {
00156
00157
if (m_Etat !=
ETAT_JEU_DEFAITE && m_Etat !=
ETAT_JEU_VICTOIRE)
00158 {
00159 GererNiveau ();
00160 UpdateEntite ();
00161
00162
CParticleManager::Instance ()->
Update ();
00163 }
00164
00165
CAffichage *pAffichage =
CAffichage::Instance ();
00166 pAffichage->
Debut ();
00167
00168 pAffichage->
Particule ();
00169
00170 pAffichage->
Entite ();
00171
00172
00173
switch (m_Etat)
00174 {
00175
default:
00176
break;
00177
case ETAT_JEU_JEU:
00178
if (m_uiTypeJoueur == 2)
00179 pAffichage->
HUDJeu (m_uiNiveau, m_TypeJoueur[0].GetScore (), m_TypeJoueur[0].GetNom (), m_TypeJoueur[1].GetScore (), m_TypeJoueur[1].GetNom ());
00180
else
00181 pAffichage->
HUDJeu (m_uiNiveau, m_TypeJoueur[0].GetScore (), m_TypeJoueur[0].GetNom ());
00182
break;
00183
case ETAT_JEU_VICTOIRE:
00184
if (m_uiTypeJoueur == 2)
00185 pAffichage->
HUDVictoire (m_TypeJoueur[0].GetScore (), m_TypeJoueur[0].GetNom (), m_TypeJoueur[1].GetScore (), m_TypeJoueur[1].GetNom ());
00186
else
00187 pAffichage->
HUDVictoire (m_TypeJoueur[0].GetScore (), m_TypeJoueur[0].GetNom ());
00188
break;
00189
case ETAT_JEU_DEFAITE:
00190
if (m_uiTypeJoueur == 2)
00191 pAffichage->
HUDDefaite (m_TypeJoueur[0].GetScore (), m_TypeJoueur[0].GetNom (), m_TypeJoueur[1].GetScore (), m_TypeJoueur[1].GetNom ());
00192
else
00193 pAffichage->
HUDDefaite (m_TypeJoueur[0].GetScore (), m_TypeJoueur[0].GetNom ());
00194
break;
00195 }
00196 pAffichage->
Fin ();
00197 }
00198
00199
void CGameManager::UpdateEntite ()
00200 {
00201
00202
CEntityManager *pEntityManager =
CEntityManager::Instance ();
00203
00204
if (pEntityManager->
GetStatistique ().
m_uiEnnemiCree < m_XMLNiveaux.
GetEnnemiNombre (m_uiNiveau) && m_bNiveau)
00205 {
00206
00207
00208
if (m_EnnemiTimer.
GetTime () > m_XMLNiveaux.
GetEnnemiFrequence (m_uiNiveau))
00209 {
00210 m_EnnemiTimer.
Init ();
00211
CEntiteEnnemi::Create (m_XMLNiveaux.
GetTypeEnnemi (m_uiNiveau),
CVecteur (RandFloat (64, FENETRE_LARGEUR - 64), FENETRE_HAUTEUR + 96));
00212 }
00213
00214
00215
00216
if (m_BonusArmeTimer.
GetTime () > m_XMLNiveaux.
GetBonusArmeFrequence (m_uiNiveau))
00217 {
00218 m_BonusArmeTimer.
Init ();
00219
CEntiteBonus::Create (m_XMLNiveaux.
GetTypeBonusArme (m_uiNiveau),
CVecteur (RandFloat (64, FENETRE_LARGEUR - 64), FENETRE_HAUTEUR + 96));
00220 }
00221
00222
00223
00224
if (m_BonusBouclierTimer.
GetTime () > m_XMLNiveaux.
GetBonusBouclierFrequence (m_uiNiveau))
00225 {
00226 m_BonusBouclierTimer.
Init ();
00227
CEntiteBonus::Create (m_XMLNiveaux.
GetTypeBonusBouclier (m_uiNiveau),
CVecteur (RandFloat (64, FENETRE_LARGEUR - 64), FENETRE_HAUTEUR + 96));
00228 }
00229 }
00230
00231
00232 pEntityManager->
Update ();
00233 }
00234
00235 bool CGameManager::Init (
unsigned int uiJoueur,
const char* szJoueur1,
const char* szJoueur2)
00236 {
00237
00238
if (!m_XMLNiveaux.
Charger (
FICHIER_XML_NIVEAU))
00239
return false;
00240
00241
00242
CEntityManager::Instance ();
00243
00244
CParticleManager::Instance ();
00245
00246
00247
InitJoueur (uiJoueur, szJoueur1, szJoueur2);
00248
00249
00250
CEtoile::Create ();
00251
00252
00253 m_EnnemiTimer.
Init ();
00254 m_BonusArmeTimer.
Init ();
00255 m_BonusBouclierTimer.
Init ();
00256
00257
return true;
00258 }
00259
00260
00261
void CGameManager::InitJoueur (
unsigned int uiJoueur,
const char* szJoueur1,
const char* szJoueur2)
00262 {
00263 m_uiTypeJoueur = uiJoueur;
00264
00265
00266 m_TypeJoueur[0].
SetNumero (1);
00267 m_TypeJoueur[0].
SetTexture (CTextureManager::Instance ()->Texture2D (FIFHIER_TEXTURE_JOUEUR1));
00268 m_TypeJoueur[0].
SetTextureBouclier (CTextureManager::Instance ()->Texture2D (FIFHIER_TEXTURE_BOUCLIER));
00269 m_TypeJoueur[0].
SetCouleur (
CCouleur (0.5f, 0.5f, 1.0f));
00270 m_TypeJoueur[0].
SetDommage (5);
00271 m_TypeJoueur[0].
SetTaille (32);
00272 m_TypeJoueur[0].
SetSon (FICHIER_SON_EXPLOSION);
00273 m_TypeJoueur[0].
SetNom (szJoueur1);
00274 m_TypeJoueur[0].
SetPositionSpawn (
CVecteur (FENETRE_LARGEUR * 1.f / 3.f, FENETRE_HAUTEUR / 6.f));
00275
00276
00277 m_TypeJoueur[1].
SetNumero (2);
00278 m_TypeJoueur[1].
SetTexture (CTextureManager::Instance ()->Texture2D (FIFHIER_TEXTURE_JOUEUR2));
00279 m_TypeJoueur[1].
SetTextureBouclier (CTextureManager::Instance ()->Texture2D (FIFHIER_TEXTURE_BOUCLIER));
00280 m_TypeJoueur[1].
SetCouleur (
CCouleur (1.0f, 0.5f, 0.5f));
00281 m_TypeJoueur[1].
SetDommage (5);
00282 m_TypeJoueur[1].
SetTaille (32);
00283 m_TypeJoueur[1].
SetSon (FICHIER_SON_EXPLOSION);
00284 m_TypeJoueur[1].
SetNom (szJoueur2);
00285 m_TypeJoueur[1].
SetPositionSpawn (
CVecteur (FENETRE_LARGEUR * 2.f / 3.f, FENETRE_HAUTEUR / 6.f));
00286
00287
00288 m_pJoueur1 =
CEntiteJoueur::Create (&m_TypeJoueur[0]);
00289 m_pJoueur1->
SetArme (m_XMLNiveaux.
GetTypeBonusArme (0)->
GetArme ());
00290
00291
if (m_uiTypeJoueur == 2)
00292 {
00293
00294 m_pJoueur2 =
CEntiteJoueur::Create (&m_TypeJoueur[1]);
00295 m_pJoueur2->SetArme (m_XMLNiveaux.
GetTypeBonusArme (0)->
GetArme ());
00296 }
00297 }
00298
00299
00300 void CGameManager::Tirer (EJoueur Joueur,
bool bTire)
00301 {
00302
switch (Joueur)
00303 {
00304
default:
00305
break;
00306
case JOUEUR_1:
00307
if (m_pJoueur1)
00308 m_pJoueur1->
SetTirer (bTire);
00309
break;
00310
case JOUEUR_2:
00311
if (m_pJoueur2)
00312 m_pJoueur2->SetTirer (bTire);
00313
break;
00314 }
00315 }
00316
00317
00318 void CGameManager::PositionnerJoueur (EJoueur Joueur,
CVecteur Position)
00319 {
00320
switch (Joueur)
00321 {
00322
default:
00323
break;
00324
case JOUEUR_1:
00325
if (m_pJoueur1)
00326 m_pJoueur1->
SetPosition (Position);
00327
break;
00328
case JOUEUR_2:
00329
if (m_pJoueur2)
00330 m_pJoueur2->SetPosition (Position);
00331
break;
00332 }
00333 }
00334
00335
00336 void CGameManager::InitJoueur (
CEntiteJoueur* pJoueur)
00337 {
00338
if (m_pJoueur1 == pJoueur)
00339 {
00340
00341 m_TypeJoueur[0].
SetNiveau (m_uiNiveau + 1);
00342 m_pJoueur1 = 0;
00343 }
00344
if (m_pJoueur2 == pJoueur)
00345 {
00346
00347
if (m_uiTypeJoueur == 2)
00348 m_TypeJoueur[1].
SetNiveau (m_uiNiveau + 1);
00349 m_pJoueur2 = 0;
00350 }
00351 }
00352