binding-of-isaac/src/menus.h

72 lines
2.6 KiB
C

#ifndef MENUS_H
#define MENUS_H
typedef enum button_action {NONE, WARP, SET_VAR, EXIT} button_action;
typedef enum void_type {INT, FLOAT, DOUBLE} void_type;
typedef struct onoff_button {
int id;
char* text;
float x; float y; float w; float h;
int red; int green; int blue;
// {WARP, SET_VAR, EXIT}
button_action type;
// the value to change (if SET_VAR) or the destination interface (if WARP)
void* metadata;
void_type cast;
// limits
double inf; double sup;
// is called upon clicking button
// this function is executed before metadata is used
void (*onClick)(void* args);
void* arg;
} onoff_button;
typedef struct interface {
int intfid;
char* title;
float x; float y; float w; float h;
int red; int green; int blue;
int* buttons;
int nButtons;
int nMemButtons;
} interface;
void initMenus();
void gl_drawRect(unsigned int fragShader, float x, float y, float w, float h, int r, int g, int b);
void gl_drawRectAlpha(unsigned int fragShader, float x, float y, float w, float h, int r, int g, int b, int a);
void gl_initDrawRect(unsigned int shaderProgram);
void gl_drawInteger(unsigned int fragShader, int n, float x, float y, float size, int r, int g, int b, float width, int side);
void gl_drawFloat(unsigned int fragShader, float n, float x, float y, float size, int r, int g, int b, float width, int side);
void gl_drawChar(unsigned int fragShader, char ch, float x, float y, float size, int r, int g, int b, float width);
void gl_drawSymbol(unsigned int fragShader, char ch, float x, float y, float size, int r, int g, int b, float width, float* retval);
void gl_drawString(unsigned int fragShader, char* str, float x, float y, float size, int r, int g, int b, float width, int side);
void gl_printf(unsigned int fragShader, float x, float y, float size, float width, int r, int g, int b, const char* str, ...);
void init_interf(GLFWwindow *window);
void reset_interf();
void free_interf();
bool isInMenu(GLFWwindow *win, unsigned int fragShader);
bool isMenuOpen();
int button_create_onoff(char* text, int red, int green, int blue, float x, float y, float w, float h, button_action actn, void* val, double min, double max, void_type cast, void (*onClick)(void*), void* arg);
int interface_create(char* title, int red, int green, int blue, float x, float y, float w, float h);
void interface_link_button(int interface_id, int button_id);
void interface_unlink_button(int interface_id, int button_id);
void interface_set(int interface_id);
void build_all_menus();
int build_text_box(char* msg, int red, int green, int blue);
int build_lock_box(char* msg, int red, int green, int blue);
#endif