#ifndef TEENSY_H_ #define TEENSY_H_ #include #include "teensy_common.h" #include "teensy_list.h" #define ty_vec2(x, y) ((ty_Vec2){x, y}) #define ty_vec2i(x, y) ((ty_Vec2i){x, y}) #define ty_color(R, G, B) ((ty_Color){R, G, B}) #define ty_img_full(img) ((ty_Recti){0, 0, (img).width, (img).height}) #define ty_rect_start(rect) (ty_vec2(rect.x, rect.y)) #define ty_recti_start(rect) (ty_vec2i(rect.x, rect.y)) #define ty_rect_end(rect) (ty_vec2(rect.x+rect.w, rect.y+rect.h)) #define ty_recti_end(rect) (ty_vec2i(rect.x+rect.w, rect.y+rect.h)) #define ty_rect_size(rect) (ty_vec2(rect.w, rect.h)) #define ty_recti_size(rect) (ty_vec2i(rect.w, rect.h)) #define TY_COLOR_BLACK ty_color(0, 0, 0 ) #define TY_COLOR_RED ty_color(255, 0, 0 ) #define TY_COLOR_GREEN ty_color(0, 255, 0 ) #define TY_COLOR_YELLOW ty_color(255, 255, 0 ) #define TY_COLOR_BLUE ty_color(0, 0, 255) #define TY_COLOR_MAGENTA ty_color(255, 0, 255) #define TY_COLOR_CYAN ty_color(0, 255, 255) #define TY_COLOR_WHITE ty_color(255, 255, 255) #define TY_COLOR_GRAY ty_color(128, 128, 128) // Virtual controller. Keyboard keys are also mapped to this. enum { TY_BTN_LEFT_UP, // D-pad #1 up TY_BTN_LEFT_DOWN, // D-pad #1 down TY_BTN_LEFT_LEFT, // D-pad #1 left TY_BTN_LEFT_RIGHT, // D-pad #1 right TY_BTN_RIGHT_UP, // D-pad #2 up TY_BTN_RIGHT_DOWN, // D-pad #2 down TY_BTN_RIGHT_LEFT, // D-pad #2 left TY_BTN_RIGHT_RIGHT, // D-pad #2 right TY_BTN_ACTION_1, // A TY_BTN_ACTION_2, // B TY_BTN_ACTION_3, // X TY_BTN_ACTION_4, // Y // for use in the editor TY_BTN_DB_CTRL, TY_BTN_DB_SHIFT, TY_BTN_COUNT, }; typedef uint8_t ty_Button; typedef struct { int scr_width; int scr_height; const char *game_title; int ticrate; } ty_Hints; typedef struct { uint8_t r; uint8_t g; uint8_t b; } ty_Color; typedef struct { float x; float y; } ty_Vec2; typedef struct { int x; int y; } ty_Vec2i; typedef struct { float x; float y; float w; float h; } ty_Rect; typedef struct { int x; int y; int w; int h; } ty_Recti; typedef struct { ty_Color *data; int width; int height; } ty_Image; typedef struct { ty_Image glyphs[CHAR_MAX]; } ty_Font; void ty_init(ty_Hints hints); void ty_deinit(void); // If the button is being held down bool ty_button_down(ty_Button btn); // If the button was pressed just now bool ty_button_pressed(ty_Button btn); // Whether or not the main loop should continue executing. bool ty_is_game_running(void); // Gets the real time that the game has been running. double ty_get_time(void); // Handle events, tick game logic, etc. Returns the amount of times you should // tic. int ty_tick(void); ty_Image ty_create_image(int w, int h, const ty_Color* data); void ty_free_image(ty_Image img); ty_Color ty_img_get_pixel(ty_Image img, ty_Vec2i pos); void ty_img_set_pixel( ty_Image img, ty_Vec2i pos, ty_Color color ); void ty_font_add_glyph(ty_Font *font, uint8_t c, ty_Image img); int ty_font_width(ty_Font *font, const char *fmt, ...); // Pass NULL to restore the screen. void ty_draw_set_target(const ty_Image *img); void ty_draw_clear(ty_Color col); void ty_draw_image(ty_Image img, ty_Vec2i pos); void ty_draw_image_ex( ty_Image img, ty_Recti src, ty_Recti dst ); void ty_draw_image_rot( ty_Image img, ty_Vec2i pos, ty_Vec2i offset, double rot ); void ty_draw_rect(ty_Recti rect, ty_Color color); void ty_draw_line( ty_Vec2i start, ty_Vec2i end, ty_Color color ); void ty_draw_text(ty_Font *font, ty_Vec2i pos, const char *text); void ty_draw_text_fmt( ty_Font *font, ty_Vec2i pos, const char *fmt, ... ); void ty_draw_end(void); void ty_sleep(uint64_t ms); #endif // TEENSY_H_