From 4a92b1bf49ce874573886c56703bc35c53732df1 Mon Sep 17 00:00:00 2001 From: xtreme8000 Date: Thu, 27 Aug 2020 21:00:55 +0200 Subject: [PATCH] A few minor changes --- src/cameracontroller.c | 6 ++-- src/grenade.c | 3 ++ src/list.c | 70 +++++++++++++++++++++++++++++++++++++++--- src/list.h | 15 ++++++--- src/main.c | 2 +- src/minheap.c | 3 +- src/ping.c | 2 +- src/player.c | 1 + src/tesselator.c | 5 +++ 9 files changed, 92 insertions(+), 15 deletions(-) diff --git a/src/cameracontroller.c b/src/cameracontroller.c index 718931f..88ab7ea 100644 --- a/src/cameracontroller.c +++ b/src/cameracontroller.c @@ -166,11 +166,11 @@ void cameracontroller_fps(float dt) { } float lx = players[local_player_id].orientation_smooth.x * pow(0.7F, dt * 60.0F) - + (sin(camera_rot_x) * sin(camera_rot_y)) * pow(0.3F, dt * 60.0F); + + (sin(camera_rot_x) * sin(camera_rot_y)) * (1.0F - pow(0.7F, dt * 60.0F)); float ly = players[local_player_id].orientation_smooth.y * pow(0.7F, dt * 60.0F) - + (cos(camera_rot_y)) * pow(0.3F, dt * 60.0F); + + (cos(camera_rot_y)) * (1.0F - pow(0.7F, dt * 60.0F)); float lz = players[local_player_id].orientation_smooth.z * pow(0.7F, dt * 60.0F) - + (cos(camera_rot_x) * sin(camera_rot_y)) * pow(0.3F, dt * 60.0F); + + (cos(camera_rot_x) * sin(camera_rot_y)) * (1.0F - pow(0.7F, dt * 60.0F)); players[local_player_id].orientation_smooth.x = lx; players[local_player_id].orientation_smooth.y = ly; diff --git a/src/grenade.c b/src/grenade.c index 1a03df8..94819e4 100644 --- a/src/grenade.c +++ b/src/grenade.c @@ -142,6 +142,9 @@ void grenade_render() { || fabs(grenades[k].velocity.z) > 0.05F) matrix_rotate(-window_time() * 720.0F, -grenades[k].velocity.z, 0.0F, grenades[k].velocity.x); matrix_upload(); + + kv6_calclight(grenades[k].pos.x, grenades[k].pos.y, grenades[k].pos.z); + kv6_render(&model_grenade, TEAM_1); matrix_pop(); } diff --git a/src/list.c b/src/list.c index 4e32612..177d3c3 100644 --- a/src/list.c +++ b/src/list.c @@ -1,40 +1,96 @@ #include #include +#include #include "common.h" #include "list.h" int list_created(struct list* l) { + assert(l != NULL); + return l->element_size > 0; } -void list_create(struct list* l, int element_size) { +void list_create(struct list* l, size_t element_size) { + assert(l != NULL && element_size > 0); + l->data = NULL; l->elements = 0; l->element_size = element_size; l->mem_size = 0; } -void* list_get(struct list* l, int i) { +void list_free(struct list* l) { + assert(l != NULL); + + if(l->data) { + free(l->data); + l->data = NULL; + } +} + +void* list_find(struct list* l, void* ref, enum list_traverse_direction dir, int (*cmp)(void* obj, void* ref)) { + assert(l != NULL && cmp != NULL); + + switch(dir) { + case LIST_TRAVERSE_FORWARD: + for(size_t k = 0; k < l->elements; k++) { + void* obj = l->data + l->element_size * k; + + if(cmp(obj, ref)) + return obj; + } + break; + case LIST_TRAVERSE_BACKWARD: + if(!l->elements) + break; + + size_t k = l->elements - 1; + + do { + void* obj = l->data + l->element_size * k; + + if(cmp(obj, ref)) + return obj; + } while((k--) > 0); + + break; + } + + return NULL; +} + +void* list_get(struct list* l, size_t i) { + assert(l != NULL && i < l->elements); + return l->data + i * l->element_size; } void* list_add(struct list* l, void* e) { + assert(l != NULL); + if((l->elements + 1) * l->element_size > l->mem_size) { l->mem_size += l->element_size * 64; l->data = realloc(l->data, l->mem_size); CHECK_ALLOCATION_ERROR(l->data) } + if(e) memcpy(l->data + l->elements * l->element_size, e, l->element_size); else memset(l->data + l->elements * l->element_size, 0, l->element_size); + return l->data + (l->elements++) * l->element_size; } -void list_remove(struct list* l, int i) { - memmove(list_get(l, i), list_get(l, i + 1), (l->elements - (i + 1)) * l->element_size); +void list_remove(struct list* l, size_t i) { + assert(l != NULL && i < l->elements); + + if(i < l->elements - 1) + memmove(list_get(l, i), list_get(l, i + 1), (l->elements - (i + 1)) * l->element_size); + l->elements--; + if(l->mem_size - 64 * l->element_size > 0 && (l->elements + 1) * l->element_size < l->mem_size - 96 * l->element_size) { l->mem_size -= l->element_size * 64; @@ -44,14 +100,20 @@ void list_remove(struct list* l, int i) { } void list_clear(struct list* l) { + assert(l != NULL); + void* new = realloc(l->data, l->element_size * 64); + if(new) { l->data = new; l->mem_size = l->element_size * 64; } + l->elements = 0; } int list_size(struct list* l) { + assert(l != NULL); + return l->elements; } diff --git a/src/list.h b/src/list.h index 208fa3c..3b7d8ff 100644 --- a/src/list.h +++ b/src/list.h @@ -3,14 +3,21 @@ struct list { void* data; - int elements, element_size, mem_size; + size_t elements, element_size, mem_size; +}; + +enum list_traverse_direction { + LIST_TRAVERSE_FORWARD, + LIST_TRAVERSE_BACKWARD, }; int list_created(struct list* l); -void list_create(struct list* l, int element_size); -void* list_get(struct list* l, int i); +void list_create(struct list* l, size_t element_size); +void list_free(struct list* l); +void* list_find(struct list* l, void* ref, enum list_traverse_direction dir, int (*cmp)(void* obj, void* ref)); +void* list_get(struct list* l, size_t i); void* list_add(struct list* l, void* e); -void list_remove(struct list* l, int i); +void list_remove(struct list* l, size_t i); void list_clear(struct list* l); int list_size(struct list* l); diff --git a/src/main.c b/src/main.c index 1f2f7e5..a7265e8 100644 --- a/src/main.c +++ b/src/main.c @@ -211,7 +211,7 @@ void display() { matrix_select(matrix_projection); matrix_identity(); matrix_perspective(camera_fov_scaled(), ((float)settings.window_width) / ((float)settings.window_height), - 0.1F, settings.render_distance + CHUNK_SIZE * 4.0F + 128.0F); + 0.1F, settings.render_distance + CHUNK_SIZE * 4.0F); matrix_upload_p(); matrix_select(matrix_view); diff --git a/src/minheap.c b/src/minheap.c index 0749b67..b60b5a4 100644 --- a/src/minheap.c +++ b/src/minheap.c @@ -39,10 +39,9 @@ void minheap_create(struct minheap* h) { } void minheap_clear(struct minheap* h) { - free(h->nodes); h->index = 0; h->length = 256; - h->nodes = malloc(sizeof(struct minheap_block) * h->length); + h->nodes = realloc(h->nodes, sizeof(struct minheap_block) * h->length); } void minheap_destroy(struct minheap* h) { diff --git a/src/ping.c b/src/ping.c index a0aeadb..a3f7135 100644 --- a/src/ping.c +++ b/src/ping.c @@ -127,7 +127,7 @@ void* ping_update(void* data) { strcpy(e.country, "LAN"); e.ping = ceil((window_time() - ping_start) * 1000.0F); - snprintf(e.identifier, sizeof(e.identifier) - 1, "aos://%i:%i", from.host, from.port); + snprintf(e.identifier, sizeof(e.identifier) - 1, "aos://%u:%u", from.host, from.port); JSON_Value* js = json_parse_string(tmp); JSON_Object* root = json_value_get_object(js); diff --git a/src/player.c b/src/player.c index c67bf73..4a860de 100644 --- a/src/player.c +++ b/src/player.c @@ -502,6 +502,7 @@ void player_render(struct Player* p, int id, Ray* ray, char render, struct playe kv6_boundingbox(&model_playerdead, &p->bb_2d); matrix_pop(); } + return; } diff --git a/src/tesselator.c b/src/tesselator.c index b5ee340..487cd4b 100644 --- a/src/tesselator.c +++ b/src/tesselator.c @@ -19,6 +19,7 @@ #include #include +#include #include "common.h" #include "tesselator.h" @@ -217,6 +218,8 @@ static void tesselator_emit_normals(struct tesselator* t, int8_t* normals) { } void tesselator_addi(struct tesselator* t, int16_t* coords, uint32_t* colors, int8_t* normals) { + assert(t->vertex_type == VERTEX_INT); + tesselator_check_space(t); tesselator_emit_color(t, colors); tesselator_emit_normals(t, normals); @@ -235,6 +238,8 @@ void tesselator_addi(struct tesselator* t, int16_t* coords, uint32_t* colors, in } void tesselator_addf(struct tesselator* t, float* coords, uint32_t* colors, int8_t* normals) { + assert(t->vertex_type == VERTEX_FLOAT); + tesselator_check_space(t); tesselator_emit_color(t, colors); tesselator_emit_normals(t, normals);