Skip to content
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

feat!: HasDraggableComponents mixin is no longer needed #2312

Merged
merged 14 commits into from
Feb 5, 2023

Conversation

st-pasha
Copy link
Contributor

@st-pasha st-pasha commented Feb 1, 2023

Description

This PR is first in a series of refactors that aim to simplify event handling in Flame. The approach is as follows:

  • Added class GestureDetectorBuilder, which encapsulates the logic of applyGestureDetectors() in a class. This class resides within the Game and initiates widget rebuild whenever any new gesture detectors are added or removed. Note: [idea] Convert HasTappableComponents/HasDraggableComponents into classes #1733 suggests having a list of interfaces inside the Game class -- this is essentially that list, encapsulated in a class.
  • Added the MultiDragDispatcher component, which contains the logic that used to be within the HasDraggableComponents mixin. This component is internal; it mounts to a FlameGame directly, and ensures that it is a singleton.
  • Whenever any DragCallbacks component is added to a game, it automatically adds the MultiDragDispatcher component (unless there is already one), which in turn registers a drag gesture detector with GestureDetectorBuilder and rebuilds the game widget.

The end result is that now in order to make a component draggable you only need to add the DragCallbacks mixin to that component, everything else will be handled by the framework.

Consequently, the HasDraggableComponents mixin is now empty and marked as deprecated.

Checklist

  • I have followed the Contributor Guide when preparing my PR.
  • I have updated/added tests for ALL new/updated/fixed functionality.
  • I have updated/added relevant documentation in docs and added dartdoc comments with ///.
  • I have updated/added relevant examples in examples or docs.

Breaking Change?

  • Yes, this PR is a breaking change.

Migration instructions

The HasDraggableComponents mixin is now empty & deprecated. If your game used this mixin overriding its methods onDragStart, onDragUpdate, etc -- then they will no longer work. If you want to receive drag events at the top level of the game, then simply add a DragCallbacks component to the top level of the game.

Related Issues

WIP for #1733

Copy link
Member

@spydon spydon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great step forward for the event system!
We shouldn't do any release until tappable etc also is done to keep consistency.

Copy link
Member

@luanpotter luanpotter left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice!

@spydon spydon enabled auto-merge (squash) February 5, 2023 13:00
@spydon spydon merged commit 3faf114 into main Feb 5, 2023
@spydon spydon deleted the ps.gesture-detectors branch February 5, 2023 13:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants