mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Put seclist nodes in LevelPool memory
Replaces the old freelist solution with the LevelPool, which dramatically reduces the number of allocations needed for mobj and precip sector assignment. In measurement, this cuts down the time taken for spawning precipitation by 50%.
This commit is contained in:
parent
a816b93541
commit
b8f334a83c
1 changed files with 6 additions and 31 deletions
37
src/p_map.c
37
src/p_map.c
|
|
@ -2776,7 +2776,7 @@ fixed_t P_GetThingStepUp(mobj_t *thing, fixed_t destX, fixed_t destY)
|
|||
maxstep += abs(momentumzdelta);
|
||||
// if (thing->player)
|
||||
// CONS_Printf(" %d = %d\n", momentumzdelta, maxstep);
|
||||
|
||||
|
||||
}
|
||||
|
||||
if (P_MobjTouchingSectorSpecialFlag(thing, SSF_DOUBLESTEPUP)
|
||||
|
|
@ -2979,7 +2979,7 @@ increment_move
|
|||
}
|
||||
else if (g_tm.floorz - g_tm.dropoffz > maxstep)
|
||||
return false; // don't stand over a dropoff
|
||||
}
|
||||
}
|
||||
}
|
||||
} while (tryx != x || tryy != y);
|
||||
|
||||
|
|
@ -4642,13 +4642,8 @@ boolean P_CheckSector(sector_t *sector, boolean crunch)
|
|||
Lots of new Boom functions that work faster and add functionality.
|
||||
*/
|
||||
|
||||
static msecnode_t *headsecnode = NULL;
|
||||
static mprecipsecnode_t *headprecipsecnode = NULL;
|
||||
|
||||
void P_Initsecnode(void)
|
||||
{
|
||||
headsecnode = NULL;
|
||||
headprecipsecnode = NULL;
|
||||
}
|
||||
|
||||
// P_GetSecnode() retrieves a node from the freelist. The calling routine
|
||||
|
|
@ -4656,45 +4651,25 @@ void P_Initsecnode(void)
|
|||
|
||||
static msecnode_t *P_GetSecnode(void)
|
||||
{
|
||||
msecnode_t *node;
|
||||
|
||||
if (headsecnode)
|
||||
{
|
||||
node = headsecnode;
|
||||
headsecnode = headsecnode->m_thinglist_next;
|
||||
}
|
||||
else
|
||||
node = Z_Calloc(sizeof (*node), PU_LEVEL, NULL);
|
||||
return node;
|
||||
return Z_LevelPoolCalloc(sizeof(msecnode_t));
|
||||
}
|
||||
|
||||
static mprecipsecnode_t *P_GetPrecipSecnode(void)
|
||||
{
|
||||
mprecipsecnode_t *node;
|
||||
|
||||
if (headprecipsecnode)
|
||||
{
|
||||
node = headprecipsecnode;
|
||||
headprecipsecnode = headprecipsecnode->m_thinglist_next;
|
||||
}
|
||||
else
|
||||
node = Z_Calloc(sizeof (*node), PU_LEVEL, NULL);
|
||||
return node;
|
||||
return Z_LevelPoolCalloc(sizeof(mprecipsecnode_t));
|
||||
}
|
||||
|
||||
// P_PutSecnode() returns a node to the freelist.
|
||||
|
||||
static inline void P_PutSecnode(msecnode_t *node)
|
||||
{
|
||||
node->m_thinglist_next = headsecnode;
|
||||
headsecnode = node;
|
||||
Z_LevelPoolFree(node, sizeof(msecnode_t));
|
||||
}
|
||||
|
||||
// Tails 08-25-2002
|
||||
static inline void P_PutPrecipSecnode(mprecipsecnode_t *node)
|
||||
{
|
||||
node->m_thinglist_next = headprecipsecnode;
|
||||
headprecipsecnode = node;
|
||||
Z_LevelPoolFree(node, sizeof(mprecipsecnode_t));
|
||||
}
|
||||
|
||||
// P_AddSecnode() searches the current list to see if this sector is
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue