-
-
Notifications
You must be signed in to change notification settings - Fork 918
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add hitbox to PositionComponent #618
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, just few nits :-)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Two nits, but LGTM already
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Awesome job!
lib/collision_detection.dart
Outdated
|
||
/// Checks whether the [polygon] represented by the list of [Vector2] contains | ||
/// the [point]. | ||
bool containsPoint(Vector2 point, List<Vector2> polygon) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@spydon I think I have some of these methods on flame_geom, have you taken a look at that?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I only think flame_geom
can handle basic shapes and it isn't migrated to Vector2
yet, I can have a look at migrating it once I'm done with the follow up collision detection PR that is coming after this one.
And if we do the migration, we should really rename flame_geom
, I really dislike abbreviations in package names.
😅
lib/collision_detection.dart
Outdated
} | ||
|
||
// Rotates the [point] with [angle] around [position] | ||
Vector2 rotatePoint(Vector2 point, double angle, Vector2 position) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The old Position class had this method, don't we have an extension function on Vector2 (or something native) to do this? if so we should add instead of an utils
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Makes sense, migrated this to the Vector2
extension.
final hitboxPath = Path() | ||
..addPolygon( | ||
(this as Hitbox) | ||
.scaledShape | ||
.map((point) => (point + size / 2).toOffset()) | ||
.toList(), | ||
true, | ||
); | ||
canvas.drawPath(hitboxPath, debugPaint); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this code should be within hitbox:
if (this is Hitbox) {
this.renderContour(canvas);
}
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
lib/components/mixins/hitbox.dart
Outdated
import '../../extensions/vector2.dart'; | ||
|
||
mixin Hitbox on PositionComponent { | ||
List<Vector2> _shape; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this should be an Overlapable.
Then you can create a Polygon class that extends Overlapable and has a List
We will need to implement some more methods but that allows you to have more complex shapes (circles, unions) and allows you to check overlap between two shapes. containsPoint is useful but it would also be useful to inherit the overlaps method.
We can also rename Overlapable to Shape if that makes more sense
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Makes sense, I'll do the migration and fixes of flame_geom
in the follow up branch that already has a lot of code so that the merge conflict isn't that massive. And then I'll point that PR towards this branch.
ba01fd2
to
3bb3c2b
Compare
3bb3c2b
to
d193c93
Compare
Is the Hitbox mixin in RC6? Just trying to see an example of how to add a hitbox area to a PositionalComponent? |
@callagga yes, this is in rc6. |
Sorry, for some reason it is in the changelog, but not in the code. |
We should fix that in the chancelog for the next version, can you fix it on your PR about the collision detection @spydon ? |
Will do! |
* Update README to point at rc5 (#630) * Update README to point at rc5 * Update README.md * 👌 Throw exception from `parseAnchor` in `examples/widgets` instead of returning null (#632) * Updated the widgets docs (#628) Co-authored-by: Erick <erickzanardoo@gmail.com> * Removing initialDimensions and removeGesture methods (#627) * Removing initialDimensions and removeGesture methods * Removing wrongly commited folder * PR suggestion * Making SpriteComponent and SpriteAnimationComponent follow the same standard for empty constructors (#620) * Added fallback support for the web on the `SpriteBatch` API (#612) * Added fallback support for the web on the `SpriteBatch` API * Refactored the SpriteBatch class * 👌 Use `Offset` type directly in `JoystickAction.update` calculations (#631) * Move files to src and comply with the dart package layout convention (#621) * 👌 Use `Offset` type directly in `JoystickAction.update` calculations (#631) * Move files to src and comply with the dart package layout convention * Fixing widgets example Co-authored-by: Serge Matveenko <lig@countzero.co> Co-authored-by: Erick Zanardo <erickzanardoo@gmail.com> * Fix gesture detection on children (#636) * Fix gesture detection on children * Remove unused imports * positionParent should be private * Fixed comment * Moved parent to BaseComponent * Fix formatting * Initial implementation of the Composition class. (#634) * Initial implementation of the Composition class * Added decodeImageFromPixels web support * Added a `required` to GameWidget and updated the docs (#638) * Added a required to GameWidget and updated the docs * Removed entry from CHANGELOG * Release v1.0.0-rc6 (#639) * Add hitbox to PositionComponent (#618) * Move out collision detection methods * Add possibility to define a hull for PositionComponents * Add example of how to use hull with tapable * Update contains point comment * Fix contains point * Hull should be based on center position * Remove collision detection parts * Added tests * Use percentage of size instead of absolute size * Separate hull from PositionComponent * Clarify hull example * Fix formatting * Override correct method * Use mixin for hitbox * Update changelog * Rename HasHitbox to Hitbox * Clarified names * Center to edge is considered as 1.0 * Fix test * Add spaces within braces * Removed extra spaces in the braces * Add hitbox docs * Fix link * Moved point rotation to Vector2 extension * Render hitbox within extension * Fix rebase * Fix rebase * Fix formatting * Removing Util.dart and moving its remaining parts to better places (#640) * Removing Util.dart and moving its remaining parts to better places * Fixing lint * Doc fixes * Doc fixes * PR suggestions * Adapting SpriteBatchComponent constructors to other components (#643) * Adapting ParallaxComponent constructors to other components (#642) * Adapating ParallaxComponent constructors to other components * Removing wrongly commited folder * Update doc/components.md Co-authored-by: Jochum van der Ploeg <jochum@vdploeg.net> * Update doc/components.md Co-authored-by: Jochum van der Ploeg <jochum@vdploeg.net> Co-authored-by: Jochum van der Ploeg <jochum@vdploeg.net> * Updating mds with recently 0.x patches * 🏷 Null safety support Co-authored-by: Lukas Klingsbo <lukas.klingsbo@gmail.com> Co-authored-by: Jochum van der Ploeg <jochum@vdploeg.net> Co-authored-by: Erick <erickzanardoo@gmail.com> Co-authored-by: Renan <6718144+renancaraujo@users.noreply.github.com>
Description
Adds the possibility to define a hitbox for a PositionComponent, which makes gestures more accurate.
In a follow up pull request I will add the possibility for collision detection between PositionComponents and other PositionComponents, and walls (the screen etc).
Type of change
Please delete options that are not relevant.
Checklist:
If something is unclear, please submit the PR anyways and ask about what you thought was unclear.
master
[next]
inCHANGELOG.md
flutter format
doc/examples