#pragma once
#include "misc.h"
#include <vector>

#define MAX_ROOMS 96

#define NO_DOOR 0
#define DOOR_XP 1
#define DOOR_XN 2
#define DOOR_YP 4
#define DOOR_YN 8

#define XP 0
#define XN 1
#define YP 2
#define YN 3
#define ZP 4
#define ZN 5

namespace room
{
    void init();
    void load(int room, const int door=-1);
    void reload();
    //void load(int x, int y, int8_t xp, int8_t xn, int8_t yp, int8_t yn, uint8_t col, uint8_t floor, uint8_t walls, uint8_t door, uint8_t doorwall);
    void update();
    void draw();
    void draw2();
    void cycleColor(int times);
    
    int getCurrent();
    vec3_t getSize();
    vec3_t getMin();
    vec3_t getMax();
    vec3_t getTMin();
    vec3_t getTMax();
    int getDoors();
    int getDoor(const int d);
    int getExit(const int d);
    int getColor(int which);
    int getFloor();

    int getFloorCount();
    int getDoorCount();
    int getWallsCount();

    namespace editor
    {
        int &refWidth();
        int &refHeight();
        
        int &refDoor(const int which);

        int &refColor();
        int &refFloorTex();
        int &refWallTex();
        int &refDoorTex();
        int &refWallDoorTex();

        int &refExit(const int which);

        int &refEditorDone();

        bool roomExists(const int which);
        void updateRoomList();

        int getCurrentRoom();

        void modify();
        const bool isModified();
        void save();
    }
}
