so://phie

freezo

A retro platform game
git clone git://soophie.de/freezo

blob: ae8dcf4e767016f7f8f4b6eeb0332a815904d90f (1897 bytes)[raw]

1#include <stdlib.h>

2

3#include "../include/effect.h"

4#include "../include/util.h"

5#include "../include/const.h"

6

7effect_t *effect_create(pos_t pos, effect_e type) {

8 effect_t *effect = malloc(sizeof(effect_t));

9 effect->type = type;

10 effect->pos = pos;

11 switch (type) {

12 case EFFECT_FALL:

13 effect->timer = fz_timer_create(7, 3);

14 break;

15 case EFFECT_BREAK:

16 effect->timer = fz_timer_create(10, 3);

17 break;

18 case EFFECT_PARTICLE:

19 effect->timer = fz_timer_create(14, 4);

20 break;

21 }

22 effect->count = 0;

23 return effect;

24}

25

26void effect_update(effect_t *effect, game_t *game) {

27 fz_timer_update(effect->timer);

28 if (fz_timer_check(effect->timer)) {

29 effect->count++;

30 }

31 // remove effect after one iteration

32 if (effect->count > 0) {

33 for (int i = 0; i < game->effects_len; i++) {

34 if (game->effects[i] == effect) {

35 if (i + 1 < game->effects_len) {

36 for (int j = i; j < game->effects_len - 1; j++) {

37 game->effects[j] = game->effects[j + 1];

38 }

39 }

40 game->effects_len--;

41 game->effects = realloc(game->effects, sizeof(effect_t) * game->effects_len);

42 break;

43 }

44 }

45 }

46}

47

48void effect_draw(effect_t *effect, game_t *game) {

49 int x;

50 switch (effect->type) {

51 case EFFECT_FALL:

52 x = 1;

53 break;

54 case EFFECT_BREAK:

55 x = 0;

56 break;

57 case EFFECT_PARTICLE:

58 x = 3;

59 break;

60 }

61 int frame = fz_timer_get(effect->timer);

62 DrawTextureRec(game->assets.entities, texture_rect(frame, x, PLAYER_WIDTH, PLAYER_HEIGHT), pos_snap(effect->pos), WHITE);

63}

64

65void effect_free(effect_t *effect) {

66 free(effect);

67}

68

69void effect_play(pos_t pos, effect_e type, game_t *game) {

70 game->effects = realloc(game->effects, sizeof(effect_t) * (game->effects_len + 1));

71 game->effects[game->effects_len] = effect_create(pos, type);

72 game->effects_len++;

73}