mirror of
https://github.com/flame-engine/flame.git
synced 2025-10-31 00:48:47 +08:00
Support secondary taps (right click) on new callbacks system. In order to follow through with our [event system migration](https://docs.google.com/document/d/1nBUup9QCPioVwWL1zs79z1hWF882tAYfNywFMdye2Qc), we need to make sure the new system is equipped to support all use cases; also changes the existing TapCallbacks to be primary-only. I noticed that we don't support "secondary taps" (i.e. right clicks), so I am adding this. I honestly really dislike the fact that this is considered a completely different event from the left click, instead of just a property on the click event. But I kept this structure to replicate what Flutter does, so this is more familiar for users. I think that is worth the slight verbosity of having yet another detector. Also, it plays well this way with Flutter because that underlying events are a bit different (for example, the secondary ones don't support `pointId`). Note: this is a slight breaking change because the existing detector works for BOTH left and right click, but there is NO WAY of distinguishing them because the `buttons` property is not propagated in the Flutter end (massive oversight I believe - might put a PR later). Since this provides the secondary as a solution, it also removes secondary clicks from triggering the primary. I think this is more versatile than having tap detector=`(primary OR secondary)` and secondary=`(secondary only)`. I don't think this should affect basically any users because (1) desktop only and (2) this acceptance of right clicks was probably a bug anyway (for example, on the example it would rotate the square and also open the context menu, which is jarring). However I am happy to add an option or pursue a different approach, I believe this is the best path forward, IMO.
148 lines
5.4 KiB
Dart
148 lines
5.4 KiB
Dart
import 'package:dashbook/dashbook.dart';
|
|
import 'package:examples/commons/commons.dart';
|
|
import 'package:examples/stories/input/advanced_button_example.dart';
|
|
import 'package:examples/stories/input/double_tap_callbacks_example.dart';
|
|
import 'package:examples/stories/input/drag_callbacks_example.dart';
|
|
import 'package:examples/stories/input/gesture_hitboxes_example.dart';
|
|
import 'package:examples/stories/input/hardware_keyboard_example.dart';
|
|
import 'package:examples/stories/input/hover_callbacks_example.dart';
|
|
import 'package:examples/stories/input/joystick_advanced_example.dart';
|
|
import 'package:examples/stories/input/joystick_example.dart';
|
|
import 'package:examples/stories/input/keyboard_example.dart';
|
|
import 'package:examples/stories/input/keyboard_listener_component_example.dart';
|
|
import 'package:examples/stories/input/mouse_cursor_example.dart';
|
|
import 'package:examples/stories/input/mouse_movement_example.dart';
|
|
import 'package:examples/stories/input/multitap_advanced_example.dart';
|
|
import 'package:examples/stories/input/multitap_example.dart';
|
|
import 'package:examples/stories/input/overlapping_tap_callbacks_example.dart';
|
|
import 'package:examples/stories/input/scroll_example.dart';
|
|
import 'package:examples/stories/input/secondary_tap_callbacks_example.dart';
|
|
import 'package:examples/stories/input/tap_callbacks_example.dart';
|
|
import 'package:flame/game.dart';
|
|
import 'package:flutter/material.dart';
|
|
|
|
void addInputStories(Dashbook dashbook) {
|
|
dashbook.storiesOf('Input')
|
|
..add(
|
|
'TapCallbacks',
|
|
(_) => GameWidget(game: TapCallbacksExample()),
|
|
codeLink: baseLink('input/tap_callbacks_example.dart'),
|
|
info: TapCallbacksExample.description,
|
|
)
|
|
..add(
|
|
'SecondaryTapCallbacks',
|
|
(_) => GameWidget(game: SecondaryTapCallbacksExample()),
|
|
codeLink: baseLink('input/secondary_tap_callbacks_example.dart'),
|
|
info: SecondaryTapCallbacksExample.description,
|
|
)
|
|
..add(
|
|
'DragCallbacks',
|
|
(context) {
|
|
return GameWidget(
|
|
game: DragCallbacksExample(
|
|
zoom: context.listProperty('zoom', 1, [0.5, 1, 1.5]),
|
|
),
|
|
);
|
|
},
|
|
codeLink: baseLink('input/drag_callbacks_example.dart'),
|
|
info: DragCallbacksExample.description,
|
|
)
|
|
..add(
|
|
'Double Tap (Component)',
|
|
(context) {
|
|
return GameWidget(
|
|
game: DoubleTapCallbacksExample(),
|
|
);
|
|
},
|
|
codeLink: baseLink('input/double_tap_callbacks_example.dart'),
|
|
info: DoubleTapCallbacksExample.description,
|
|
)
|
|
..add(
|
|
'HoverCallbacks',
|
|
(_) => GameWidget(game: HoverCallbacksExample()),
|
|
codeLink: baseLink('input/hover_callbacks_example.dart'),
|
|
info: HoverCallbacksExample.description,
|
|
)
|
|
..add(
|
|
'Keyboard',
|
|
(_) => GameWidget(game: KeyboardExample()),
|
|
codeLink: baseLink('input/keyboard_example.dart'),
|
|
info: KeyboardExample.description,
|
|
)
|
|
..add(
|
|
'Keyboard (Component)',
|
|
(_) => GameWidget(game: KeyboardListenerComponentExample()),
|
|
codeLink: baseLink('input/keyboard_listener_component_example.dart'),
|
|
info: KeyboardListenerComponentExample.description,
|
|
)
|
|
..add(
|
|
'Hardware Keyboard',
|
|
(_) => GameWidget(game: HardwareKeyboardExample()),
|
|
codeLink: baseLink('input/hardware_keyboard_example.dart'),
|
|
info: HardwareKeyboardExample.description,
|
|
)
|
|
..add(
|
|
'Mouse Movement',
|
|
(_) => GameWidget(game: MouseMovementExample()),
|
|
codeLink: baseLink('input/mouse_movement_example.dart'),
|
|
info: MouseMovementExample.description,
|
|
)
|
|
..add(
|
|
'Mouse Cursor',
|
|
(_) => GameWidget(
|
|
game: MouseCursorExample(),
|
|
mouseCursor: SystemMouseCursors.move,
|
|
),
|
|
codeLink: baseLink('input/mouse_cursor_example.dart'),
|
|
info: MouseCursorExample.description,
|
|
)
|
|
..add(
|
|
'Scroll',
|
|
(_) => GameWidget(game: ScrollExample()),
|
|
codeLink: baseLink('input/scroll_example.dart'),
|
|
info: ScrollExample.description,
|
|
)
|
|
..add(
|
|
'Multitap',
|
|
(_) => GameWidget(game: MultitapExample()),
|
|
codeLink: baseLink('input/multitap_example.dart'),
|
|
info: MultitapExample.description,
|
|
)
|
|
..add(
|
|
'Multitap Advanced',
|
|
(_) => GameWidget(game: MultitapAdvancedExample()),
|
|
codeLink: baseLink('input/multitap_advanced_example.dart'),
|
|
info: MultitapAdvancedExample.description,
|
|
)
|
|
..add(
|
|
'Overlapping TapCallbacks',
|
|
(_) => GameWidget(game: OverlappingTapCallbacksExample()),
|
|
codeLink: baseLink('input/overlapping_tap_callbacks_example.dart'),
|
|
info: OverlappingTapCallbacksExample.description,
|
|
)
|
|
..add(
|
|
'Gesture Hitboxes',
|
|
(_) => GameWidget(game: GestureHitboxesExample()),
|
|
codeLink: baseLink('input/gesture_hitboxes_example.dart'),
|
|
info: GestureHitboxesExample.description,
|
|
)
|
|
..add(
|
|
'Joystick',
|
|
(_) => GameWidget(game: JoystickExample()),
|
|
codeLink: baseLink('input/joystick_example.dart'),
|
|
info: JoystickExample.description,
|
|
)
|
|
..add(
|
|
'Joystick Advanced',
|
|
(_) => GameWidget(game: JoystickAdvancedExample()),
|
|
codeLink: baseLink('input/joystick_advanced_example.dart'),
|
|
info: JoystickAdvancedExample.description,
|
|
)
|
|
..add(
|
|
'Advanced Button',
|
|
(_) => GameWidget(game: AdvancedButtonExample()),
|
|
codeLink: baseLink('input/advanced_button_example.dart'),
|
|
info: AdvancedButtonExample.description,
|
|
);
|
|
}
|