Files
commandergenius/project/jni/application/alienblaster/intro.cpp

251 lines
7.5 KiB
C++

/***************************************************************************
alienBlaster
Copyright (C) 2004
Paul Grathwohl, Arne Hormann, Daniel Kuehn, Soenke Schwardt
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
***************************************************************************/
using namespace std;
#include <android/log.h>
#include "intro.h"
#include "global.h"
#include "surfaceDB.h"
#include "mixer.h"
#include "video.h"
#include "font.h"
#include "settings.h"
#include "infoscreen.h"
Intro::Intro( SdlCompat_AcceleratedSurface *scr ) {
__android_log_print(ANDROID_LOG_INFO, "Alien Blaster", "Intro() 1");
screen = scr;
__android_log_print(ANDROID_LOG_INFO, "Alien Blaster", "Intro() 2");
introSprite = surfaceDB.loadSurface( FN_ALIENBLASTER_INTRO );
__android_log_print(ANDROID_LOG_INFO, "Alien Blaster", "Intro() 3");
activeChoiceSprite = surfaceDB.loadSurface( FN_INTRO_SHOW_CHOICE );
__android_log_print(ANDROID_LOG_INFO, "Alien Blaster", "Intro() 4");
font = new Font( FN_FONT_INTRO );
__android_log_print(ANDROID_LOG_INFO, "Alien Blaster", "Intro() 5");
fontHighlighted = new Font( FN_FONT_INTRO_HIGHLIGHTED );
__android_log_print(ANDROID_LOG_INFO, "Alien Blaster", "Intro() 6");
activeChoice = 0;
__android_log_print(ANDROID_LOG_INFO, "Alien Blaster", "Intro() 7");
choose = Mixer::mixer().loadSample( FN_SOUND_INTRO_CHOOSE, 100 );
__android_log_print(ANDROID_LOG_INFO, "Alien Blaster", "Intro() 8");
confirm = Mixer::mixer().loadSample( FN_SOUND_INTRO_CONFIRM, 100 );
__android_log_print(ANDROID_LOG_INFO, "Alien Blaster", "Intro() 9");
infoscreen = new Infoscreen( screen );
__android_log_print(ANDROID_LOG_INFO, "Alien Blaster", "Intro() 10");
}
Intro::~Intro() {}
void Intro::run( GameStates &gameState ) {
if ( playMusicOn && Mixer::mixer().whichMusicPlaying() != MUSIC_INTRO ) {
Mixer::mixer().playMusic( MUSIC_INTRO, -1, 1000 );
}
draw();
while ( gameState == GS_INTRO ) {
handleEvents( gameState );
draw();
SDL_Delay( 50 );
}
}
void Intro::draw() {
videoserver->clearScreen();
SDL_Rect r;
r.x = screen->w / 2 - introSprite->w / 2;
r.y = 0;
r.w = introSprite->w;
r.h = introSprite->h;
SDL_BlitSurface( introSprite, 0, screen, &r );
for ( int i = 0; i < NR_INTRO_CHOICES; i++ ) {
if ( activeChoice == i ) {
r.x = 230 - activeChoiceSprite->w - 8;
r.y = 258 + i * 35;
r.w = activeChoiceSprite->w;
r.h = activeChoiceSprite->h;
SDL_BlitSurface(activeChoiceSprite, 0, screen, &r );
fontHighlighted->drawStr( screen, 230, 260 + i * 35, INTRO_CHOICES[ i ] );
} else {
font->drawStr( screen, 230, 260 + i * 35, INTRO_CHOICES[ i ] );
}
}
SDL_Flip( screen );
}
void Intro::handleEvents( GameStates &gameState ) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
switch(event.type) {
case SDL_KEYDOWN: {
switch(event.key.keysym.sym) {
case SDLK_F5: {
videoserver->toggleFullscreen();
break;
}
case SDLK_F7: {
if ( playMusicOn ) {
playMusicOn = false;
Mixer::mixer().stopMusic();
} else {
playMusicOn = true;
Mixer::mixer().playMusic( MUSIC_INTRO, -1, 1000 );
}
break;
}
case SDLK_UP: {
Mixer::mixer().playSample( choose, 0 );
activeChoice--;
if ( activeChoice < 0 ) activeChoice = NR_INTRO_CHOICES - 1;
break;
}
case SDLK_DOWN: {
Mixer::mixer().playSample( choose, 0 );
activeChoice = (activeChoice + 1) % NR_INTRO_CHOICES;
break;
}
case SDLK_ESCAPE: {
gameState = GS_QUIT;
break;
}
case SDLK_RETURN: {
Mixer::mixer().playSample( confirm, 0 );
switch (activeChoice) {
case ONE_PLAYER_GAME: {
onePlayerGame = true;
arcadeGame = false;
gameState = GS_SET_DIFFICULTY;
break;
}
case TWO_PLAYER_GAME: {
onePlayerGame = false;
arcadeGame = false;
gameState = GS_SET_DIFFICULTY;
break;
}
case ARCADE_GAME: {
onePlayerGame = true;
arcadeGame = true;
gameState = GS_ARCADE_MODE_SETUP;
break;
}
case CONFIGURE_KEYS: {
settings->settingsDialog(screen);
draw();
break;
}
case INFOSCREEN: {
infoscreen->run();
break;
}
case QUIT_AND_DIE: {
gameState = GS_QUIT;
break;
}
}
break;
}
default: break;
}
break;
}
case SDL_QUIT: {
gameState = GS_QUIT;
break;
}
default: break;
}
}
}
void Intro::showScreenshots() {
if ( playMusicOn && Mixer::mixer().whichMusicPlaying() != MUSIC_INTRO ) {
Mixer::mixer().playMusic( MUSIC_INTRO, -1, 1000 );
}
// TODO: Too lazy to fix that
/*
SdlCompat_AcceleratedSurface *surfS = SDL_LoadBMP( FN_ALIENBLASTER_INTRO.c_str() );
SdlCompat_AcceleratedSurface *surf0 = SDL_LoadBMP( FN_SCREENSHOT0.c_str() );
SdlCompat_AcceleratedSurface *surf1 = SDL_LoadBMP( FN_SCREENSHOT1.c_str() );
SdlCompat_AcceleratedSurface *surf2 = SDL_LoadBMP( FN_SCREENSHOT2.c_str() );
SdlCompat_AcceleratedSurface *surf3 = SDL_LoadBMP( FN_SCREENSHOT3.c_str() );
SdlCompat_AcceleratedSurface *surf4 = SDL_LoadBMP( FN_SCREENSHOT4.c_str() );
SdlCompat_AcceleratedSurface *surf5 = SDL_LoadBMP( FN_SCREENSHOT5.c_str() );
SdlCompat_AcceleratedSurface *surf6 = SDL_LoadBMP( FN_SCREENSHOT6.c_str() );
SdlCompat_AcceleratedSurface *surf7 = SDL_LoadBMP( FN_SCREENSHOT7.c_str() );
SdlCompat_AcceleratedSurface *surf8 = SDL_LoadBMP( FN_SCREENSHOT8.c_str() );
SdlCompat_AcceleratedSurface *surf9 = SDL_LoadBMP( FN_SCREENSHOT9.c_str() );
SDL_BlitSurface( surfS, 0, screen, 0 );
SDL_Flip(screen);
SDL_Delay(3000);
int sps = 50; // steps per second
if (blendImages( screen, surfS, 0, surf0, 0, sps ))
if (blendImages( screen, surf0, 0, surf1, 0, sps ))
if (blendImages( screen, surf1, 0, surf2, 0, sps ))
if (blendImages( screen, surf2, 0, surf3, 0, sps ))
if (blendImages( screen, surf3, 0, surf4, 0, sps ))
if (blendImages( screen, surf4, 0, surf5, 0, sps ))
if (blendImages( screen, surf5, 0, surf6, 0,sps ))
if (blendImages( screen, surf6, 0, surf7, 0, sps ))
if (blendImages( screen, surf7, 0, surf8, 0, sps ))
blendImages( screen, surf8, 0, surf9, 0, sps );
*/
}
// TODO: Too lazy to fix that
/*
bool Intro::blendImages( SdlCompat_AcceleratedSurface *screen, SdlCompat_AcceleratedSurface *surf0, SDL_Rect *r1, SdlCompat_AcceleratedSurface *surf1, SDL_Rect *r2, int sps ) {
SDL_Event event;
int i = 0;
int t = SDL_GetTicks();
while (i < 255) {
if (i>255) i=255;
SDL_SetAlpha( surf0, SDL_SRCALPHA, 255-i );
SDL_SetAlpha( surf1, SDL_SRCALPHA, i );
SDL_BlitSurface( surf0, 0, screen, r1 );
SDL_BlitSurface( surf1, 0, screen, r2 );
SDL_Flip( screen );
int t2 = SDL_GetTicks();
int dt= SDL_GetTicks() - t;
t = t2;
i += (dt * sps / 1000);
while (SDL_PollEvent(&event)) {
switch(event.type) {
case SDL_KEYDOWN: {
return false;
}
default:
break;
}
}
}
return true;
}
*/