Skip to content

Commit

Permalink
See desc
Browse files Browse the repository at this point in the history
* mention GLEW in readme
* show connection alert when no internet is available
* zoom camera closer in join dialog
* fix up greedy meshing
* remove opengl es build syntax errors
* allow voxlap style model rendering
* auto create missing directories
* press F12 to show network stats like on voxlap aos
* highlight local player on scoreboard
* allow dragging of the server list
* dont render player when not necessary
* scale player head according to orientation vector length (used in
zombie mode)
* give dead player body a bounding box
* compute 2D bounding box of every player
  • Loading branch information
xtreme8000 committed Oct 28, 2018
1 parent 3ef89a5 commit fcb2841
Show file tree
Hide file tree
Showing 28 changed files with 1,131 additions and 1,188 deletions.
3 changes: 2 additions & 1 deletion CMakeLists.txt
Expand Up @@ -5,7 +5,7 @@ find_package(Threads)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

#if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
add_compile_options(-Ofast -s -static -static-libgcc -static-libstdc++)
add_compile_options(-O3 -s -static -static-libgcc -static-libstdc++)
#endif()

file(GLOB resources resources/*)
Expand Down Expand Up @@ -47,4 +47,5 @@ else()
target_link_libraries(client openal)
target_link_libraries(client glfw)
target_link_libraries(client enet)
target_link_libraries(client GLEW)
endif()
4 changes: 3 additions & 1 deletion README.md
Expand Up @@ -56,10 +56,12 @@ These libraries and files are needed:
| enet | *MIT* | networking library | [Link](https://github.com/lsalzman/enet) |
| parson | *MIT* | JSON parser | [Link](https://github.com/kgabis/parson) |
| log.c | *MIT* | logger | [Link](https://github.com/xtreme8000/log.c) |
| GLEW | *MIT* | OpenGL extensions | [Link](https://github.com/nigels-com/glew) |

You will need to compile the following by yourself, or get hold of precompiled binaries:

* GLFW3
* GLEW
* OpenAL soft *(only needed on Windows)*
* libdeflate
* enet
Expand Down Expand Up @@ -108,7 +110,7 @@ Compilation now works the same on Linux. Just change the build system to `Unix M

You can build each library yourself, or install them with your distro's package manager:
```
sudo apt-get install libgl1-mesa libgl1-mesa-dev libopenal1 libopenal-dev libglfw-dev libenet-dev
sudo apt-get install libgl1-mesa libgl1-mesa-dev libopenal1 libopenal-dev libglfw-dev libenet-dev libglew-dev
```
(this does not include libdeflate or lodepng which are a requirement too, see [_Wiki/Building_](https://github.com/xtreme8000/BetterSpades/wiki/Building) for more details)

Expand Down
Binary file added resources/png/ui/alert.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion src/cameracontroller.c
Expand Up @@ -248,7 +248,7 @@ void cameracontroller_bodyview(float dt) {

void cameracontroller_selection(float dt) {
camera_x = 256.0F;
camera_y = 125.0F;
camera_y = 79.0F;
camera_z = 256.0F;
camera_vx = 0.0F;
camera_vy = 0.0F;
Expand Down
880 changes: 245 additions & 635 deletions src/chunk.c

Large diffs are not rendered by default.

33 changes: 18 additions & 15 deletions src/common.h
Expand Up @@ -62,6 +62,7 @@
#include <time.h>
#include <pthread.h>
#include <limits.h>
#include <dirent.h>

#include "lodepng/lodepng.h"
#include "libdeflate.h"
Expand All @@ -81,29 +82,31 @@
#endif

#ifndef min
#define min(a,b) ((a)<(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#endif
#ifndef max
#define max(a,b) ((a)>(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
#endif

#define absf(a) (((a)>0)?(a):-(a))
#define absf(a) (((a)>0)?(a):-(a))

#define distance2D(x1,y1,x2,y2) (((x2)-(x1))*((x2)-(x1))+((y2)-(y1))*((y2)-(y1)))
#define distance3D(x1,y1,z1,x2,y2,z2) (((x2)-(x1))*((x2)-(x1))+((y2)-(y1))*((y2)-(y1))+((z2)-(z1))*((z2)-(z1)))
#define distance2D(x1,y1,x2,y2) (((x2)-(x1))*((x2)-(x1))+((y2)-(y1))*((y2)-(y1)))
#define distance3D(x1,y1,z1,x2,y2,z2) (((x2)-(x1))*((x2)-(x1))+((y2)-(y1))*((y2)-(y1))+((z2)-(z1))*((z2)-(z1)))
#define len2D(x,y) sqrt(pow(x,2)+pow(y,2))
#define len3D(x,y,z) sqrt(pow(x,2)+pow(y,2)+pow(z,2))

#define rgb(r,g,b) (((b)<<16)|((g)<<8)|(r))
#define red(col) ((col)&0xFF)
#define green(col) (((col)>>8)&0xFF)
#define blue(col) (((col)>>16)&0xFF)
#define alpha(col) (((col)>>24)&0xFF)
#define rgb(r,g,b) (((b)<<16)|((g)<<8)|(r))
#define red(col) ((col)&0xFF)
#define green(col) (((col)>>8)&0xFF)
#define blue(col) (((col)>>16)&0xFF)
#define alpha(col) (((col)>>24)&0xFF)

#define PI 3.1415F
#define DOUBLEPI (PI*2.0F)
#define HALFPI (PI*0.5F)
#define EPSILON 0.005F
#define PI 3.1415F
#define DOUBLEPI (PI*2.0F)
#define HALFPI (PI*0.5F)
#define EPSILON 0.005F

#define MOUSE_SENSITIVITY 0.002F
#define MOUSE_SENSITIVITY 0.002F

#include "ping.h"
#include "glx.h"
Expand Down
56 changes: 39 additions & 17 deletions src/config.c
Expand Up @@ -48,6 +48,8 @@ static void config_setf(const char* name, float value) {
}

void config_save() {
kv6_rebuild_complete();

config_sets("name",settings.name);
config_seti("xres",settings.window_width);
config_seti("yres",settings.window_height);
Expand All @@ -59,6 +61,7 @@ void config_save() {
config_seti("show_news",settings.show_news);
config_seti("vol",settings.volume);
config_seti("show_fps",settings.show_fps);
config_seti("voxlap_models",settings.voxlap_models);

for(int k=0;k<list_size(&config_keys);k++) {
struct config_key_pair* e = list_get(&config_keys,k);
Expand Down Expand Up @@ -124,6 +127,9 @@ static int config_read_key(void* user, const char* section, const char* name, co
if(!strcmp(name,"show_fps")) {
settings.show_fps = atoi(value);
}
if(!strcmp(name,"voxlap_models")) {
settings.voxlap_models = atoi(value);
}
}
if(!strcmp(section,"controls")) {
for(int k=0;k<list_size(&config_keys);k++) {
Expand Down Expand Up @@ -206,37 +212,38 @@ void config_reload() {
config_register_key(WINDOW_KEY_CURSOR_DOWN,SDLK_DOWN,"cube_color_down",0,"Color down");
config_register_key(WINDOW_KEY_CURSOR_LEFT,SDLK_LEFT,"cube_color_left",0,"Color left");
config_register_key(WINDOW_KEY_CURSOR_RIGHT,SDLK_RIGHT,"cube_color_right",0,"Color right");
config_register_key(WINDOW_KEY_BACKSPACE,SDLK_BACKSPACE,NULL,0);
config_register_key(WINDOW_KEY_TOOL1,SDLK_1,NULL,0);
config_register_key(WINDOW_KEY_TOOL2,SDLK_2,NULL,0);
config_register_key(WINDOW_KEY_TOOL3,SDLK_3,NULL,0);
config_register_key(WINDOW_KEY_TOOL4,SDLK_4,NULL,0);
config_register_key(WINDOW_KEY_BACKSPACE,SDLK_BACKSPACE,NULL,0,NULL);
config_register_key(WINDOW_KEY_TOOL1,SDLK_1,NULL,0,NULL);
config_register_key(WINDOW_KEY_TOOL2,SDLK_2,NULL,0,NULL);
config_register_key(WINDOW_KEY_TOOL3,SDLK_3,NULL,0,NULL);
config_register_key(WINDOW_KEY_TOOL4,SDLK_4,NULL,0,NULL);
config_register_key(WINDOW_KEY_TAB,SDLK_TAB,"view_score",0,"Score");
config_register_key(WINDOW_KEY_ESCAPE,SDLK_ESCAPE,"quit_game",0,"Quit");
config_register_key(WINDOW_KEY_MAP,SDLK_m,"view_map",1,"Map");
config_register_key(WINDOW_KEY_CROUCH,SDLK_LCTRL,"crouch",0,"Crouch");
config_register_key(WINDOW_KEY_SNEAK,SDLK_v,"sneak",0,"Sneak");
config_register_key(WINDOW_KEY_ENTER,SDLK_RETURN,NULL,0);
config_register_key(WINDOW_KEY_F1,SDLK_F1,NULL,0);
config_register_key(WINDOW_KEY_F2,SDLK_F2,NULL,0);
config_register_key(WINDOW_KEY_F3,SDLK_F3,NULL,0);
config_register_key(WINDOW_KEY_F4,SDLK_F4,NULL,0);
config_register_key(WINDOW_KEY_YES,SDLK_y,NULL,0);
config_register_key(WINDOW_KEY_YES,SDLK_z,NULL,0);
config_register_key(WINDOW_KEY_NO,SDLK_n,NULL,0);
config_register_key(WINDOW_KEY_ENTER,SDLK_RETURN,"enter",0,"Enter");
config_register_key(WINDOW_KEY_F1,SDLK_F1,NULL,0,NULL);
config_register_key(WINDOW_KEY_F2,SDLK_F2,NULL,0,NULL);
config_register_key(WINDOW_KEY_F3,SDLK_F3,NULL,0,NULL);
config_register_key(WINDOW_KEY_F4,SDLK_F4,NULL,0,NULL);
config_register_key(WINDOW_KEY_YES,SDLK_y,NULL,0,NULL);
config_register_key(WINDOW_KEY_YES,SDLK_z,NULL,0,NULL);
config_register_key(WINDOW_KEY_NO,SDLK_n,NULL,0,NULL);
config_register_key(WINDOW_KEY_VOLUME_UP,SDLK_KP_PLUS,"volume_up",0,"Volume up");
config_register_key(WINDOW_KEY_VOLUME_DOWN,SDLK_KP_MINUS,"volume_down",0,"Volume down");
config_register_key(WINDOW_KEY_V,SDLK_v,NULL,0);
config_register_key(WINDOW_KEY_V,SDLK_v,NULL,0,NULL);
config_register_key(WINDOW_KEY_RELOAD,SDLK_r,"reload",0,"Reload");
config_register_key(WINDOW_KEY_CHAT,SDLK_t,"chat_global",0,"Chat");
config_register_key(WINDOW_KEY_FULLSCREEN,SDLK_F11,"fullscreen",0,"Fullscreen");
config_register_key(WINDOW_KEY_SCREENSHOT,SDLK_F5,"screenshot",0,"Screenshot");
config_register_key(WINDOW_KEY_CHANGETEAM,SDLK_COMMA,"change_team",0,"Team select");
config_register_key(WINDOW_KEY_CHANGEWEAPON,SDLK_PERIOD,"change_weapon",0,"Gun select");
config_register_key(WINDOW_KEY_PICKCOLOR,SDLK_e,"cube_color_sample","Pick color");
config_register_key(WINDOW_KEY_PICKCOLOR,SDLK_e,"cube_color_sample",0,"Pick color");
config_register_key(WINDOW_KEY_COMMAND,SDLK_SLASH,"chat_command",0,"Command");
config_register_key(WINDOW_KEY_HIDEHUD,SDLK_F6,"hide_hud",1,"Hide HUD");
config_register_key(WINDOW_KEY_LASTTOOL,SDLK_q,"last_tool",1,"Last tool");
config_register_key(WINDOW_KEY_LASTTOOL,SDLK_q,"last_tool",0,"Last tool");
config_register_key(WINDOW_KEY_NETWORKSTATS,SDLK_F12,"network_stats",1,"Network stats");
#endif

#ifdef USE_GLFW
Expand Down Expand Up @@ -280,7 +287,8 @@ void config_reload() {
config_register_key(WINDOW_KEY_PICKCOLOR,GLFW_KEY_E,"cube_color_sample",0,"Pick color");
config_register_key(WINDOW_KEY_COMMAND,GLFW_KEY_SLASH,"chat_command",0,"Command");
config_register_key(WINDOW_KEY_HIDEHUD,GLFW_KEY_F6,"hide_hud",1,"Hide HUD");
config_register_key(WINDOW_KEY_LASTTOOL,GLFW_KEY_Q,"last_tool",1,"Last tool");
config_register_key(WINDOW_KEY_LASTTOOL,GLFW_KEY_Q,"last_tool",0,"Last tool");
config_register_key(WINDOW_KEY_NETWORKSTATS,GLFW_KEY_F12,"network_stats",1,"Network stats");
#endif

ini_parse("config.ini",config_read_key,NULL);
Expand Down Expand Up @@ -349,6 +357,20 @@ void config_reload() {
.defaults=0,1,2,4,8,16,
.defaults_length=6
});
list_add(&config_settings,&(struct config_setting){
.value=&settings_tmp.voxlap_models,
.type=CONFIG_TYPE_INT,
.max=1,
.help="Render models like in voxlap",
.name="Voxlap models"
});
list_add(&config_settings,&(struct config_setting){
.value=&settings_tmp.greedy_meshing,
.type=CONFIG_TYPE_INT,
.max=1,
.help="join similar mesh faces",
.name="Greedy meshing"
});
list_add(&config_settings,&(struct config_setting){
.value=&settings_tmp.show_fps,
.type=CONFIG_TYPE_INT,
Expand Down
1 change: 1 addition & 0 deletions src/config.h
Expand Up @@ -41,6 +41,7 @@ extern struct RENDER_OPTIONS {
int show_news;
int show_fps;
int volume;
int voxlap_models;
} settings, settings_tmp;

extern struct list config_keys;
Expand Down
16 changes: 15 additions & 1 deletion src/file.c
Expand Up @@ -19,7 +19,21 @@

#include "common.h"

char file_exists(const char* name) {
int file_dir_exists(const char* path) {
DIR* d = opendir(path);
if(d) {
closedir(d);
return 1;
} else {
return 0;
}
}

int file_dir_create(const char* path) {
mkdir(path);
}

int file_exists(const char* name) {
return !access(name,F_OK);
}

Expand Down
4 changes: 3 additions & 1 deletion src/file.h
Expand Up @@ -17,7 +17,9 @@
along with BetterSpades. If not, see <http://www.gnu.org/licenses/>.
*/

char file_exists(const char* name);
int file_dir_exists(const char* path);
int file_dir_create(const char* path);
int file_exists(const char* name);
unsigned char* file_load(const char* name);
float buffer_readf(unsigned char* buffer, int index);
unsigned int buffer_read32(unsigned char* buffer, int index);
Expand Down
21 changes: 14 additions & 7 deletions src/glx.c
Expand Up @@ -41,7 +41,7 @@ void glx_init() {
#endif
}

int glx_vertex_shader(const char* vertex, const char* fragment) {
int glx_shader(const char* vertex, const char* fragment) {
#ifndef OPENGL_ES
int v,f;
if(vertex) {
Expand Down Expand Up @@ -108,14 +108,15 @@ void glx_displaylist_update(struct glx_displaylist* x, int size, int type, void*
glColorPointer(3,GL_UNSIGNED_BYTE,0,color);
glVertexPointer(3,GL_SHORT,0,vertex);
break;
case GLX_DISPLAYLIST_POINTS:
case GLX_DISPLAYLIST_ENHANCED:
glColorPointer(4,GL_UNSIGNED_BYTE,0,color);
glVertexPointer(3,GL_FLOAT,0,vertex);
break;
}
if(x->has_normal)
glNormalPointer(GL_BYTE,0,normal);
glDrawArrays(GL_QUADS,0,x->size);
glDrawArrays((type==GLX_DISPLAYLIST_POINTS)?GL_POINTS:GL_QUADS,0,x->size);
}
glEndList();

Expand All @@ -136,6 +137,7 @@ void glx_displaylist_update(struct glx_displaylist* x, int size, int type, void*
glBufferData(GL_ARRAY_BUFFER,x->size*3,color,GL_DYNAMIC_DRAW);
#endif
break;
case GLX_DISPLAYLIST_POINTS:
case GLX_DISPLAYLIST_ENHANCED:
glBufferData(GL_ARRAY_BUFFER,x->size*3*sizeof(float),vertex,GL_DYNAMIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER,x->modern[1]);
Expand Down Expand Up @@ -175,6 +177,7 @@ void glx_displaylist_draw(struct glx_displaylist* x, int type) {
glColorPointer(3,GL_UNSIGNED_BYTE,0,NULL);
#endif
break;
case GLX_DISPLAYLIST_POINTS:
case GLX_DISPLAYLIST_ENHANCED:
glVertexPointer(3,GL_FLOAT,0,NULL);
glBindBuffer(GL_ARRAY_BUFFER,x->modern[1]);
Expand All @@ -186,11 +189,15 @@ void glx_displaylist_draw(struct glx_displaylist* x, int type) {
glNormalPointer(GL_BYTE,0,NULL);
}
glBindBuffer(GL_ARRAY_BUFFER,0);
#ifdef OPENGL_ES
glDrawArrays(GL_TRIANGLES,0,x->size);
#else
glDrawArrays(GL_QUADS,0,x->size);
#endif
if(type==GLX_DISPLAYLIST_POINTS) {
glDrawArrays(GL_POINTS,0,x->size);
} else {
#ifdef OPENGL_ES
glDrawArrays(GL_TRIANGLES,0,x->size);
#else
glDrawArrays(GL_QUADS,0,x->size);
#endif
}
if(x->has_normal)
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
Expand Down
27 changes: 4 additions & 23 deletions src/glx.h
Expand Up @@ -22,26 +22,6 @@
extern int glx_version;
extern int glx_fog;

#ifndef OPENGL_ES
extern PFNGLGENBUFFERSPROC glGenBuffers;
extern PFNGLDELETEBUFFERSPROC glDeleteBuffers;
extern PFNGLBINDBUFFERPROC glBindBuffer;
extern PFNGLBUFFERDATAPROC glBufferData;

extern PFNGLCREATESHADERPROC glCreateShader;
extern PFNGLSHADERSOURCEPROC glShaderSource;
extern PFNGLCOMPILESHADERPROC glCompileShader;
extern PFNGLCREATEPROGRAMPROC glCreateProgram;
extern PFNGLATTACHSHADERPROC glAttachShader;
extern PFNGLLINKPROGRAMPROC glLinkProgram;
extern PFNGLUSEPROGRAMPROC glUseProgram;

extern PFNGLUNIFORM1FPROC glUniform1f;
extern PFNGLUNIFORM3FPROC glUniform3f;
extern PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv;
extern PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation;
#endif

struct glx_displaylist {
int legacy;
int modern[3];
Expand All @@ -50,13 +30,14 @@ struct glx_displaylist {
};

enum {
GLX_DISPLAYLIST_NORMAL,
GLX_DISPLAYLIST_ENHANCED
GLX_DISPLAYLIST_NORMAL,
GLX_DISPLAYLIST_ENHANCED,
GLX_DISPLAYLIST_POINTS
};

void glx_init(void);

int glx_vertex_shader(const char* vertex, const char* fragment);
int glx_shader(const char* vertex, const char* fragment);

void glx_enable_sphericalfog(void);
void glx_disable_sphericalfog(void);
Expand Down

0 comments on commit fcb2841

Please sign in to comment.