-
-
Notifications
You must be signed in to change notification settings - Fork 899
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
perf!: Pool
CollisionProspect
s and remove some list creations from …
…the collision detection (#2625) This change introduces a very simple pool for `CollisionProspect`s so that those objects don't have to be re-created each tick. It means that the `CollisionProspect` needs to be mutable though, so the code becomes a little bit harder to read since sets can't be used anymore.
- Loading branch information
Showing
13 changed files
with
180 additions
and
111 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
25 changes: 25 additions & 0 deletions
25
packages/flame/lib/src/collisions/broadphase/prospect_pool.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
import 'package:flame/src/collisions/broadphase/broadphase.dart'; | ||
import 'package:flame/src/collisions/hitboxes/hitbox.dart'; | ||
|
||
/// This pool is used to not create unnecessary [CollisionProspect] objects | ||
/// during collision detection, but to re-use the ones that have already been | ||
/// created. | ||
class ProspectPool<T extends Hitbox<T>> { | ||
ProspectPool({this.incrementSize = 1000}); | ||
|
||
/// How much the pool should increase in size every time it needs to be made | ||
/// larger. | ||
final int incrementSize; | ||
final _storage = <CollisionProspect<T>>[]; | ||
int get length => _storage.length; | ||
|
||
/// The size of the pool will expand with [incrementSize] amount of | ||
/// [CollisionProspect]s that are initially populated with two [dummyItem]s. | ||
void expand(T dummyItem) { | ||
for (var i = 0; i < incrementSize; i++) { | ||
_storage.add(CollisionProspect<T>(dummyItem, dummyItem)); | ||
} | ||
} | ||
|
||
CollisionProspect<T> operator [](int index) => _storage[index]; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.