A rouge-like rpg, heavily inspired on the binding of isaac. Running on a FRDM-K64F Mbed board. C++.

Dependencies:   mbed MotionSensor

RoomEngine/Room/Room.h

Committer:
el17sm
Date:
2019-05-07
Revision:
41:0697508a28ba
Parent:
40:cbcbf6fc1421
Child:
44:cc4cecfc639f

File content as of revision 41:0697508a28ba:

#ifndef ROOM_H
#define ROOM_H
#include "sprites.h"

#include "Entity.h"
#include "Player.h"
#include "Headless.h"
#include "Snake.h"
#include "Skull.h"
#include "Walls.h"

#include "N5110.h"

#define MAX_ENEMIES 10

class Room // contains the type of room, number of enemies inside it, the doorways existing in the room, functions to spawn enemies
{
private:
    bool _doorways[4];
    int _room_type;
    int _enemy_coord[MAX_ENEMIES][2]; //  _enemy_coord[EnemyID][x/y]
    char _wall_stat[2][4]; // _wall_coord[WallID][x/y/width/height]
    
    // Functions
    void draw_doorways(N5110 &lcd);
    void draw_doorways_overlay(N5110 &lcd);
    void draw_enemies(N5110 &lcd, int j);
    void draw_collectibles(N5110 &lcd, int j);
    void draw_walls(N5110 &lcd, int j);
    void init_normal_room();
    void init_middle_walled_room();
    void init_side_walled_room();
    void init_boss_room();
    
public:
    // Constructors
    Room(int no_of_enemies, int room_type);
    // Deconstructors
    ~Room();
    
    // Accessors
    char * get_current_map_2d();
    bool * get_doorways();
    
    // Functions
    void load();
    void unload();
    void draw_room(N5110 &lcd);
    void draw_room_overlay(N5110 &lcd);
    void draw(N5110 &lcd, int j);
    
    // Variables
    Entity *enemies[MAX_ENEMIES];
    bool valid_enemies[MAX_ENEMIES];
    Entity *collectibles[MAX_ENEMIES];
    bool valid_collectibles[MAX_ENEMIES];
    Entity *walls[2];
    bool valid_walls[2];
    int enemies_type[MAX_ENEMIES];
};

const char wall_x[2][11][3] = { // [E/W][Size_Y][Size_X]
    {   // E
        {1,2,2},
        {1,2,2},
        {1,2,2},
        {1,2,2},
        {1,2,2},
        {1,2,2},
        {1,2,2},
        {1,2,2},
        {1,2,2},
        {1,2,2},
        {1,2,2},
    },
    {   // W
        {2,2,1},
        {2,2,1},
        {2,2,1},
        {2,2,1},
        {2,2,1},
        {2,2,1},
        {2,2,1},
        {2,2,1},
        {2,2,1},
        {2,2,1},
        {2,2,1},
    }
};

const char wall_n[10][12] = { // [Size_Y][Size_X] 
    {0,0,0,0,0,0,0,0,0,0,0,0,},
    {0,0,0,0,0,0,0,0,0,0,0,0,},
    {1,1,1,1,1,1,1,1,1,1,1,1,},
    {0,0,0,0,0,0,0,0,0,0,0,0,},
    {0,0,0,0,0,0,0,0,0,0,0,0,},
    {0,0,0,0,0,0,0,0,0,0,0,0,},
    {0,0,0,0,0,0,0,0,0,0,0,0,},
    {0,0,0,0,0,0,0,0,0,0,0,0,},
    {0,0,0,0,0,0,0,0,0,0,0,0,},
    {1,1,1,1,1,1,1,1,1,1,1,1,},
};

const char wall_s[3][12] = { // [Size_Y][Size_X]
    {1,1,1,1,1,1,1,1,1,1,1,1,},
    {2,2,2,2,2,2,2,2,2,2,2,2,},
    {2,2,2,2,2,2,2,2,2,2,2,2,},
};

#endif