From 0ba00652a1646230e587415cf21e4e37cff2a7c7 Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Sun, 1 Jul 2012 09:00:01 +0900 Subject: [PATCH] some work on getting pvs compiling --- qtv/include/server.h | 12 +++++++++- qtv/source/client.c | 2 +- qtv/source/sv_parse.c | 56 +++++++++++++++++++++++++++++++++++++++---- 3 files changed, 64 insertions(+), 6 deletions(-) diff --git a/qtv/include/server.h b/qtv/include/server.h index 96b67426d..5e74de519 100644 --- a/qtv/include/server.h +++ b/qtv/include/server.h @@ -57,6 +57,16 @@ typedef struct frame_s { packet_entities_t entities; } frame_t; +typedef struct qtv_leaf_s { + struct qtv_leaf_s *next; + int num; +} qtv_leaf_t; + +typedef struct { + entity_state_t e; + qtv_leaf_t *leafs; +} qtv_entity_t; + #define MAX_SV_PLAYERS 32 #define MAX_SV_ENTITIES 512 #define MAX_SIGNON_BUFFERS 8 @@ -96,7 +106,7 @@ typedef struct server_s { int validsequence; frame_t frames[UPDATE_BACKUP]; - entity_state_t entities[MAX_SV_ENTITIES]; + qtv_entity_t entities[MAX_SV_ENTITIES]; byte ent_valid[MAX_SV_ENTITIES]; entity_state_t baselines[MAX_SV_ENTITIES]; player_t players[MAX_SV_PLAYERS]; diff --git a/qtv/source/client.c b/qtv/source/client.c index 0d39e6c95..2ee08a3df 100644 --- a/qtv/source/client.c +++ b/qtv/source/client.c @@ -985,7 +985,7 @@ add_to_fat_pvs (vec3_t org, mnode_t *node, server_t *sv) byte *pvs; int i; float d; - mplane_t *plane; + plane_t *plane; while (1) { // if this is a leaf, accumulate the pvs bits diff --git a/qtv/source/sv_parse.c b/qtv/source/sv_parse.c index 37162cdc8..08c97588a 100644 --- a/qtv/source/sv_parse.c +++ b/qtv/source/sv_parse.c @@ -61,6 +61,54 @@ #include "qtv/include/qtv.h" #include "qtv/include/server.h" +#define QTV_LEAFS 32 +typedef struct qtv_leaf_bucket_s { + struct qtv_leaf_bucket_s *next; + qtv_leaf_t qtv_leafs[QTV_LEAFS]; +} qtv_leaf_bucket_t; + +static qtv_leaf_bucket_t *qtv_leaf_buckets; +static qtv_leaf_bucket_t **qtv_leaf_bucket_tail = &qtv_leaf_buckets; +static qtv_leaf_t *free_qtv_leaf_list; + +static qtv_leaf_t * +alloc_qtv_leaf (void) +{ + qtv_leaf_bucket_t *bucket; + qtv_leaf_t *leaf; + int i; + + if ((leaf = free_qtv_leaf_list)) { + free_qtv_leaf_list = leaf->next; + leaf->next = 0; + return leaf; + } + + bucket = malloc (sizeof (qtv_leaf_bucket_t)); + bucket->next = 0; + *qtv_leaf_bucket_tail = bucket; + qtv_leaf_bucket_tail = &bucket->next; + + for (leaf = bucket->qtv_leafs, i = 0; i < QTV_LEAFS - 1; i++, leaf++) + leaf->next = leaf + 1; + leaf->next = 0; + free_qtv_leaf_list = bucket->qtv_leafs; + + return alloc_qtv_leaf (); +} + +static void +free_qtv_leafs (qtv_leaf_t **leafs) +{ + qtv_leaf_t **l; + + for (l = leafs; *l; l = &(*l)->next) + ; + *l = free_qtv_leaf_list; + free_qtv_leaf_list = *leafs; + *leafs = 0; +} + static void sv_serverdata (server_t *sv, qmsg_t *msg) { @@ -430,7 +478,7 @@ sv_packetentities (server_t *sv, qmsg_t *msg, int delta) } newp->entities[newindex] = oldp->entities[oldindex]; num = newp->entities[newindex].number; - sv->entities[num] = newp->entities[newindex]; + sv->entities[num].e = newp->entities[newindex]; sv->ent_valid[num] = 1; newindex++; oldindex++; @@ -457,7 +505,7 @@ sv_packetentities (server_t *sv, qmsg_t *msg, int delta) } newp->entities[newindex] = oldp->entities[oldindex]; num = newp->entities[newindex].number; - sv->entities[num] = newp->entities[newindex]; + sv->entities[num].e = newp->entities[newindex]; sv->ent_valid[num] = 1; newindex++; oldindex++; @@ -484,7 +532,7 @@ sv_packetentities (server_t *sv, qmsg_t *msg, int delta) } newp->entities[newindex] = sv->baselines[newnum]; sv_parse_delta (msg, word, &newp->entities[newindex]); - sv->entities[newnum] = newp->entities[newindex]; + sv->entities[newnum].e = newp->entities[newindex]; newindex++; continue; } @@ -500,7 +548,7 @@ sv_packetentities (server_t *sv, qmsg_t *msg, int delta) } newp->entities[newindex] = oldp->entities[oldindex]; sv_parse_delta (msg, word, &newp->entities[newindex]); - sv->entities[newnum] = newp->entities[newindex]; + sv->entities[newnum].e = newp->entities[newindex]; sv->ent_valid[newnum] = 1; newindex++; oldindex++;