game_state.c 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #include "game_state.h"
  2. #include <furi.h>
  3. struct GameState {
  4. LaserTagTeam team;
  5. uint8_t health;
  6. uint16_t score;
  7. uint16_t ammo;
  8. uint32_t game_time;
  9. bool game_over;
  10. };
  11. GameState* game_state_alloc() {
  12. GameState* state = malloc(sizeof(GameState));
  13. state->team = TeamRed;
  14. state->health = 100;
  15. state->score = 0;
  16. state->ammo = 100;
  17. state->game_time = 0;
  18. state->game_over = false;
  19. return state;
  20. }
  21. void game_state_free(GameState* state) {
  22. free(state);
  23. }
  24. void game_state_reset(GameState* state) {
  25. state->health = 100;
  26. state->score = 0;
  27. state->ammo = 100;
  28. state->game_time = 0;
  29. state->game_over = false;
  30. }
  31. void game_state_set_team(GameState* state, LaserTagTeam team) {
  32. state->team = team;
  33. }
  34. LaserTagTeam game_state_get_team(GameState* state) {
  35. return state->team;
  36. }
  37. void game_state_decrease_health(GameState* state, uint8_t amount) {
  38. if(state->health > amount) {
  39. state->health -= amount;
  40. } else {
  41. state->health = 0;
  42. state->game_over = true;
  43. }
  44. }
  45. void game_state_increase_health(GameState* state, uint8_t amount) {
  46. state->health = (state->health + amount > 100) ? 100 : state->health + amount;
  47. }
  48. uint8_t game_state_get_health(GameState* state) {
  49. return state->health;
  50. }
  51. void game_state_increase_score(GameState* state, uint16_t points) {
  52. state->score += points;
  53. }
  54. uint16_t game_state_get_score(GameState* state) {
  55. return state->score;
  56. }
  57. void game_state_decrease_ammo(GameState* state, uint16_t amount) {
  58. if(state->ammo > amount) {
  59. state->ammo -= amount;
  60. } else {
  61. state->ammo = 0;
  62. }
  63. }
  64. void game_state_increase_ammo(GameState* state, uint16_t amount) {
  65. state->ammo += amount;
  66. }
  67. uint16_t game_state_get_ammo(GameState* state) {
  68. return state->ammo;
  69. }
  70. void game_state_update_time(GameState* state, uint32_t delta_time) {
  71. state->game_time += delta_time;
  72. }
  73. uint32_t game_state_get_time(GameState* state) {
  74. return state->game_time;
  75. }
  76. bool game_state_is_game_over(GameState* state) {
  77. return state->game_over;
  78. }
  79. void game_state_set_game_over(GameState* state, bool game_over) {
  80. state->game_over = game_over;
  81. }