From dfe499248f1b1236487156b28e4a535d7963fe35 Mon Sep 17 00:00:00 2001 From: Magnus Auvinen Date: Wed, 27 Aug 2008 15:48:50 +0000 Subject: major commit. game client restructure. not complete, loads of stuff not working, but the structure is there --- src/game/client/components/damageind.cpp | 66 ++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/game/client/components/damageind.cpp (limited to 'src/game/client/components/damageind.cpp') diff --git a/src/game/client/components/damageind.cpp b/src/game/client/components/damageind.cpp new file mode 100644 index 00000000..15ca4b18 --- /dev/null +++ b/src/game/client/components/damageind.cpp @@ -0,0 +1,66 @@ +#include +#include +#include + +#include // get_angle +#include +#include +#include "damageind.hpp" + +DAMAGEIND::DAMAGEIND() +{ + lastupdate = 0; + num_items = 0; +} + +DAMAGEIND::ITEM *DAMAGEIND::create_i() +{ + if (num_items < MAX_ITEMS) + { + ITEM *p = &items[num_items]; + num_items++; + return p; + } + return 0; +} + +void DAMAGEIND::destroy_i(DAMAGEIND::ITEM *i) +{ + num_items--; + *i = items[num_items]; +} + +void DAMAGEIND::create(vec2 pos, vec2 dir) +{ + ITEM *i = create_i(); + if (i) + { + i->pos = pos; + i->life = 0.75f; + i->dir = dir*-1; + i->startangle = (( (float)rand()/(float)RAND_MAX) - 1.0f) * 2.0f * pi; + } +} + +void DAMAGEIND::on_render() +{ + gfx_texture_set(data->images[IMAGE_GAME].id); + gfx_quads_begin(); + for(int i = 0; i < num_items;) + { + vec2 pos = mix(items[i].pos+items[i].dir*75.0f, items[i].pos, clamp((items[i].life-0.60f)/0.15f, 0.0f, 1.0f)); + + items[i].life -= client_frametime(); + if(items[i].life < 0.0f) + destroy_i(&items[i]); + else + { + gfx_setcolor(1.0f,1.0f,1.0f, items[i].life/0.1f); + gfx_quads_setrotation(items[i].startangle + items[i].life * 2.0f); + select_sprite(SPRITE_STAR1); + draw_sprite(pos.x, pos.y, 48.0f); + i++; + } + } + gfx_quads_end(); +} -- cgit 1.4.1