X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=ball%2Fhud.c;h=8f74f19e43abe97e1a330668bb587dfc06e46d89;hb=706447f1b768abe94ca1bbd652eabac37fba4e51;hp=0b55ba44ff0e99eed2064c2a9a28eec9892e7732;hpb=c6d6c9e34bdbdc6e4d9e922130f8a8b0f3a0d20a;p=neverball diff --git a/ball/hud.c b/ball/hud.c index 0b55ba4..8f74f19 100644 --- a/ball/hud.c +++ b/ball/hud.c @@ -1,4 +1,4 @@ -/* +/* * Copyright (C) 2003 Robert Kooima * * NEVERBALL is free software; you can redistribute it and/or modify @@ -14,13 +14,18 @@ #include #include +#include #include "glext.h" #include "hud.h" #include "gui.h" -#include "game.h" -#include "level.h" +#include "progress.h" #include "config.h" +#include "video.h" +#include "audio.h" + +#include "game_common.h" +#include "game_client.h" /*---------------------------------------------------------------------------*/ @@ -39,33 +44,21 @@ static float view_timer; static void hud_fps(void) { - static int fps = 0; - static int then = 0; - static int count = 0; - - int now = SDL_GetTicks(); - - if (now - then > 250) - { - fps = count * 1000 / (now - then); - then = now; - count = 0; - - gui_set_count(fps_id, fps); - } - else count++; + gui_set_count(fps_id, video_perf()); } void hud_init(void) { int id; + const char *str_view; + int v; if ((Rhud_id = gui_hstack(0))) { if ((id = gui_vstack(Rhud_id))) { - gui_label(id, "Coins", GUI_SML, 0, gui_wht, gui_wht); - gui_label(id, "Goal", GUI_SML, 0, gui_wht, gui_wht); + gui_label(id, _("Coins"), GUI_SML, 0, gui_wht, gui_wht); + gui_label(id, _("Goal"), GUI_SML, 0, gui_wht, gui_wht); } if ((id = gui_vstack(Rhud_id))) { @@ -84,8 +77,8 @@ void hud_init(void) } if ((id = gui_vstack(Lhud_id))) { - gui_label(id, "Balls", GUI_SML, 0, gui_wht, gui_wht); - gui_label(id, "Score", GUI_SML, 0, gui_wht, gui_wht); + gui_label(id, _("Balls"), GUI_SML, 0, gui_wht, gui_wht); + gui_label(id, _("Score"), GUI_SML, 0, gui_wht, gui_wht); } gui_layout(Lhud_id, -1, -1); } @@ -93,7 +86,14 @@ void hud_init(void) if ((time_id = gui_clock(0, 59999, GUI_MED, GUI_TOP))) gui_layout(time_id, 0, -1); - if ((view_id = gui_label(0, STR_VIEW2, GUI_SML, GUI_SW, gui_wht, gui_wht))) + + /* Find the longest view name. */ + + for (str_view = "", v = VIEW_NONE + 1; v < VIEW_MAX; v++) + if (strlen(view_to_str(v)) > strlen(str_view)) + str_view = view_to_str(v); + + if ((view_id = gui_label(0, str_view, GUI_SML, GUI_SW, gui_wht, gui_wht))) gui_layout(view_id, 1, 1); if ((fps_id = gui_count(0, 1000, GUI_SML, GUI_SE))) @@ -111,58 +111,144 @@ void hud_free(void) void hud_paint(void) { - gui_paint(Lhud_id); + if (curr_mode() == MODE_CHALLENGE) + gui_paint(Lhud_id); + gui_paint(Rhud_id); gui_paint(time_id); if (config_get_d(CONFIG_FPS)) gui_paint(fps_id); - if (view_timer > 0.0f) - gui_paint(view_id); + hud_view_paint(); } -void hud_timer(float dt) +void hud_update(int pulse) { - const int clock = curr_clock(); - const int balls = curr_balls(); - const int coins = curr_coins(); - const int score = curr_score(); - const int goal = curr_goal(); - - if (gui_value(time_id) != clock) gui_set_clock(time_id, clock); - if (gui_value(ball_id) != balls) gui_set_count(ball_id, balls); - if (gui_value(scor_id) != score) gui_set_count(scor_id, score); - if (gui_value(coin_id) != coins) gui_set_count(coin_id, coins); - if (gui_value(goal_id) != goal) gui_set_count(goal_id, goal); + int clock = curr_clock(); + int coins = curr_coins(); + int goal = curr_goal(); + int balls = curr_balls(); + int score = curr_score(); + + int c_id; + int last; + + if (!pulse) + { + /* reset the hud */ + + gui_pulse(ball_id, 0.f); + gui_pulse(time_id, 0.f); + gui_pulse(coin_id, 0.f); + } + + /* time and tick-tock */ + + if (clock != (last = gui_value(time_id))) + { + gui_set_clock(time_id, clock); + + if (last > clock && pulse) + { + if (clock <= 1000 && (last / 100) > (clock / 100)) + { + audio_play(AUD_TICK, 1.f); + gui_pulse(time_id, 1.50); + } + else if (clock < 500 && (last / 50) > (clock / 50)) + { + audio_play(AUD_TOCK, 1.f); + gui_pulse(time_id, 1.25); + } + } + } + + /* balls and score + select coin widget */ + + switch (curr_mode()) + { + case MODE_CHALLENGE: + if (gui_value(ball_id) != balls) gui_set_count(ball_id, balls); + if (gui_value(scor_id) != score) gui_set_count(scor_id, score); + + c_id = coin_id; + break; + + default: + c_id = coin_id; + break; + } + + + /* coins and pulse */ + + if (coins != (last = gui_value(c_id))) + { + last = coins - last; + + gui_set_count(c_id, coins); + + if (pulse && last > 0) + { + if (last >= 10) gui_pulse(coin_id, 2.00f); + else if (last >= 5) gui_pulse(coin_id, 1.50f); + else gui_pulse(coin_id, 1.25f); + + if (goal > 0) + { + if (last >= 10) gui_pulse(goal_id, 2.00f); + else if (last >= 5) gui_pulse(goal_id, 1.50f); + else gui_pulse(goal_id, 1.25f); + } + } + } + + /* goal and pulse */ + + if (goal != (last = gui_value(goal_id))) + { + gui_set_count(goal_id, goal); + + if (pulse && goal == 0 && last > 0) + gui_pulse(goal_id, 2.00f); + } if (config_get_d(CONFIG_FPS)) hud_fps(); +} - view_timer -= dt; +void hud_timer(float dt) +{ + + hud_update(1); gui_timer(Rhud_id, dt); gui_timer(Lhud_id, dt); gui_timer(time_id, dt); - gui_timer(view_id, dt); + + hud_view_timer(dt); } -void hud_ball_pulse(float k) { gui_pulse(ball_id, k); } -void hud_time_pulse(float k) { gui_pulse(time_id, k); } -void hud_coin_pulse(float k) { gui_pulse(coin_id, k); } -void hud_goal_pulse(float k) { gui_pulse(goal_id, k); } +/*---------------------------------------------------------------------------*/ void hud_view_pulse(int c) { - switch (c) - { - case 0: gui_set_label(view_id, STR_VIEW0); break; - case 1: gui_set_label(view_id, STR_VIEW1); break; - case 2: gui_set_label(view_id, STR_VIEW2); break; - } - + gui_set_label(view_id, view_to_str(c)); gui_pulse(view_id, 1.2f); view_timer = 2.0f; } +void hud_view_timer(float dt) +{ + view_timer -= dt; + gui_timer(view_id, dt); +} + +void hud_view_paint(void) +{ + if (view_timer > 0.0f) + gui_paint(view_id); +} + /*---------------------------------------------------------------------------*/