#include #include #include "main.h" #include "list.h" #include "myTimer.h" #include "tux.h" #include "space.h" #include "arena.h" #include "interface.h" #include "term.h" #include "font.h" static list_t *listText; static bool_t activeTerm; static my_time_t lastActive; static my_time_t lastRefresh; void initTerm() { listText = newList(); activeTerm = FALSE; lastActive = getMyTime(); lastRefresh = lastActive; } static char * getStrGun(int gun) { switch (gun) { case GUN_SIMPLE: return "revolver"; case GUN_DUAL_SIMPLE: return "dual revolver"; case GUN_SCATTER: return "scatter"; case GUN_TOMMY: return "tommy"; case GUN_LASSER: return "lasser"; case GUN_MINE: return "mine"; case GUN_BOMBBALL: return "bombball"; default: return "none"; } return "gun_unknow"; } static char * getStrBonus(int bonus) { switch (bonus) { case BONUS_SPEED: return "speed"; case BONUS_SHOT: return "shot"; case BONUS_TELEPORT: return "teleport"; case BONUS_GHOST: return "ghost"; case BONUS_4X: return "4X"; case BONUS_HIDDEN: return "hidden"; default: return "none"; } return "bonus_unknow"; } static void action_refreshTerm(space_t * space, tux_t * tux, void *p) { char str[STR_SIZE]; sprintf(str, "name: %s " "score: %d " "gun: %s " "shot: %d " "bonus: %s", tux->name, tux->score, getStrGun(tux->gun), tux->shot[tux->gun], getStrBonus(tux->bonus) ); addList(listText, strdup(str)); } static void refreshTerm() { arena_t *arena; arena = getCurrentArena(); destroyListItem(listText, free); listText = newList(); actionSpace(arena->spaceTux, action_refreshTerm, NULL); //printf("refresh term..\n"); } void drawTerm() { int i; if (activeTerm == FALSE) { return; } for (i = 0; i < listText->count; i++) { char *line; line = (char *) listText->list[i]; drawFont(line, 10, 10 + i * 20, COLOR_WHITE); } } static void switchTerm() { if (activeTerm == TRUE) { activeTerm = FALSE; } else { activeTerm = TRUE; } } void eventTerm() { my_time_t currentTime; Uint8 *mapa; mapa = SDL_GetKeyState(NULL); currentTime = getMyTime(); if (currentTime - lastRefresh > TERM_REFRESH_TIME_INTERVAL) { lastRefresh = currentTime; refreshTerm(); } if (mapa[SDLK_TAB] == SDL_PRESSED) { if (currentTime - lastActive > TERM_ACTIVE_TIME_INTERVAL) { lastActive = currentTime; switchTerm(); } } } void quitTerm() { assert(listText != NULL); destroyListItem(listText, free); }