player.h 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #pragma once
  2. #include "engine/engine.h"
  3. #include <flip_world.h>
  4. #include <game/game.h>
  5. #include "engine/sensors/imu.h"
  6. // Maximum enemies
  7. #define MAX_ENEMIES 10
  8. #define MAX_LEVELS 10
  9. typedef enum
  10. {
  11. PLAYER_IDLE,
  12. PLAYER_MOVING,
  13. PLAYER_ATTACKING,
  14. PLAYER_ATTACKED,
  15. PLAYER_DEAD,
  16. } PlayerState;
  17. typedef enum
  18. {
  19. PLAYER_UP,
  20. PLAYER_DOWN,
  21. PLAYER_LEFT,
  22. PLAYER_RIGHT
  23. } PlayerDirection;
  24. typedef struct
  25. {
  26. Vector old_position; // previous position of the player
  27. PlayerDirection direction; // direction the player is facing
  28. PlayerState state; // current state of the player
  29. Vector start_position; // starting position of the player
  30. Sprite *sprite_right; // player sprite looking right
  31. Sprite *sprite_left; // player sprite looking left
  32. int8_t dx; // x direction
  33. int8_t dy; // y direction
  34. uint32_t xp; // experience points
  35. uint32_t level; // player level
  36. uint32_t strength; // player strength
  37. uint32_t health; // player health
  38. uint32_t max_health; // player maximum health
  39. uint32_t health_regen; // player health regeneration rate per second/frame
  40. float elapsed_health_regen; // time elapsed since last health regeneration
  41. float attack_timer; // Cooldown duration between attacks
  42. float elapsed_attack_timer; // Time elapsed since the last attack
  43. char username[32]; // player username
  44. } PlayerContext;
  45. // two screens for the game menu
  46. typedef enum
  47. {
  48. GAME_MENU_INFO, // level, health, xp, etc.
  49. GAME_MENU_MORE, // more settings
  50. } GameMenuScreen;
  51. typedef struct
  52. {
  53. PlayerContext *player_context;
  54. Level *levels[MAX_LEVELS];
  55. Entity *enemies[MAX_ENEMIES];
  56. Entity *player;
  57. float fps;
  58. int level_count;
  59. int enemy_count;
  60. int current_level;
  61. bool ended_early;
  62. Imu *imu;
  63. bool imu_present;
  64. //
  65. bool is_switching_level;
  66. bool is_menu_open;
  67. //
  68. uint32_t elapsed_button_timer;
  69. uint32_t last_button;
  70. //
  71. GameMenuScreen menu_screen;
  72. uint8_t menu_selection;
  73. //
  74. int icon_count;
  75. int icon_offset;
  76. } GameContext;
  77. typedef struct
  78. {
  79. char id[16];
  80. char left_file_name[64];
  81. char right_file_name[64];
  82. uint8_t width;
  83. uint8_t height;
  84. } SpriteContext;
  85. extern const EntityDescription player_desc;
  86. void player_spawn(Level *level, GameManager *manager);
  87. SpriteContext *get_sprite_context(const char *name);