A rouge-like rpg, heavily inspired on the binding of isaac. Running on a FRDM-K64F Mbed board. C++.
Dependencies: mbed MotionSensor
Diff: RoomEngine/RoomEngine.h
- Revision:
- 58:c8d90bb7404a
- Parent:
- 57:1c12361b6e3d
- Child:
- 59:fd4669864b67
--- a/RoomEngine/RoomEngine.h Thu May 09 09:50:19 2019 +0000 +++ b/RoomEngine/RoomEngine.h Thu May 09 14:43:45 2019 +0000 @@ -11,74 +11,243 @@ #define MAX_ROOMS_MAP_X 11 #define MAX_ROOMS_MAP_Y 11 - +/**RoomEngine Class +@author Steven Mahasin +@brief Handles all Inter-Class Interactions in the room +@date May 2019 +*/ class RoomEngine { public: - // Constructor + /** Constructor + * @param global_contrast @details the contrast that the game runs on, set by title screen + */ RoomEngine(float global_contrast); - // Destructor + /** Destructor */ ~RoomEngine(); // Functions + /** + * @brief loads the current player and room into the engine + * @param current_player @details the player we control + * @param current_room @details the room the player is currently in + */ void load(Player *current_player, Room *current_room); + /** + * @brief plays an entrance_scene of the player into the room + * @param lcd @details the screen that is being drawn on + * @param gamepad @details the gamepad whose controls are being read + */ void entrance_scene(N5110 &lcd, Gamepad &gamepad); + /** + * @brief increments the room coordinate based on which side the player exits the screen from + */ void update_current_room(); + /** + * @brief returns 0-4 based on the player's position in the screen + * @return which side of the screen the player is currently at (4 = inside) + */ int check_player_room_position(); + /** + * @brief reads the input from the gamepad and converts it into member variables + * @param gamepad @details the gamepad whose controls are being read + */ void read_input(Gamepad &gamepad); + /** + * @brief updates the interaction between entities in room (enemies hp, damage, etc) + * @param number_of_enemies_killed @details for the final score, gets incremented everytime an enemy is killed + */ void update(int &number_of_enemies_killed); + /** + * @brief to draw all the map, entities, doorway onto the screen + * @param lcd @details the screen that the roomengine draws on + */ void render(N5110 &lcd, Gamepad &gamepad); + /** + * @brief Plays an exit scene of the player leaving the room + * @param lcd @details the screen that the exit scene is drawn on + * @param gamepad @details the gamepad whose controls are being read + */ void exit_scene(N5110 &lcd, Gamepad &gamepad); // Accessor + /** + * @brief reads the member variable _room_x + * @return the current room's x-coordinate + */ int get_room_x(); + /** + * @brief reads the member variable _room_y + * @return the current room's y-coordinate + */ int get_room_y(); private: // Member variables + /** + * @brief A boolean to indicate if button L is pressed + */ bool _L; + /** + * @brief A boolean to indicate if button R is pressed + */ bool _R; + /** + * @brief A boolean to indicate if button A is pressed + */ bool _A; + /** + * @brief A boolean to indicate if button B is pressed + */ bool _B; + /** + * @brief A boolean to indicate if button X is pressed + */ bool _X; + /** + * @brief A boolean to indicate if button Y is pressed + */ bool _Y; + /** + * @brief A vector2D that stores the x and y of the mapped_coordinates of the joystick + */ Vector2D mapped_coord; - + /** + * @brief The x-coordinate value for the current room's position + */ int _room_x; + /** + * @brief The y-coordinate value for the current room's position + */ int _room_y; - + /** + * @brief The value of set contrast from title screen, which dictates the contrast of lcd + */ float _global_contrast; - + /** + * @brief A pointer to a Room, used to access the current room class and it's functions + */ Room *room; + /** + * @brief A pointer to a Player, used to access the current player class and it's functions + */ Player *player; // Mutator + /** + * @brief mutates all the user input manually + * @param L @details value to be written onto _L + * @param R @details value to be written onto _R + * @param A @details value to be written onto _A + * @param B @details value to be written onto _B + * @param X @details value to be written onto _X + * @param Y @details value to be written onto _Y + * @param mapped_x @details value to be written onto _mapped_coord.x + * @param mapped_y @details value to be written onto _mapped_coord.y + */ void set_input(bool L, bool R, bool A, bool B, bool X, bool Y, float mapped_x, float mapped_y); + /** + * @brief mutates _mapped_coord manually + * @param mapped_x @details value to be written onto _mapped_coord.x + * @param mapped_y @details value to be written onto _mapped_coord.y + */ void set_mapped_coord(float x, float y); // Methods + /** + * @brief checks if the two entities a and b collide + * @param a @details entity a to be checked if colliding with entity b + * @param b @details entity b to be checked if colliding with entity a + * @return true if the two entities collide + */ bool entity_collision(Entity &a, Entity &b); + /** + * @brief checks if the entity a collides with any entities in the entity array "array[]" if entity a moves in the x direction + * @param a @details entity a to be checked if colliding with any entity in the array[] + * @param array[] @details an array of entities to be check if colliding with a + * @param no_of_enemies @details constant length of enemies in the array[] + * @param current_entity @details the index of the enemy to be ignored if entity a is within array[] + * @param valid_enemies[] @details the array that defines which entities in array[] exists + * @return -1 or 1 if the entity a collides with any entities in the entity array "array[]" when entity a moves in the x direction depending if a's x pos is bigger than the colliding entity's x pos or not + */ float entity_move_check_x(Entity *a, Entity *array[], int no_of_enemies, int current_entity, bool valid_enemies[]); + /** + * @brief checks if the entity a collides with any entities in the entity array "array[]" if entity a moves in the y direction + * @param a @details entity a to be checked if colliding with any entity in the array[] + * @param array[] @details an array of entities to be check if colliding with a + * @param no_of_enemies @details constant length of enemies in the array[] + * @param current_entity @details the index of the enemy to be ignored if entity a is within array[] + * @param valid_enemies[] @details the array that defines which entities in array[] exists + * @return -1 or 1 if the entity a collides with any entities in the entity array "array[]" when entity a moves in the y direction depending if a's x pos is bigger than the colliding entity's x pos or not + */ float entity_move_check_y(Entity *a, Entity *array[], int no_of_enemies, int current_entity, bool valid_enemies[]); + /** + * @brief inflict any damage happening to any entities in the room + */ void check_damage(); + /** + * @brief inflict any damage happening to the player in the room + */ void check_damage_player(); + /** + * @brief inflict any damage happening to any enemies in the room + */ void check_damage_enemies(); + /** + * @brief delete any enemies that has it's health depleted + * @param number_of_enemies_killed @details increments whenever an enemy is successfully deleted + */ void check_enemies_death(int &number_of_enemies_killed); + /** + * @brief undo movement of entity if the entity collides with the wall (not used in this version) + */ void check_walls_collision(); + /** + * @brief updates the positions of all entities + */ void move(); + /** + * @brief updates the positions of player based on the joystick and wall constraint + */ void move_player(); + /** + * @brief updates the positions of enemies based on their coded movement patterns, repulsion effect and wall constraint + */ void move_enemies(); + /** + * @brief updates the position of the player whenever the player has just exit the screen + * @param side @details the side the player exits the room from + */ void update_player_position(int side); + /** + * @brief holds the loop and detection for when a player pauses + * @param lcd @details the screen where the paused screen is going to be displayed on + * @param gamepad @details the gamepad whose controls are being read + */ void pause_detection(N5110 &lcd, Gamepad &gamepad); + /** + * @brief draws the pause screen onto lcd + * @param lcd @details the screen where the paused screen is going to be displayed on + * @param paused_screen @details the char array of the frozen screen when paused + * @param pause_timer @details the loop count to check if the pause sprite should appear or not for blink effect + */ void draw_pause_screen(N5110 &lcd, char * paused_screen, int &pause_timer); + /** + * @brief draws the map, the entities and map overlays in the order of descending j + * @param lcd @details the screen where all entities are being drawn on + */ void draw(N5110 &lcd); + /** + * @brief draws number of hp as hearts on the top left of the screen whenever the user holds button L + * @param lcd @details the screen where the hearts are being drawn on + */ void draw_health(N5110 &lcd); };