Skip to content
Snippets Groups Projects
Commit 9f4d92df authored by Eidolon's avatar Eidolon
Browse files

Delete interpolators associated with thinkers

parent 5b37e1fe
Branches
Tags
No related merge requests found
...@@ -255,6 +255,7 @@ void P_RemoveThinkerDelayed(thinker_t *thinker) ...@@ -255,6 +255,7 @@ void P_RemoveThinkerDelayed(thinker_t *thinker)
* thinker->prev->next = thinker->next */ * thinker->prev->next = thinker->next */
(next->prev = currentthinker = thinker->prev)->next = next; (next->prev = currentthinker = thinker->prev)->next = next;
R_DestroyLevelInterpolators(thinker);
Z_Free(thinker); Z_Free(thinker);
} }
......
...@@ -474,3 +474,23 @@ void R_RestoreLevelInterpolators(void) ...@@ -474,3 +474,23 @@ void R_RestoreLevelInterpolators(void)
} }
} }
} }
void R_DestroyLevelInterpolators(thinker_t *thinker)
{
size_t i;
for (i = 0; i < levelinterpolators_len; i++)
{
levelinterpolator_t *interp = levelinterpolators[i];
if (interp->thinker == thinker)
{
// Swap the tail of the level interpolators to this spot
levelinterpolators[i] = levelinterpolators[levelinterpolators_len - 1];
levelinterpolators_len -= 1;
Z_Free(interp);
i -= 1;
}
}
}
...@@ -119,5 +119,7 @@ void R_ClearLevelInterpolatorState(thinker_t *thinker); ...@@ -119,5 +119,7 @@ void R_ClearLevelInterpolatorState(thinker_t *thinker);
void R_ApplyLevelInterpolators(fixed_t frac); void R_ApplyLevelInterpolators(fixed_t frac);
// Restore level interpolators to the real game state // Restore level interpolators to the real game state
void R_RestoreLevelInterpolators(void); void R_RestoreLevelInterpolators(void);
// Destroy interpolators associated with a thinker
void R_DestroyLevelInterpolators(thinker_t *thinker);
#endif #endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment