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

Delete interpolators associated with thinkers

parent 5b37e1fe
No related branches found
No related tags found
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