1
0
mirror of https://github.com/TerryCavanagh/VVVVVV.git synced 2024-06-18 10:38:31 +02:00
VVVVVV/desktop_version/src
Misa 662a658cf6 Optimize entity collision checking to O(n)
I noticed that if I have a large amount of entities in the room, the
game starts to freeze and one frame would take a very long time. I
identified an obvious cause of this, which is that the entity collision
checking in entityclass::entitycollisioncheck() is O(n²), n being the
number of entities in the room.

But it doesn't need to be O(n²). The only entities you need to check
against all other entities are the player and the supercrewmate. You
don't need to "test entity to entity" if 99% of the pairs of entities
you're checking don't involve the player or supercrewmate.

How do we make it O(n)? Well, just hoist the rule 0 and type 14 checks
out of the inner for-loop. That way, the inner for-loop won't be
unconditionally ran, meaning that in most cases it will always be O(n).
However, if you start having large amounts of duplicate player or
supercrewmate entities (I don't know why you would), it would start
approaching O(n²), but I feel like that's fair in that case. But most of
the time, it will be O(n).

So that's how collision checking is now O(n) instead.
2020-09-07 23:03:34 -04:00
..
BinaryBlob.cpp Use SDL stdlib funcs for free/malloc/strcmp 2020-08-14 09:51:19 -04:00
BinaryBlob.h Check index of tracks in musicclass::init() 2020-08-14 09:51:19 -04:00
BlockV.cpp Remove unnecessary string initializations from constructors 2020-07-08 19:14:21 -04:00
BlockV.h Consistently use angle brackets for SDL.h includes 2020-07-19 21:37:40 -04:00
Credits.h Adding myself as a contributor. 2020-08-12 23:07:13 -04:00
editor.cpp Remove checks to prevent having both warp lines/BGs in editor 2020-09-05 20:02:27 -07:00
editor.h Axe manual state trackers and use SDL_IsTextInputActive() 2020-08-13 17:51:38 -04:00
Ent.cpp Remove unnecessary includes from header files 2020-07-19 21:37:40 -04:00
Ent.h Remove unnecessary includes from header files 2020-07-19 21:37:40 -04:00
Entity.cpp Optimize entity collision checking to O(n) 2020-09-07 23:03:34 -04:00
Entity.h Separate includes into sections and alphabetize them 2020-07-19 21:37:40 -04:00
Enums.h Hello WWWWWWorld! 2020-01-08 10:37:50 -05:00
FileSystemUtils.cpp Fix other array decay too 2020-08-09 13:39:12 -04:00
FileSystemUtils.h Only re-color one-ways if assets are not mounted 2020-06-30 18:06:14 -04:00
Finalclass.cpp Separate includes into sections and alphabetize them 2020-07-19 21:37:40 -04:00
Finalclass.h Remove unnecessary includes from header files 2020-07-19 21:37:40 -04:00
Game.cpp Missed adding the option to the createmenu method. 2020-08-08 19:10:31 -04:00
Game.h Added ability to bind restart to a controller. 2020-08-08 19:02:14 -04:00
GOGNetwork.c Ifdef out network code for M&P 2020-08-02 23:43:55 -04:00
Graphics.cpp Remove allowspecial, replace with opaqueness check 2020-08-06 22:12:15 -04:00
Graphics.h Remove allowspecial, replace with opaqueness check 2020-08-06 22:12:15 -04:00
GraphicsResources.cpp Separate includes into sections and alphabetize them 2020-07-19 21:37:40 -04:00
GraphicsResources.h Consistently use angle brackets for SDL.h includes 2020-07-19 21:37:40 -04:00
GraphicsUtil.cpp Remove -1,-1 offset from ScaleSurface() 2020-08-06 22:10:47 -04:00
GraphicsUtil.h Ax ScaleSurfaceSlow() in favor of ScaleSurface() 2020-08-06 22:10:47 -04:00
Input.cpp Hoist Enter check out of script.running clause 2020-09-07 20:47:33 -04:00
Input.h Remove unnecessary includes from header files 2020-07-19 21:37:40 -04:00
KeyPoll.cpp Axe manual state trackers and use SDL_IsTextInputActive() 2020-08-13 17:51:38 -04:00
KeyPoll.h Axe manual state trackers and use SDL_IsTextInputActive() 2020-08-13 17:51:38 -04:00
Labclass.cpp Separate includes into sections and alphabetize them 2020-07-19 21:37:40 -04:00
Labclass.h Remove unnecessary includes from header files 2020-07-19 21:37:40 -04:00
Logic.cpp Move tele/activity/trophytext conds to collision detection 2020-08-03 00:12:15 -04:00
Logic.h Remove unnecessary includes from header files 2020-07-19 21:37:40 -04:00
main.cpp Axe manual state trackers and use SDL_IsTextInputActive() 2020-08-13 17:51:38 -04:00
MakeAndPlay.h Re-comment out #define MAKEANDPLAY 2020-02-09 10:42:03 -05:00
Map.cpp Move crewmate drawframe fix to entity creation instead of loadlevel 2020-09-07 20:46:01 -04:00
Map.h Separate includes into sections and alphabetize them 2020-07-19 21:37:40 -04:00
Maths.h Hello WWWWWWorld! 2020-01-08 10:37:50 -05:00
Music.cpp Check rw in musicclass::init() 2020-08-14 09:51:19 -04:00
Music.h Separate includes into sections and alphabetize them 2020-07-19 21:37:40 -04:00
Network.c Remove unnecessary externs from network func forward decls 2020-08-02 23:43:55 -04:00
Network.h Add support for multiple Network backends, stub in GOGNetwork 2020-01-13 11:15:22 -05:00
Otherlevel.cpp Change back the order of entity creation 2020-07-29 10:04:27 -04:00
Otherlevel.h Remove unnecessary includes from header files 2020-07-19 21:37:40 -04:00
preloader.cpp Separate includes into sections and alphabetize them 2020-07-19 21:37:40 -04:00
preloader.h Remove unnecessary includes from header files 2020-07-19 21:37:40 -04:00
Render.cpp De-duplicate activity zone rendering, don't ignore act_fade 2020-08-24 22:02:58 -04:00
Render.h Remove unnecessary includes from header files 2020-07-19 21:37:40 -04:00
Screen.cpp Separate includes into sections and alphabetize them 2020-07-19 21:37:40 -04:00
Screen.h Refactor startup to load config before calling Screen::init 2020-07-08 14:30:57 -04:00
Script.cpp Fix 1-frame render glitch with running teleport scripts 2020-09-05 18:17:59 -04:00
Script.h Remove unnecessary includes from header files 2020-07-19 21:37:40 -04:00
Scripts.cpp Separate includes into sections and alphabetize them 2020-07-19 21:37:40 -04:00
SoundSystem.cpp Separate includes into sections and alphabetize them 2020-07-19 21:37:40 -04:00
SoundSystem.h Revert "Add destructor for SoundTrack/MusicTrack (and explicitly define move constructor to prevent double-free)" 2020-06-07 22:40:03 -04:00
Spacestation2.cpp Separate includes into sections and alphabetize them 2020-07-19 21:37:40 -04:00
Spacestation2.h Remove unnecessary includes from header files 2020-07-19 21:37:40 -04:00
SteamNetwork.c Ifdef out network code for M&P 2020-08-02 23:43:55 -04:00
TerminalScripts.cpp Separate includes into sections and alphabetize them 2020-07-19 21:37:40 -04:00
Textbox.cpp Remove allowspecial, replace with opaqueness check 2020-08-06 22:12:15 -04:00
Textbox.h Remove allowspecial, replace with opaqueness check 2020-08-06 22:12:15 -04:00
Tower.cpp Remove zeroed arrays from tower functions in M&P 2020-08-03 00:29:15 -04:00
Tower.h Change all tilemaps to be short[1200] instead of int[1200] 2020-07-19 16:25:53 -04:00
UtilityClass.cpp Add fallback parameter to UtilityClass::Int() 2020-08-07 01:00:49 -04:00
UtilityClass.h Add fallback parameter to UtilityClass::Int() 2020-08-07 01:00:49 -04:00
WarpClass.cpp Separate includes into sections and alphabetize them 2020-07-19 21:37:40 -04:00
WarpClass.h Remove unnecessary includes from header files 2020-07-19 21:37:40 -04:00