Files
arounders/SequenceController.cpp
jaildoctor ad553db1ae Versió 1.1
2009-03-06 13:03:27 +00:00

215 lines
5.1 KiB
C++

#include "SequenceController.h"
#include "const.h"
#include "fileManager.h"
SequenceController::SequenceController(DrawManager *p_drawManager, InputManager *p_inputManager, MusicManager *p_musicManager) {
drawManager = p_drawManager;
inputManager = p_inputManager;
musicManager = p_musicManager;
}
SequenceController::~SequenceController(void) {
}
bool SequenceController::Init() {
return true;
}
void SequenceController::Go(GameInfo *pGameInfo) {
bool salir = false;
int pantalla = 0;
char *file;
int filesize;
gameInfo = pGameInfo;
if (gameInfo->fase % 5 == 0 || gameInfo->fase < 0) {
switch (gameInfo->fase) {
case -1:
file = GetBufferFromResource("seqIN.seq", &filesize);
break;
case 0:
file = GetBufferFromResource("seq00.seq", &filesize);
break;
case 5:
file = GetBufferFromResource("seq05.seq", &filesize);
break;
case 10:
file = GetBufferFromResource("seq10.seq", &filesize);
break;
case 15:
file = GetBufferFromResource("seq15.seq", &filesize);
break;
case 20:
file = GetBufferFromResource("seq20.seq", &filesize);
break;
case 25:
file = GetBufferFromResource("seq25.seq", &filesize);
break;
case 30:
file = GetBufferFromResource("seq30.seq", &filesize);
break;
}
ProcesarSecuencia(file);
}
//drawManager->FadeOut();
if (gameInfo->estado != ESTADO_SALIR) {
gameInfo->estado = ESTADO_PREFASE;
if (gameInfo->fase == -1) gameInfo->estado = ESTADO_MENU;
if (gameInfo->fase == 30) gameInfo->estado = ESTADO_MENU;
}
}
void SequenceController::ProcesarSecuencia(char *file) {
char numDiapositives = (char)file[0];
int punter = 1;
char *filename;
char *texto;
char tamanyCadena;
Uint16 x;
Uint16 y;
Uint16 temps;
char colorTemp;
Uint32 color;
bool salir = false;
for (int j=0; j<numDiapositives; j++) {
if (salir) {
FadeOutWithMusic();
break;
}
char tipusDiapositiva = (char)file[punter++];
x = 0;
y = 0;
temps = 0;
switch (tipusDiapositiva) {
case DIAPO_ESPERAR:
temps = (Uint16)(((unsigned char)file[punter+1] << 8) + (unsigned char)file[punter]);
salir = !Esperar(temps);
punter += 2;
break;
case DIAPO_FADEIN:
tamanyCadena = file[punter++];
filename = (char *) malloc(tamanyCadena + 1);
for (int i=0; i<tamanyCadena; i++) filename[i] = file[punter++];
filename[tamanyCadena] = '\0';
FadeIn(filename);
break;
case DIAPO_SHOW:
tamanyCadena = file[punter++];
filename = (char *) malloc(tamanyCadena + 1);
for (int i=0; i<tamanyCadena; i++) filename[i] = file[punter++];
filename[tamanyCadena] = '\0';
Show(filename);
break;
case DIAPO_PRINT:
x = (Uint16)(((unsigned char)file[punter+1] << 8) + (unsigned char)file[punter]);
punter+=2;
y = (Uint16)(((unsigned char)file[punter+1] << 8) + (unsigned char)file[punter]);
punter+=2;
colorTemp = file[punter++];
switch (colorTemp) {
case 0:
color = drawManager->color_blanco;
break;
case 1:
color = drawManager->color_rojo;
break;
case 2:
color = drawManager->color_verde;
break;
case 3:
color = drawManager->color_azul;
break;
}
tamanyCadena = file[punter++];
texto = (char *) malloc(tamanyCadena + 1);
for (int i=0; i<tamanyCadena; i++) texto[i] = file[punter++];
texto[tamanyCadena] = '\0';
Print(x, y, color, texto);
break;
case DIAPO_MUSICA:
tamanyCadena = file[punter++];
filename = (char *) malloc(tamanyCadena + 1);
for (int i=0; i<tamanyCadena; i++) filename[i] = file[punter++];
filename[tamanyCadena] = '\0';
Musica(filename, -1);
break;
case DIAPO_FADEOUT:
FadeOut();
break;
case DIAPO_FADEMUSIC:
FadeOutWithMusic();
break;
}
}
}
bool SequenceController::Esperar(Uint32 temps) {
bool seguirIntro = true;
bool salir = false;
Uint32 startTicks = SDL_GetTicks();
while ( !salir ) {
inputManager->Update();
if (inputManager->eixir) {
gameInfo->estado = ESTADO_SALIR;
salir = true;
seguirIntro = false;
}
if (inputManager->cualquierTecla || inputManager->BotoPulsat(SDL_BUTTON_LEFT)) {
salir = true;
if (inputManager->TeclaPulsada(SDLK_ESCAPE)) seguirIntro = false;
}
if (SDL_GetTicks()-startTicks > temps) {
salir = true;
}
}
return seguirIntro;
}
void SequenceController::FadeIn(char *archivo) {
fondo = drawManager->LoadBitmap( archivo);
drawManager->Blit(0,0, fondo);
drawManager->FadeIn();
SDL_FreeSurface(fondo);
}
void SequenceController::Show(char *archivo) {
fondo = drawManager->LoadBitmap( archivo);
drawManager->Blit(0,0, fondo);
drawManager->Flip();
SDL_FreeSurface(fondo);
}
void SequenceController::Print(int x, int y, Uint32 color, char *texto) {
font = drawManager->LoadFont( "fuente2.gif", color);
drawManager->Print(x, y, font, 7, 6, texto);
drawManager->Flip();
SDL_FreeSurface(font);
}
void SequenceController::FadeOut() {
drawManager->FadeOut();
}
void SequenceController::FadeOutWithMusic() {
drawManager->FadeOut();
musicManager->FadeOut();
}
void SequenceController::Musica(char *archivo, int loop) {
musicManager->Load(archivo);
musicManager->Play(loop);
}
void SequenceController::Finalize(void) {
}