A 3d fps game made in OpenGL
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
Symmetry/src/common/common.h

135 lines
5.3 KiB

#ifndef COMMON_H
#define COMMON_H
#include <stdio.h>
#include "num_types.h"
#ifdef GAME_LIB
extern struct Platform_Api* platform;
#endif
#ifdef GAME
extern struct Game_Api game;
#endif
struct Window;
struct Hashmap;
// Function Pointer decls
typedef void (*Keyboard_Event_Func) (int key, int scancode, int state, int repeat, int mod_ctrl, int mod_shift, int mod_alt);
typedef void (*Mousebutton_Event_Func) (int button, int state, int x, int y, int8 num_clicks);
typedef void (*Mousemotion_Event_Func) (int x, int y, int xrel, int yrel);
typedef void (*Mousewheel_Event_Func) (int x, int y);
typedef void (*Windowresize_Event_Func) (int x, int y);
typedef void (*Textinput_Event_Func) (const char* text);
enum Directory_Type
{
DIRT_USER, /* User directory or preferences directory */
DIRT_INSTALL, /* Directory where the game's assets are, usually alongside the game's executable where the game is installed */
DIRT_EXECUTABLE, /* Directory where the game's executable is located */
DIRT_COUNT
};
struct Sound_Api
{
void (*volume_set)(float volume);
void (*listener_update)(float apos_x, float apos_y, float apos_z,
float afwd_x, float afwd_y, float afwd_z,
float aup_x, float aup_y, float aup_z);
void (*source_update)(uint source_handle,
float apos_x, float apos_y, float apos_z,
float afwd_x, float afwd_y, float afwd_z,
float aup_x, float aup_y, float aup_z);
void (*source_create)(bool relative, uint num_buffers, uint* out_handle, uint* out_buffer_handles);
void (*source_destroy)(uint source_handle, uint* attached_buffers, uint num_buffers);
void (*source_volume_set)(uint source_handle, float volume);
void (*source_pitch_set)(uint source_handle, float pitch);
void (*source_load_wav)(uint source_handle, uint buffer_handle, const char* file_name);
void (*source_loop_set)(uint source_handle, bool loop);
void (*source_relative_set)(uint source_handle, bool relative);
void (*source_play)(uint source_handle);
void (*source_pause)(uint source_handle);
void (*source_rewind)(uint source_handle);
void (*source_stop)(uint source_handle);
};
struct Window_Api
{
struct Window* (*create)(const char* title, int width, int height, int msaa, int msaa_levels);
void (*destroy)(struct Window* window);
void (*show)(struct Window* window);
void (*hide)(struct Window* window);
void (*raise)(struct Window* window);
void (*make_context_current)(struct Window* window);
void (*set_size)(struct Window* window, int width, int height);
void (*get_size)(struct Window* window, int* out_width, int* out_height);
void (*get_drawable_size)(struct Window* window, int* out_width, int* out_height);
void (*swap_buffers)(struct Window* window);
int (*fullscreen_set)(struct Window* window, int fullscreen);
};
struct File_Api
{
char* (*read)(const int directory_type, const char* path, const char* mode, long* file_size);
FILE* (*open)(const int directory_type, const char* path, const char* mode);
bool (*copy)(const int directory_type, const char* source, const char* destination);
bool (*delete)(const int directory_type, const char* filename);
};
struct Config_Api
{
bool (*load)(const char* filename, int directory_type);
bool (*save)(const char* filename, int directory_types);
struct Hashmap* (*get)(void);
};
struct Log_Api
{
FILE* (*file_handle_get)(void);
};
struct Platform_Api
{
// General platform api
void (*poll_events)(bool *out_quit);
void (*keyboard_callback_set)(Keyboard_Event_Func func);
void (*mousebutton_callback_set)(Mousebutton_Event_Func func);
void (*mousemotion_callback_set)(Mousemotion_Event_Func func);
void (*mousewheel_callback_set)(Mousewheel_Event_Func func);
void (*windowresize_callback_set)(Windowresize_Event_Func func);
void (*textinput_callback_set)(Textinput_Event_Func func);
int (*is_key_pressed)(int key);
int (*mousebutton_state_get)(uint button);
void (*mouse_position_get)(int* x, int* y);
void (*mouse_delta_get)(int* x, int* y);
void (*mouse_position_set)(struct Window* window, int x, int y);
void (*mouse_global_position_set)(int x, int y);
void (*mouse_relative_mode_set)(int relative_mode);
int (*mouse_relative_mode_get)(void);
uint32 (*ticks_get)(void);
char* (*install_directory_get)(void);
char* (*user_directory_get)(const char* organization, const char* application);
void (*clipboard_text_set)(const char* text);
char* (*clipboard_text_get)(void);
int (*key_from_name)(const char* key_name);
const char* (*key_name_get)(int key);
void* (*load_function_gl)(const char* name);
void (*reload_game_lib)(void);
struct Window_Api window;
struct Sound_Api sound;
struct File_Api file;
struct Config_Api config;
struct Log_Api log;
};
struct Game_Api
{
bool (*init)(struct Window*, struct Platform_Api* platform_api);
void (*cleanup)(void);
};
#endif