154 lines
5.4 KiB
C
154 lines
5.4 KiB
C
#ifndef SDL_H
|
|
#define SDL_H
|
|
#include "../player.h" // for races/class totals
|
|
|
|
#define EVENT_TICK 1
|
|
#define EVENT_NET 2
|
|
#define EVENT_NET_ACCEPT 3
|
|
#define EVENT_NET_RECV 4
|
|
#define EVENT_NET_LOST 5
|
|
#define EVENT_NET_ERROR 6
|
|
#define EVENT_NET_CLIENT_RECV 7
|
|
#define EVENT_NET_CLIENT_LOST 8
|
|
#define EVENT_NET_CLIENT_ERROR 9
|
|
|
|
struct Font {
|
|
int width;
|
|
int height;
|
|
int s_width;
|
|
int s_height;
|
|
float scale_x;
|
|
float scale_y;
|
|
SDL_Surface *spritesheet;
|
|
SDL_Surface *scaled_spritesheet;
|
|
};
|
|
struct Font font_mini;
|
|
struct Font font_standard;
|
|
|
|
struct Spritesheet {
|
|
int width;
|
|
int height;
|
|
int s_width;
|
|
int s_height;
|
|
int columns;
|
|
float scale_x;
|
|
float scale_y;
|
|
SDL_Surface *spritesheet;
|
|
SDL_Surface *s_spritesheet;
|
|
};
|
|
struct Spritesheet player_sprites;
|
|
struct Spritesheet item_sprites;
|
|
struct Spritesheet equip_sprites;
|
|
struct Spritesheet shadow_sprites;
|
|
struct Spritesheet npc_sprites;
|
|
struct Spritesheet door_sprites;
|
|
struct Spritesheet floor_sprites;
|
|
struct Spritesheet wall_sprites;
|
|
|
|
struct Spritesheet ui_sprites;
|
|
|
|
SDL_Surface* screen;
|
|
SDL_Surface* font_spritesheet;
|
|
SDL_Surface* ui_spritesheet;
|
|
SDL_Surface* camera_surface;
|
|
SDL_Event event;
|
|
|
|
Uint32 delay; // our delay in ms
|
|
SDL_TimerID timer_id; // the timer id from SDL_AddTimer
|
|
|
|
int g_video_width;
|
|
int g_video_height;
|
|
int g_video_mode;
|
|
int g_video_fullscreen; // 0=windowed, 1=fullscreen
|
|
|
|
float g_tile_scale_x;
|
|
float g_tile_scale_y;
|
|
float g_tile_width;
|
|
float g_tile_height;
|
|
|
|
/* helper stuff */
|
|
Uint32 combinepixels(Uint32 pixel_1, Uint32 pixel_2);
|
|
|
|
/* --- tile stuff --- */
|
|
void consoleScaleTiles(const char *input_string);
|
|
|
|
void interfaceSetScale(float scale_x, float scale_y);
|
|
void loadSpritesheetFromMemory(struct Spritesheet *spritesheet, unsigned char *memory, unsigned int length, int width, int height, int columns);
|
|
void freeSpritesheet(struct Spritesheet *spritesheet);
|
|
void setSpritesheetScale(struct Spritesheet *spritesheet, float scale_x, float scale_y);
|
|
// TODO: drawSprite/drawScaledSprite should probably be the same function that uses a flag to use either the scaled or non-scaled surface
|
|
void drawSprite(struct Spritesheet *spritesheet, int id, SDL_Surface *target_surface, int start_x, int start_y);
|
|
void drawScaledSprite(struct Spritesheet *spritesheet, int id, SDL_Surface *target_surface, int start_x, int start_y);
|
|
void drawScaledTransparentSprite(struct Spritesheet *spritesheet, int id, double opacity, SDL_Surface *target_surface, int start_x, int start_y);
|
|
void drawScaledSpriteOutline(struct Spritesheet *spritesheet, int id, SDL_Surface *target_surface, int start_x, int start_y);
|
|
|
|
/* --- core drawing stuff --- */
|
|
void interfaceDrawString(SDL_Surface *to_surface, const char *string, int start_x, int start_y);
|
|
void interfaceDrawChar(SDL_Surface *to_surface, char ch, int start_x, int start_y);
|
|
void interfaceDrawStringF(struct Font *font, SDL_Surface *to_surface, const char *string, int start_x, int start_y);
|
|
void interfaceDrawCharF(struct Font *font, SDL_Surface *to_surface, char ch, int start_x, int start_y);
|
|
|
|
SDL_Surface *interfaceScaleSurface(SDL_Surface *surface, float scale_x, float scale_y);
|
|
SDL_Surface *interfaceSmoothScaleSurface(SDL_Surface *surface, float scale_x, float scale_y);
|
|
|
|
void SDL_CopySurface(SDL_Surface *from_surface, SDL_Rect *from_rect, SDL_Surface *to_surface, SDL_Rect *to_rect);
|
|
void SDL_SetOpacity(SDL_Surface *surface, double percent);
|
|
SDL_Surface *SDL_ScaleSurface(SDL_Surface *surface, float scale_x, float scale_y);
|
|
|
|
/* --- ui related stuff --- */
|
|
float g_ui_scale_x;
|
|
float g_ui_scale_y;
|
|
#define UI_HOTBAR_ITEM_HEIGHT 32
|
|
#define UI_HOTBAR_ITEM_WIDTH 32
|
|
|
|
SDL_Surface *ui_messages_surface;
|
|
SDL_Rect *ui_messages_target_rect;
|
|
|
|
float g_hotbar_scale_x;
|
|
float g_hotbar_scale_y;
|
|
SDL_Surface *ui_hotbar_surface;
|
|
SDL_Rect *ui_hotbar_target_rect;
|
|
|
|
int uiInit();
|
|
void uiDraw();
|
|
void uiSetScale(float scale_x, float scale_y);
|
|
|
|
/* --- --- */
|
|
|
|
void interfaceDrawInventory();
|
|
|
|
/* --- video related stuff --- */
|
|
/***
|
|
This function takes an input string in the following format to set g_video_width, g_video_height, and g_video_fullscreen appropriately:
|
|
WIDTHxHEIGHT 0|1
|
|
TODO: rename to consoleVideoSetSize or something similar to specify its nature as a console command
|
|
***/
|
|
void interfaceVideoSetSize(const char *input_string);
|
|
/*** interfaceVideoSet
|
|
This function recreates the screen with the values from g_video_width, g_video_height, and g_video_fullscreen then frees and recreates the camera_surface.
|
|
***/
|
|
int interfaceVideoSet();
|
|
|
|
/* --- font-related stuff --- */
|
|
/*** loadFontFromMemory
|
|
This function populates the passed Font structure by taking the passed memory and making an SDL_Surface from it and setting the width and height accordingly (as well as scale_x and scale_y.
|
|
***/
|
|
void loadFontFromMemory(struct Font *font, unsigned char *memory, unsigned int length, int width, int height);
|
|
/*** freeFont
|
|
This function should be called after populating a Font structure via loadFontFromMemory - it simply frees the scaled_spritesheet and spritesheet of the struct.
|
|
***/
|
|
void freeFont(struct Font *font);
|
|
/*** setFontScale
|
|
This function sets the scale_x and scale_y properties of the passed struct to the passed values and creates a new SDL_Surface pointed to be scaled_spritesheet at the appropriate scale - this is acquired by using interfaceScaleSurface on the struct's spritesheet.
|
|
***/
|
|
void setFontScale(struct Font *font, float scale_x, float scale_y);
|
|
|
|
|
|
|
|
static int networkThread(void *nada);
|
|
SDL_Thread *network_thread;
|
|
|
|
Uint32 pushTickEvent(Uint32 interval, void *param);
|
|
|
|
#endif
|