mirror of
https://gitlab.com/dosowisko.net/libsuperderpy.git
synced 2024-12-12 20:18:00 +01:00
bring back Map gamestate
This commit is contained in:
parent
1e901cf51b
commit
5d3bb2d0d7
3 changed files with 97 additions and 82 deletions
|
@ -13,7 +13,7 @@ ENDMACRO()
|
|||
#GAMESTATE("menu")
|
||||
GAMESTATE("disclaimer")
|
||||
GAMESTATE("intro")
|
||||
#GAMESTATE("map")
|
||||
GAMESTATE("map")
|
||||
##GAMESTATE("level")
|
||||
GAMESTATE("about")
|
||||
##GAMESTATE("pause")
|
||||
|
|
|
@ -20,13 +20,16 @@
|
|||
*/
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
#include "../utils.h"
|
||||
#include "../config.h"
|
||||
#include "map.h"
|
||||
|
||||
void Map_Draw(struct Game *game) {
|
||||
al_draw_bitmap(game->map.map, 0, 0, 0);
|
||||
int Gamestate_ProgressCount = 0;
|
||||
|
||||
void Gamestate_Draw(struct Game *game, struct MapResources* data) {
|
||||
al_draw_bitmap(data->map, 0, 0, 0);
|
||||
float x=0,y=0;
|
||||
switch (game->map.selected) {
|
||||
switch (data->selected) {
|
||||
case 1:
|
||||
x=0.2;
|
||||
y=0.25;
|
||||
|
@ -52,104 +55,105 @@ void Map_Draw(struct Game *game) {
|
|||
y=0.675;
|
||||
break;
|
||||
}
|
||||
al_draw_scaled_bitmap(game->map.arrow, 0, 0, al_get_bitmap_width(game->map.arrow), al_get_bitmap_height(game->map.arrow), (game->viewportWidth-game->viewportHeight*1.6)/2+game->viewportHeight*1.6*x, game->viewportHeight*y + ((sin(game->map.arrowpos)+0.5)/20.0)*game->viewportHeight, game->viewportHeight*1.6*0.1, game->viewportHeight*0.16, 0);
|
||||
al_draw_scaled_bitmap(data->arrow, 0, 0, al_get_bitmap_width(data->arrow), al_get_bitmap_height(data->arrow), (game->viewport.width-game->viewport.height*1.6)/2+game->viewport.height*1.6*x, game->viewport.height*y + ((sin(data->arrowpos)+0.5)/20.0)*game->viewport.height, game->viewport.height*1.6*0.1, game->viewport.height*0.16, 0);
|
||||
}
|
||||
|
||||
void Map_Logic(struct Game *game) {
|
||||
game->map.arrowpos += 0.1;
|
||||
void Gamestate_Logic(struct Game *game, struct MapResources* data) {
|
||||
data->arrowpos += 0.1;
|
||||
}
|
||||
|
||||
void Map_Load(struct Game *game) {
|
||||
al_play_sample_instance(game->map.music);
|
||||
FadeGameState(game, true);
|
||||
void Gamestate_Start(struct Game *game, struct MapResources* data) {
|
||||
al_play_sample_instance(data->music);
|
||||
FadeGamestate(game, true);
|
||||
}
|
||||
|
||||
int Map_Keydown(struct Game *game, ALLEGRO_EVENT *ev) {
|
||||
if ((((game->map.selected<4) || (game->map.selected==6)) && (ev->keyboard.keycode==ALLEGRO_KEY_LEFT)) || ((game->map.selected>4) && (game->map.selected!=6) && (ev->keyboard.keycode==ALLEGRO_KEY_RIGHT)) || ((game->map.selected==4) && (ev->keyboard.keycode==ALLEGRO_KEY_UP)) || ((game->map.selected==6) && (ev->keyboard.keycode==ALLEGRO_KEY_DOWN))) {
|
||||
game->map.selected--;
|
||||
al_play_sample_instance(game->map.click);
|
||||
} else if (((game->map.selected<3) && (ev->keyboard.keycode==ALLEGRO_KEY_RIGHT)) || ((game->map.selected==4) && (ev->keyboard.keycode==ALLEGRO_KEY_LEFT)) || ((game->map.selected==3) && (ev->keyboard.keycode==ALLEGRO_KEY_DOWN)) || ((game->map.selected==5) && (ev->keyboard.keycode==ALLEGRO_KEY_UP))) {
|
||||
game->map.selected++;
|
||||
al_play_sample_instance(game->map.click);
|
||||
void Gamestate_ProcessEvent(struct Game *game, struct MapResources* data, ALLEGRO_EVENT *ev) {
|
||||
if (ev->type!=ALLEGRO_EVENT_KEY_DOWN) return;
|
||||
if ((((data->selected<4) || (data->selected==6)) && (ev->keyboard.keycode==ALLEGRO_KEY_LEFT)) || ((data->selected>4) && (data->selected!=6) && (ev->keyboard.keycode==ALLEGRO_KEY_RIGHT)) || ((data->selected==4) && (ev->keyboard.keycode==ALLEGRO_KEY_UP)) || ((data->selected==6) && (ev->keyboard.keycode==ALLEGRO_KEY_DOWN))) {
|
||||
data->selected--;
|
||||
al_play_sample_instance(data->click);
|
||||
} else if (((data->selected<3) && (ev->keyboard.keycode==ALLEGRO_KEY_RIGHT)) || ((data->selected==4) && (ev->keyboard.keycode==ALLEGRO_KEY_LEFT)) || ((data->selected==3) && (ev->keyboard.keycode==ALLEGRO_KEY_DOWN)) || ((data->selected==5) && (ev->keyboard.keycode==ALLEGRO_KEY_UP))) {
|
||||
data->selected++;
|
||||
al_play_sample_instance(data->click);
|
||||
} else if ((ev->keyboard.keycode==ALLEGRO_KEY_LEFT) || (ev->keyboard.keycode==ALLEGRO_KEY_RIGHT) || (ev->keyboard.keycode==ALLEGRO_KEY_UP) || (ev->keyboard.keycode==ALLEGRO_KEY_DOWN)) {
|
||||
al_play_sample_instance(game->map.click);
|
||||
al_play_sample_instance(data->click);
|
||||
} else if (ev->keyboard.keycode==ALLEGRO_KEY_ENTER) {
|
||||
al_play_sample_instance(game->map.click);
|
||||
game->level.input.current_level = game->map.selected;
|
||||
PrintConsole(game, "Selecting level %d...", game->map.selected);
|
||||
UnloadGameState(game);
|
||||
game->gamestate = GAMESTATE_LOADING;
|
||||
game->loadstate = GAMESTATE_LEVEL;
|
||||
return 0;
|
||||
al_play_sample_instance(data->click);
|
||||
//game->level.input.current_level = data->selected;
|
||||
PrintConsole(game, "Selecting level %d...", data->selected);
|
||||
char gamestate[7] = {};
|
||||
sprintf(gamestate, "level%d", data->selected);
|
||||
SwitchGamestate(game, "map", gamestate);
|
||||
return;
|
||||
} else if (ev->keyboard.keycode == ALLEGRO_KEY_ESCAPE) {
|
||||
UnloadGameState(game);
|
||||
game->loadstate = GAMESTATE_MENU;
|
||||
LoadGameState(game);
|
||||
return 0;
|
||||
} else { return 0; }
|
||||
if (game->map.selected<1) game->map.selected=1;
|
||||
if (game->map.selected>game->map.available) game->map.selected=game->map.available;
|
||||
return 0;
|
||||
SwitchGamestate(game, "map", "menu");
|
||||
return;
|
||||
}
|
||||
if (data->selected<1) data->selected=1;
|
||||
if (data->selected>data->available) data->selected=data->available;
|
||||
}
|
||||
|
||||
void Map_Preload(struct Game *game, void (*progress)(struct Game*, float)) {
|
||||
PROGRESS_INIT(7);
|
||||
void* Gamestate_Load(struct Game *game, void (*progress)(struct Game*)) {
|
||||
|
||||
game->map.available = atoi(GetConfigOptionDefault("MuffinAttack", "level", "1"));
|
||||
if ((game->map.available<1) || (game->map.available>6)) game->map.available=1;
|
||||
game->map.selected = game->map.available;
|
||||
PrintConsole(game, "Last level available: %d", game->map.selected);
|
||||
game->map.arrowpos = 0;
|
||||
struct MapResources *data = malloc(sizeof(struct MapResources));
|
||||
data->available = atoi(GetConfigOptionDefault(game, "MuffinAttack", "level", "1"));
|
||||
if ((data->available<1) || (data->available>6)) data->available=1;
|
||||
data->selected = data->available;
|
||||
PrintConsole(game, "Last level available: %d", data->selected);
|
||||
data->arrowpos = 0;
|
||||
|
||||
game->map.map_bg = LoadScaledBitmap("map/background.png", game->viewportHeight*1.6, game->viewportHeight);
|
||||
PROGRESS;
|
||||
data->map_bg = LoadScaledBitmap(game, "map/background.png", game->viewport.height*1.6, game->viewport.height);
|
||||
char filename[30] = { };
|
||||
sprintf(filename, "map/highlight%d.png", game->map.available);
|
||||
game->map.highlight = LoadScaledBitmap(filename, game->viewportHeight*1.6, game->viewportHeight);
|
||||
PROGRESS;
|
||||
sprintf(filename, "map/highlight%d.png", data->available);
|
||||
data->highlight = LoadScaledBitmap(game, filename, game->viewport.height*1.6, game->viewport.height);
|
||||
|
||||
game->map.arrow = al_load_bitmap( GetDataFilePath("map/arrow.png") );
|
||||
PROGRESS;
|
||||
data->arrow = al_load_bitmap( GetDataFilePath("map/arrow.png") );
|
||||
|
||||
game->map.click_sample = al_load_sample( GetDataFilePath("menu/click.flac") );
|
||||
PROGRESS;
|
||||
game->map.sample = al_load_sample( GetDataFilePath("map/map.flac") );
|
||||
PROGRESS;
|
||||
data->click_sample = al_load_sample( GetDataFilePath("menu/click.flac") );
|
||||
data->sample = al_load_sample( GetDataFilePath("map/map.flac") );
|
||||
|
||||
game->map.music = al_create_sample_instance(game->map.sample);
|
||||
al_attach_sample_instance_to_mixer(game->map.music, game->audio.music);
|
||||
al_set_sample_instance_playmode(game->map.music, ALLEGRO_PLAYMODE_LOOP);
|
||||
data->music = al_create_sample_instance(data->sample);
|
||||
al_attach_sample_instance_to_mixer(data->music, game->audio.music);
|
||||
al_set_sample_instance_playmode(data->music, ALLEGRO_PLAYMODE_LOOP);
|
||||
|
||||
game->map.click = al_create_sample_instance(game->map.click_sample);
|
||||
al_attach_sample_instance_to_mixer(game->map.click, game->audio.fx);
|
||||
al_set_sample_instance_playmode(game->map.click, ALLEGRO_PLAYMODE_ONCE);
|
||||
data->click = al_create_sample_instance(data->click_sample);
|
||||
al_attach_sample_instance_to_mixer(data->click, game->audio.fx);
|
||||
al_set_sample_instance_playmode(data->click, ALLEGRO_PLAYMODE_ONCE);
|
||||
|
||||
if (!game->map.sample){
|
||||
if (!data->sample){
|
||||
fprintf(stderr, "Audio clip sample not loaded!\n" );
|
||||
exit(-1);
|
||||
}
|
||||
if (!game->map.click_sample){
|
||||
if (!data->click_sample){
|
||||
fprintf(stderr, "Audio clip sample#2 not loaded!\n" );
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
game->map.map = LoadScaledBitmap("table.png", game->viewportWidth, game->viewportHeight);
|
||||
PROGRESS;
|
||||
al_set_target_bitmap(game->map.map);
|
||||
al_draw_bitmap(game->map.map_bg, (game->viewportWidth-game->viewportHeight*1.6)/2, 0 ,0);
|
||||
al_draw_bitmap(game->map.highlight, (game->viewportWidth-game->viewportHeight*1.6)/2, 0 ,0);
|
||||
data->map = LoadScaledBitmap(game, "table.png", game->viewport.width, game->viewport.height);
|
||||
al_set_target_bitmap(data->map);
|
||||
al_draw_bitmap(data->map_bg, (game->viewport.width-game->viewport.height*1.6)/2, 0 ,0);
|
||||
al_draw_bitmap(data->highlight, (game->viewport.width-game->viewport.height*1.6)/2, 0 ,0);
|
||||
al_set_target_bitmap(al_get_backbuffer(game->display));
|
||||
PROGRESS;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
void Map_Unload(struct Game *game) {
|
||||
FadeGameState(game, false);
|
||||
al_destroy_bitmap(game->map.map);
|
||||
al_destroy_bitmap(game->map.map_bg);
|
||||
al_destroy_bitmap(game->map.highlight);
|
||||
al_destroy_bitmap(game->map.arrow);
|
||||
al_destroy_sample_instance(game->map.music);
|
||||
al_destroy_sample(game->map.sample);
|
||||
al_destroy_sample_instance(game->map.click);
|
||||
al_destroy_sample(game->map.click_sample);
|
||||
void Gamestate_Unload(struct Game *game, struct MapResources* data) {
|
||||
al_destroy_bitmap(data->map);
|
||||
al_destroy_bitmap(data->map_bg);
|
||||
al_destroy_bitmap(data->highlight);
|
||||
al_destroy_bitmap(data->arrow);
|
||||
al_destroy_sample_instance(data->music);
|
||||
al_destroy_sample(data->sample);
|
||||
al_destroy_sample_instance(data->click);
|
||||
al_destroy_sample(data->click_sample);
|
||||
}
|
||||
|
||||
void Gamestate_Stop(struct Game *game, struct MapResources* data) {
|
||||
FadeGamestate(game, false);
|
||||
al_stop_sample_instance(data->music);
|
||||
}
|
||||
|
||||
void Gamestate_Pause(struct Game *game, struct MapResources* data) {}
|
||||
void Gamestate_Resume(struct Game *game, struct MapResources* data) {}
|
||||
void Gamestate_Reload(struct Game *game, struct MapResources* data) {}
|
||||
|
|
|
@ -18,11 +18,22 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
#include "../main.h"
|
||||
|
||||
void Map_Draw(struct Game *game);
|
||||
void Map_Logic(struct Game *game);
|
||||
void Map_Preload(struct Game *game, void (*progress)(struct Game*, float));
|
||||
void Map_Unload(struct Game *game);
|
||||
void Map_Load(struct Game *game);
|
||||
int Map_Keydown(struct Game *game, ALLEGRO_EVENT *ev);
|
||||
#include <allegro5/allegro.h>
|
||||
#include <allegro5/allegro_font.h>
|
||||
#include <allegro5/allegro_audio.h>
|
||||
|
||||
/*! \brief Resources used by Map state. */
|
||||
struct MapResources {
|
||||
ALLEGRO_BITMAP *map; /*!< Background table bitmap. */
|
||||
ALLEGRO_BITMAP *map_bg; /*!< Map bitmap. */
|
||||
ALLEGRO_BITMAP *highlight; /*!< Level highlights bitmap. */
|
||||
ALLEGRO_BITMAP *arrow; /*!< Arrow bitmap. */
|
||||
int selected; /*!< Number of currently selected level. */
|
||||
int available; /*!< Number of highest available level. */
|
||||
float arrowpos; /*!< Vertical position of the arrow. */
|
||||
ALLEGRO_SAMPLE *sample; /*!< Sample with backgrond music. */
|
||||
ALLEGRO_SAMPLE *click_sample; /*!< Sample with click sound. */
|
||||
ALLEGRO_SAMPLE_INSTANCE *music; /*!< Sample instance with background music. */
|
||||
ALLEGRO_SAMPLE_INSTANCE *click; /*!< Sample instance with click sound. */
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue