game_state.c 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #include "game_state.h"
  2. #include <furi.h>
  3. #include <stdlib.h>
  4. struct GameState {
  5. LaserTagTeam team;
  6. uint8_t health;
  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. if(!state) {
  14. FURI_LOG_E("GameState", "Failed to allocate GameState");
  15. return NULL;
  16. }
  17. state->team = TeamRed;
  18. state->health = INITIAL_HEALTH;
  19. state->ammo = INITIAL_AMMO;
  20. state->game_time = 0;
  21. state->game_over = false;
  22. FURI_LOG_I("GameState", "GameState allocated successfully");
  23. return state;
  24. }
  25. void game_state_reset(GameState* state) {
  26. furi_assert(state);
  27. state->health = INITIAL_HEALTH;
  28. state->ammo = INITIAL_AMMO;
  29. state->game_time = 0;
  30. state->game_over = false;
  31. FURI_LOG_I("GameState", "GameState reset");
  32. }
  33. void game_state_set_team(GameState* state, LaserTagTeam team) {
  34. furi_assert(state);
  35. state->team = team;
  36. FURI_LOG_I("GameState", "Team set to %s", (team == TeamRed) ? "Red" : "Blue");
  37. }
  38. LaserTagTeam game_state_get_team(GameState* state) {
  39. furi_assert(state);
  40. return state->team;
  41. }
  42. void game_state_decrease_health(GameState* state, uint8_t amount) {
  43. furi_assert(state);
  44. if(state->health > amount) {
  45. state->health -= amount;
  46. } else {
  47. state->health = 0;
  48. state->game_over = true;
  49. FURI_LOG_W("GameState", "Health depleted, game over");
  50. }
  51. FURI_LOG_I("GameState", "Health decreased to %d", state->health);
  52. }
  53. void game_state_increase_health(GameState* state, uint8_t amount) {
  54. furi_assert(state);
  55. state->health = (state->health + amount > MAX_HEALTH) ? MAX_HEALTH : state->health + amount;
  56. FURI_LOG_I("GameState", "Health increased to %d", state->health);
  57. }
  58. uint8_t game_state_get_health(GameState* state) {
  59. furi_assert(state);
  60. return state->health;
  61. }
  62. void game_state_decrease_ammo(GameState* state, uint16_t amount) {
  63. furi_assert(state);
  64. if(state->ammo > amount) {
  65. state->ammo -= amount;
  66. } else {
  67. state->ammo = 0;
  68. FURI_LOG_W("GameState", "Ammo depleted");
  69. }
  70. FURI_LOG_I("GameState", "Ammo decreased to %d", state->ammo);
  71. }
  72. void game_state_increase_ammo(GameState* state, uint16_t amount) {
  73. furi_assert(state);
  74. state->ammo += amount;
  75. FURI_LOG_I("GameState", "Ammo increased to %d", state->ammo);
  76. }
  77. uint16_t game_state_get_ammo(GameState* state) {
  78. furi_assert(state);
  79. return state->ammo;
  80. }
  81. void game_state_update_time(GameState* state, uint32_t delta_time) {
  82. furi_assert(state);
  83. state->game_time += delta_time;
  84. FURI_LOG_I("GameState", "Game time updated to %ld seconds", state->game_time);
  85. }
  86. uint32_t game_state_get_time(GameState* state) {
  87. furi_assert(state);
  88. return state->game_time;
  89. }
  90. bool game_state_is_game_over(GameState* state) {
  91. furi_assert(state);
  92. return state->game_over;
  93. }
  94. void game_state_set_game_over(GameState* state, bool game_over) {
  95. furi_assert(state);
  96. state->game_over = game_over;
  97. FURI_LOG_I("GameState", "Game over status set to %s", game_over ? "true" : "false");
  98. }