Eliminate unecessary monster enumeration #32215
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
SUMMARY: Performance "Avoid unecessarally enumerating monsters."
Purpose of change
This operation scales as O(n^2) in the number of monsters on the map, meaning with enough monsters it dominates all other computation.
Describe the solution
Only enumerate the monsters if we need to, which is when a monster has a need to size up other monsters.
Describe alternatives you've considered
There are potentially ways to either cache this list or make it much cheaper to produce, but I want to wait on a demonstrable need to dive into that kind of thing.
Additional context
To trigger, give the player invincibility, and debug spawn monsters with a large radius (I used 50). Radius 50 gives a bit over 10,000 monsters on the map. The symptom is single turns taking multiple seconds to resolve.