From 249ccffa03ded6f1ba06cce346f91d96d8ce3ed5 Mon Sep 17 00:00:00 2001 From: Christoph Sommer Date: Tue, 25 Jul 2006 00:30:30 +0000 Subject: [PATCH] In-game HUD now uses icons instead of text / Number of coins smoothly "counts" up- and downward SVN-Revision: 4085 --- data/images/engine/hud/coins-0.png | Bin 0 -> 1279 bytes data/images/engine/hud/time-0.png | Bin 0 -> 1263 bytes src/object/level_time.cpp | 14 ++++++++------ src/object/level_time.hpp | 3 +++ src/player_status.cpp | 29 +++++++++++++++++++++-------- src/player_status.hpp | 3 ++- 6 files changed, 34 insertions(+), 15 deletions(-) create mode 100644 data/images/engine/hud/coins-0.png create mode 100644 data/images/engine/hud/time-0.png diff --git a/data/images/engine/hud/coins-0.png b/data/images/engine/hud/coins-0.png new file mode 100644 index 0000000000000000000000000000000000000000..9ab0b4a568ac55d0710daffb4e9b06c7c6d7ecf4 GIT binary patch literal 1279 zcmVWFU8GbZ8({Xk{QrNlj4iWF>9@00d)6L_t(Y$E}q~Y}Hj1 z#(($zr#JiFYpIMG7IZa3JCmC8$7R8~_cF08xuhmx&SE>3`3#` z5W}Q~V1YnLkQkt}SQ%PMY5U&m8~)RE(Nden9sO2!bI$imzH`qJjL_WrVD`5YF1egfII1B9Sf;=*B*CD- zbydxrIpM&;1F2(=3Lv+BI;Q&BS<$sp3i{Fx{TUzERUI^!I_{AWkQhik@-IefI^yQ9CP7AwWRvQp!Vw^x-{nE^OSk<}K|HQuS(0Et5(-HyOJJB11UR-2NIVbP+Om|Fn|%xBx5Y=q&=8Ai zJ2rd}ufEsSudZDe-n_ZGe)y=v+4F^6j;l5ScZLe2#5Z(7GNJKUOd}AGSf)VJ2a-|> zP@oG4S{eaMq75df{Qt5Xlnx z2;vEiJ9iy&IUgU8a-g@=1-dryV|#jCdU|X;4;%+{U0fdlkkB;oRe5>n#~okSMepBF zs1)=@K3u#aj_2y(i!j95daI9E*ZaM&g`;a{RgV5%gT%^(THL8rfeKX;kpXDpwKi3h9!}(h9AH^TMKBK za2`Bxr@s46$F*Sq6;kqoQY4h(C*bN}EGDpgVomsyL|iLtK9|}BtQgva-#1k>PMjFr z60jthewTbfVd!EYdjo_J=(-@6^XcrgX}NAwS!sO!`fIn>kIE*jsL+2)r@ficsH}-a zbr1?E!1qAYz_lTp^|*V-;qv7?$s+AY)9$|2?d^^?Dgfut<(2P?ef|BO+1u;R@?50} zAYV{qGCsF&*_^+arK7`jii`E_O-+5P&o<}mQN4x_wP;az!sIE|3fpF(>-tZ59>Orh pjgk`mL}#b7^V@HFuZ`w8{uc~+)%T;jl|}#n002ovPDHLkV1nYhSStVk literal 0 HcmV?d00001 diff --git a/data/images/engine/hud/time-0.png b/data/images/engine/hud/time-0.png new file mode 100644 index 0000000000000000000000000000000000000000..69ef34dfe4da70c04335def6ab96fbf85d751a11 GIT binary patch literal 1263 zcmVj$9LT0hbA>E4{& z^Z(_XbI*|&VH+#;f~keJ)$UYli91#JoNh}F51^|dsipfb`Qykn<>QL&lF1mEH2m_x zd&aAU(?wN^&q$VqL_DIShHsGS^<&C9!I&;O{&fG|e$lz~&29DzV*y~hefaQwbJO%k z5?fPKtmGu&!Xdfn>%C5G?Osen!KQohiZm%bEjT4>s@k}IojzsEGElwEnETKi>#)-< zoHk3Lsp%9GCq6(TVJ99pk>wT z7K7T_{WLTjM$;4wBMDVC=9^ih$)n{wP{5U@q|3@Y35h zR_K#b$C(cfbSr3@gsRHq=FZ~a!D`ytT8Tsw)Ya{xuI>|}QHVw%k#M7ggcMH+t{5gT zA;n{_Tv&F`-asJv6tDtt-vTRiI&7aWm_Ol2?gV!uP(B2Z?2(=ja$M0Oc2pI@VJI$s z8lNwZ0|%<8uiwqdlV4F(R8AxUnkMM#?m`i1#MFWNhXJ&!5##9j3tfG$tj@`JazSd1 zB(Wb@ob9(Csa&7CXwGcealJDd1v+j&Qj%P@6jd{6X}O9J5}BF#2;pMhybbK!S;pD3 z^^}$EK!_ZILC|%LhK9G9Rl16(p?Zb^SitU<*1?w7E1P$|wl*yGkCrOR z;cvS6`SjqvM1l(7`cMW;L!iY>T3fGi^=cEL5QIYDauqOb+A=&IFM+@uEDJ0PWI36c zGuI$VE@DxAWSuSGcvwxWso2!7PM++SmX~KM7cV&yK_qk z1mr_=S%w~-{g-dwbZ%Al@q{3e zuWOGxoT=uTm!_1ar#p`Uvw)$@DSF&G7SSArO^Mls<@;AOk0%F@Cufv~7F=s@!Sefm z8{wF{WKm$z%!jjGTi!TFS9kP~Wr_9sKWi&5nUS^Xtt}<~{{GmB%BnNRfyamDKxMW1 zolWVO?HbG TIME_WARNING) || (int(game_time * 2.5) % 2)) { std::stringstream ss; ss << int(time_left); - std::string time = ss.str(); + std::string time_text = ss.str(); - float caption_width = white_text->get_text_width(_("TIME")) + white_text->get_text_width(" "); - float all_width = caption_width + white_text->get_text_width(time); - - context.draw_text(white_text, _("TIME"), Vector((SCREEN_WIDTH - all_width)/2, BORDER_Y), LEFT_ALLIGN, LAYER_FOREGROUND1); - context.draw_text(gold_text, time, Vector((SCREEN_WIDTH - all_width)/2 + caption_width, BORDER_Y), LEFT_ALLIGN, LAYER_FOREGROUND1); + Surface* time_surf = time_surface.get(); + if (time_surf) { + float all_width = time_surf->get_width() + white_text->get_text_width(time_text); + context.draw_surface(time_surf, Vector((SCREEN_WIDTH - all_width)/2, BORDER_Y + 1), LAYER_FOREGROUND1); + context.draw_text(gold_text, time_text, Vector((SCREEN_WIDTH - all_width)/2 + time_surf->get_width(), BORDER_Y), LEFT_ALLIGN, LAYER_FOREGROUND1); + } } context.pop_transform(); diff --git a/src/object/level_time.hpp b/src/object/level_time.hpp index 335f87806..b96709adc 100644 --- a/src/object/level_time.hpp +++ b/src/object/level_time.hpp @@ -20,9 +20,11 @@ #ifndef __LEVELTIME_H__ #define __LEVELTIME_H__ +#include #include "game_object.hpp" #include "timer.hpp" #include "lisp/lisp.hpp" +#include "video/surface.hpp" class LevelTime : public GameObject { @@ -34,6 +36,7 @@ public: void stop(); private: + std::auto_ptr time_surface; bool running; float time_left; }; diff --git a/src/player_status.cpp b/src/player_status.cpp index ee8647701..f638bca92 100644 --- a/src/player_status.cpp +++ b/src/player_status.cpp @@ -46,7 +46,7 @@ PlayerStatus::PlayerStatus() { reset(); - tux_life.reset(sprite_manager->create("images/creatures/tux_small/tux-life.sprite")); + coin_surface.reset(new Surface("images/engine/hud/coins-0.png")); Console::instance->registerCommand("coins", this); } @@ -132,16 +132,29 @@ PlayerStatus::read(const lisp::Lisp& lisp) void PlayerStatus::draw(DrawingContext& context) { + static int displayed_coins = -1; + static int next_count = 0; + + if (displayed_coins == -1) displayed_coins = coins; + if (++next_count > 2) { + next_count = 0; + if (displayed_coins < coins) displayed_coins++; + if (displayed_coins > coins) displayed_coins--; + } + displayed_coins = std::min(std::max(displayed_coins, 0), 9999); + + std::stringstream ss; + ss << displayed_coins; + std::string coins_text = ss.str(); + context.push_transform(); context.set_translation(Vector(0, 0)); - char str[60]; - - int displayCoins = std::max(player_status->coins, 0); - snprintf(str, sizeof(str), "%d", displayCoins); - const char* coinstext = _("COINS"); - context.draw_text(white_text, coinstext, Vector(SCREEN_WIDTH - white_text->get_text_width(coinstext) - gold_text->get_text_width(" 99999") - BORDER_X, BORDER_Y), LEFT_ALLIGN, LAYER_FOREGROUND1); - context.draw_text(gold_text, str, Vector(SCREEN_WIDTH - BORDER_X, BORDER_Y), RIGHT_ALLIGN, LAYER_FOREGROUND1); + Surface* coin_surf = coin_surface.get(); + if (coin_surf) { + context.draw_surface(coin_surf, Vector(SCREEN_WIDTH - BORDER_X - coin_surf->get_width() - gold_text->get_text_width(coins_text), BORDER_Y + 1), LAYER_FOREGROUND1); + } + context.draw_text(gold_text, coins_text, Vector(SCREEN_WIDTH - BORDER_X, BORDER_Y), RIGHT_ALLIGN, LAYER_FOREGROUND1); context.pop_transform(); } diff --git a/src/player_status.hpp b/src/player_status.hpp index 155972524..bf5cc272d 100644 --- a/src/player_status.hpp +++ b/src/player_status.hpp @@ -27,6 +27,7 @@ #include "serializable.hpp" #include "sprite/sprite.hpp" #include "console.hpp" +#include "video/surface.hpp" static const float BORDER_X = 10; static const float BORDER_Y = 10; @@ -69,7 +70,7 @@ private: // don't use this PlayerStatus(const PlayerStatus& other); - std::auto_ptr tux_life; + std::auto_ptr coin_surface; }; // global player state -- 2.11.0