From c595ff7e9a2229f8b0d68e57a625b8ab8cd2384b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Arreola=20Rodr=C3=ADguez?= Date: Wed, 22 Jan 2020 10:43:03 -0600 Subject: [PATCH] =?UTF-8?q?Agrego=20la=20pantalla=20de=20introducci=C3=B3n?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/Makefile.am | 4 + data/images/gameintro.png | Bin 0 -> 2537 bytes data/images/penguin_intro_back.png | Bin 0 -> 22561 bytes data/images/penguin_intro_color.png | Bin 0 -> 4433 bytes data/images/penguin_intro_front.png | Bin 0 -> 1831 bytes po/bean-counters-classic.pot | 58 +++++-- src/Makefile.am | 1 + src/beans.c | 231 ++++++++++++++++++++++++++-- src/collider.c | 1 + src/cp-button.c | 104 +++++++++++++ src/cp-button.h | 15 ++ 11 files changed, 392 insertions(+), 22 deletions(-) create mode 100644 data/images/gameintro.png create mode 100644 data/images/penguin_intro_back.png create mode 100644 data/images/penguin_intro_color.png create mode 100644 data/images/penguin_intro_front.png create mode 100644 src/cp-button.c create mode 100644 src/cp-button.h diff --git a/data/Makefile.am b/data/Makefile.am index ec37ea9..1d834d5 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -135,6 +135,10 @@ nobase_dist_gamedata_DATA = images/background.png \ images/crash_2.png \ images/crash_3.png \ images/crash_4.png \ + images/gameintro.png \ + images/penguin_intro_back.png \ + images/penguin_intro_color.png \ + images/penguin_intro_front.png \ klickclack.ttf # Instalar los archivos .desktop e iconos diff --git a/data/images/gameintro.png b/data/images/gameintro.png new file mode 100644 index 0000000000000000000000000000000000000000..75d267b7c168e2b02a5ab22a431908e525189a4c GIT binary patch literal 2537 zcmeH}`%jv86vn@-wO*E1-I{dmTxo5WZjrU!U;@EnO6Zt#EsJYvyHU_>z>-S6Ov_CK z*E;EHbXzm^ZGB^wbT%DLowyYd80zB0f)LxNMR*bGZ3ej*R$ovqWBONnf#?!+xFS?87Y>LZU?Bvb`K_BpBdi;nFe=Ff4(YIwZX z*7&=qPu?GO54vEk_PD0kDP5m$(ms5P#ukTv7W-j?cB7e7=#gO*A9MYaDm1=n*Q3MU ziIZv^pATQc2k$P;Bj0H$X8qvmp?JfB#-{*)=?!dj1aIeQ@-t_`l6JBVkMDSR%GB&< z?>-2IY-%GqTOaa`PW;*ItzIoxR#a8{Ev$wG=eQshbV)kqNW?v;wc=IIEL68aJpCZ* z64HPoj!gHQ=gawy&!OTiKC|j|;1>7&{${)Q`8elX3J5i&WrG8U=s?kug#qu-wgXdA zNbVzf4#{swnnBVF{}(o_Sq5DQfkbkO_5%043cb<=WEVVz zD3$WJJ(91UL|oBI9y-ysvV3Ih$ZxrzY9A6=6kVB%ho%7xrQJvrrv6JEu5L$ZT<S literal 0 HcmV?d00001 diff --git a/data/images/penguin_intro_back.png b/data/images/penguin_intro_back.png new file mode 100644 index 0000000000000000000000000000000000000000..ac3bc4ec52ff0d702824ea5695bd4f38a45ec6ee GIT binary patch literal 22561 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 D-4v(i literal 0 HcmV?d00001 diff --git a/data/images/penguin_intro_color.png b/data/images/penguin_intro_color.png new file mode 100644 index 0000000000000000000000000000000000000000..047aecb415fa3a75788d45999d9577129bd49d8e GIT binary patch literal 4433 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 T&lnI*fBq}1qnkqu+AsZI8s}pN literal 0 HcmV?d00001 diff --git a/po/bean-counters-classic.pot b/po/bean-counters-classic.pot index 3dc253e..21a0ca1 100644 --- a/po/bean-counters-classic.pot +++ b/po/bean-counters-classic.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: bean-counters-classic 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-10-13 13:45-0500\n" +"POT-Creation-Date: 2020-01-21 08:36-0600\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,19 +17,51 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: src/beans.c:872 +#: src/beans.c:915 msgid "LIVES:" msgstr "" -#: src/beans.c:873 +#: src/beans.c:916 msgid "TRUCK:" msgstr "" -#: src/beans.c:874 +#: src/beans.c:917 msgid "SCORE:" msgstr "" -#: src/beans.c:1732 +#: src/beans.c:919 +msgid "TRY AGAIN..." +msgstr "" + +#: src/beans.c:921 +msgid "" +"TRUCK\n" +"UNLOADED!!" +msgstr "" + +#: src/beans.c:922 +msgid "NEXT TRUCK!!" +msgstr "" + +#: src/beans.c:924 +msgid "Game Over!" +msgstr "" + +#: src/beans.c:926 +msgid "" +"BEAN\n" +"COUNTERS!" +msgstr "" + +#: src/beans.c:927 +msgid "INSTRUCTIONS" +msgstr "" + +#: src/beans.c:928 +msgid "PLAY GAME!" +msgstr "" + +#: src/beans.c:2024 #, c-format msgid "" "Error: Can't initialize the video subsystem\n" @@ -37,11 +69,11 @@ msgid "" "%s\n" msgstr "" -#: src/beans.c:1743 +#: src/beans.c:2035 msgid "Bean Counters Classic" msgstr "" -#: src/beans.c:1750 +#: src/beans.c:2042 #, c-format msgid "" "Error: Can't setup 760x480 video mode.\n" @@ -49,19 +81,19 @@ msgid "" "%s\n" msgstr "" -#: src/beans.c:1759 +#: src/beans.c:2051 #, c-format msgid "" "Warning: Can't initialize the audio subsystem\n" "Continuing...\n" msgstr "" -#: src/beans.c:1768 +#: src/beans.c:2060 #, c-format msgid "Warning: Can't initialize the SDL Mixer library\n" msgstr "" -#: src/beans.c:1779 src/beans.c:1906 +#: src/beans.c:2071 src/beans.c:2218 #, c-format msgid "" "Failed to load data file:\n" @@ -70,21 +102,21 @@ msgid "" "%s\n" msgstr "" -#: src/beans.c:1806 +#: src/beans.c:2098 #, c-format msgid "" "Failed to load data file:\n" "%s\n" msgstr "" -#: src/beans.c:1862 +#: src/beans.c:2154 #, c-format msgid "" "Error: Can't initialize the SDL TTF library\n" "%s\n" msgstr "" -#: src/beans.c:1873 +#: src/beans.c:2169 #, c-format msgid "" "Failed to load font file 'Klick Clack\n" diff --git a/src/Makefile.am b/src/Makefile.am index efef331..d4d4c2f 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -10,6 +10,7 @@ bean_counters_classic_SOURCES = beans.c \ sdl2_rect.c sdl2_rect.h \ draw-text.c draw-text.h \ zoom.c zoom.h \ + cp-button.c cp-button.h \ gettext.h if MACOSX diff --git a/src/beans.c b/src/beans.c index b0ee92a..56ae03e 100644 --- a/src/beans.c +++ b/src/beans.c @@ -45,6 +45,7 @@ #include "collider.h" #include "draw-text.h" #include "zoom.h" +#include "cp-button.h" #define FPS (1000/24) #define RANDOM(x) ((int) (x ## .0 * rand () / (RAND_MAX + 1.0))) @@ -92,6 +93,12 @@ typedef struct _BeanBag { /* Enumerar las imágenes */ enum { + IMG_GAMEINTRO, + + IMG_PENGUIN_INTRO_BACK, + IMG_PENGUIN_INTRO_COLOR, + IMG_PENGUIN_INTRO_FRONT, + IMG_BACKGROUND, IMG_PLATAFORM, @@ -211,6 +218,12 @@ enum { /* Los nombres de archivos */ const char *images_names[NUM_IMAGES] = { + "images/gameintro.png", + + "images/penguin_intro_back.png", + "images/penguin_intro_color.png", + "images/penguin_intro_front.png", + "images/background.png", "images/plataform.png", @@ -331,6 +344,23 @@ const char *sound_names[NUM_SOUNDS] = { "sounds/none.wav", }; +/* Para el motor de botones */ +enum { + BUTTON_NONE, + + BUTTON_UI_INSTRUCTIONS, + BUTTON_UI_PLAY_GAME, + BUTTON_CLOSE, + + NUM_BUTTONS +}; + +enum { + BLANK_UP, + BLANK_OVER, + BLANK_DOWN +}; + /* Codigos de salida */ enum { GAME_NONE = 0, /* No usado */ @@ -486,6 +516,10 @@ enum { TEXT_GAME_OVER, + TEXT_TITLE_BEAN_COUNTERS, + TEXT_INSTRUCTIONS, + TEXT_PLAY_GAME, + NUM_TEXTS }; @@ -885,9 +919,13 @@ const char *text_strings[NUM_TEXTS] = { gettext_noop ("TRY AGAIN..."), gettext_noop ("TRUCK\nUNLOADED!!"), - gettext_noop ("NEXT TRUCK!!"), + gettext_noop ("NEXT TRUCK!!"), - gettext_noop ("Game Over!") + gettext_noop ("Game Over!"), + + gettext_noop ("BEAN\nCOUNTERS!"), + gettext_noop ("INSTRUCTIONS"), + gettext_noop ("PLAY GAME!"), }; /* Prototipos de función */ @@ -899,6 +937,7 @@ SDL_Surface * set_video_mode (unsigned flags); void setup_and_color_penguin (void); void add_bag (int tipo); void delete_bag (BeanBag *p); +int map_button_in_intro (int x, int y); /* Variables globales */ SDL_Surface * screen; @@ -932,8 +971,17 @@ int main (int argc, char *argv[]) { setup (); bind_textdomain_codeset (PACKAGE, "UTF-8"); + + /* Registrar botones */ + cp_registrar_botones (NUM_BUTTONS); + cp_registrar_boton (BUTTON_UI_INSTRUCTIONS, BLANK_UP); + cp_registrar_boton (BUTTON_UI_PLAY_GAME, BLANK_UP); + //cp_registrar_boton (BUTTON_CLOSE, IMG_BUTTON_1_UP); + + cp_button_start (); + do { - //if (game_intro () == GAME_QUIT) break; + if (game_intro () == GAME_QUIT) break; if (game_loop () == GAME_QUIT) break; //if (game_finish () == GAME_QUIT) break; } while (1 == 0); @@ -942,20 +990,101 @@ int main (int argc, char *argv[]) { return EXIT_SUCCESS; } -#if 0 int game_intro (void) { int done = 0; SDL_Event event; SDLKey key; SDL_Rect rect; + int map; Uint32 last_time, now_time; + SDL_Surface *color_surface; + SDL_Rect update_rects[6]; + int num_rects; + + Uint32 color, blanco2; + SDL_Surface *trans; + + color = SDL_MapRGB (screen->format, 255, 255, 255); + trans = SDL_CreateRGBSurface (SDL_SWSURFACE | SDL_SRCALPHA, 246, 24, 32, RMASK, GMASK, BMASK, AMASK); + blanco2 = SDL_MapRGBA (trans->format, 255, 255, 255, 128); + SDL_FillRect (trans, NULL, blanco2); /* Blanco */ + + /* Precolorear el cuerpo del pingüino */ + color_surface = SDL_CreateRGBSurface (SDL_SWSURFACE, images[IMG_PENGUIN_INTRO_COLOR]->w, images[IMG_PENGUIN_INTRO_COLOR]->h, 32, RMASK, GMASK, BMASK, AMASK); + SDL_FillRect (color_surface, NULL, SDL_MapRGB (color_surface->format, penguin_colors[color_penguin].r, penguin_colors[color_penguin].g, penguin_colors[color_penguin].b)); + + SDL_BlitSurface (color_surface, NULL, images[IMG_PENGUIN_INTRO_COLOR], NULL); + + SDL_FreeSurface (color_surface); /* Predibujar todo */ - SDL_FillRect (screen, NULL, 0); + SDL_BlitSurface (images[IMG_BACKGROUND], NULL, screen, NULL); + + /* Dibujar la plataforma */ + rect.x = 0; + rect.y = 355; + rect.w = images[IMG_PLATAFORM]->w; + rect.h = images[IMG_PLATAFORM]->h; + + SDL_BlitSurface (images[IMG_PLATAFORM], NULL, screen, &rect); + + /* Dibujar el game intro */ + rect.x = 113; + rect.y = 35; + rect.w = images[IMG_GAMEINTRO]->w; + rect.h = images[IMG_GAMEINTRO]->h; + + SDL_BlitSurface (images[IMG_GAMEINTRO], NULL, screen, &rect); + + /* Dibujar el pingüino */ + rect.x = 127; + rect.y = 68; + rect.w = images[IMG_PENGUIN_INTRO_BACK]->w; + rect.h = images[IMG_PENGUIN_INTRO_BACK]->h; + + SDL_BlitSurface (images[IMG_PENGUIN_INTRO_BACK], NULL, screen, &rect); + + rect.x = 134; + rect.y = 162; + rect.w = images[IMG_PENGUIN_INTRO_COLOR]->w; + rect.h = images[IMG_PENGUIN_INTRO_COLOR]->h; + + SDL_BlitSurface (images[IMG_PENGUIN_INTRO_COLOR], NULL, screen, &rect); + + rect.x = 157; + rect.y = 239; + rect.w = images[IMG_PENGUIN_INTRO_FRONT]->w; + rect.h = images[IMG_PENGUIN_INTRO_FRONT]->h; + + SDL_BlitSurface (images[IMG_PENGUIN_INTRO_FRONT], NULL, screen, &rect); + + /* Dibujar el título */ + rect.w = texts[TEXT_TITLE_BEAN_COUNTERS]->w; + rect.h = texts[TEXT_TITLE_BEAN_COUNTERS]->h; + rect.x = 504 - (rect.w / 2); + rect.y = 92; + + SDL_BlitSurface (texts[TEXT_TITLE_BEAN_COUNTERS], NULL, screen, &rect); + + rect.w = texts[TEXT_INSTRUCTIONS]->w; + rect.h = texts[TEXT_INSTRUCTIONS]->h; + rect.x = 504 - (rect.w / 2); + rect.y = 327; + + SDL_BlitSurface (texts[TEXT_INSTRUCTIONS], NULL, screen, &rect); + + rect.w = texts[TEXT_PLAY_GAME]->w; + rect.h = texts[TEXT_PLAY_GAME]->h; + rect.x = 504 - (rect.w / 2); + rect.y = 383; + + SDL_BlitSurface (texts[TEXT_PLAY_GAME], NULL, screen, &rect); + SDL_Flip (screen); do { last_time = SDL_GetTicks (); + num_rects = 0; while (SDL_PollEvent(&event) > 0) { switch (event.type) { @@ -964,10 +1093,25 @@ int game_intro (void) { done = GAME_QUIT; break; case SDL_MOUSEMOTION: + map = map_button_in_intro (event.motion.x, event.motion.y); + cp_button_motion (map); break; case SDL_MOUSEBUTTONDOWN: + map = map_button_in_intro (event.button.x, event.button.y); + cp_button_down (map); break; case SDL_MOUSEBUTTONUP: + map = map_button_in_intro (event.button.x, event.button.y); + map = cp_button_up (map); + + switch (map) { + case BUTTON_UI_INSTRUCTIONS: + done = GAME_CONTINUE; + break; + case BUTTON_UI_PLAY_GAME: + done = GAME_CONTINUE; + break; + } break; case SDL_KEYDOWN: /* Tengo una tecla presionada */ @@ -983,7 +1127,59 @@ int game_intro (void) { } } - SDL_Flip (screen); + if (cp_button_refresh[BUTTON_UI_INSTRUCTIONS]) { + rect.x = 381; rect.y = 327; + rect.w = 246; rect.h = 24; + SDL_FillRect (screen, &rect, color); + update_rects[num_rects++] = rect; + + rect.w = texts[TEXT_INSTRUCTIONS]->w; + rect.h = texts[TEXT_INSTRUCTIONS]->h; + rect.x = 504 - (rect.w / 2); + rect.y = 327; + + SDL_BlitSurface (texts[TEXT_INSTRUCTIONS], NULL, screen, &rect); + + if (cp_button_frames[BUTTON_UI_INSTRUCTIONS] != BLANK_UP) { + rect.x = 381; + rect.y = 327; + rect.w = 246; + rect.h = 24; + + SDL_BlitSurface (trans, NULL, screen, &rect); + } + + cp_button_refresh[BUTTON_UI_INSTRUCTIONS] = 0; + } + + if (cp_button_refresh[BUTTON_UI_PLAY_GAME]) { + rect.x = 381; rect.y = 383; + rect.w = 246; rect.h = 24; + SDL_FillRect (screen, &rect, color); + update_rects[num_rects++] = rect; + + rect.w = texts[TEXT_PLAY_GAME]->w; + rect.h = texts[TEXT_PLAY_GAME]->h; + rect.x = 504 - (rect.w / 2); + rect.y = 383; + + SDL_BlitSurface (texts[TEXT_PLAY_GAME], NULL, screen, &rect); + + if (cp_button_frames[BUTTON_UI_PLAY_GAME] != BLANK_UP) { + rect.x = 381; + rect.y = 383; + rect.w = 246; + rect.h = 24; + + SDL_BlitSurface (trans, NULL, screen, &rect); + } + + cp_button_refresh[BUTTON_UI_PLAY_GAME] = 0; + } + + SDL_UpdateRects (screen, num_rects, update_rects); + + //SDL_Flip (screen); now_time = SDL_GetTicks (); if (now_time < last_time + FPS) SDL_Delay(last_time + FPS - now_time); @@ -993,6 +1189,7 @@ int game_intro (void) { return done; } +#if 0 int game_finish (void) { int done = 0; SDL_Event event; @@ -1792,7 +1989,7 @@ void setup (void) { char buffer_file[8192]; char *systemdata_path = get_systemdata_path (); Collider *c; - TTF_Font *ttf48_klickclack, *ttf52_klickclack; + TTF_Font *ttf48_klickclack, *ttf52_klickclack, *ttf40_klickclack; /* Inicializar el Video SDL */ if (SDL_Init(SDL_INIT_VIDEO) < 0) { @@ -1937,9 +2134,10 @@ void setup (void) { ttf24_klickclack = TTF_OpenFont (buffer_file, 24); ttf196_klickclack = TTF_OpenFont (buffer_file, 196); ttf48_klickclack = TTF_OpenFont (buffer_file, 48); + ttf40_klickclack = TTF_OpenFont (buffer_file, 40); ttf52_klickclack = TTF_OpenFont (buffer_file, 52); - if (!ttf24_klickclack || !ttf196_klickclack || !ttf48_klickclack || !ttf52_klickclack) { + if (!ttf24_klickclack || !ttf196_klickclack || !ttf48_klickclack || !ttf52_klickclack || !ttf40_klickclack) { fprintf (stderr, _("Failed to load font file 'Klick Clack\n" "The error returned by SDL is:\n" @@ -1951,9 +2149,12 @@ void setup (void) { // TODO: Favor de manejar correctamente el bind_textdomain_codeset bind_textdomain_codeset (PACKAGE, "UTF-8"); - SDL_Color negro, blanco; + SDL_Color negro, blanco, azul1; blanco.r = blanco.g = blanco.b = 255; negro.r = negro.g = negro.b = 0; + azul1.r = 0x01; + azul1.g = 0x34; + azul1.b = 0x9a; for (g = TEXT_LIVES; g <= TEXT_SCORE; g++) { texts[g] = draw_text_with_shadow (ttf24_klickclack, 2, _(text_strings[g]), blanco, negro); @@ -1964,8 +2165,13 @@ void setup (void) { texts[TEXT_NEXT_TRUCK] = draw_text_with_shadow (ttf48_klickclack, 2, _(text_strings[TEXT_NEXT_TRUCK]), blanco, negro); texts[TEXT_GAME_OVER] = draw_text_with_shadow (ttf52_klickclack, 3, _(text_strings[TEXT_GAME_OVER]), blanco, negro); + texts[TEXT_TITLE_BEAN_COUNTERS] = draw_text (ttf40_klickclack, _(text_strings[TEXT_TITLE_BEAN_COUNTERS]), &azul1); + texts[TEXT_INSTRUCTIONS] = draw_text (ttf24_klickclack, _(text_strings[TEXT_INSTRUCTIONS]), &azul1); + texts[TEXT_PLAY_GAME] = draw_text (ttf24_klickclack, _(text_strings[TEXT_PLAY_GAME]), &azul1); + TTF_CloseFont (ttf48_klickclack); TTF_CloseFont (ttf52_klickclack); + TTF_CloseFont (ttf40_klickclack); } void setup_and_color_penguin (void) { @@ -2180,3 +2386,10 @@ void delete_bag (BeanBag *p) { free (p); } + +int map_button_in_intro (int x, int y) { + if (x >= 381 && x < 627 && y >= 324 && y < 348) return BUTTON_UI_INSTRUCTIONS; + if (x >= 381 && x < 627 && y >= 380 && y < 404) return BUTTON_UI_PLAY_GAME; + return BUTTON_NONE; +} + diff --git a/src/collider.c b/src/collider.c index 5246980..e9e716e 100644 --- a/src/collider.c +++ b/src/collider.c @@ -23,6 +23,7 @@ #include #include +#include #include #include diff --git a/src/cp-button.c b/src/cp-button.c new file mode 100644 index 0000000..bb3de58 --- /dev/null +++ b/src/cp-button.c @@ -0,0 +1,104 @@ +/* + * cp-button.c + * This file is part of Thin Ice + * + * Copyright (C) 2013 - Felix Arreola Rodriguez + * + * 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 3 of the License, 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, see . + */ + +#include +#include + +int *cp_button_frames; +int *cp_button_refresh; +int cp_old_map, cp_last_button; + +void cp_registrar_botones (int n) { + cp_button_frames = malloc (sizeof (int) * n); + cp_button_refresh = malloc (sizeof (int) * n); + memset (cp_button_refresh, 0, n * sizeof (int)); +} + +void cp_registrar_boton (int n, int frame) { + cp_button_frames[n] = frame; +} + +void cp_button_start (void) { + cp_old_map = cp_last_button = 0; +} + +void cp_button_motion (int map) { + /* Motor de botones */ + if (cp_old_map == 0 && map != 0) { + if (cp_last_button == 0) { + cp_button_frames [map]++; + } else if (cp_last_button == map) { + cp_button_frames [map]++; + } + cp_button_refresh [map] = 1; + } else if (cp_old_map != 0 && map == 0) { + if (cp_last_button == 0) { + cp_button_frames [cp_old_map]--; + cp_button_refresh [cp_old_map] = 1; + } else if (cp_last_button == cp_old_map) { + cp_button_frames [cp_last_button]--; + cp_button_refresh [cp_last_button] = 1; + } + } else if (cp_old_map != map) { + if (cp_last_button == 0) { + cp_button_frames [map]++; + cp_button_refresh [map] = 1; + if (cp_old_map != 0) { + cp_button_frames [cp_old_map]--; + cp_button_refresh [cp_old_map] = 1; + } + } else if (cp_last_button == cp_old_map) { + cp_button_frames [cp_old_map]--; + cp_button_refresh [cp_old_map] = 1; + } else if (cp_last_button == map) { + cp_button_frames [map]++; + cp_button_refresh [map] = 1; + } + } + cp_old_map = map; +} + +void cp_button_down (int map) { + cp_last_button = map; + + if (cp_last_button != 0) { + cp_button_frames [cp_last_button]++; + cp_button_refresh [cp_last_button] = 1; + } +} + +int cp_button_up (int map) { + if (cp_last_button != 0) { + cp_button_frames [cp_last_button]--; + cp_button_refresh [cp_last_button] = 1; + if (map == cp_last_button) { + /* Switch del boton */ + cp_last_button = 0; + return map; + } else if (map != 0) { + cp_button_frames [map]++; + cp_button_refresh [map] = 1; + } + + cp_last_button = 0; + } + + return 0; +} diff --git a/src/cp-button.h b/src/cp-button.h new file mode 100644 index 0000000..fa48d3b --- /dev/null +++ b/src/cp-button.h @@ -0,0 +1,15 @@ +#ifndef __CP_BUTTON_H__ +#define __CP_BUTTON_H__ + +extern int *cp_button_frames; +extern int *cp_button_refresh; + +void cp_registrar_botones (int n); +void cp_registrar_boton (int n, int frame); +void cp_button_start (void); +void cp_button_motion (int map); +void cp_button_down (int map); +int cp_button_up (int map); + +#endif /* __CP_BUTTON_H__ */ +