implement animations in intro state

This commit is contained in:
Sebastian Krzyszkowiak 2012-04-04 00:06:47 +02:00
parent 89c4d4096d
commit 6583662d9f
3 changed files with 47 additions and 6 deletions

4
build
View file

@ -1,2 +1,4 @@
#!/bin/sh
make -j10 && bin/superderpy
echo run > gdb.tmp
make -j10 && gdb bin/superderpy -x gdb.tmp
rm gdb.tmp

View file

@ -23,6 +23,17 @@
#include "intro.h"
#include "map.h"
void AnimPage(struct Game *game, int page) {
al_set_target_bitmap(game->intro.animation);
al_clear_to_color(al_map_rgba(0,0,0,0));
if (page<6) al_draw_bitmap_region(game->intro.animsprites[page-1],al_get_display_width(game->display)*0.3125*(int)fmod(game->intro.anim,3),al_get_display_height(game->display)*0.63*(((int)(game->intro.anim/3))%3),al_get_display_width(game->display)*0.3125, al_get_display_height(game->display)*0.63,al_get_display_width(game->display)*0.08, al_get_display_height(game->display)*0.18,0);
if (page<5) al_draw_bitmap_region(game->intro.animsprites[page],al_get_display_width(game->display)*0.3125*(int)fmod(game->intro.anim,3),al_get_display_height(game->display)*0.63*(((int)(game->intro.anim/3))%3),al_get_display_width(game->display)*0.3125, al_get_display_height(game->display)*0.63,al_get_display_width(game->display)*1.08, al_get_display_height(game->display)*0.18,0);
al_set_target_bitmap(al_get_backbuffer(game->display));
game->intro.anim += tps(game, 2);
}
void FillPage(struct Game *game, int page) {
char filename[30] = { };
sprintf(filename, "data/intro/%d.flac", page);
@ -105,10 +116,16 @@ void FillPage(struct Game *game, int page) {
void Intro_Draw(struct Game *game) {
al_clear_to_color(al_map_rgb(0,0,0));
if (game->intro.in_animation)
if (game->intro.in_animation) {
AnimPage(game, game->intro.page);
al_draw_bitmap(game->intro.table, -1*al_get_display_width(game->display) + (cos(((-1*((game->intro.position)%al_get_display_width(game->display)))/(float)al_get_display_width(game->display))*(ALLEGRO_PI))/2.0)*al_get_display_width(game->display) + al_get_display_width(game->display)/2.0, 0, 0);//al_get_display_height(game->display)*((game->intro.position/3.0)/(float)al_get_display_width(game->display)), 0);
else
al_draw_bitmap(game->intro.animation, -1*al_get_display_width(game->display) + (cos(((-1*((game->intro.position)%al_get_display_width(game->display)))/(float)al_get_display_width(game->display))*(ALLEGRO_PI))/2.0)*al_get_display_width(game->display) + al_get_display_width(game->display)/2.0, 0, 0);//al_get_display_height(game->display)*((game->intro.position/3.0)/(float)al_get_display_width(game->display)), 0);
}
else {
AnimPage(game, game->intro.page+1);
al_draw_bitmap(game->intro.table, 0, 0, 0); //al_get_display_height(game->display)*((game->intro.position/3.0)/(float)al_get_display_width(game->display)), 0);
al_draw_bitmap(game->intro.animation, 0, 0, 0); //al_get_display_height(game->display)*((game->intro.position/3.0)/(float)al_get_display_width(game->display)), 0);
}
al_draw_text_with_shadow(game->intro.font, al_map_rgb(255,255,255), al_get_display_width(game->display)/2, al_get_display_height(game->display)*0.90, ALLEGRO_ALIGN_CENTRE, "Press any key to continue or escape to skip...");
//PrintConsole(game, "drawing");
if (game->intro.in_animation) {
@ -141,6 +158,7 @@ void Intro_Load(struct Game *game) {
for(fadeloop=0; fadeloop<256; fadeloop+=tps(game, 600)){
al_wait_for_event(game->event_queue, &ev);
al_draw_tinted_bitmap(game->intro.table,al_map_rgba_f(fadeloop/255.0,fadeloop/255.0,fadeloop/255.0,1),0,0,0);
al_draw_tinted_bitmap(game->intro.animation,al_map_rgba_f(fadeloop/255.0,fadeloop/255.0,fadeloop/255.0,1),0,0,0);
DrawConsole(game);
al_flip_display();
}
@ -172,6 +190,13 @@ void Intro_Preload(struct Game *game) {
game->intro.position = 0;
game->intro.page = 0;
game->intro.in_animation = false;
game->intro.anim = 0;
game->intro.animsprites[0] = LoadScaledBitmap("discord.png", al_get_display_width(game->display)*0.3125*3, al_get_display_height(game->display)*0.63*3);
game->intro.animsprites[1] = LoadScaledBitmap("derpcycle.png", al_get_display_width(game->display)*0.3125*3, al_get_display_height(game->display)*0.63*3);
game->intro.animsprites[2] = LoadScaledBitmap("zombie.png", al_get_display_width(game->display)*0.3125*3, al_get_display_height(game->display)*0.63*3);
game->intro.animsprites[3] = LoadScaledBitmap("loading.png", al_get_display_width(game->display)*0.3125*3, al_get_display_height(game->display)*0.63*3);
game->intro.animsprites[4] = LoadScaledBitmap("letter.png", al_get_display_width(game->display)*0.3125*3, al_get_display_height(game->display)*0.63*3);
game->intro.table_bitmap =LoadScaledBitmap("paper.png", al_get_display_width(game->display), al_get_display_height(game->display));
@ -186,10 +211,12 @@ void Intro_Preload(struct Game *game) {
exit(-1);
}
game->intro.table = al_create_bitmap(al_get_display_width(game->display)*2, al_get_display_height(game->display));
game->intro.animation = al_create_bitmap(al_get_display_width(game->display)*2, al_get_display_height(game->display));
game->intro.font = al_load_ttf_font("data/ShadowsIntoLight.ttf",al_get_display_height(game->display)*0.04,0 );
FillPage(game, 1);
AnimPage(game, 1);
al_set_target_bitmap(al_get_backbuffer(game->display));
PrintConsole(game, "Chainpreloading GAMESTATE_MAP...");
Map_Preload(game);
@ -201,14 +228,23 @@ void Intro_Unload(struct Game *game) {
int fadeloop;
for(fadeloop=255; fadeloop>=0; fadeloop-=tps(game, 600)){
al_wait_for_event(game->event_queue, &ev);
if (game->intro.in_animation)
if (game->intro.in_animation) {
al_draw_tinted_bitmap(game->intro.table, al_map_rgba_f(fadeloop/255.0,fadeloop/255.0,fadeloop/255.0,1), -1*al_get_display_width(game->display) + (cos(((-1*((game->intro.position)%al_get_display_width(game->display)))/(float)al_get_display_width(game->display))*(3.1415))/2.0)*al_get_display_width(game->display) + al_get_display_width(game->display)/2.0, 0, 0); //al_get_display_height(game->display)*((game->intro.position/3.0)/(float)al_get_display_width(game->display)), 0);
else
al_draw_tinted_bitmap(game->intro.animation, al_map_rgba_f(fadeloop/255.0,fadeloop/255.0,fadeloop/255.0,1), -1*al_get_display_width(game->display) + (cos(((-1*((game->intro.position)%al_get_display_width(game->display)))/(float)al_get_display_width(game->display))*(3.1415))/2.0)*al_get_display_width(game->display) + al_get_display_width(game->display)/2.0, 0, 0); //al_get_display_height(game->display)*((game->intro.position/3.0)/(float)al_get_display_width(game->display)), 0);
}
else {
al_draw_tinted_bitmap(game->intro.table, al_map_rgba_f(fadeloop/255.0,fadeloop/255.0,fadeloop/255.0,1), 0, 0, 0); //al_get_display_height(game->display)*((game->intro.position/3.0)/(float)al_get_display_width(game->display)), 0);
al_draw_tinted_bitmap(game->intro.animation, al_map_rgba_f(fadeloop/255.0,fadeloop/255.0,fadeloop/255.0,1), 0, 0, 0); //al_get_display_height(game->display)*((game->intro.position/3.0)/(float)al_get_display_width(game->display)), 0);
}
DrawConsole(game);
al_flip_display();
}
al_destroy_bitmap(game->intro.table);
al_destroy_bitmap(game->intro.animation);
int i;
for (i=0; i<5; i++) {
al_destroy_bitmap(game->intro.animsprites[i]);
}
al_destroy_font(game->intro.font);
al_destroy_sample_instance(game->intro.music);
al_destroy_sample(game->intro.sample);

View file

@ -148,9 +148,12 @@ struct Map {
struct Intro {
int position;
int page;
bool in_animation;
bool in_animation; /*!< Animation as in page transition animation. */
float anim;
ALLEGRO_BITMAP *table;
ALLEGRO_BITMAP *table_bitmap;
ALLEGRO_BITMAP *animation;
ALLEGRO_BITMAP *animsprites[5];
ALLEGRO_FONT *font;
ALLEGRO_SAMPLE *sample;
ALLEGRO_SAMPLE_INSTANCE *music; /*!< Sample instance with background music. */