├── .firebaserc ├── .github ├── CODEOWNERS ├── PULL_REQUEST_TEMPLATE.md └── workflows │ ├── authentication_repository.yaml │ ├── geometry.yaml │ ├── leaderboard_repository.yaml │ ├── main.yaml │ ├── pinball_audio.yaml │ ├── pinball_components.yaml │ ├── pinball_flame.yaml │ ├── pinball_theme.yaml │ ├── pinball_ui.yaml │ ├── platform_helper.yaml │ ├── share_repository.yaml │ └── spell_check.yaml ├── .gitignore ├── .idea └── runConfigurations │ └── main.xml ├── .metadata ├── .vscode ├── cspell.json ├── extensions.json └── launch.json ├── LICENSE ├── README.md ├── analysis_options.yaml ├── art └── readme_header.png ├── assets └── images │ ├── bonus_animation │ ├── android_spaceship.png │ ├── dash_nest.png │ ├── dino_chomp.png │ ├── google_word.png │ └── sparky_turbo_charge.png │ ├── components │ ├── key.png │ └── space.png │ ├── loading_game │ └── io_pinball.png │ └── score │ └── mini_score_background.png ├── coverage_badge.svg ├── firebase.json ├── firestore.rules ├── functions ├── .gitignore ├── index.js ├── package-lock.json └── package.json ├── l10n.yaml ├── lib ├── app │ ├── app.dart │ └── view │ │ └── app.dart ├── assets_manager │ ├── assets_manager.dart │ ├── cubit │ │ ├── assets_manager_cubit.dart │ │ └── assets_manager_state.dart │ └── views │ │ ├── assets_loading_page.dart │ │ └── views.dart ├── bootstrap.dart ├── game │ ├── behaviors │ │ ├── animatronic_looping_behavior.dart │ │ ├── ball_spawning_behavior.dart │ │ ├── behaviors.dart │ │ ├── bonus_ball_spawning_behavior.dart │ │ ├── bonus_noise_behavior.dart │ │ ├── bumper_noise_behavior.dart │ │ ├── camera_focusing_behavior.dart │ │ ├── character_selection_behavior.dart │ │ ├── cow_bumper_noise_behavior.dart │ │ ├── kicker_noise_behavior.dart │ │ ├── rollover_noise_behavior.dart │ │ └── scoring_behavior.dart │ ├── bloc │ │ ├── game_bloc.dart │ │ ├── game_event.dart │ │ └── game_state.dart │ ├── components │ │ ├── android_acres │ │ │ ├── android_acres.dart │ │ │ └── behaviors │ │ │ │ ├── android_spaceship_bonus_behavior.dart │ │ │ │ ├── behaviors.dart │ │ │ │ ├── ramp_bonus_behavior.dart │ │ │ │ ├── ramp_multiplier_behavior.dart │ │ │ │ ├── ramp_progress_behavior.dart │ │ │ │ ├── ramp_reset_behavior.dart │ │ │ │ └── ramp_shot_behavior.dart │ │ ├── backbox │ │ │ ├── backbox.dart │ │ │ ├── bloc │ │ │ │ ├── backbox_bloc.dart │ │ │ │ ├── backbox_event.dart │ │ │ │ └── backbox_state.dart │ │ │ └── displays │ │ │ │ ├── displays.dart │ │ │ │ ├── game_over_info_display.dart │ │ │ │ ├── initials_input_display.dart │ │ │ │ ├── initials_submission_failure_display.dart │ │ │ │ ├── initials_submission_success_display.dart │ │ │ │ ├── leaderboard_display.dart │ │ │ │ ├── leaderboard_failure_display.dart │ │ │ │ ├── loading_display.dart │ │ │ │ └── share_display.dart │ │ ├── bottom_group.dart │ │ ├── components.dart │ │ ├── dino_desert │ │ │ ├── behaviors │ │ │ │ ├── behaviors.dart │ │ │ │ └── chrome_dino_bonus_behavior.dart │ │ │ └── dino_desert.dart │ │ ├── drain │ │ │ ├── behaviors │ │ │ │ ├── behaviors.dart │ │ │ │ └── draining_behavior.dart │ │ │ └── drain.dart │ │ ├── flutter_forest │ │ │ ├── behaviors │ │ │ │ ├── behaviors.dart │ │ │ │ └── flutter_forest_bonus_behavior.dart │ │ │ └── flutter_forest.dart │ │ ├── game_bloc_status_listener.dart │ │ ├── google_gallery │ │ │ ├── behaviors │ │ │ │ ├── behaviors.dart │ │ │ │ └── google_word_bonus_behavior.dart │ │ │ └── google_gallery.dart │ │ ├── launcher.dart │ │ ├── multiballs │ │ │ ├── behaviors │ │ │ │ ├── behaviors.dart │ │ │ │ └── multiballs_behavior.dart │ │ │ └── multiballs.dart │ │ ├── multipliers │ │ │ ├── behaviors │ │ │ │ ├── behaviors.dart │ │ │ │ └── multipliers_behavior.dart │ │ │ └── multipliers.dart │ │ └── sparky_scorch │ │ │ ├── behaviors │ │ │ ├── behaviors.dart │ │ │ └── sparky_computer_bonus_behavior.dart │ │ │ └── sparky_scorch.dart │ ├── game.dart │ ├── game_assets.dart │ ├── pinball_game.dart │ └── view │ │ ├── pinball_game_page.dart │ │ ├── view.dart │ │ └── widgets │ │ ├── bonus_animation.dart │ │ ├── game_hud.dart │ │ ├── mobile_controls.dart │ │ ├── mobile_dpad.dart │ │ ├── play_button_overlay.dart │ │ ├── replay_button_overlay.dart │ │ ├── round_count_display.dart │ │ ├── score_view.dart │ │ └── widgets.dart ├── gen │ ├── assets.gen.dart │ └── gen.dart ├── how_to_play │ ├── how_to_play.dart │ └── widgets │ │ ├── how_to_play_dialog.dart │ │ └── widgets.dart ├── l10n │ ├── arb │ │ └── app_en.arb │ └── l10n.dart ├── leaderboard │ └── models │ │ └── leader_board_entry.dart ├── main.dart ├── more_information │ ├── more_information.dart │ └── more_information_dialog.dart ├── select_character │ ├── cubit │ │ ├── character_theme_cubit.dart │ │ └── character_theme_state.dart │ ├── select_character.dart │ └── view │ │ ├── character_selection_page.dart │ │ ├── selected_character.dart │ │ └── view.dart └── start_game │ ├── bloc │ ├── start_game_bloc.dart │ ├── start_game_event.dart │ └── start_game_state.dart │ ├── start_game.dart │ └── widgets │ └── start_game_listener.dart ├── packages ├── authentication_repository │ ├── .gitignore │ ├── README.md │ ├── analysis_options.yaml │ ├── lib │ │ ├── authentication_repository.dart │ │ └── src │ │ │ └── authentication_repository.dart │ ├── pubspec.yaml │ └── test │ │ └── src │ │ └── authentication_repository_test.dart ├── geometry │ ├── .gitignore │ ├── README.md │ ├── analysis_options.yaml │ ├── lib │ │ ├── geometry.dart │ │ └── src │ │ │ └── geometry.dart │ ├── pubspec.yaml │ └── test │ │ └── src │ │ └── geometry_test.dart ├── leaderboard_repository │ ├── .gitignore │ ├── README.md │ ├── analysis_options.yaml │ ├── lib │ │ ├── leaderboard_repository.dart │ │ └── src │ │ │ ├── leaderboard_repository.dart │ │ │ └── models │ │ │ ├── exceptions.dart │ │ │ ├── leaderboard_entry_data.dart │ │ │ ├── leaderboard_entry_data.g.dart │ │ │ └── models.dart │ ├── pubspec.yaml │ └── test │ │ └── src │ │ ├── leaderboard_repository_test.dart │ │ └── models │ │ └── leaderboard_entry_data_test.dart ├── pinball_audio │ ├── .gitignore │ ├── README.md │ ├── analysis_options.yaml │ ├── assets │ │ ├── music │ │ │ └── background.mp3 │ │ └── sfx │ │ │ ├── android.mp3 │ │ │ ├── bumper_a.mp3 │ │ │ ├── bumper_b.mp3 │ │ │ ├── cow_moo.mp3 │ │ │ ├── dash.mp3 │ │ │ ├── dino.mp3 │ │ │ ├── flipper.mp3 │ │ │ ├── game_over_voice_over.mp3 │ │ │ ├── google.mp3 │ │ │ ├── io_pinball_voice_over.mp3 │ │ │ ├── kicker_a.mp3 │ │ │ ├── kicker_b.mp3 │ │ │ ├── launcher.mp3 │ │ │ ├── rollover.mp3 │ │ │ └── sparky.mp3 │ ├── lib │ │ ├── gen │ │ │ └── assets.gen.dart │ │ ├── pinball_audio.dart │ │ └── src │ │ │ └── pinball_audio.dart │ ├── pubspec.yaml │ └── test │ │ └── src │ │ └── pinball_audio_test.dart ├── pinball_components │ ├── .gitignore │ ├── README.md │ ├── analysis_options.yaml │ ├── assets │ │ └── images │ │ │ ├── android │ │ │ ├── bumper │ │ │ │ ├── a │ │ │ │ │ ├── dimmed.png │ │ │ │ │ └── lit.png │ │ │ │ ├── b │ │ │ │ │ ├── dimmed.png │ │ │ │ │ └── lit.png │ │ │ │ └── cow │ │ │ │ │ ├── dimmed.png │ │ │ │ │ └── lit.png │ │ │ ├── rail │ │ │ │ ├── exit.png │ │ │ │ └── main.png │ │ │ ├── ramp │ │ │ │ ├── arrow │ │ │ │ │ ├── active1.png │ │ │ │ │ ├── active2.png │ │ │ │ │ ├── active3.png │ │ │ │ │ ├── active4.png │ │ │ │ │ ├── active5.png │ │ │ │ │ └── inactive.png │ │ │ │ ├── board_opening.png │ │ │ │ ├── main.png │ │ │ │ ├── railing_background.png │ │ │ │ └── railing_foreground.png │ │ │ └── spaceship │ │ │ │ ├── animatronic.png │ │ │ │ ├── light_beam.png │ │ │ │ └── saucer.png │ │ │ ├── backbox │ │ │ ├── button │ │ │ │ ├── facebook.png │ │ │ │ └── twitter.png │ │ │ ├── display_divider.png │ │ │ ├── display_title_decoration.png │ │ │ └── marquee.png │ │ │ ├── ball │ │ │ └── flame_effect.png │ │ │ ├── baseboard │ │ │ ├── left.png │ │ │ └── right.png │ │ │ ├── board_background.png │ │ │ ├── boundary │ │ │ ├── bottom.png │ │ │ ├── outer.png │ │ │ └── outer_bottom.png │ │ │ ├── dash │ │ │ ├── animatronic.png │ │ │ └── bumper │ │ │ │ ├── a │ │ │ │ ├── active.png │ │ │ │ └── inactive.png │ │ │ │ ├── b │ │ │ │ ├── active.png │ │ │ │ └── inactive.png │ │ │ │ └── main │ │ │ │ ├── active.png │ │ │ │ └── inactive.png │ │ │ ├── dino │ │ │ ├── animatronic │ │ │ │ ├── head.png │ │ │ │ └── mouth.png │ │ │ ├── bottom_wall.png │ │ │ ├── top_wall.png │ │ │ └── top_wall_tunnel.png │ │ │ ├── display_arrows │ │ │ ├── arrow_left.png │ │ │ └── arrow_right.png │ │ │ ├── error_background.png │ │ │ ├── flapper │ │ │ ├── back_support.png │ │ │ ├── flap.png │ │ │ └── front_support.png │ │ │ ├── flipper │ │ │ ├── left.png │ │ │ └── right.png │ │ │ ├── google_rollover │ │ │ ├── left │ │ │ │ ├── decal.png │ │ │ │ └── pin.png │ │ │ └── right │ │ │ │ ├── decal.png │ │ │ │ └── pin.png │ │ │ ├── google_word │ │ │ ├── letter1 │ │ │ │ ├── dimmed.png │ │ │ │ └── lit.png │ │ │ ├── letter2 │ │ │ │ ├── dimmed.png │ │ │ │ └── lit.png │ │ │ ├── letter3 │ │ │ │ ├── dimmed.png │ │ │ │ └── lit.png │ │ │ ├── letter4 │ │ │ │ ├── dimmed.png │ │ │ │ └── lit.png │ │ │ ├── letter5 │ │ │ │ ├── dimmed.png │ │ │ │ └── lit.png │ │ │ └── letter6 │ │ │ │ ├── dimmed.png │ │ │ │ └── lit.png │ │ │ ├── kicker │ │ │ ├── left │ │ │ │ ├── dimmed.png │ │ │ │ └── lit.png │ │ │ └── right │ │ │ │ ├── dimmed.png │ │ │ │ └── lit.png │ │ │ ├── launch_ramp │ │ │ ├── background_railing.png │ │ │ ├── foreground_railing.png │ │ │ └── ramp.png │ │ │ ├── multiball │ │ │ ├── dimmed.png │ │ │ └── lit.png │ │ │ ├── multiplier │ │ │ ├── x2 │ │ │ │ ├── dimmed.png │ │ │ │ └── lit.png │ │ │ ├── x3 │ │ │ │ ├── dimmed.png │ │ │ │ └── lit.png │ │ │ ├── x4 │ │ │ │ ├── dimmed.png │ │ │ │ └── lit.png │ │ │ ├── x5 │ │ │ │ ├── dimmed.png │ │ │ │ └── lit.png │ │ │ └── x6 │ │ │ │ ├── dimmed.png │ │ │ │ └── lit.png │ │ │ ├── plunger │ │ │ ├── plunger.png │ │ │ └── rocket.png │ │ │ ├── score │ │ │ ├── five_thousand.png │ │ │ ├── one_million.png │ │ │ ├── twenty_thousand.png │ │ │ └── two_hundred_thousand.png │ │ │ ├── signpost │ │ │ ├── active1.png │ │ │ ├── active2.png │ │ │ ├── active3.png │ │ │ └── inactive.png │ │ │ ├── skill_shot │ │ │ ├── decal.png │ │ │ ├── dimmed.png │ │ │ ├── lit.png │ │ │ └── pin.png │ │ │ ├── slingshot │ │ │ ├── lower.png │ │ │ └── upper.png │ │ │ └── sparky │ │ │ ├── animatronic.png │ │ │ ├── bumper │ │ │ ├── a │ │ │ │ ├── dimmed.png │ │ │ │ └── lit.png │ │ │ ├── b │ │ │ │ ├── dimmed.png │ │ │ │ └── lit.png │ │ │ └── c │ │ │ │ ├── dimmed.png │ │ │ │ └── lit.png │ │ │ └── computer │ │ │ ├── base.png │ │ │ ├── glow.png │ │ │ └── top.png │ ├── fonts │ │ ├── PixeloidMono-1G8ae.ttf │ │ ├── PixeloidSans-nR3g1.ttf │ │ └── PixeloidSansBold-RpeJo.ttf │ ├── lib │ │ ├── gen │ │ │ ├── assets.gen.dart │ │ │ ├── fonts.gen.dart │ │ │ ├── gen.dart │ │ │ └── pinball_fonts.dart │ │ ├── pinball_components.dart │ │ └── src │ │ │ ├── components │ │ │ ├── android_animatronic │ │ │ │ ├── android_animatronic.dart │ │ │ │ └── behaviors │ │ │ │ │ ├── android_animatronic_ball_contact_behavior.dart.dart │ │ │ │ │ └── behaviors.dart │ │ │ ├── android_bumper │ │ │ │ ├── android_bumper.dart │ │ │ │ ├── behaviors │ │ │ │ │ ├── android_bumper_ball_contact_behavior.dart │ │ │ │ │ ├── android_bumper_blinking_behavior.dart │ │ │ │ │ └── behaviors.dart │ │ │ │ └── cubit │ │ │ │ │ ├── android_bumper_cubit.dart │ │ │ │ │ └── android_bumper_state.dart │ │ │ ├── android_spaceship │ │ │ │ ├── android_spaceship.dart │ │ │ │ └── cubit │ │ │ │ │ ├── android_spaceship_cubit.dart │ │ │ │ │ └── android_spaceship_state.dart │ │ │ ├── arcade_background │ │ │ │ ├── arcade_background.dart │ │ │ │ └── cubit │ │ │ │ │ ├── arcade_background_cubit.dart │ │ │ │ │ └── arcade_background_state.dart │ │ │ ├── arrow_icon.dart │ │ │ ├── ball │ │ │ │ ├── ball.dart │ │ │ │ ├── behaviors │ │ │ │ │ ├── ball_gravitating_behavior.dart │ │ │ │ │ ├── ball_impulsing_behavior.dart │ │ │ │ │ ├── ball_scaling_behavior.dart │ │ │ │ │ ├── ball_turbo_charging_behavior.dart │ │ │ │ │ └── behaviors.dart │ │ │ │ └── cubit │ │ │ │ │ ├── ball_cubit.dart │ │ │ │ │ └── ball_state.dart │ │ │ ├── baseboard.dart │ │ │ ├── board_background_sprite_component.dart │ │ │ ├── board_dimensions.dart │ │ │ ├── board_side.dart │ │ │ ├── boundaries.dart │ │ │ ├── bumping_behavior.dart │ │ │ ├── camera_zoom.dart │ │ │ ├── chrome_dino │ │ │ │ ├── behaviors │ │ │ │ │ ├── behaviors.dart │ │ │ │ │ ├── chrome_dino_chomping_behavior.dart │ │ │ │ │ ├── chrome_dino_mouth_opening_behavior.dart │ │ │ │ │ ├── chrome_dino_spitting_behavior.dart │ │ │ │ │ └── chrome_dino_swiveling_behavior.dart │ │ │ │ ├── chrome_dino.dart │ │ │ │ └── cubit │ │ │ │ │ ├── chrome_dino_cubit.dart │ │ │ │ │ └── chrome_dino_state.dart │ │ │ ├── components.dart │ │ │ ├── dash_animatronic.dart │ │ │ ├── dash_bumper │ │ │ │ ├── behaviors │ │ │ │ │ ├── behaviors.dart │ │ │ │ │ └── dash_bumper_ball_contact_behavior.dart │ │ │ │ ├── cubit │ │ │ │ │ ├── dash_bumpers_cubit.dart │ │ │ │ │ └── dash_bumpers_state.dart │ │ │ │ └── dash_bumper.dart │ │ │ ├── dino_walls.dart │ │ │ ├── error_component.dart │ │ │ ├── flapper │ │ │ │ ├── behaviors │ │ │ │ │ ├── behaviors.dart │ │ │ │ │ └── flapper_spinning_behavior.dart │ │ │ │ └── flapper.dart │ │ │ ├── flipper │ │ │ │ ├── behaviors │ │ │ │ │ ├── behaviors.dart │ │ │ │ │ ├── flipper_jointing_behavior.dart │ │ │ │ │ ├── flipper_key_controlling_behavior.dart │ │ │ │ │ ├── flipper_moving_behavior.dart │ │ │ │ │ └── flipper_noise_behavior.dart │ │ │ │ ├── cubit │ │ │ │ │ ├── flipper_cubit.dart │ │ │ │ │ └── flipper_state.dart │ │ │ │ └── flipper.dart │ │ │ ├── google_letter.dart │ │ │ ├── google_rollover │ │ │ │ ├── behaviors │ │ │ │ │ ├── behaviors.dart │ │ │ │ │ └── google_rollover_ball_contact_behavior.dart │ │ │ │ └── google_rollover.dart │ │ │ ├── google_word │ │ │ │ ├── behaviors │ │ │ │ │ ├── behaviors.dart │ │ │ │ │ └── google_word_animating_behavior.dart │ │ │ │ ├── cubit │ │ │ │ │ ├── google_word_cubit.dart │ │ │ │ │ └── google_word_state.dart │ │ │ │ └── google_word.dart │ │ │ ├── initial_position.dart │ │ │ ├── joint_anchor.dart │ │ │ ├── kicker │ │ │ │ ├── behaviors │ │ │ │ │ ├── behaviors.dart │ │ │ │ │ ├── kicker_ball_contact_behavior.dart │ │ │ │ │ └── kicker_blinking_behavior.dart │ │ │ │ ├── cubit │ │ │ │ │ ├── kicker_cubit.dart │ │ │ │ │ └── kicker_state.dart │ │ │ │ └── kicker.dart │ │ │ ├── launch_ramp.dart │ │ │ ├── layer_sensor │ │ │ │ ├── behaviors │ │ │ │ │ ├── behaviors.dart │ │ │ │ │ └── layer_filtering_behavior.dart │ │ │ │ └── layer_sensor.dart │ │ │ ├── multiball │ │ │ │ ├── behaviors │ │ │ │ │ ├── behaviors.dart │ │ │ │ │ └── multiball_blinking_behavior.dart │ │ │ │ ├── cubit │ │ │ │ │ ├── multiball_cubit.dart │ │ │ │ │ └── multiball_state.dart │ │ │ │ └── multiball.dart │ │ │ ├── multiplier │ │ │ │ ├── cubit │ │ │ │ │ ├── multiplier_cubit.dart │ │ │ │ │ └── multiplier_state.dart │ │ │ │ └── multiplier.dart │ │ │ ├── plunger │ │ │ │ ├── behaviors │ │ │ │ │ ├── behaviors.dart │ │ │ │ │ ├── plunger_jointing_behavior.dart │ │ │ │ │ ├── plunger_key_controlling_behavior.dart │ │ │ │ │ ├── plunger_noise_behavior.dart │ │ │ │ │ ├── plunger_pulling_behavior.dart │ │ │ │ │ └── plunger_releasing_behavior.dart │ │ │ │ ├── cubit │ │ │ │ │ ├── plunger_cubit.dart │ │ │ │ │ └── plunger_state.dart │ │ │ │ └── plunger.dart │ │ │ ├── rocket.dart │ │ │ ├── score_component │ │ │ │ ├── behaviors │ │ │ │ │ ├── behaviors.dart │ │ │ │ │ └── score_component_scaling_behavior.dart │ │ │ │ └── score_component.dart │ │ │ ├── signpost │ │ │ │ ├── cubit │ │ │ │ │ ├── signpost_cubit.dart │ │ │ │ │ └── signpost_state.dart │ │ │ │ └── signpost.dart │ │ │ ├── skill_shot │ │ │ │ ├── behaviors │ │ │ │ │ ├── behaviors.dart │ │ │ │ │ ├── skill_shot_ball_contact_behavior.dart │ │ │ │ │ └── skill_shot_blinking_behavior.dart │ │ │ │ ├── cubit │ │ │ │ │ ├── skill_shot_cubit.dart │ │ │ │ │ └── skill_shot_state.dart │ │ │ │ └── skill_shot.dart │ │ │ ├── slingshot.dart │ │ │ ├── spaceship_rail.dart │ │ │ ├── spaceship_ramp │ │ │ │ ├── behavior │ │ │ │ │ ├── behavior.dart │ │ │ │ │ └── ramp_ball_ascending_contact_behavior.dart │ │ │ │ ├── cubit │ │ │ │ │ ├── spaceship_ramp_cubit.dart │ │ │ │ │ └── spaceship_ramp_state.dart │ │ │ │ └── spaceship_ramp.dart │ │ │ ├── sparky_animatronic.dart │ │ │ ├── sparky_bumper │ │ │ │ ├── behaviors │ │ │ │ │ ├── behaviors.dart │ │ │ │ │ ├── sparky_bumper_ball_contact_behavior.dart │ │ │ │ │ └── sparky_bumper_blinking_behavior.dart │ │ │ │ ├── cubit │ │ │ │ │ ├── sparky_bumper_cubit.dart │ │ │ │ │ └── sparky_bumper_state.dart │ │ │ │ └── sparky_bumper.dart │ │ │ ├── sparky_computer │ │ │ │ ├── behaviors │ │ │ │ │ ├── behaviors.dart │ │ │ │ │ └── sparky_computer_sensor_ball_contact_behavior.dart │ │ │ │ ├── cubit │ │ │ │ │ ├── sparky_computer_cubit.dart │ │ │ │ │ └── sparky_computer_state.dart │ │ │ │ └── sparky_computer.dart │ │ │ └── z_indexes.dart │ │ │ ├── extensions │ │ │ ├── extensions.dart │ │ │ └── score.dart │ │ │ └── pinball_components.dart │ ├── pubspec.yaml │ ├── sandbox │ │ ├── .gitignore │ │ ├── .metadata │ │ ├── LICENSE │ │ ├── README.md │ │ ├── analysis_options.yaml │ │ ├── coverage_badge.svg │ │ ├── lib │ │ │ ├── common │ │ │ │ ├── add_game.dart │ │ │ │ ├── common.dart │ │ │ │ ├── games.dart │ │ │ │ └── trace.dart │ │ │ ├── main.dart │ │ │ └── stories │ │ │ │ ├── android_acres │ │ │ │ ├── android_bumper_a_game.dart │ │ │ │ ├── android_bumper_b_game.dart │ │ │ │ ├── android_bumper_cow_game.dart │ │ │ │ ├── android_spaceship_game.dart │ │ │ │ ├── spaceship_rail_game.dart │ │ │ │ ├── spaceship_ramp_game.dart │ │ │ │ └── stories.dart │ │ │ │ ├── arrow_icon │ │ │ │ ├── arrow_icon_game.dart │ │ │ │ └── stories.dart │ │ │ │ ├── ball │ │ │ │ ├── ball_booster_game.dart │ │ │ │ ├── basic_ball_game.dart │ │ │ │ └── stories.dart │ │ │ │ ├── bottom_group │ │ │ │ ├── baseboard_game.dart │ │ │ │ ├── bottom_group.dart │ │ │ │ ├── flipper_game.dart │ │ │ │ ├── kicker_game.dart │ │ │ │ └── stories.dart │ │ │ │ ├── boundaries │ │ │ │ ├── boundaries_game.dart │ │ │ │ └── stories.dart │ │ │ │ ├── dino_desert │ │ │ │ ├── chrome_dino_game.dart │ │ │ │ ├── dino_walls_game.dart │ │ │ │ ├── slingshots_game.dart │ │ │ │ └── stories.dart │ │ │ │ ├── effects │ │ │ │ ├── camera_zoom_game.dart │ │ │ │ └── stories.dart │ │ │ │ ├── error_component │ │ │ │ ├── error_component_game.dart │ │ │ │ └── stories.dart │ │ │ │ ├── flutter_forest │ │ │ │ ├── dash_bumper_a_game.dart │ │ │ │ ├── dash_bumper_b_game.dart │ │ │ │ ├── dash_bumper_main_game.dart │ │ │ │ ├── signpost_game.dart │ │ │ │ └── stories.dart │ │ │ │ ├── google_word │ │ │ │ ├── google_letter_game.dart │ │ │ │ └── stories.dart │ │ │ │ ├── launch_ramp │ │ │ │ ├── launch_ramp_game.dart │ │ │ │ └── stories.dart │ │ │ │ ├── layer │ │ │ │ ├── layer_game.dart │ │ │ │ └── stories.dart │ │ │ │ ├── multiball │ │ │ │ ├── multiball_game.dart │ │ │ │ └── stories.dart │ │ │ │ ├── multipliers │ │ │ │ ├── multipliers_game.dart │ │ │ │ └── stories.dart │ │ │ │ ├── plunger │ │ │ │ ├── plunger_game.dart │ │ │ │ └── stories.dart │ │ │ │ ├── score │ │ │ │ ├── score_game.dart │ │ │ │ └── stories.dart │ │ │ │ ├── sparky_scorch │ │ │ │ ├── sparky_bumper_game.dart │ │ │ │ ├── sparky_computer_game.dart │ │ │ │ └── stories.dart │ │ │ │ └── stories.dart │ │ ├── pubspec.lock │ │ ├── pubspec.yaml │ │ └── web │ │ │ ├── favicon.png │ │ │ ├── icons │ │ │ ├── Icon-192.png │ │ │ ├── Icon-512.png │ │ │ ├── Icon-maskable-192.png │ │ │ └── Icon-maskable-512.png │ │ │ ├── index.html │ │ │ └── manifest.json │ └── test │ │ ├── helpers │ │ ├── helpers.dart │ │ └── test_game.dart │ │ └── src │ │ ├── components │ │ ├── android_animatronic │ │ │ └── behaviors │ │ │ │ └── android_animatronic_ball_contact_behavior_test.dart │ │ ├── android_animatronic_test.dart │ │ ├── android_bumper │ │ │ ├── android_bumper_test.dart │ │ │ ├── behaviors │ │ │ │ ├── android_bumper_ball_contact_behavior_test.dart │ │ │ │ └── android_bumper_blinking_behavior_test.dart │ │ │ └── cubit │ │ │ │ └── android_bumper_cubit_test.dart │ │ ├── android_spaceship │ │ │ ├── android_spaceship_test.dart │ │ │ └── cubit │ │ │ │ └── android_spaceship_cubit_test.dart │ │ ├── arcade_background │ │ │ ├── arcade_background_test.dart │ │ │ └── cubit │ │ │ │ ├── arcade_background_cubit_test.dart │ │ │ │ └── arcade_background_state_test.dart │ │ ├── arrow_icon_test.dart │ │ ├── ball │ │ │ ├── ball_test.dart │ │ │ ├── behaviors │ │ │ │ ├── ball_gravitating_behavior_test.dart │ │ │ │ ├── ball_implusing_behavior_test.dart │ │ │ │ ├── ball_scaling_behavior_test.dart │ │ │ │ └── ball_turbo_charging_behavior_test.dart │ │ │ └── cubit │ │ │ │ ├── ball_cubit_test.dart │ │ │ │ └── ball_state_test.dart │ │ ├── baseboard_test.dart │ │ ├── board_background_sprite_component_test.dart │ │ ├── board_dimensions_test.dart │ │ ├── board_side_test.dart │ │ ├── boundaries_test.dart │ │ ├── bumping_behavior_test.dart │ │ ├── camera_zoom_test.dart │ │ ├── chrome_dino │ │ │ ├── behaviors │ │ │ │ ├── chrome_dino_chomping_behavior_test.dart │ │ │ │ ├── chrome_dino_mouth_opening_behavior_test.dart │ │ │ │ ├── chrome_dino_spitting_behavior_test.dart │ │ │ │ └── chrome_dino_swiveling_behavior_test.dart │ │ │ ├── chrome_dino_test.dart │ │ │ ├── cubit │ │ │ │ ├── chrome_dino_cubit_test.dart │ │ │ │ └── chrome_dino_state_test.dart │ │ │ └── golden │ │ │ │ └── chrome_dino │ │ │ │ ├── down.png │ │ │ │ ├── middle.png │ │ │ │ └── up.png │ │ ├── dash_animatronic_test.dart │ │ ├── dash_nest_bumper │ │ │ ├── behaviors │ │ │ │ └── dash_bumper_ball_contact_behavior_test.dart │ │ │ ├── cubit │ │ │ │ ├── dash_bumpers_cubit_test.dart │ │ │ │ └── dash_bumpers_state_test.dart │ │ │ └── dash_bumper_test.dart │ │ ├── dino_walls_test.dart │ │ ├── error_component_test.dart │ │ ├── flapper │ │ │ ├── behaviors │ │ │ │ └── flapper_spinning_behavior_test.dart │ │ │ └── flapper_test.dart │ │ ├── flipper │ │ │ ├── behaviors │ │ │ │ ├── flipper_jointing_behavior_test.dart │ │ │ │ ├── flipper_key_controlling_behavior_test.dart │ │ │ │ ├── flipper_moving_behavior_test.dart │ │ │ │ └── flipper_noise_behavior_test.dart │ │ │ ├── cubit │ │ │ │ └── flipper_cubit_test.dart │ │ │ └── flipper_test.dart │ │ ├── golden │ │ │ ├── android_animatronic │ │ │ │ ├── end.png │ │ │ │ ├── middle.png │ │ │ │ └── start.png │ │ │ ├── android_spaceship │ │ │ │ ├── end.png │ │ │ │ ├── middle.png │ │ │ │ └── start.png │ │ │ ├── arrow_icon_left.png │ │ │ ├── arrow_icon_right.png │ │ │ ├── ball │ │ │ │ ├── android.png │ │ │ │ ├── dash.png │ │ │ │ ├── dino.png │ │ │ │ └── sparky.png │ │ │ ├── baseboard.png │ │ │ ├── board_background.png │ │ │ ├── boundaries.png │ │ │ ├── camera_zoom │ │ │ │ ├── finished.png │ │ │ │ ├── in_between.png │ │ │ │ └── no_zoom.png │ │ │ ├── chrome_dino │ │ │ │ ├── down.png │ │ │ │ ├── middle.png │ │ │ │ └── up.png │ │ │ ├── dash_animatronic │ │ │ │ ├── end.png │ │ │ │ ├── middle.png │ │ │ │ └── start.png │ │ │ ├── dino_walls.png │ │ │ ├── flapper │ │ │ │ ├── end.png │ │ │ │ ├── middle.png │ │ │ │ └── start.png │ │ │ ├── flipper.png │ │ │ ├── kickers.png │ │ │ ├── launch_ramp.png │ │ │ ├── multipliers │ │ │ │ ├── x2_dimmed.png │ │ │ │ ├── x2_lit.png │ │ │ │ ├── x3_dimmed.png │ │ │ │ ├── x3_lit.png │ │ │ │ ├── x4_dimmed.png │ │ │ │ ├── x4_lit.png │ │ │ │ ├── x5_dimmed.png │ │ │ │ ├── x5_lit.png │ │ │ │ ├── x6_dimmed.png │ │ │ │ └── x6_lit.png │ │ │ ├── plunger │ │ │ │ ├── pull.png │ │ │ │ └── release.png │ │ │ ├── rocket.png │ │ │ ├── score │ │ │ │ ├── 1m.png │ │ │ │ ├── 200k.png │ │ │ │ ├── 20k.png │ │ │ │ └── 5k.png │ │ │ ├── signpost │ │ │ │ ├── active1.png │ │ │ │ ├── active2.png │ │ │ │ ├── active3.png │ │ │ │ └── inactive.png │ │ │ ├── slingshots.png │ │ │ ├── spaceship_rail.png │ │ │ ├── spaceship_ramp │ │ │ │ ├── active1.png │ │ │ │ ├── active2.png │ │ │ │ ├── active3.png │ │ │ │ ├── active4.png │ │ │ │ ├── active5.png │ │ │ │ └── inactive.png │ │ │ ├── sparky_animatronic │ │ │ │ ├── end.png │ │ │ │ ├── middle.png │ │ │ │ └── start.png │ │ │ └── sparky_computer.png │ │ ├── google_letter_test.dart │ │ ├── google_rollover │ │ │ ├── behaviors │ │ │ │ └── google_rollover_ball_contact_behavior_test.dart │ │ │ └── google_rollover_test.dart │ │ ├── google_word │ │ │ ├── behaviors │ │ │ │ └── google_word_animating_behavior_test.dart │ │ │ ├── cubit │ │ │ │ ├── google_word_cubit_test.dart │ │ │ │ └── google_word_state_test.dart │ │ │ └── google_word_test.dart │ │ ├── initial_position_test.dart │ │ ├── joint_anchor_test.dart │ │ ├── kicker │ │ │ ├── behaviors │ │ │ │ ├── kicker_ball_contact_behavior_test.dart │ │ │ │ └── kicker_blinking_behavior_test.dart │ │ │ └── cubit │ │ │ │ └── kicker_cubit_test.dart │ │ ├── kicker_test.dart │ │ ├── launch_ramp_test.dart │ │ ├── layer_sensor │ │ │ ├── behavior │ │ │ │ └── layer_filtering_behavior_test.dart │ │ │ └── layer_sensor_test.dart │ │ ├── multiball │ │ │ ├── behaviors │ │ │ │ └── multiball_blinking_behavior_test.dart │ │ │ ├── cubit │ │ │ │ ├── multiball_cubit_test.dart │ │ │ │ └── multiball_state_test.dart │ │ │ └── multiball_test.dart │ │ ├── multiplier │ │ │ ├── cubit │ │ │ │ ├── multiplier_cubit_test.dart │ │ │ │ └── multiplier_state_test.dart │ │ │ └── multiplier_test.dart │ │ ├── plunger │ │ │ ├── behaviors │ │ │ │ ├── plunger_jointing_behavior_test.dart │ │ │ │ ├── plunger_key_controlling_behavior_test.dart │ │ │ │ ├── plunger_noise_behavior_test.dart │ │ │ │ ├── plunger_pulling_behavior_test.dart │ │ │ │ └── plunger_releasing_behavior_test.dart │ │ │ ├── cubit │ │ │ │ └── plunger_cubit_test.dart │ │ │ └── plunger_test.dart │ │ ├── rocket_test.dart │ │ ├── score_component │ │ │ ├── behaviors │ │ │ │ └── score_component_scaling_behavior_test.dart │ │ │ └── score_component_test.dart │ │ ├── signpost │ │ │ ├── cubit │ │ │ │ └── signpost_cubit_test.dart │ │ │ └── signpost_test.dart │ │ ├── skill_shot │ │ │ ├── behaviors │ │ │ │ ├── skill_shot_ball_contact_behavior_test.dart │ │ │ │ └── skill_shot_blinking_behavior_test.dart │ │ │ ├── cubit │ │ │ │ ├── skill_shot_cubit_test.dart │ │ │ │ └── skill_shot_state_test.dart │ │ │ └── skill_shot_test.dart │ │ ├── slingshot_test.dart │ │ ├── spaceship_rail_test.dart │ │ ├── spaceship_ramp │ │ │ ├── behavior │ │ │ │ └── ramp_ball_ascending_contact_behavior_test.dart │ │ │ ├── cubit │ │ │ │ ├── spaceship_ramp_cubit_test.dart │ │ │ │ └── spaceship_ramp_state_test.dart │ │ │ └── spaceship_ramp_test.dart │ │ ├── sparky_animatronic_test.dart │ │ ├── sparky_bumper │ │ │ ├── behaviors │ │ │ │ ├── sparky_bumper_ball_contact_behavior_test.dart │ │ │ │ └── sparky_bumper_blinking_behavior_test.dart │ │ │ ├── cubit │ │ │ │ └── sparky_bumper_cubit_test.dart │ │ │ └── sparky_bumper_test.dart │ │ └── sparky_computer │ │ │ ├── behaviors │ │ │ └── sparky_computer_sensor_ball_contact_behavior_test.dart │ │ │ ├── cubit │ │ │ └── sparky_computer_cubit_test.dart │ │ │ └── sparky_computer_test.dart │ │ └── extensions │ │ └── score_test.dart ├── pinball_flame │ ├── .gitignore │ ├── README.md │ ├── analysis_options.yaml │ ├── lib │ │ ├── pinball_flame.dart │ │ └── src │ │ │ ├── behaviors │ │ │ ├── behaviors.dart │ │ │ ├── contact_behavior.dart │ │ │ ├── layer_contact_behavior.dart │ │ │ └── z_index_contact_behavior.dart │ │ │ ├── canvas │ │ │ ├── canvas.dart │ │ │ ├── canvas_component.dart │ │ │ ├── canvas_wrapper.dart │ │ │ └── z_canvas_component.dart │ │ │ ├── flame_provider.dart │ │ │ ├── keyboard_input_controller.dart │ │ │ ├── layer.dart │ │ │ ├── parent_is_a.dart │ │ │ ├── pinball_forge2d_game.dart │ │ │ ├── shapes │ │ │ ├── arc_shape.dart │ │ │ ├── bezier_curve_shape.dart │ │ │ ├── ellipse_shape.dart │ │ │ └── shapes.dart │ │ │ └── sprite_animation.dart │ ├── pubspec.yaml │ └── test │ │ ├── layer_test.dart │ │ └── src │ │ ├── behaviors │ │ ├── contact_behavior_test.dart │ │ ├── layer_contact_behavior_test.dart │ │ └── z_index_contact_behavior_test.dart │ │ ├── canvas │ │ ├── canvas_component_test.dart │ │ ├── canvas_wrapper_test.dart │ │ └── z_canvas_component_test.dart │ │ ├── flame_provider_test.dart │ │ ├── goldens │ │ └── rendering │ │ │ ├── blue_red.png │ │ │ └── red_blue.png │ │ ├── keyboard_input_controller_test.dart │ │ ├── pinball_forge2d_game_test.dart │ │ ├── rendering │ │ └── golden │ │ │ └── rendering │ │ │ ├── blue_red.png │ │ │ └── red_blue.png │ │ ├── shapes │ │ ├── arc_shape_test.dart │ │ ├── bezier_curve_shape_test.dart │ │ └── ellipse_shape_test.dart │ │ └── sprite_animation_test.dart ├── pinball_theme │ ├── .gitignore │ ├── README.md │ ├── analysis_options.yaml │ ├── assets │ │ └── images │ │ │ ├── android │ │ │ ├── animation.png │ │ │ ├── background.jpg │ │ │ ├── ball.png │ │ │ ├── icon.png │ │ │ └── leaderboard_icon.png │ │ │ ├── dash │ │ │ ├── animation.png │ │ │ ├── background.jpg │ │ │ ├── ball.png │ │ │ ├── icon.png │ │ │ └── leaderboard_icon.png │ │ │ ├── dino │ │ │ ├── animation.png │ │ │ ├── background.jpg │ │ │ ├── ball.png │ │ │ ├── icon.png │ │ │ └── leaderboard_icon.png │ │ │ ├── pinball_button.png │ │ │ ├── select_character_background.png │ │ │ └── sparky │ │ │ ├── animation.png │ │ │ ├── background.jpg │ │ │ ├── ball.png │ │ │ ├── icon.png │ │ │ └── leaderboard_icon.png │ ├── lib │ │ ├── pinball_theme.dart │ │ └── src │ │ │ ├── generated │ │ │ ├── assets.gen.dart │ │ │ └── generated.dart │ │ │ └── themes │ │ │ ├── android_theme.dart │ │ │ ├── character_theme.dart │ │ │ ├── dash_theme.dart │ │ │ ├── dino_theme.dart │ │ │ ├── sparky_theme.dart │ │ │ └── themes.dart │ ├── pubspec.yaml │ └── test │ │ └── src │ │ └── themes │ │ ├── android_theme_test.dart │ │ ├── dash_theme_test.dart │ │ ├── dino_theme_test.dart │ │ └── sparky_theme_test.dart ├── pinball_ui │ ├── .gitignore │ ├── README.md │ ├── analysis_options.yaml │ ├── assets │ │ └── images │ │ │ ├── button │ │ │ ├── dpad_down.png │ │ │ ├── dpad_left.png │ │ │ ├── dpad_right.png │ │ │ ├── dpad_up.png │ │ │ └── pinball_button.png │ │ │ └── dialog │ │ │ └── background.png │ ├── fonts │ │ ├── PixeloidMono-1G8ae.ttf │ │ ├── PixeloidSans-nR3g1.ttf │ │ └── PixeloidSansBold-RpeJo.ttf │ ├── lib │ │ ├── gen │ │ │ ├── assets.gen.dart │ │ │ ├── fonts.gen.dart │ │ │ └── gen.dart │ │ ├── pinball_ui.dart │ │ └── src │ │ │ ├── dialog │ │ │ ├── dialog.dart │ │ │ ├── pinball_dialog.dart │ │ │ └── pixelated_decoration.dart │ │ │ ├── external_links │ │ │ └── external_links.dart │ │ │ ├── theme │ │ │ ├── pinball_colors.dart │ │ │ ├── pinball_text_style.dart │ │ │ ├── pinball_theme.dart │ │ │ └── theme.dart │ │ │ └── widgets │ │ │ ├── animated_ellipsis_text.dart │ │ │ ├── crt_background.dart │ │ │ ├── pinball_button.dart │ │ │ ├── pinball_dpad_button.dart │ │ │ ├── pinball_loading_indicator.dart │ │ │ └── widgets.dart │ ├── pubspec.yaml │ └── test │ │ └── src │ │ ├── dialog │ │ ├── pinball_dialog_test.dart │ │ └── pixelated_decoration_test.dart │ │ ├── external_links │ │ └── external_links_test.dart │ │ ├── theme │ │ ├── pinball_colors_test.dart │ │ ├── pinball_text_style_test.dart │ │ └── pinball_theme_test.dart │ │ └── widgets │ │ ├── animated_ellipsis_text_test.dart │ │ ├── crt_background_test.dart │ │ ├── pinball_button_test.dart │ │ ├── pinball_dpad_button_test.dart │ │ └── pinball_loading_indicator_test.dart ├── platform_helper │ ├── .gitignore │ ├── README.md │ ├── analysis_options.yaml │ ├── lib │ │ ├── platform_helper.dart │ │ └── src │ │ │ └── platform_helper.dart │ ├── pubspec.yaml │ └── test │ │ └── src │ │ └── platform_helper_test.dart └── share_repository │ ├── .gitignore │ ├── README.md │ ├── analysis_options.yaml │ ├── lib │ ├── share_repository.dart │ └── src │ │ ├── models │ │ ├── models.dart │ │ └── share_platform.dart │ │ └── share_repository.dart │ ├── pubspec.yaml │ └── test │ └── src │ └── share_repository_test.dart ├── pubspec.lock ├── pubspec.yaml ├── storage.rules ├── test ├── app │ └── view │ │ └── app_test.dart ├── assets_manager │ ├── cubit │ │ └── assets_manager_state_test.dart │ └── views │ │ └── assets_loading_page_test.dart ├── game │ ├── behaviors │ │ ├── animatronic_looping_behavior_test.dart │ │ ├── ball_spawning_behavior_test.dart │ │ ├── bonus_ball_spawning_behavior_test.dart │ │ ├── bonus_noise_behavior_test.dart │ │ ├── bumper_noise_behavior_test.dart │ │ ├── camera_focusing_behavior_test.dart │ │ ├── character_selection_behavior_test.dart │ │ ├── cow_bumper_noise_behavior_test.dart │ │ ├── kicker_noise_behavior_test.dart │ │ ├── rollover_noise_behavior_test.dart │ │ └── scoring_behavior_test.dart │ ├── bloc │ │ ├── game_bloc_test.dart │ │ ├── game_event_test.dart │ │ └── game_state_test.dart │ ├── components │ │ ├── android_acres │ │ │ ├── android_acres_test.dart │ │ │ └── behaviors │ │ │ │ ├── android_spaceship_bonus_behavior_test.dart │ │ │ │ ├── ramp_bonus_behavior_test.dart │ │ │ │ ├── ramp_multiplier_behavior_test.dart │ │ │ │ ├── ramp_progress_behavior_test.dart │ │ │ │ ├── ramp_reset_behavior_test.dart │ │ │ │ └── ramp_shot_behavior_test.dart │ │ ├── backbox │ │ │ ├── backbox_test.dart │ │ │ ├── bloc │ │ │ │ ├── backbox_bloc_test.dart │ │ │ │ ├── backbox_event_test.dart │ │ │ │ └── backbox_state_test.dart │ │ │ └── displays │ │ │ │ ├── game_over_info_display_test.dart │ │ │ │ ├── initials_input_display_test.dart │ │ │ │ ├── initials_submission_failure_display_test.dart │ │ │ │ ├── initials_submission_success_display_test.dart │ │ │ │ ├── leaderboard_display_test.dart │ │ │ │ ├── leaderboard_failure_display_test.dart │ │ │ │ ├── loading_display_test.dart │ │ │ │ └── share_display_test.dart │ │ ├── bottom_group_test.dart │ │ ├── dino_desert │ │ │ ├── behaviors │ │ │ │ └── chrome_dino_bonus_behavior_test.dart │ │ │ └── dino_desert_test.dart │ │ ├── drain │ │ │ ├── behaviors │ │ │ │ └── draining_behavior_test.dart │ │ │ └── drain_test.dart │ │ ├── flutter_forest │ │ │ ├── behaviors │ │ │ │ └── flutter_forest_bonus_behavior_test.dart │ │ │ └── flutter_forest_test.dart │ │ ├── game_bloc_status_listener_test.dart │ │ ├── golden │ │ │ └── backbox.png │ │ ├── google_gallery │ │ │ ├── behaviors │ │ │ │ └── google_word_bonus_behavior_test.dart │ │ │ └── google_gallery_test.dart │ │ ├── launcher_test.dart │ │ ├── multiballs │ │ │ ├── behaviors │ │ │ │ └── multiballs_behavior_test.dart │ │ │ └── multiballs_test.dart │ │ ├── multipliers │ │ │ ├── behaviors │ │ │ │ └── multipliers_behavior_test.dart │ │ │ └── multipliers_test.dart │ │ └── sparky_scorch │ │ │ ├── behaviors │ │ │ └── sparky_computer_bonus_behavior_test.dart │ │ │ └── sparky_scorch_test.dart │ ├── pinball_game_test.dart │ └── view │ │ ├── pinball_game_page_test.dart │ │ └── widgets │ │ ├── bonus_animation_test.dart │ │ ├── game_hud_test.dart │ │ ├── mobile_controls_test.dart │ │ ├── mobile_dpad_test.dart │ │ ├── play_button_overlay_test.dart │ │ ├── replay_button_overlay_test.dart │ │ ├── round_count_display_test.dart │ │ └── score_view_test.dart ├── helpers │ ├── helpers.dart │ ├── mock_flame_images.dart │ └── pump_app.dart ├── how_to_play │ └── how_to_play_dialog_test.dart ├── leaderboard │ └── models │ │ └── leader_board_entry_test.dart ├── more_information │ └── more_information_dialog_test.dart ├── select_character │ ├── cubit │ │ ├── character_theme_cubit_test.dart │ │ └── character_theme_state_test.dart │ └── view │ │ └── character_selection_page_test.dart └── start_game │ ├── bloc │ ├── start_game_bloc_test.dart │ ├── start_game_event_test.dart │ └── start_game_state_test.dart │ └── widgets │ └── start_game_listener_test.dart └── web ├── __ └── firebase │ ├── 8.10.1 │ ├── firebase-app.js │ ├── firebase-auth.js │ └── firebase-firestore.js │ └── init.js ├── favicon.png ├── icons ├── Icon-192.png ├── Icon-512.png └── favicon.png ├── index.html └── manifest.json /.firebaserc: -------------------------------------------------------------------------------- 1 | { 2 | "projects": { 3 | "default": "pinball-dev" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # Every request must be reviewed and accepted by: 2 | 3 | * @erickzanardo @alestiago @RuiMiguel @allisonryan0002 -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 8 | 9 | ## Description 10 | 11 | 12 | 13 | ## Type of Change 14 | 15 | 16 | 17 | - [ ] ✨ New feature (non-breaking change which adds functionality) 18 | - [ ] 🛠️ Bug fix (non-breaking change which fixes an issue) 19 | - [ ] ❌ Breaking change (fix or feature that would cause existing functionality to change) 20 | - [ ] 🧹 Code refactor 21 | - [ ] ✅ Build configuration change 22 | - [ ] 📝 Documentation 23 | - [ ] 🗑️ Chore 24 | -------------------------------------------------------------------------------- /.github/workflows/authentication_repository.yaml: -------------------------------------------------------------------------------- 1 | name: authentication_repository 2 | 3 | concurrency: 4 | group: ${{ github.workflow }}-${{ github.ref }} 5 | cancel-in-progress: true 6 | 7 | on: 8 | push: 9 | paths: 10 | - "packages/authentication_repository/**" 11 | - ".github/workflows/authentication_repository.yaml" 12 | 13 | pull_request: 14 | paths: 15 | - "packages/authentication_repository/**" 16 | - ".github/workflows/authentication_repository.yaml" 17 | 18 | jobs: 19 | build: 20 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1 21 | with: 22 | working_directory: packages/authentication_repository 23 | -------------------------------------------------------------------------------- /.github/workflows/geometry.yaml: -------------------------------------------------------------------------------- 1 | name: geometry 2 | 3 | concurrency: 4 | group: ${{ github.workflow }}-${{ github.ref }} 5 | cancel-in-progress: true 6 | 7 | on: 8 | push: 9 | paths: 10 | - "packages/geometry/**" 11 | - ".github/workflows/geometry.yaml" 12 | 13 | pull_request: 14 | paths: 15 | - "packages/geometry/**" 16 | - ".github/workflows/geometry.yaml" 17 | 18 | jobs: 19 | build: 20 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/dart_package.yml@v1 21 | with: 22 | working_directory: packages/geometry 23 | -------------------------------------------------------------------------------- /.github/workflows/leaderboard_repository.yaml: -------------------------------------------------------------------------------- 1 | name: leaderboard_repository 2 | 3 | concurrency: 4 | group: ${{ github.workflow }}-${{ github.ref }} 5 | cancel-in-progress: true 6 | 7 | on: 8 | push: 9 | paths: 10 | - "packages/leaderboard_repository/**" 11 | - ".github/workflows/leaderboard_repository.yaml" 12 | 13 | pull_request: 14 | paths: 15 | - "packages/leaderboard_repository/**" 16 | - ".github/workflows/leaderboard_repository.yaml" 17 | 18 | jobs: 19 | build: 20 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1 21 | with: 22 | working_directory: packages/leaderboard_repository 23 | -------------------------------------------------------------------------------- /.github/workflows/main.yaml: -------------------------------------------------------------------------------- 1 | name: pinball 2 | 3 | concurrency: 4 | group: ${{ github.workflow }}-${{ github.ref }} 5 | cancel-in-progress: true 6 | 7 | on: [pull_request, push] 8 | 9 | jobs: 10 | build: 11 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1 12 | with: 13 | flutter_channel: stable 14 | flutter_version: 2.10.5 15 | coverage_excludes: "lib/gen/*.dart" 16 | test_optimization: false 17 | 18 | -------------------------------------------------------------------------------- /.github/workflows/pinball_audio.yaml: -------------------------------------------------------------------------------- 1 | name: pinball_audio 2 | 3 | concurrency: 4 | group: ${{ github.workflow }}-${{ github.ref }} 5 | cancel-in-progress: true 6 | 7 | on: 8 | push: 9 | paths: 10 | - "packages/pinball_audio/**" 11 | - ".github/workflows/pinball_audio.yaml" 12 | 13 | pull_request: 14 | paths: 15 | - "packages/pinball_audio/**" 16 | - ".github/workflows/pinball_audio.yaml" 17 | 18 | jobs: 19 | build: 20 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1 21 | with: 22 | working_directory: packages/pinball_audio 23 | coverage_excludes: "lib/gen/*.dart" 24 | -------------------------------------------------------------------------------- /.github/workflows/pinball_components.yaml: -------------------------------------------------------------------------------- 1 | name: pinball_components 2 | 3 | concurrency: 4 | group: ${{ github.workflow }}-${{ github.ref }} 5 | cancel-in-progress: true 6 | 7 | on: 8 | push: 9 | paths: 10 | - "packages/pinball_components/**" 11 | - ".github/workflows/pinball_components.yaml" 12 | 13 | pull_request: 14 | paths: 15 | - "packages/pinball_components/**" 16 | - ".github/workflows/pinball_components.yaml" 17 | 18 | jobs: 19 | build: 20 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1 21 | with: 22 | working_directory: packages/pinball_components 23 | coverage_excludes: "lib/gen/*.dart" 24 | test_optimization: false 25 | -------------------------------------------------------------------------------- /.github/workflows/pinball_flame.yaml: -------------------------------------------------------------------------------- 1 | name: pinball_flame 2 | 3 | concurrency: 4 | group: ${{ github.workflow }}-${{ github.ref }} 5 | cancel-in-progress: true 6 | 7 | on: 8 | push: 9 | paths: 10 | - "packages/pinball_flame/**" 11 | - ".github/workflows/pinball_flame.yaml" 12 | 13 | pull_request: 14 | paths: 15 | - "packages/pinball_flame/**" 16 | - ".github/workflows/pinball_flame.yaml" 17 | 18 | jobs: 19 | build: 20 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1 21 | with: 22 | working_directory: packages/pinball_flame 23 | coverage_excludes: "lib/gen/*.dart" 24 | test_optimization: false 25 | -------------------------------------------------------------------------------- /.github/workflows/pinball_theme.yaml: -------------------------------------------------------------------------------- 1 | name: pinball_theme 2 | 3 | concurrency: 4 | group: ${{ github.workflow }}-${{ github.ref }} 5 | cancel-in-progress: true 6 | 7 | on: 8 | push: 9 | paths: 10 | - "packages/pinball_theme/**" 11 | - ".github/workflows/pinball_theme.yaml" 12 | 13 | pull_request: 14 | paths: 15 | - "packages/pinball_theme/**" 16 | - ".github/workflows/pinball_theme.yaml" 17 | 18 | jobs: 19 | build: 20 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1 21 | with: 22 | working_directory: packages/pinball_theme 23 | coverage_excludes: "lib/src/generated/*.dart" -------------------------------------------------------------------------------- /.github/workflows/pinball_ui.yaml: -------------------------------------------------------------------------------- 1 | name: pinball_ui 2 | 3 | concurrency: 4 | group: ${{ github.workflow }}-${{ github.ref }} 5 | cancel-in-progress: true 6 | 7 | on: 8 | push: 9 | paths: 10 | - "packages/pinball_ui/**" 11 | - ".github/workflows/pinball_ui.yaml" 12 | 13 | pull_request: 14 | paths: 15 | - "packages/pinball_ui/**" 16 | - ".github/workflows/pinball_ui.yaml" 17 | 18 | jobs: 19 | build: 20 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1 21 | with: 22 | working_directory: packages/pinball_ui 23 | coverage_excludes: "lib/gen/*.dart" 24 | -------------------------------------------------------------------------------- /.github/workflows/platform_helper.yaml: -------------------------------------------------------------------------------- 1 | name: platform_helper 2 | 3 | concurrency: 4 | group: ${{ github.workflow }}-${{ github.ref }} 5 | cancel-in-progress: true 6 | 7 | on: 8 | push: 9 | paths: 10 | - "packages/platform_helper/**" 11 | - ".github/workflows/platform_helper.yaml" 12 | 13 | pull_request: 14 | paths: 15 | - "packages/platform_helper/**" 16 | - ".github/workflows/platform_helper.yaml" 17 | 18 | jobs: 19 | build: 20 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1 21 | with: 22 | working_directory: packages/platform_helper 23 | coverage_excludes: "lib/gen/*.dart" 24 | -------------------------------------------------------------------------------- /.github/workflows/share_repository.yaml: -------------------------------------------------------------------------------- 1 | name: share_repository 2 | 3 | on: 4 | push: 5 | paths: 6 | - "packages/share_repository/**" 7 | - ".github/workflows/share_repository.yaml" 8 | 9 | pull_request: 10 | paths: 11 | - "packages/share_repository/**" 12 | - ".github/workflows/share_repository.yaml" 13 | 14 | jobs: 15 | build: 16 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1 17 | with: 18 | working_directory: packages/share_repository 19 | -------------------------------------------------------------------------------- /.github/workflows/spell_check.yaml: -------------------------------------------------------------------------------- 1 | name: spell_check 2 | 3 | concurrency: 4 | group: ${{ github.workflow }}-${{ github.ref }} 5 | cancel-in-progress: true 6 | 7 | on: [pull_request] 8 | 9 | jobs: 10 | build: 11 | name: Spell Check 12 | runs-on: ubuntu-latest 13 | steps: 14 | - name: Checkout 15 | uses: actions/checkout@v2 16 | 17 | - name: Check spelling 18 | uses: zwaldowski/cspell-action@v1 19 | with: 20 | paths: '**/*.{dart,arb,md}' 21 | config: .vscode/cspell.json -------------------------------------------------------------------------------- /.idea/runConfigurations/main.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: 9b2d32b605630f28625709ebd9d78ab3016b2bf6 8 | channel: stable 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // See https://go.microsoft.com/fwlink/?LinkId=827846 3 | // for the documentation about the extensions.json format 4 | "recommendations": [ 5 | "dart-code.dart-code", 6 | "dart-code.flutter", 7 | "felixangelov.bloc" 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "Launch pinball", 9 | "request": "launch", 10 | "type": "dart", 11 | "program": "lib/main.dart" 12 | }, 13 | { 14 | "name": "Launch component sandbox", 15 | "request": "launch", 16 | "type": "dart", 17 | "program": "packages/pinball_components/sandbox/lib/main.dart" 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:very_good_analysis/analysis_options.2.4.0.yaml 2 | analyzer: 3 | exclude: 4 | - lib/**/*.gen.dart 5 | linter: 6 | rules: 7 | public_member_api_docs: false -------------------------------------------------------------------------------- /art/readme_header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/art/readme_header.png -------------------------------------------------------------------------------- /assets/images/bonus_animation/android_spaceship.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/assets/images/bonus_animation/android_spaceship.png -------------------------------------------------------------------------------- /assets/images/bonus_animation/dash_nest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/assets/images/bonus_animation/dash_nest.png -------------------------------------------------------------------------------- /assets/images/bonus_animation/dino_chomp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/assets/images/bonus_animation/dino_chomp.png -------------------------------------------------------------------------------- /assets/images/bonus_animation/google_word.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/assets/images/bonus_animation/google_word.png -------------------------------------------------------------------------------- /assets/images/bonus_animation/sparky_turbo_charge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/assets/images/bonus_animation/sparky_turbo_charge.png -------------------------------------------------------------------------------- /assets/images/components/key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/assets/images/components/key.png -------------------------------------------------------------------------------- /assets/images/components/space.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/assets/images/components/space.png -------------------------------------------------------------------------------- /assets/images/loading_game/io_pinball.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/assets/images/loading_game/io_pinball.png -------------------------------------------------------------------------------- /assets/images/score/mini_score_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/assets/images/score/mini_score_background.png -------------------------------------------------------------------------------- /firebase.json: -------------------------------------------------------------------------------- 1 | { 2 | "firestore": { 3 | "rules": "firestore.rules" 4 | }, 5 | "hosting": { 6 | "public": "build/web", 7 | "site": "", 8 | "ignore": ["firebase.json", "**/.*", "**/node_modules/**"], 9 | "headers": [ 10 | { 11 | "source": "**/*.@(jpg|jpeg|gif|png)", 12 | "headers": [ 13 | { 14 | "key": "Cache-Control", 15 | "value": "max-age=3600" 16 | } 17 | ] 18 | }, 19 | { 20 | "source": "**", 21 | "headers": [ 22 | { 23 | "key": "Cache-Control", 24 | "value": "no-cache, no-store, must-revalidate" 25 | } 26 | ] 27 | } 28 | ] 29 | }, 30 | "storage": { 31 | "rules": "storage.rules" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /functions/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ -------------------------------------------------------------------------------- /functions/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "functions", 3 | "description": "Cloud Functions for Firebase", 4 | "scripts": { 5 | "serve": "firebase emulators:start --only functions", 6 | "shell": "firebase functions:shell", 7 | "start": "npm run shell", 8 | "deploy": "firebase deploy --only functions", 9 | "logs": "firebase functions:log" 10 | }, 11 | "engines": { 12 | "node": "16" 13 | }, 14 | "main": "index.js", 15 | "dependencies": { 16 | "firebase-admin": "^10.0.2", 17 | "firebase-functions": "^3.18.0" 18 | }, 19 | "devDependencies": { 20 | "firebase-functions-test": "^0.2.0" 21 | }, 22 | "private": true 23 | } 24 | -------------------------------------------------------------------------------- /l10n.yaml: -------------------------------------------------------------------------------- 1 | arb-dir: lib/l10n/arb 2 | template-arb-file: app_en.arb 3 | output-localization-file: app_localizations.dart 4 | nullable-getter: false 5 | -------------------------------------------------------------------------------- /lib/app/app.dart: -------------------------------------------------------------------------------- 1 | export 'view/app.dart'; 2 | -------------------------------------------------------------------------------- /lib/assets_manager/assets_manager.dart: -------------------------------------------------------------------------------- 1 | export 'cubit/assets_manager_cubit.dart'; 2 | export 'views/views.dart'; 3 | -------------------------------------------------------------------------------- /lib/assets_manager/views/views.dart: -------------------------------------------------------------------------------- 1 | export 'assets_loading_page.dart'; 2 | -------------------------------------------------------------------------------- /lib/game/behaviors/animatronic_looping_behavior.dart: -------------------------------------------------------------------------------- 1 | import 'package:flame/components.dart'; 2 | import 'package:pinball_flame/pinball_flame.dart'; 3 | 4 | class AnimatronicLoopingBehavior extends TimerComponent 5 | with ParentIsA { 6 | AnimatronicLoopingBehavior({ 7 | required double animationCoolDown, 8 | }) : super(period: animationCoolDown); 9 | 10 | @override 11 | Future onLoad() async { 12 | await super.onLoad(); 13 | parent.animation?.onComplete = () { 14 | parent.animation?.reset(); 15 | parent.playing = false; 16 | timer 17 | ..reset() 18 | ..start(); 19 | }; 20 | } 21 | 22 | @override 23 | void onTick() { 24 | parent.playing = true; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /lib/game/behaviors/behaviors.dart: -------------------------------------------------------------------------------- 1 | export 'animatronic_looping_behavior.dart'; 2 | export 'ball_spawning_behavior.dart'; 3 | export 'bonus_ball_spawning_behavior.dart'; 4 | export 'bonus_noise_behavior.dart'; 5 | export 'bumper_noise_behavior.dart'; 6 | export 'camera_focusing_behavior.dart'; 7 | export 'character_selection_behavior.dart'; 8 | export 'cow_bumper_noise_behavior.dart'; 9 | export 'kicker_noise_behavior.dart'; 10 | export 'rollover_noise_behavior.dart'; 11 | export 'scoring_behavior.dart'; 12 | -------------------------------------------------------------------------------- /lib/game/behaviors/bumper_noise_behavior.dart: -------------------------------------------------------------------------------- 1 | import 'package:flame_forge2d/flame_forge2d.dart'; 2 | import 'package:pinball_audio/pinball_audio.dart'; 3 | import 'package:pinball_flame/pinball_flame.dart'; 4 | 5 | class BumperNoiseBehavior extends ContactBehavior { 6 | @override 7 | void beginContact(Object other, Contact contact) { 8 | super.beginContact(other, contact); 9 | readProvider().play(PinballAudio.bumper); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /lib/game/behaviors/cow_bumper_noise_behavior.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: public_member_api_docs 2 | 3 | import 'package:flame_forge2d/flame_forge2d.dart'; 4 | import 'package:pinball_audio/pinball_audio.dart'; 5 | import 'package:pinball_flame/pinball_flame.dart'; 6 | 7 | class CowBumperNoiseBehavior extends ContactBehavior { 8 | @override 9 | void beginContact(Object other, Contact contact) { 10 | super.beginContact(other, contact); 11 | readProvider().play(PinballAudio.cowMoo); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lib/game/behaviors/kicker_noise_behavior.dart: -------------------------------------------------------------------------------- 1 | import 'package:flame_forge2d/flame_forge2d.dart'; 2 | import 'package:pinball_audio/pinball_audio.dart'; 3 | import 'package:pinball_flame/pinball_flame.dart'; 4 | 5 | class KickerNoiseBehavior extends ContactBehavior { 6 | @override 7 | void beginContact(Object other, Contact contact) { 8 | super.beginContact(other, contact); 9 | readProvider().play(PinballAudio.kicker); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /lib/game/behaviors/rollover_noise_behavior.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: public_member_api_docs 2 | 3 | import 'package:flame_forge2d/flame_forge2d.dart'; 4 | import 'package:pinball_audio/pinball_audio.dart'; 5 | import 'package:pinball_flame/pinball_flame.dart'; 6 | 7 | class RolloverNoiseBehavior extends ContactBehavior { 8 | @override 9 | void beginContact(Object other, Contact contact) { 10 | super.beginContact(other, contact); 11 | readProvider().play(PinballAudio.rollover); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lib/game/components/android_acres/behaviors/behaviors.dart: -------------------------------------------------------------------------------- 1 | export 'android_spaceship_bonus_behavior.dart'; 2 | export 'ramp_bonus_behavior.dart'; 3 | export 'ramp_multiplier_behavior.dart'; 4 | export 'ramp_progress_behavior.dart'; 5 | export 'ramp_reset_behavior.dart'; 6 | export 'ramp_shot_behavior.dart'; 7 | -------------------------------------------------------------------------------- /lib/game/components/android_acres/behaviors/ramp_reset_behavior.dart: -------------------------------------------------------------------------------- 1 | import 'package:flame/components.dart'; 2 | import 'package:flame_bloc/flame_bloc.dart'; 3 | import 'package:pinball/game/game.dart'; 4 | import 'package:pinball_components/pinball_components.dart'; 5 | import 'package:pinball_flame/pinball_flame.dart'; 6 | 7 | /// Reset [SpaceshipRamp] state when GameState.rounds changes. 8 | class RampResetBehavior extends Component 9 | with FlameBlocListenable { 10 | @override 11 | bool listenWhen(GameState previousState, GameState newState) { 12 | return previousState.rounds != newState.rounds; 13 | } 14 | 15 | @override 16 | void onNewState(GameState state) { 17 | readBloc().onReset(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /lib/game/components/backbox/displays/displays.dart: -------------------------------------------------------------------------------- 1 | export 'game_over_info_display.dart'; 2 | export 'initials_input_display.dart'; 3 | export 'initials_submission_failure_display.dart'; 4 | export 'initials_submission_success_display.dart'; 5 | export 'leaderboard_display.dart'; 6 | export 'leaderboard_failure_display.dart'; 7 | export 'loading_display.dart'; 8 | export 'share_display.dart'; 9 | -------------------------------------------------------------------------------- /lib/game/components/backbox/displays/leaderboard_failure_display.dart: -------------------------------------------------------------------------------- 1 | import 'package:flame/components.dart'; 2 | import 'package:pinball/l10n/l10n.dart'; 3 | import 'package:pinball_components/pinball_components.dart'; 4 | import 'package:pinball_flame/pinball_flame.dart'; 5 | 6 | /// {@template leaderboard_failure_display} 7 | /// Display showing an error message when the leaderboard couldn't be loaded 8 | /// {@endtemplate} 9 | class LeaderboardFailureDisplay extends Component { 10 | /// {@macro leaderboard_failure_display} 11 | LeaderboardFailureDisplay(); 12 | 13 | @override 14 | Future onLoad() async { 15 | final l10n = readProvider(); 16 | await add( 17 | ErrorComponent( 18 | label: l10n.leaderboardErrorMessage, 19 | position: Vector2(0, -18), 20 | ), 21 | ); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /lib/game/components/components.dart: -------------------------------------------------------------------------------- 1 | export 'android_acres/android_acres.dart'; 2 | export 'backbox/backbox.dart'; 3 | export 'bottom_group.dart'; 4 | export 'dino_desert/dino_desert.dart'; 5 | export 'drain/drain.dart'; 6 | export 'flutter_forest/flutter_forest.dart'; 7 | export 'game_bloc_status_listener.dart'; 8 | export 'google_gallery/google_gallery.dart'; 9 | export 'launcher.dart'; 10 | export 'multiballs/multiballs.dart'; 11 | export 'multipliers/multipliers.dart'; 12 | export 'sparky_scorch/sparky_scorch.dart'; 13 | -------------------------------------------------------------------------------- /lib/game/components/dino_desert/behaviors/behaviors.dart: -------------------------------------------------------------------------------- 1 | export 'chrome_dino_bonus_behavior.dart'; 2 | -------------------------------------------------------------------------------- /lib/game/components/drain/behaviors/behaviors.dart: -------------------------------------------------------------------------------- 1 | export 'draining_behavior.dart'; 2 | -------------------------------------------------------------------------------- /lib/game/components/flutter_forest/behaviors/behaviors.dart: -------------------------------------------------------------------------------- 1 | export 'flutter_forest_bonus_behavior.dart'; 2 | -------------------------------------------------------------------------------- /lib/game/components/google_gallery/behaviors/behaviors.dart: -------------------------------------------------------------------------------- 1 | export 'google_word_bonus_behavior.dart'; 2 | -------------------------------------------------------------------------------- /lib/game/components/launcher.dart: -------------------------------------------------------------------------------- 1 | import 'package:flame/components.dart'; 2 | import 'package:pinball_components/pinball_components.dart' hide Assets; 3 | 4 | /// {@template launcher} 5 | /// Channel on the right side of the board containing the [LaunchRamp], 6 | /// [Plunger], and [RocketSpriteComponent]. 7 | /// {@endtemplate} 8 | class Launcher extends Component { 9 | /// {@macro launcher} 10 | Launcher() 11 | : super( 12 | children: [ 13 | LaunchRamp(), 14 | Flapper(), 15 | Plunger()..initialPosition = Vector2(41, 43.7), 16 | RocketSpriteComponent()..position = Vector2(42.8, 62.3), 17 | ], 18 | ); 19 | } 20 | -------------------------------------------------------------------------------- /lib/game/components/multiballs/behaviors/behaviors.dart: -------------------------------------------------------------------------------- 1 | export 'multiballs_behavior.dart'; 2 | -------------------------------------------------------------------------------- /lib/game/components/multipliers/behaviors/behaviors.dart: -------------------------------------------------------------------------------- 1 | export 'multipliers_behavior.dart'; 2 | -------------------------------------------------------------------------------- /lib/game/components/sparky_scorch/behaviors/behaviors.dart: -------------------------------------------------------------------------------- 1 | export 'sparky_computer_bonus_behavior.dart'; 2 | -------------------------------------------------------------------------------- /lib/game/game.dart: -------------------------------------------------------------------------------- 1 | export 'bloc/game_bloc.dart'; 2 | export 'components/components.dart'; 3 | export 'game_assets.dart'; 4 | export 'pinball_game.dart'; 5 | export 'view/view.dart'; 6 | -------------------------------------------------------------------------------- /lib/game/view/view.dart: -------------------------------------------------------------------------------- 1 | export 'pinball_game_page.dart'; 2 | export 'widgets/widgets.dart'; 3 | -------------------------------------------------------------------------------- /lib/game/view/widgets/play_button_overlay.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_bloc/flutter_bloc.dart'; 3 | import 'package:pinball/l10n/l10n.dart'; 4 | import 'package:pinball/start_game/start_game.dart'; 5 | import 'package:pinball_ui/pinball_ui.dart'; 6 | 7 | /// {@template play_button_overlay} 8 | /// [Widget] that renders the button responsible to starting the game 9 | /// {@endtemplate} 10 | class PlayButtonOverlay extends StatelessWidget { 11 | /// {@macro play_button_overlay} 12 | const PlayButtonOverlay({Key? key}) : super(key: key); 13 | 14 | @override 15 | Widget build(BuildContext context) { 16 | final l10n = context.l10n; 17 | 18 | return PinballButton( 19 | text: l10n.play, 20 | onTap: () { 21 | context.read().add(const PlayTapped()); 22 | }, 23 | ); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /lib/game/view/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'bonus_animation.dart'; 2 | export 'game_hud.dart'; 3 | export 'mobile_controls.dart'; 4 | export 'mobile_dpad.dart'; 5 | export 'play_button_overlay.dart'; 6 | export 'replay_button_overlay.dart'; 7 | export 'round_count_display.dart'; 8 | export 'score_view.dart'; 9 | -------------------------------------------------------------------------------- /lib/gen/gen.dart: -------------------------------------------------------------------------------- 1 | export 'assets.gen.dart'; 2 | -------------------------------------------------------------------------------- /lib/how_to_play/how_to_play.dart: -------------------------------------------------------------------------------- 1 | export 'widgets/widgets.dart'; 2 | -------------------------------------------------------------------------------- /lib/how_to_play/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'how_to_play_dialog.dart'; 2 | -------------------------------------------------------------------------------- /lib/l10n/l10n.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/widgets.dart'; 2 | import 'package:flutter_gen/gen_l10n/app_localizations.dart'; 3 | 4 | export 'package:flutter_gen/gen_l10n/app_localizations.dart'; 5 | 6 | extension AppLocalizationsX on BuildContext { 7 | AppLocalizations get l10n => AppLocalizations.of(this); 8 | } 9 | -------------------------------------------------------------------------------- /lib/more_information/more_information.dart: -------------------------------------------------------------------------------- 1 | export 'more_information_dialog.dart'; 2 | -------------------------------------------------------------------------------- /lib/select_character/cubit/character_theme_cubit.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | import 'package:equatable/equatable.dart'; 3 | import 'package:pinball_theme/pinball_theme.dart'; 4 | 5 | part 'character_theme_state.dart'; 6 | 7 | class CharacterThemeCubit extends Cubit { 8 | CharacterThemeCubit() : super(const CharacterThemeState.initial()); 9 | 10 | void characterSelected(CharacterTheme characterTheme) { 11 | emit(CharacterThemeState(characterTheme)); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lib/select_character/cubit/character_theme_state.dart: -------------------------------------------------------------------------------- 1 | part of 'character_theme_cubit.dart'; 2 | 3 | class CharacterThemeState extends Equatable { 4 | const CharacterThemeState(this.characterTheme); 5 | 6 | const CharacterThemeState.initial() : characterTheme = const DashTheme(); 7 | 8 | final CharacterTheme characterTheme; 9 | 10 | bool get isSparkySelected => characterTheme == const SparkyTheme(); 11 | 12 | bool get isDashSelected => characterTheme == const DashTheme(); 13 | 14 | bool get isAndroidSelected => characterTheme == const AndroidTheme(); 15 | 16 | bool get isDinoSelected => characterTheme == const DinoTheme(); 17 | 18 | @override 19 | List get props => [characterTheme]; 20 | } 21 | -------------------------------------------------------------------------------- /lib/select_character/select_character.dart: -------------------------------------------------------------------------------- 1 | export 'cubit/character_theme_cubit.dart'; 2 | export 'view/view.dart'; 3 | -------------------------------------------------------------------------------- /lib/select_character/view/view.dart: -------------------------------------------------------------------------------- 1 | export 'character_selection_page.dart'; 2 | export 'selected_character.dart'; 3 | -------------------------------------------------------------------------------- /lib/start_game/start_game.dart: -------------------------------------------------------------------------------- 1 | export 'bloc/start_game_bloc.dart'; 2 | export 'widgets/start_game_listener.dart'; 3 | -------------------------------------------------------------------------------- /packages/authentication_repository/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # VSCode related 19 | .vscode/ 20 | 21 | # Flutter/Dart/Pub related 22 | **/doc/api/ 23 | **/ios/Flutter/.last_build_id 24 | .dart_tool/ 25 | .flutter-plugins 26 | .flutter-plugins-dependencies 27 | .packages 28 | .pub-cache/ 29 | .pub/ 30 | /build/ 31 | 32 | # Web related 33 | lib/generated_plugin_registrant.dart 34 | 35 | # Symbolication related 36 | app.*.symbols 37 | 38 | # Obfuscation related 39 | app.*.map.json 40 | -------------------------------------------------------------------------------- /packages/authentication_repository/README.md: -------------------------------------------------------------------------------- 1 | # authentication_repository 2 | 3 | [![style: very good analysis][very_good_analysis_badge]][very_good_analysis_link] 4 | [![License: MIT][license_badge]][license_link] 5 | 6 | Repository to manage user authentication. 7 | 8 | [license_badge]: https://img.shields.io/badge/license-MIT-blue.svg 9 | [license_link]: https://opensource.org/licenses/MIT 10 | [very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg 11 | [very_good_analysis_link]: https://pub.dev/packages/very_good_analysis -------------------------------------------------------------------------------- /packages/authentication_repository/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:very_good_analysis/analysis_options.2.4.0.yaml -------------------------------------------------------------------------------- /packages/authentication_repository/lib/authentication_repository.dart: -------------------------------------------------------------------------------- 1 | library authentication_repository; 2 | 3 | export 'src/authentication_repository.dart'; 4 | -------------------------------------------------------------------------------- /packages/authentication_repository/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: authentication_repository 2 | description: Repository to manage user authentication. 3 | version: 1.0.0+1 4 | publish_to: none 5 | 6 | environment: 7 | sdk: ">=2.16.0 <3.0.0" 8 | 9 | dependencies: 10 | firebase_auth: ^3.3.16 11 | flutter: 12 | sdk: flutter 13 | 14 | dev_dependencies: 15 | flutter_test: 16 | sdk: flutter 17 | mocktail: ^0.2.0 18 | very_good_analysis: ^2.4.0 -------------------------------------------------------------------------------- /packages/geometry/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://www.dartlang.org/guides/libraries/private-files 2 | 3 | # Files and directories created by pub 4 | .dart_tool/ 5 | .packages 6 | build/ 7 | pubspec.lock -------------------------------------------------------------------------------- /packages/geometry/README.md: -------------------------------------------------------------------------------- 1 | # geometry 2 | 3 | [![style: very good analysis][very_good_analysis_badge]][very_good_analysis_link] 4 | [![License: MIT][license_badge]][license_link] 5 | 6 | Provides a set of helpers for working with 2D geometry. 7 | 8 | [license_badge]: https://img.shields.io/badge/license-MIT-blue.svg 9 | [license_link]: https://opensource.org/licenses/MIT 10 | [very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg 11 | [very_good_analysis_link]: https://pub.dev/packages/very_good_analysis -------------------------------------------------------------------------------- /packages/geometry/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:very_good_analysis/analysis_options.2.4.0.yaml -------------------------------------------------------------------------------- /packages/geometry/lib/geometry.dart: -------------------------------------------------------------------------------- 1 | library geometry; 2 | 3 | export 'src/geometry.dart'; 4 | -------------------------------------------------------------------------------- /packages/geometry/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: geometry 2 | description: Provides a set of helpers for working with 2D geometry. 3 | version: 1.0.0+1 4 | publish_to: none 5 | 6 | environment: 7 | sdk: ">=2.16.0 <3.0.0" 8 | 9 | dependencies: 10 | vector_math: ^2.1.1 11 | 12 | dev_dependencies: 13 | mocktail: ^0.2.0 14 | test: ^1.19.2 15 | very_good_analysis: ^2.4.0 16 | -------------------------------------------------------------------------------- /packages/leaderboard_repository/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # VSCode related 19 | .vscode/ 20 | 21 | # Flutter/Dart/Pub related 22 | **/doc/api/ 23 | **/ios/Flutter/.last_build_id 24 | .dart_tool/ 25 | .flutter-plugins 26 | .flutter-plugins-dependencies 27 | .packages 28 | .pub-cache/ 29 | .pub/ 30 | /build/ 31 | 32 | # Web related 33 | lib/generated_plugin_registrant.dart 34 | 35 | # Symbolication related 36 | app.*.symbols 37 | 38 | # Obfuscation related 39 | app.*.map.json 40 | -------------------------------------------------------------------------------- /packages/leaderboard_repository/README.md: -------------------------------------------------------------------------------- 1 | # leaderboard_repository 2 | 3 | [![style: very good analysis][very_good_analysis_badge]][very_good_analysis_link] 4 | [![License: MIT][license_badge]][license_link] 5 | 6 | Repository to access leaderboard data in Firebase Cloud Firestore. 7 | 8 | [license_badge]: https://img.shields.io/badge/license-MIT-blue.svg 9 | [license_link]: https://opensource.org/licenses/MIT 10 | [very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg 11 | [very_good_analysis_link]: https://pub.dev/packages/very_good_analysis -------------------------------------------------------------------------------- /packages/leaderboard_repository/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:very_good_analysis/analysis_options.2.4.0.yaml -------------------------------------------------------------------------------- /packages/leaderboard_repository/lib/leaderboard_repository.dart: -------------------------------------------------------------------------------- 1 | library leaderboard_repository; 2 | 3 | export 'src/leaderboard_repository.dart'; 4 | export 'src/models/models.dart'; 5 | -------------------------------------------------------------------------------- /packages/leaderboard_repository/lib/src/models/models.dart: -------------------------------------------------------------------------------- 1 | export 'exceptions.dart'; 2 | export 'leaderboard_entry_data.dart'; 3 | -------------------------------------------------------------------------------- /packages/leaderboard_repository/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: leaderboard_repository 2 | description: Repository to access leaderboard data in Firebase Cloud Firestore. 3 | version: 1.0.0+1 4 | publish_to: none 5 | 6 | environment: 7 | sdk: ">=2.16.0 <3.0.0" 8 | 9 | dependencies: 10 | cloud_firestore: ^3.1.10 11 | equatable: ^2.0.3 12 | flutter: 13 | sdk: flutter 14 | json_annotation: ^4.4.0 15 | 16 | dev_dependencies: 17 | build_runner: ^2.1.8 18 | flutter_test: 19 | sdk: flutter 20 | json_serializable: ^6.1.5 21 | mocktail: ^0.2.0 22 | test: ^1.19.2 23 | very_good_analysis: ^2.4.0 -------------------------------------------------------------------------------- /packages/pinball_audio/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # VSCode related 19 | .vscode/ 20 | 21 | # Flutter/Dart/Pub related 22 | **/doc/api/ 23 | **/ios/Flutter/.last_build_id 24 | .dart_tool/ 25 | .flutter-plugins 26 | .flutter-plugins-dependencies 27 | .packages 28 | .pub-cache/ 29 | .pub/ 30 | /build/ 31 | 32 | # Web related 33 | lib/generated_plugin_registrant.dart 34 | 35 | # Symbolication related 36 | app.*.symbols 37 | 38 | # Obfuscation related 39 | app.*.map.json 40 | -------------------------------------------------------------------------------- /packages/pinball_audio/README.md: -------------------------------------------------------------------------------- 1 | # pinball_audio 2 | 3 | [![style: very good analysis][very_good_analysis_badge]][very_good_analysis_link] 4 | [![License: MIT][license_badge]][license_link] 5 | 6 | Package with the sound manager for the pinball game 7 | 8 | [license_badge]: https://img.shields.io/badge/license-MIT-blue.svg 9 | [license_link]: https://opensource.org/licenses/MIT 10 | [very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg 11 | [very_good_analysis_link]: https://pub.dev/packages/very_good_analysis -------------------------------------------------------------------------------- /packages/pinball_audio/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:very_good_analysis/analysis_options.2.4.0.yaml 2 | analyzer: 3 | exclude: 4 | - lib/**/*.gen.dart 5 | -------------------------------------------------------------------------------- /packages/pinball_audio/assets/music/background.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_audio/assets/music/background.mp3 -------------------------------------------------------------------------------- /packages/pinball_audio/assets/sfx/android.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_audio/assets/sfx/android.mp3 -------------------------------------------------------------------------------- /packages/pinball_audio/assets/sfx/bumper_a.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_audio/assets/sfx/bumper_a.mp3 -------------------------------------------------------------------------------- /packages/pinball_audio/assets/sfx/bumper_b.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_audio/assets/sfx/bumper_b.mp3 -------------------------------------------------------------------------------- /packages/pinball_audio/assets/sfx/cow_moo.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_audio/assets/sfx/cow_moo.mp3 -------------------------------------------------------------------------------- /packages/pinball_audio/assets/sfx/dash.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_audio/assets/sfx/dash.mp3 -------------------------------------------------------------------------------- /packages/pinball_audio/assets/sfx/dino.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_audio/assets/sfx/dino.mp3 -------------------------------------------------------------------------------- /packages/pinball_audio/assets/sfx/flipper.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_audio/assets/sfx/flipper.mp3 -------------------------------------------------------------------------------- /packages/pinball_audio/assets/sfx/game_over_voice_over.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_audio/assets/sfx/game_over_voice_over.mp3 -------------------------------------------------------------------------------- /packages/pinball_audio/assets/sfx/google.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_audio/assets/sfx/google.mp3 -------------------------------------------------------------------------------- /packages/pinball_audio/assets/sfx/io_pinball_voice_over.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_audio/assets/sfx/io_pinball_voice_over.mp3 -------------------------------------------------------------------------------- /packages/pinball_audio/assets/sfx/kicker_a.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_audio/assets/sfx/kicker_a.mp3 -------------------------------------------------------------------------------- /packages/pinball_audio/assets/sfx/kicker_b.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_audio/assets/sfx/kicker_b.mp3 -------------------------------------------------------------------------------- /packages/pinball_audio/assets/sfx/launcher.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_audio/assets/sfx/launcher.mp3 -------------------------------------------------------------------------------- /packages/pinball_audio/assets/sfx/rollover.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_audio/assets/sfx/rollover.mp3 -------------------------------------------------------------------------------- /packages/pinball_audio/assets/sfx/sparky.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_audio/assets/sfx/sparky.mp3 -------------------------------------------------------------------------------- /packages/pinball_audio/lib/pinball_audio.dart: -------------------------------------------------------------------------------- 1 | library pinball_audio; 2 | 3 | export 'src/pinball_audio.dart'; 4 | -------------------------------------------------------------------------------- /packages/pinball_audio/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: pinball_audio 2 | description: Package with the sound manager for the pinball game 3 | version: 1.0.0+1 4 | publish_to: none 5 | 6 | environment: 7 | sdk: ">=2.16.0 <3.0.0" 8 | 9 | dependencies: 10 | audioplayers: ^0.20.1 11 | clock: ^1.1.0 12 | flame_audio: ^1.0.1 13 | flutter: 14 | sdk: flutter 15 | 16 | dev_dependencies: 17 | flutter_test: 18 | sdk: flutter 19 | mocktail: ^0.3.0 20 | very_good_analysis: ^2.4.0 21 | 22 | flutter_gen: 23 | line_length: 80 24 | assets: 25 | package_parameter_enabled: true 26 | 27 | flutter: 28 | assets: 29 | - assets/sfx/ 30 | - assets/music/ 31 | -------------------------------------------------------------------------------- /packages/pinball_components/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # VSCode related 19 | .vscode/ 20 | 21 | # Flutter/Dart/Pub related 22 | **/doc/api/ 23 | **/ios/Flutter/.last_build_id 24 | .dart_tool/ 25 | .flutter-plugins 26 | .flutter-plugins-dependencies 27 | .packages 28 | .pub-cache/ 29 | .pub/ 30 | /build/ 31 | 32 | # Web related 33 | lib/generated_plugin_registrant.dart 34 | 35 | # Symbolication related 36 | app.*.symbols 37 | 38 | # Obfuscation related 39 | app.*.map.json 40 | -------------------------------------------------------------------------------- /packages/pinball_components/README.md: -------------------------------------------------------------------------------- 1 | # pinball_components 2 | 3 | [![style: very good analysis][very_good_analysis_badge]][very_good_analysis_link] 4 | [![License: MIT][license_badge]][license_link] 5 | 6 | Package with the UI game components for the Pinball Game 7 | 8 | [license_badge]: https://img.shields.io/badge/license-MIT-blue.svg 9 | [license_link]: https://opensource.org/licenses/MIT 10 | [very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg 11 | [very_good_analysis_link]: https://pub.dev/packages/very_good_analysis -------------------------------------------------------------------------------- /packages/pinball_components/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:very_good_analysis/analysis_options.2.4.0.yaml 2 | analyzer: 3 | exclude: 4 | - lib/**/*.gen.dart 5 | linter: 6 | rules: 7 | public_member_api_docs: false -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/android/bumper/a/dimmed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/android/bumper/a/dimmed.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/android/bumper/a/lit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/android/bumper/a/lit.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/android/bumper/b/dimmed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/android/bumper/b/dimmed.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/android/bumper/b/lit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/android/bumper/b/lit.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/android/bumper/cow/dimmed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/android/bumper/cow/dimmed.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/android/bumper/cow/lit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/android/bumper/cow/lit.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/android/rail/exit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/android/rail/exit.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/android/rail/main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/android/rail/main.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/android/ramp/arrow/active1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/android/ramp/arrow/active1.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/android/ramp/arrow/active2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/android/ramp/arrow/active2.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/android/ramp/arrow/active3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/android/ramp/arrow/active3.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/android/ramp/arrow/active4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/android/ramp/arrow/active4.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/android/ramp/arrow/active5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/android/ramp/arrow/active5.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/android/ramp/arrow/inactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/android/ramp/arrow/inactive.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/android/ramp/board_opening.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/android/ramp/board_opening.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/android/ramp/main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/android/ramp/main.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/android/ramp/railing_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/android/ramp/railing_background.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/android/ramp/railing_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/android/ramp/railing_foreground.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/android/spaceship/animatronic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/android/spaceship/animatronic.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/android/spaceship/light_beam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/android/spaceship/light_beam.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/android/spaceship/saucer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/android/spaceship/saucer.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/backbox/button/facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/backbox/button/facebook.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/backbox/button/twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/backbox/button/twitter.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/backbox/display_divider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/backbox/display_divider.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/backbox/display_title_decoration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/backbox/display_title_decoration.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/backbox/marquee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/backbox/marquee.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/ball/flame_effect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/ball/flame_effect.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/baseboard/left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/baseboard/left.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/baseboard/right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/baseboard/right.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/board_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/board_background.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/boundary/bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/boundary/bottom.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/boundary/outer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/boundary/outer.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/boundary/outer_bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/boundary/outer_bottom.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/dash/animatronic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/dash/animatronic.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/dash/bumper/a/active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/dash/bumper/a/active.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/dash/bumper/a/inactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/dash/bumper/a/inactive.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/dash/bumper/b/active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/dash/bumper/b/active.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/dash/bumper/b/inactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/dash/bumper/b/inactive.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/dash/bumper/main/active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/dash/bumper/main/active.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/dash/bumper/main/inactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/dash/bumper/main/inactive.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/dino/animatronic/head.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/dino/animatronic/head.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/dino/animatronic/mouth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/dino/animatronic/mouth.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/dino/bottom_wall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/dino/bottom_wall.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/dino/top_wall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/dino/top_wall.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/dino/top_wall_tunnel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/dino/top_wall_tunnel.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/display_arrows/arrow_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/display_arrows/arrow_left.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/display_arrows/arrow_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/display_arrows/arrow_right.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/error_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/error_background.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/flapper/back_support.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/flapper/back_support.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/flapper/flap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/flapper/flap.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/flapper/front_support.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/flapper/front_support.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/flipper/left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/flipper/left.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/flipper/right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/flipper/right.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/google_rollover/left/decal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/google_rollover/left/decal.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/google_rollover/left/pin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/google_rollover/left/pin.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/google_rollover/right/decal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/google_rollover/right/decal.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/google_rollover/right/pin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/google_rollover/right/pin.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/google_word/letter1/dimmed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/google_word/letter1/dimmed.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/google_word/letter1/lit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/google_word/letter1/lit.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/google_word/letter2/dimmed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/google_word/letter2/dimmed.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/google_word/letter2/lit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/google_word/letter2/lit.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/google_word/letter3/dimmed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/google_word/letter3/dimmed.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/google_word/letter3/lit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/google_word/letter3/lit.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/google_word/letter4/dimmed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/google_word/letter4/dimmed.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/google_word/letter4/lit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/google_word/letter4/lit.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/google_word/letter5/dimmed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/google_word/letter5/dimmed.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/google_word/letter5/lit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/google_word/letter5/lit.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/google_word/letter6/dimmed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/google_word/letter6/dimmed.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/google_word/letter6/lit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/google_word/letter6/lit.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/kicker/left/dimmed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/kicker/left/dimmed.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/kicker/left/lit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/kicker/left/lit.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/kicker/right/dimmed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/kicker/right/dimmed.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/kicker/right/lit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/kicker/right/lit.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/launch_ramp/background_railing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/launch_ramp/background_railing.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/launch_ramp/foreground_railing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/launch_ramp/foreground_railing.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/launch_ramp/ramp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/launch_ramp/ramp.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/multiball/dimmed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/multiball/dimmed.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/multiball/lit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/multiball/lit.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/multiplier/x2/dimmed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/multiplier/x2/dimmed.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/multiplier/x2/lit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/multiplier/x2/lit.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/multiplier/x3/dimmed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/multiplier/x3/dimmed.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/multiplier/x3/lit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/multiplier/x3/lit.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/multiplier/x4/dimmed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/multiplier/x4/dimmed.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/multiplier/x4/lit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/multiplier/x4/lit.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/multiplier/x5/dimmed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/multiplier/x5/dimmed.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/multiplier/x5/lit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/multiplier/x5/lit.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/multiplier/x6/dimmed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/multiplier/x6/dimmed.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/multiplier/x6/lit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/multiplier/x6/lit.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/plunger/plunger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/plunger/plunger.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/plunger/rocket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/plunger/rocket.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/score/five_thousand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/score/five_thousand.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/score/one_million.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/score/one_million.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/score/twenty_thousand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/score/twenty_thousand.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/score/two_hundred_thousand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/score/two_hundred_thousand.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/signpost/active1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/signpost/active1.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/signpost/active2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/signpost/active2.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/signpost/active3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/signpost/active3.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/signpost/inactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/signpost/inactive.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/skill_shot/decal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/skill_shot/decal.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/skill_shot/dimmed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/skill_shot/dimmed.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/skill_shot/lit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/skill_shot/lit.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/skill_shot/pin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/skill_shot/pin.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/slingshot/lower.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/slingshot/lower.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/slingshot/upper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/slingshot/upper.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/sparky/animatronic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/sparky/animatronic.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/sparky/bumper/a/dimmed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/sparky/bumper/a/dimmed.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/sparky/bumper/a/lit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/sparky/bumper/a/lit.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/sparky/bumper/b/dimmed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/sparky/bumper/b/dimmed.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/sparky/bumper/b/lit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/sparky/bumper/b/lit.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/sparky/bumper/c/dimmed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/sparky/bumper/c/dimmed.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/sparky/bumper/c/lit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/sparky/bumper/c/lit.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/sparky/computer/base.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/sparky/computer/base.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/sparky/computer/glow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/sparky/computer/glow.png -------------------------------------------------------------------------------- /packages/pinball_components/assets/images/sparky/computer/top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/assets/images/sparky/computer/top.png -------------------------------------------------------------------------------- /packages/pinball_components/fonts/PixeloidMono-1G8ae.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/fonts/PixeloidMono-1G8ae.ttf -------------------------------------------------------------------------------- /packages/pinball_components/fonts/PixeloidSans-nR3g1.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/fonts/PixeloidSans-nR3g1.ttf -------------------------------------------------------------------------------- /packages/pinball_components/fonts/PixeloidSansBold-RpeJo.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/fonts/PixeloidSansBold-RpeJo.ttf -------------------------------------------------------------------------------- /packages/pinball_components/lib/gen/fonts.gen.dart: -------------------------------------------------------------------------------- 1 | /// GENERATED CODE - DO NOT MODIFY BY HAND 2 | /// ***************************************************** 3 | /// FlutterGen 4 | /// ***************************************************** 5 | 6 | // ignore_for_file: directives_ordering,unnecessary_import 7 | 8 | class FontFamily { 9 | FontFamily._(); 10 | 11 | /// Font family: PixeloidMono 12 | static const String pixeloidMono = 'PixeloidMono'; 13 | 14 | /// Font family: PixeloidSans 15 | static const String pixeloidSans = 'PixeloidSans'; 16 | } 17 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/gen/gen.dart: -------------------------------------------------------------------------------- 1 | export 'assets.gen.dart'; 2 | export 'fonts.gen.dart'; 3 | export 'pinball_fonts.dart'; 4 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/gen/pinball_fonts.dart: -------------------------------------------------------------------------------- 1 | import 'package:pinball_components/gen/fonts.gen.dart'; 2 | 3 | const String _fontPath = 'packages/pinball_components'; 4 | 5 | /// Class with the fonts available on the pinball game 6 | class PinballFonts { 7 | PinballFonts._(); 8 | 9 | /// Mono variation of the Pixeloid font 10 | static const String pixeloidMono = '$_fontPath/${FontFamily.pixeloidMono}'; 11 | 12 | /// Sans variation of the Pixeloid font 13 | static const String pixeloidSans = '$_fontPath/${FontFamily.pixeloidSans}'; 14 | } 15 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/pinball_components.dart: -------------------------------------------------------------------------------- 1 | library pinball_components; 2 | 3 | export 'gen/gen.dart'; 4 | export 'src/pinball_components.dart'; 5 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/android_animatronic/behaviors/android_animatronic_ball_contact_behavior.dart.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: public_member_api_docs 2 | 3 | import 'package:flame_forge2d/flame_forge2d.dart'; 4 | import 'package:pinball_components/pinball_components.dart'; 5 | import 'package:pinball_flame/pinball_flame.dart'; 6 | 7 | class AndroidAnimatronicBallContactBehavior 8 | extends ContactBehavior { 9 | @override 10 | void beginContact(Object other, Contact contact) { 11 | super.beginContact(other, contact); 12 | if (other is! Ball) return; 13 | readBloc().onBallContacted(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/android_animatronic/behaviors/behaviors.dart: -------------------------------------------------------------------------------- 1 | export 'android_animatronic_ball_contact_behavior.dart.dart'; 2 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/android_bumper/behaviors/android_bumper_ball_contact_behavior.dart: -------------------------------------------------------------------------------- 1 | import 'package:flame_forge2d/flame_forge2d.dart'; 2 | import 'package:pinball_components/pinball_components.dart'; 3 | import 'package:pinball_flame/pinball_flame.dart'; 4 | 5 | class AndroidBumperBallContactBehavior extends ContactBehavior { 6 | @override 7 | void beginContact(Object other, Contact contact) { 8 | super.beginContact(other, contact); 9 | if (other is! Ball) return; 10 | parent.bloc.onBallContacted(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/android_bumper/behaviors/behaviors.dart: -------------------------------------------------------------------------------- 1 | export 'android_bumper_ball_contact_behavior.dart'; 2 | export 'android_bumper_blinking_behavior.dart'; 3 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/android_bumper/cubit/android_bumper_cubit.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | 3 | part 'android_bumper_state.dart'; 4 | 5 | class AndroidBumperCubit extends Cubit { 6 | AndroidBumperCubit() : super(AndroidBumperState.lit); 7 | 8 | void onBallContacted() { 9 | emit(AndroidBumperState.dimmed); 10 | } 11 | 12 | void onBlinked() { 13 | emit(AndroidBumperState.lit); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/android_bumper/cubit/android_bumper_state.dart: -------------------------------------------------------------------------------- 1 | part of 'android_bumper_cubit.dart'; 2 | 3 | enum AndroidBumperState { 4 | lit, 5 | dimmed, 6 | } 7 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/android_spaceship/cubit/android_spaceship_cubit.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | 3 | part 'android_spaceship_state.dart'; 4 | 5 | class AndroidSpaceshipCubit extends Cubit { 6 | AndroidSpaceshipCubit() : super(AndroidSpaceshipState.withoutBonus); 7 | 8 | void onBallContacted() => emit(AndroidSpaceshipState.withBonus); 9 | 10 | void onBonusAwarded() => emit(AndroidSpaceshipState.withoutBonus); 11 | } 12 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/android_spaceship/cubit/android_spaceship_state.dart: -------------------------------------------------------------------------------- 1 | part of 'android_spaceship_cubit.dart'; 2 | 3 | enum AndroidSpaceshipState { 4 | withoutBonus, 5 | withBonus, 6 | } 7 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/arcade_background/cubit/arcade_background_cubit.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: public_member_api_docs 2 | 3 | import 'package:bloc/bloc.dart'; 4 | import 'package:equatable/equatable.dart'; 5 | import 'package:pinball_theme/pinball_theme.dart'; 6 | 7 | part 'arcade_background_state.dart'; 8 | 9 | class ArcadeBackgroundCubit extends Cubit { 10 | ArcadeBackgroundCubit() : super(const ArcadeBackgroundState.initial()); 11 | 12 | void onCharacterSelected(CharacterTheme characterTheme) { 13 | emit(ArcadeBackgroundState(characterTheme: characterTheme)); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/arcade_background/cubit/arcade_background_state.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: public_member_api_docs 2 | 3 | part of 'arcade_background_cubit.dart'; 4 | 5 | class ArcadeBackgroundState extends Equatable { 6 | const ArcadeBackgroundState({required this.characterTheme}); 7 | 8 | const ArcadeBackgroundState.initial() 9 | : this(characterTheme: const DashTheme()); 10 | 11 | final CharacterTheme characterTheme; 12 | 13 | @override 14 | List get props => [characterTheme]; 15 | } 16 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/ball/behaviors/ball_impulsing_behavior.dart: -------------------------------------------------------------------------------- 1 | import 'package:flame/components.dart'; 2 | import 'package:pinball_components/pinball_components.dart'; 3 | import 'package:pinball_flame/pinball_flame.dart'; 4 | 5 | /// {@template ball_impulsing_behavior} 6 | /// Impulses the [Ball] in a given direction. 7 | /// {@endtemplate} 8 | class BallImpulsingBehavior extends Component with ParentIsA { 9 | /// {@macro ball_impulsing_behavior} 10 | BallImpulsingBehavior({ 11 | required Vector2 impulse, 12 | }) : _impulse = impulse; 13 | 14 | final Vector2 _impulse; 15 | 16 | @override 17 | Future onLoad() async { 18 | await super.onLoad(); 19 | parent.body.linearVelocity = _impulse; 20 | shouldRemove = true; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/ball/behaviors/behaviors.dart: -------------------------------------------------------------------------------- 1 | export 'ball_gravitating_behavior.dart'; 2 | export 'ball_impulsing_behavior.dart'; 3 | export 'ball_scaling_behavior.dart'; 4 | export 'ball_turbo_charging_behavior.dart'; 5 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/ball/cubit/ball_cubit.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | import 'package:equatable/equatable.dart'; 3 | import 'package:pinball_theme/pinball_theme.dart'; 4 | 5 | part 'ball_state.dart'; 6 | 7 | class BallCubit extends Cubit { 8 | BallCubit() : super(const BallState.initial()); 9 | 10 | void onCharacterSelected(CharacterTheme characterTheme) { 11 | emit(BallState(characterTheme: characterTheme)); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/ball/cubit/ball_state.dart: -------------------------------------------------------------------------------- 1 | part of 'ball_cubit.dart'; 2 | 3 | class BallState extends Equatable { 4 | const BallState({required this.characterTheme}); 5 | 6 | const BallState.initial() : this(characterTheme: const DashTheme()); 7 | 8 | final CharacterTheme characterTheme; 9 | 10 | @override 11 | List get props => [characterTheme]; 12 | } 13 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/board_background_sprite_component.dart: -------------------------------------------------------------------------------- 1 | import 'package:flame/components.dart'; 2 | import 'package:pinball_components/pinball_components.dart'; 3 | import 'package:pinball_flame/pinball_flame.dart'; 4 | 5 | class BoardBackgroundSpriteComponent extends SpriteComponent 6 | with HasGameRef, ZIndex { 7 | BoardBackgroundSpriteComponent() 8 | : super( 9 | anchor: Anchor.center, 10 | position: Vector2(-0.2, 0.1), 11 | ) { 12 | zIndex = ZIndexes.boardBackground; 13 | } 14 | 15 | @override 16 | Future onLoad() async { 17 | await super.onLoad(); 18 | 19 | final sprite = Sprite( 20 | gameRef.images.fromCache( 21 | Assets.images.boardBackground.keyName, 22 | ), 23 | ); 24 | this.sprite = sprite; 25 | size = sprite.originalSize / 10; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/board_dimensions.dart: -------------------------------------------------------------------------------- 1 | import 'dart:math' as math; 2 | 3 | import 'package:flame/extensions.dart'; 4 | 5 | /// {@template board_dimensions} 6 | /// Contains various board properties and dimensions for global use. 7 | /// {@endtemplate} 8 | class BoardDimensions { 9 | /// Width and height of the board. 10 | static final size = Vector2(101.6, 143.8); 11 | 12 | /// [Rect] for easier access to board boundaries. 13 | static final bounds = Rect.fromCenter( 14 | center: Offset.zero, 15 | width: size.x, 16 | height: size.y, 17 | ); 18 | 19 | /// 3D perspective angle of the board in radians. 20 | static final perspectiveAngle = -math.atan(18.6 / bounds.height); 21 | 22 | /// Factor the board shrinks by from the closest point to the farthest. 23 | static const perspectiveShrinkFactor = 0.63; 24 | } 25 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/board_side.dart: -------------------------------------------------------------------------------- 1 | import 'package:pinball_components/pinball_components.dart'; 2 | 3 | /// Indicates a side of the board. 4 | /// 5 | /// Usually used to position or mirror elements of a pinball game; such as a 6 | /// [Flipper] or [Kicker]. 7 | enum BoardSide { 8 | /// The left side of the board. 9 | left, 10 | 11 | /// The right side of the board. 12 | right, 13 | } 14 | 15 | /// Utility methods for [BoardSide]. 16 | extension BoardSideX on BoardSide { 17 | /// Whether this side is [BoardSide.left]. 18 | bool get isLeft => this == BoardSide.left; 19 | 20 | /// Whether this side is [BoardSide.right]. 21 | bool get isRight => this == BoardSide.right; 22 | 23 | /// Direction of the [BoardSide]. 24 | /// 25 | /// Represents the path which the [BoardSide] moves along. 26 | int get direction => isLeft ? -1 : 1; 27 | } 28 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/chrome_dino/behaviors/behaviors.dart: -------------------------------------------------------------------------------- 1 | export 'chrome_dino_chomping_behavior.dart'; 2 | export 'chrome_dino_mouth_opening_behavior.dart'; 3 | export 'chrome_dino_spitting_behavior.dart'; 4 | export 'chrome_dino_swiveling_behavior.dart'; 5 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/chrome_dino/behaviors/chrome_dino_mouth_opening_behavior.dart: -------------------------------------------------------------------------------- 1 | import 'package:flame_forge2d/flame_forge2d.dart'; 2 | import 'package:pinball_components/pinball_components.dart'; 3 | import 'package:pinball_flame/pinball_flame.dart'; 4 | 5 | /// {@template chrome_dino_mouth_opening_behavior} 6 | /// Allows a [Ball] to enter the [ChromeDino] mouth when it is open. 7 | /// {@endtemplate} 8 | class ChromeDinoMouthOpeningBehavior extends ContactBehavior { 9 | @override 10 | void preSolve(Object other, Contact contact, Manifold oldManifold) { 11 | super.preSolve(other, contact, oldManifold); 12 | if (other is! Ball) return; 13 | 14 | if (parent.bloc.state.isMouthOpen && parent.firstChild() == null) { 15 | contact.setEnabled(false); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/dash_bumper/behaviors/behaviors.dart: -------------------------------------------------------------------------------- 1 | export 'dash_bumper_ball_contact_behavior.dart'; 2 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/dash_bumper/behaviors/dash_bumper_ball_contact_behavior.dart: -------------------------------------------------------------------------------- 1 | import 'package:flame_forge2d/flame_forge2d.dart'; 2 | import 'package:pinball_components/pinball_components.dart'; 3 | import 'package:pinball_flame/pinball_flame.dart'; 4 | 5 | class DashBumperBallContactBehavior extends ContactBehavior { 6 | @override 7 | void beginContact(Object other, Contact contact) { 8 | super.beginContact(other, contact); 9 | if (other is! Ball) return; 10 | readBloc().onBallContacted(parent.id); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/dash_bumper/cubit/dash_bumpers_state.dart: -------------------------------------------------------------------------------- 1 | part of 'dash_bumpers_cubit.dart'; 2 | 3 | class DashBumpersState extends Equatable { 4 | const DashBumpersState({required this.bumperSpriteStates}); 5 | 6 | DashBumpersState.initial() 7 | : this( 8 | bumperSpriteStates: { 9 | for (var id in DashBumperId.values) 10 | id: DashBumperSpriteState.inactive 11 | }, 12 | ); 13 | 14 | final Map bumperSpriteStates; 15 | 16 | bool get isFullyActivated => bumperSpriteStates.values 17 | .every((spriteState) => spriteState == DashBumperSpriteState.active); 18 | 19 | @override 20 | List get props => [...bumperSpriteStates.values]; 21 | } 22 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/flapper/behaviors/behaviors.dart: -------------------------------------------------------------------------------- 1 | export 'flapper_spinning_behavior.dart'; 2 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/flapper/behaviors/flapper_spinning_behavior.dart: -------------------------------------------------------------------------------- 1 | import 'package:flame/components.dart'; 2 | import 'package:flame_forge2d/flame_forge2d.dart'; 3 | import 'package:pinball_components/pinball_components.dart'; 4 | import 'package:pinball_flame/pinball_flame.dart'; 5 | 6 | class FlapperSpinningBehavior extends ContactBehavior { 7 | @override 8 | void beginContact(Object other, Contact contact) { 9 | super.beginContact(other, contact); 10 | if (other is! Ball) return; 11 | parent.parent?.firstChild()?.playing = true; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/flipper/behaviors/behaviors.dart: -------------------------------------------------------------------------------- 1 | export 'flipper_jointing_behavior.dart'; 2 | export 'flipper_key_controlling_behavior.dart'; 3 | export 'flipper_moving_behavior.dart'; 4 | export 'flipper_noise_behavior.dart'; 5 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/flipper/behaviors/flipper_noise_behavior.dart: -------------------------------------------------------------------------------- 1 | import 'package:flame/components.dart'; 2 | import 'package:flame_bloc/flame_bloc.dart'; 3 | import 'package:pinball_audio/pinball_audio.dart'; 4 | import 'package:pinball_components/pinball_components.dart'; 5 | import 'package:pinball_flame/pinball_flame.dart'; 6 | 7 | class FlipperNoiseBehavior extends Component 8 | with 9 | FlameBlocListenable, 10 | FlameBlocReader { 11 | @override 12 | void onNewState(FlipperState state) { 13 | super.onNewState(state); 14 | if (bloc.state.isMovingUp) { 15 | readProvider().play(PinballAudio.flipper); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/flipper/cubit/flipper_cubit.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | 3 | part 'flipper_state.dart'; 4 | 5 | class FlipperCubit extends Cubit { 6 | FlipperCubit() : super(FlipperState.movingDown); 7 | 8 | void moveUp() => emit(FlipperState.movingUp); 9 | 10 | void moveDown() => emit(FlipperState.movingDown); 11 | } 12 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/flipper/cubit/flipper_state.dart: -------------------------------------------------------------------------------- 1 | part of 'flipper_cubit.dart'; 2 | 3 | enum FlipperState { 4 | movingDown, 5 | movingUp, 6 | } 7 | 8 | extension FlipperStateX on FlipperState { 9 | bool get isMovingDown => this == FlipperState.movingDown; 10 | bool get isMovingUp => this == FlipperState.movingUp; 11 | } 12 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/google_rollover/behaviors/behaviors.dart: -------------------------------------------------------------------------------- 1 | export 'google_rollover_ball_contact_behavior.dart'; 2 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/google_rollover/behaviors/google_rollover_ball_contact_behavior.dart: -------------------------------------------------------------------------------- 1 | import 'package:flame/components.dart'; 2 | import 'package:flame_forge2d/flame_forge2d.dart'; 3 | import 'package:pinball_components/pinball_components.dart'; 4 | import 'package:pinball_flame/pinball_flame.dart'; 5 | 6 | class GoogleRolloverBallContactBehavior 7 | extends ContactBehavior { 8 | @override 9 | void beginContact(Object other, Contact contact) { 10 | super.beginContact(other, contact); 11 | if (other is! Ball) return; 12 | readBloc().onRolloverContacted(); 13 | parent.firstChild()?.playing = true; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/google_word/behaviors/behaviors.dart: -------------------------------------------------------------------------------- 1 | export 'google_word_animating_behavior.dart'; 2 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/google_word/behaviors/google_word_animating_behavior.dart: -------------------------------------------------------------------------------- 1 | import 'package:flame/components.dart'; 2 | import 'package:flame_bloc/flame_bloc.dart'; 3 | import 'package:pinball_components/pinball_components.dart'; 4 | 5 | class GoogleWordAnimatingBehavior extends TimerComponent 6 | with FlameBlocReader { 7 | GoogleWordAnimatingBehavior() : super(period: 0.35, repeat: true); 8 | 9 | final _maxBlinks = 7; 10 | int _blinks = 0; 11 | 12 | @override 13 | void onTick() { 14 | super.onTick(); 15 | if (_blinks != _maxBlinks * 2) { 16 | bloc.switched(); 17 | _blinks++; 18 | } else { 19 | timer.stop(); 20 | bloc.onReset(); 21 | shouldRemove = true; 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/google_word/cubit/google_word_state.dart: -------------------------------------------------------------------------------- 1 | part of 'google_word_cubit.dart'; 2 | 3 | class GoogleWordState extends Equatable { 4 | const GoogleWordState({required this.letterSpriteStates}); 5 | 6 | GoogleWordState.initial() 7 | : this( 8 | letterSpriteStates: { 9 | for (var i = 0; i <= 5; i++) i: GoogleLetterSpriteState.dimmed 10 | }, 11 | ); 12 | 13 | final Map letterSpriteStates; 14 | 15 | @override 16 | List get props => [...letterSpriteStates.values]; 17 | } 18 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/kicker/behaviors/behaviors.dart: -------------------------------------------------------------------------------- 1 | export 'kicker_ball_contact_behavior.dart'; 2 | export 'kicker_blinking_behavior.dart'; 3 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/kicker/behaviors/kicker_ball_contact_behavior.dart: -------------------------------------------------------------------------------- 1 | import 'package:flame_forge2d/flame_forge2d.dart'; 2 | import 'package:pinball_components/pinball_components.dart'; 3 | import 'package:pinball_flame/pinball_flame.dart'; 4 | 5 | class KickerBallContactBehavior extends ContactBehavior { 6 | @override 7 | void beginContact(Object other, Contact contact) { 8 | super.beginContact(other, contact); 9 | if (other is! Ball) return; 10 | parent.bloc.onBallContacted(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/kicker/cubit/kicker_cubit.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | 3 | part 'kicker_state.dart'; 4 | 5 | class KickerCubit extends Cubit { 6 | KickerCubit() : super(KickerState.lit); 7 | 8 | void onBallContacted() { 9 | emit(KickerState.dimmed); 10 | } 11 | 12 | void onBlinked() { 13 | emit(KickerState.lit); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/kicker/cubit/kicker_state.dart: -------------------------------------------------------------------------------- 1 | part of 'kicker_cubit.dart'; 2 | 3 | enum KickerState { 4 | lit, 5 | dimmed, 6 | } 7 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/layer_sensor/behaviors/behaviors.dart: -------------------------------------------------------------------------------- 1 | export 'behaviors.dart'; 2 | export 'layer_filtering_behavior.dart'; 3 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/multiball/behaviors/behaviors.dart: -------------------------------------------------------------------------------- 1 | export 'multiball_blinking_behavior.dart'; 2 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/plunger/behaviors/behaviors.dart: -------------------------------------------------------------------------------- 1 | export 'plunger_jointing_behavior.dart'; 2 | export 'plunger_key_controlling_behavior.dart'; 3 | export 'plunger_noise_behavior.dart'; 4 | export 'plunger_pulling_behavior.dart'; 5 | export 'plunger_releasing_behavior.dart'; 6 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/plunger/behaviors/plunger_noise_behavior.dart: -------------------------------------------------------------------------------- 1 | import 'package:flame/components.dart'; 2 | import 'package:flame_bloc/flame_bloc.dart'; 3 | import 'package:pinball_audio/pinball_audio.dart'; 4 | import 'package:pinball_components/pinball_components.dart'; 5 | import 'package:pinball_flame/pinball_flame.dart'; 6 | 7 | /// Plays the [PinballAudio.launcher] sound. 8 | /// 9 | /// It is attached when the plunger is released. 10 | class PlungerNoiseBehavior extends Component 11 | with FlameBlocListenable { 12 | @override 13 | void onNewState(PlungerState state) { 14 | super.onNewState(state); 15 | if (state.isReleasing) { 16 | readProvider().play(PinballAudio.launcher); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/plunger/cubit/plunger_cubit.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | 3 | part 'plunger_state.dart'; 4 | 5 | class PlungerCubit extends Cubit { 6 | PlungerCubit() : super(PlungerState.releasing); 7 | 8 | void pulled() => emit(PlungerState.pulling); 9 | 10 | void released() => emit(PlungerState.releasing); 11 | 12 | void autoPulled() => emit(PlungerState.autoPulling); 13 | } 14 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/plunger/cubit/plunger_state.dart: -------------------------------------------------------------------------------- 1 | part of 'plunger_cubit.dart'; 2 | 3 | enum PlungerState { 4 | pulling, 5 | 6 | releasing, 7 | 8 | autoPulling, 9 | } 10 | 11 | extension PlungerStateX on PlungerState { 12 | bool get isPulling => 13 | this == PlungerState.pulling || this == PlungerState.autoPulling; 14 | bool get isReleasing => this == PlungerState.releasing; 15 | bool get isAutoPulling => this == PlungerState.autoPulling; 16 | } 17 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/score_component/behaviors/behaviors.dart: -------------------------------------------------------------------------------- 1 | export 'score_component_scaling_behavior.dart'; 2 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/signpost/cubit/signpost_cubit.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | 3 | part 'signpost_state.dart'; 4 | 5 | class SignpostCubit extends Cubit { 6 | SignpostCubit() : super(SignpostState.inactive); 7 | 8 | void onProgressed() { 9 | final index = SignpostState.values.indexOf(state); 10 | emit( 11 | SignpostState.values[(index + 1) % SignpostState.values.length], 12 | ); 13 | } 14 | 15 | void onReset() => emit(SignpostState.inactive); 16 | 17 | bool isFullyProgressed() => state == SignpostState.active3; 18 | } 19 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/signpost/cubit/signpost_state.dart: -------------------------------------------------------------------------------- 1 | part of 'signpost_cubit.dart'; 2 | 3 | enum SignpostState { 4 | /// Signpost with no active eggs. 5 | inactive, 6 | 7 | /// Signpost with a single sign of lit up eggs. 8 | active1, 9 | 10 | /// Signpost with two signs of lit up eggs. 11 | active2, 12 | 13 | /// Signpost with all signs of lit up eggs. 14 | active3, 15 | } 16 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/skill_shot/behaviors/behaviors.dart: -------------------------------------------------------------------------------- 1 | export 'skill_shot_ball_contact_behavior.dart'; 2 | export 'skill_shot_blinking_behavior.dart'; 3 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/skill_shot/behaviors/skill_shot_ball_contact_behavior.dart: -------------------------------------------------------------------------------- 1 | import 'package:flame/components.dart'; 2 | import 'package:flame_forge2d/flame_forge2d.dart'; 3 | import 'package:pinball_components/pinball_components.dart'; 4 | import 'package:pinball_flame/pinball_flame.dart'; 5 | 6 | class SkillShotBallContactBehavior extends ContactBehavior { 7 | @override 8 | void beginContact(Object other, Contact contact) { 9 | super.beginContact(other, contact); 10 | if (other is! Ball) return; 11 | parent.bloc.onBallContacted(); 12 | parent.firstChild()?.playing = true; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/spaceship_ramp/behavior/behavior.dart: -------------------------------------------------------------------------------- 1 | export 'ramp_ball_ascending_contact_behavior.dart'; 2 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/spaceship_ramp/cubit/spaceship_ramp_cubit.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | import 'package:equatable/equatable.dart'; 3 | 4 | part 'spaceship_ramp_state.dart'; 5 | 6 | class SpaceshipRampCubit extends Cubit { 7 | SpaceshipRampCubit() : super(const SpaceshipRampState.initial()); 8 | 9 | void onAscendingBallEntered() => emit(state.copyWith(hits: state.hits + 1)); 10 | 11 | void onProgressed() { 12 | final index = ArrowLightState.values.indexOf(state.lightState); 13 | emit( 14 | state.copyWith( 15 | lightState: 16 | ArrowLightState.values[(index + 1) % ArrowLightState.values.length], 17 | ), 18 | ); 19 | } 20 | 21 | void onReset() => emit(const SpaceshipRampState.initial()); 22 | } 23 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/sparky_bumper/behaviors/behaviors.dart: -------------------------------------------------------------------------------- 1 | export 'sparky_bumper_ball_contact_behavior.dart'; 2 | export 'sparky_bumper_blinking_behavior.dart'; 3 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/sparky_bumper/behaviors/sparky_bumper_ball_contact_behavior.dart: -------------------------------------------------------------------------------- 1 | import 'package:flame_forge2d/flame_forge2d.dart'; 2 | import 'package:pinball_components/pinball_components.dart'; 3 | import 'package:pinball_flame/pinball_flame.dart'; 4 | 5 | class SparkyBumperBallContactBehavior extends ContactBehavior { 6 | @override 7 | void beginContact(Object other, Contact contact) { 8 | super.beginContact(other, contact); 9 | if (other is! Ball) return; 10 | parent.bloc.onBallContacted(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/sparky_bumper/cubit/sparky_bumper_cubit.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | 3 | part 'sparky_bumper_state.dart'; 4 | 5 | class SparkyBumperCubit extends Cubit { 6 | SparkyBumperCubit() : super(SparkyBumperState.lit); 7 | 8 | void onBallContacted() { 9 | emit(SparkyBumperState.dimmed); 10 | } 11 | 12 | void onBlinked() { 13 | emit(SparkyBumperState.lit); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/sparky_bumper/cubit/sparky_bumper_state.dart: -------------------------------------------------------------------------------- 1 | part of 'sparky_bumper_cubit.dart'; 2 | 3 | enum SparkyBumperState { 4 | lit, 5 | dimmed, 6 | } 7 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/sparky_computer/behaviors/behaviors.dart: -------------------------------------------------------------------------------- 1 | export 'sparky_computer_sensor_ball_contact_behavior.dart'; 2 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/sparky_computer/cubit/sparky_computer_cubit.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | 3 | part 'sparky_computer_state.dart'; 4 | 5 | class SparkyComputerCubit extends Cubit { 6 | SparkyComputerCubit() : super(SparkyComputerState.withoutBall); 7 | 8 | void onBallEntered() { 9 | emit(SparkyComputerState.withBall); 10 | } 11 | 12 | void onBallTurboCharged() { 13 | emit(SparkyComputerState.withoutBall); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/components/sparky_computer/cubit/sparky_computer_state.dart: -------------------------------------------------------------------------------- 1 | part of 'sparky_computer_cubit.dart'; 2 | 3 | enum SparkyComputerState { 4 | withoutBall, 5 | withBall, 6 | } 7 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/extensions/extensions.dart: -------------------------------------------------------------------------------- 1 | export 'score.dart'; 2 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/extensions/score.dart: -------------------------------------------------------------------------------- 1 | import 'package:intl/intl.dart'; 2 | 3 | final _numberFormat = NumberFormat('#,###'); 4 | 5 | /// Adds score related extensions to int 6 | extension ScoreX on int { 7 | /// Formats this number as a score value 8 | String formatScore() { 9 | return _numberFormat.format(this); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /packages/pinball_components/lib/src/pinball_components.dart: -------------------------------------------------------------------------------- 1 | export 'components/components.dart'; 2 | export 'extensions/extensions.dart'; 3 | -------------------------------------------------------------------------------- /packages/pinball_components/sandbox/.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: 9b2d32b605630f28625709ebd9d78ab3016b2bf6 8 | channel: stable 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /packages/pinball_components/sandbox/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:very_good_analysis/analysis_options.2.4.0.yaml 2 | linter: 3 | rules: 4 | public_member_api_docs: false 5 | -------------------------------------------------------------------------------- /packages/pinball_components/sandbox/lib/common/common.dart: -------------------------------------------------------------------------------- 1 | export 'add_game.dart'; 2 | export 'games.dart'; 3 | export 'trace.dart'; 4 | -------------------------------------------------------------------------------- /packages/pinball_components/sandbox/lib/stories/arrow_icon/stories.dart: -------------------------------------------------------------------------------- 1 | import 'package:dashbook/dashbook.dart'; 2 | import 'package:sandbox/common/common.dart'; 3 | import 'package:sandbox/stories/arrow_icon/arrow_icon_game.dart'; 4 | 5 | void addArrowIconStories(Dashbook dashbook) { 6 | dashbook.storiesOf('ArrowIcon').addGame( 7 | title: 'Basic', 8 | description: ArrowIconGame.description, 9 | gameBuilder: (context) => ArrowIconGame(), 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /packages/pinball_components/sandbox/lib/stories/bottom_group/bottom_group.dart: -------------------------------------------------------------------------------- 1 | export 'stories.dart'; 2 | -------------------------------------------------------------------------------- /packages/pinball_components/sandbox/lib/stories/boundaries/stories.dart: -------------------------------------------------------------------------------- 1 | import 'package:dashbook/dashbook.dart'; 2 | import 'package:sandbox/common/common.dart'; 3 | import 'package:sandbox/stories/boundaries/boundaries_game.dart'; 4 | 5 | void addBoundariesStories(Dashbook dashbook) { 6 | dashbook.storiesOf('Boundaries').addGame( 7 | title: 'Traced', 8 | description: BoundariesGame.description, 9 | gameBuilder: (_) => BoundariesGame(), 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /packages/pinball_components/sandbox/lib/stories/effects/stories.dart: -------------------------------------------------------------------------------- 1 | import 'package:dashbook/dashbook.dart'; 2 | import 'package:sandbox/common/common.dart'; 3 | import 'package:sandbox/stories/effects/camera_zoom_game.dart'; 4 | 5 | void addEffectsStories(Dashbook dashbook) { 6 | dashbook.storiesOf('Effects').addGame( 7 | title: 'CameraZoom', 8 | description: CameraZoomGame.description, 9 | gameBuilder: (_) => CameraZoomGame(), 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /packages/pinball_components/sandbox/lib/stories/error_component/error_component_game.dart: -------------------------------------------------------------------------------- 1 | import 'package:flame/components.dart'; 2 | import 'package:pinball_components/pinball_components.dart'; 3 | import 'package:sandbox/common/common.dart'; 4 | 5 | class ErrorComponentGame extends AssetsGame { 6 | ErrorComponentGame({required this.text}); 7 | 8 | static const description = 'Shows how ErrorComponents are rendered.'; 9 | 10 | final String text; 11 | 12 | @override 13 | Future onLoad() async { 14 | camera.followVector2(Vector2.zero()); 15 | 16 | await add(ErrorComponent(label: text)); 17 | await add( 18 | ErrorComponent.bold( 19 | label: text, 20 | position: Vector2(0, 10), 21 | ), 22 | ); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /packages/pinball_components/sandbox/lib/stories/error_component/stories.dart: -------------------------------------------------------------------------------- 1 | import 'package:dashbook/dashbook.dart'; 2 | import 'package:sandbox/common/common.dart'; 3 | import 'package:sandbox/stories/error_component/error_component_game.dart'; 4 | 5 | void addErrorComponentStories(Dashbook dashbook) { 6 | dashbook.storiesOf('ErrorComponent').addGame( 7 | title: 'Basic', 8 | description: ErrorComponentGame.description, 9 | gameBuilder: (context) => ErrorComponentGame( 10 | text: context.textProperty( 11 | 'label', 12 | 'Oh no, something went wrong!', 13 | ), 14 | ), 15 | ); 16 | } 17 | -------------------------------------------------------------------------------- /packages/pinball_components/sandbox/lib/stories/google_word/stories.dart: -------------------------------------------------------------------------------- 1 | import 'package:dashbook/dashbook.dart'; 2 | import 'package:sandbox/common/common.dart'; 3 | import 'package:sandbox/stories/google_word/google_letter_game.dart'; 4 | 5 | void addGoogleWordStories(Dashbook dashbook) { 6 | dashbook.storiesOf('Google Word').addGame( 7 | title: 'Letter 0', 8 | description: GoogleLetterGame.description, 9 | gameBuilder: (_) => GoogleLetterGame(), 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /packages/pinball_components/sandbox/lib/stories/launch_ramp/stories.dart: -------------------------------------------------------------------------------- 1 | import 'package:dashbook/dashbook.dart'; 2 | import 'package:sandbox/common/common.dart'; 3 | import 'package:sandbox/stories/launch_ramp/launch_ramp_game.dart'; 4 | 5 | void addLaunchRampStories(Dashbook dashbook) { 6 | dashbook.storiesOf('LaunchRamp').addGame( 7 | title: 'Traced', 8 | description: LaunchRampGame.description, 9 | gameBuilder: (_) => LaunchRampGame(), 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /packages/pinball_components/sandbox/lib/stories/layer/stories.dart: -------------------------------------------------------------------------------- 1 | import 'package:dashbook/dashbook.dart'; 2 | import 'package:sandbox/common/common.dart'; 3 | import 'package:sandbox/stories/layer/layer_game.dart'; 4 | 5 | void addLayerStories(Dashbook dashbook) { 6 | dashbook.storiesOf('Layer').addGame( 7 | title: 'Example', 8 | description: LayerGame.description, 9 | gameBuilder: (_) => LayerGame(), 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /packages/pinball_components/sandbox/lib/stories/multiball/stories.dart: -------------------------------------------------------------------------------- 1 | import 'package:dashbook/dashbook.dart'; 2 | import 'package:sandbox/common/common.dart'; 3 | import 'package:sandbox/stories/multiball/multiball_game.dart'; 4 | 5 | void addMultiballStories(Dashbook dashbook) { 6 | dashbook.storiesOf('Multiball').addGame( 7 | title: 'Assets', 8 | description: MultiballGame.description, 9 | gameBuilder: (_) => MultiballGame(), 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /packages/pinball_components/sandbox/lib/stories/multipliers/stories.dart: -------------------------------------------------------------------------------- 1 | import 'package:dashbook/dashbook.dart'; 2 | import 'package:sandbox/common/common.dart'; 3 | import 'package:sandbox/stories/multipliers/multipliers_game.dart'; 4 | 5 | void addMultipliersStories(Dashbook dashbook) { 6 | dashbook.storiesOf('Multipliers').addGame( 7 | title: 'Multipliers', 8 | description: MultipliersGame.description, 9 | gameBuilder: (_) => MultipliersGame(), 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /packages/pinball_components/sandbox/lib/stories/plunger/stories.dart: -------------------------------------------------------------------------------- 1 | import 'package:dashbook/dashbook.dart'; 2 | import 'package:sandbox/common/common.dart'; 3 | import 'package:sandbox/stories/plunger/plunger_game.dart'; 4 | 5 | void addPlungerStories(Dashbook dashbook) { 6 | dashbook.storiesOf('Plunger').addGame( 7 | title: 'Traced', 8 | description: PlungerGame.description, 9 | gameBuilder: (_) => PlungerGame(), 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /packages/pinball_components/sandbox/lib/stories/score/stories.dart: -------------------------------------------------------------------------------- 1 | import 'package:dashbook/dashbook.dart'; 2 | import 'package:sandbox/common/common.dart'; 3 | import 'package:sandbox/stories/score/score_game.dart'; 4 | 5 | void addScoreStories(Dashbook dashbook) { 6 | dashbook.storiesOf('Score').addGame( 7 | title: 'Basic', 8 | description: ScoreGame.description, 9 | gameBuilder: (_) => ScoreGame(), 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /packages/pinball_components/sandbox/lib/stories/sparky_scorch/stories.dart: -------------------------------------------------------------------------------- 1 | import 'package:dashbook/dashbook.dart'; 2 | import 'package:sandbox/common/common.dart'; 3 | import 'package:sandbox/stories/sparky_scorch/sparky_bumper_game.dart'; 4 | import 'package:sandbox/stories/sparky_scorch/sparky_computer_game.dart'; 5 | 6 | void addSparkyScorchStories(Dashbook dashbook) { 7 | dashbook.storiesOf('Sparky Scorch') 8 | ..addGame( 9 | title: 'Sparky Computer', 10 | description: SparkyComputerGame.description, 11 | gameBuilder: (_) => SparkyComputerGame(), 12 | ) 13 | ..addGame( 14 | title: 'Sparky Bumper', 15 | description: SparkyBumperGame.description, 16 | gameBuilder: (_) => SparkyBumperGame(), 17 | ); 18 | } 19 | -------------------------------------------------------------------------------- /packages/pinball_components/sandbox/lib/stories/stories.dart: -------------------------------------------------------------------------------- 1 | export 'android_acres/stories.dart'; 2 | export 'arrow_icon/stories.dart'; 3 | export 'ball/stories.dart'; 4 | export 'bottom_group/stories.dart'; 5 | export 'boundaries/stories.dart'; 6 | export 'dino_desert/stories.dart'; 7 | export 'effects/stories.dart'; 8 | export 'error_component/stories.dart'; 9 | export 'flutter_forest/stories.dart'; 10 | export 'google_word/stories.dart'; 11 | export 'launch_ramp/stories.dart'; 12 | export 'layer/stories.dart'; 13 | export 'multiball/stories.dart'; 14 | export 'multipliers/stories.dart'; 15 | export 'plunger/stories.dart'; 16 | export 'score/stories.dart'; 17 | export 'sparky_scorch/stories.dart'; 18 | -------------------------------------------------------------------------------- /packages/pinball_components/sandbox/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: sandbox 2 | description: A sanbox application where components are showcased and developed in an isolated way 3 | version: 1.0.0+1 4 | publish_to: none 5 | 6 | environment: 7 | sdk: ">=2.16.0 <3.0.0" 8 | 9 | dependencies: 10 | dashbook: ^0.1.7 11 | flame: ^1.1.1 12 | flame_bloc: ^1.4.0 13 | flame_forge2d: 14 | git: 15 | url: https://github.com/flame-engine/flame 16 | path: packages/flame_forge2d/ 17 | ref: a50d4a1e7d9eaf66726ed1bb9894c9d495547d8f 18 | flutter: 19 | sdk: flutter 20 | pinball_components: 21 | path: ../ 22 | pinball_flame: 23 | path: ../../pinball_flame 24 | pinball_theme: 25 | path: ../../pinball_theme 26 | 27 | dev_dependencies: 28 | flutter_test: 29 | sdk: flutter 30 | very_good_analysis: ^2.4.0 31 | 32 | flutter: 33 | uses-material-design: true 34 | -------------------------------------------------------------------------------- /packages/pinball_components/sandbox/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/sandbox/web/favicon.png -------------------------------------------------------------------------------- /packages/pinball_components/sandbox/web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/sandbox/web/icons/Icon-192.png -------------------------------------------------------------------------------- /packages/pinball_components/sandbox/web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/sandbox/web/icons/Icon-512.png -------------------------------------------------------------------------------- /packages/pinball_components/sandbox/web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/sandbox/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /packages/pinball_components/sandbox/web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/sandbox/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /packages/pinball_components/test/helpers/helpers.dart: -------------------------------------------------------------------------------- 1 | export 'test_game.dart'; 2 | -------------------------------------------------------------------------------- /packages/pinball_components/test/helpers/test_game.dart: -------------------------------------------------------------------------------- 1 | import 'package:flame/game.dart'; 2 | import 'package:flame/input.dart'; 3 | import 'package:flame_forge2d/flame_forge2d.dart'; 4 | 5 | class TestGame extends Forge2DGame { 6 | TestGame([List? assets]) : _assets = assets { 7 | images.prefix = ''; 8 | } 9 | 10 | final List? _assets; 11 | 12 | @override 13 | Future onLoad() async { 14 | if (_assets != null) { 15 | await images.loadAll(_assets!); 16 | } 17 | await super.onLoad(); 18 | } 19 | } 20 | 21 | class KeyboardTestGame extends TestGame with HasKeyboardHandlerComponents { 22 | KeyboardTestGame([List? assets]) : super(assets); 23 | } 24 | 25 | class TappablesTestGame extends TestGame with HasTappables { 26 | TappablesTestGame([List? assets]) : super(assets); 27 | } 28 | -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/arcade_background/cubit/arcade_background_cubit_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc_test/bloc_test.dart'; 2 | import 'package:flutter_test/flutter_test.dart'; 3 | import 'package:pinball_components/pinball_components.dart'; 4 | import 'package:pinball_theme/pinball_theme.dart'; 5 | 6 | void main() { 7 | group( 8 | 'ArcadeBackgroundCubit', 9 | () { 10 | blocTest( 11 | 'onCharacterSelected emits new theme', 12 | build: ArcadeBackgroundCubit.new, 13 | act: (bloc) => bloc.onCharacterSelected(const DinoTheme()), 14 | expect: () => [ 15 | const ArcadeBackgroundState( 16 | characterTheme: DinoTheme(), 17 | ), 18 | ], 19 | ); 20 | }, 21 | ); 22 | } 23 | -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/ball/cubit/ball_cubit_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc_test/bloc_test.dart'; 2 | import 'package:flutter_test/flutter_test.dart'; 3 | import 'package:pinball_components/pinball_components.dart'; 4 | import 'package:pinball_theme/pinball_theme.dart'; 5 | 6 | void main() { 7 | group( 8 | 'BallCubit', 9 | () { 10 | blocTest( 11 | 'onCharacterSelected emits new theme', 12 | build: BallCubit.new, 13 | act: (bloc) => bloc.onCharacterSelected(const DinoTheme()), 14 | expect: () => [const BallState(characterTheme: DinoTheme())], 15 | ); 16 | }, 17 | ); 18 | } 19 | -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/ball/cubit/ball_state_test.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: prefer_const_constructors 2 | 3 | import 'package:flutter_test/flutter_test.dart'; 4 | import 'package:pinball_components/pinball_components.dart'; 5 | import 'package:pinball_theme/pinball_theme.dart'; 6 | 7 | void main() { 8 | group('BallState', () { 9 | test('supports value equality', () { 10 | expect( 11 | BallState(characterTheme: DashTheme()), 12 | equals(const BallState(characterTheme: DashTheme())), 13 | ); 14 | }); 15 | 16 | group('constructor', () { 17 | test('can be instantiated', () { 18 | expect(const BallState(characterTheme: DashTheme()), isNotNull); 19 | }); 20 | }); 21 | }); 22 | } 23 | -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/board_dimensions_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flame/extensions.dart'; 2 | import 'package:flutter_test/flutter_test.dart'; 3 | import 'package:pinball_components/pinball_components.dart'; 4 | 5 | void main() { 6 | group('BoardDimensions', () { 7 | test('has size', () { 8 | expect(BoardDimensions.size, equals(Vector2(101.6, 143.8))); 9 | }); 10 | 11 | test('has bounds', () { 12 | expect(BoardDimensions.bounds, isNotNull); 13 | }); 14 | 15 | test('has perspectiveAngle', () { 16 | expect(BoardDimensions.perspectiveAngle, isNotNull); 17 | }); 18 | 19 | test('has perspectiveShrinkFactor', () { 20 | expect(BoardDimensions.perspectiveShrinkFactor, equals(0.63)); 21 | }); 22 | }); 23 | } 24 | -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/chrome_dino/golden/chrome_dino/down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/chrome_dino/golden/chrome_dino/down.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/chrome_dino/golden/chrome_dino/middle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/chrome_dino/golden/chrome_dino/middle.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/chrome_dino/golden/chrome_dino/up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/chrome_dino/golden/chrome_dino/up.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/flipper/cubit/flipper_cubit_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc_test/bloc_test.dart'; 2 | import 'package:flutter_test/flutter_test.dart'; 3 | import 'package:pinball_components/pinball_components.dart'; 4 | 5 | void main() { 6 | group('FlipperCubit', () { 7 | test('can be instantiated', () { 8 | expect(FlipperCubit(), isA()); 9 | }); 10 | 11 | blocTest( 12 | 'moves', 13 | build: FlipperCubit.new, 14 | act: (cubit) => cubit 15 | ..moveUp() 16 | ..moveDown(), 17 | expect: () => [ 18 | FlipperState.movingUp, 19 | FlipperState.movingDown, 20 | ], 21 | ); 22 | }); 23 | } 24 | -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/android_animatronic/end.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/android_animatronic/end.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/android_animatronic/middle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/android_animatronic/middle.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/android_animatronic/start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/android_animatronic/start.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/android_spaceship/end.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/android_spaceship/end.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/android_spaceship/middle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/android_spaceship/middle.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/android_spaceship/start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/android_spaceship/start.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/arrow_icon_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/arrow_icon_left.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/arrow_icon_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/arrow_icon_right.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/ball/android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/ball/android.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/ball/dash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/ball/dash.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/ball/dino.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/ball/dino.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/ball/sparky.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/ball/sparky.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/baseboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/baseboard.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/board_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/board_background.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/boundaries.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/boundaries.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/camera_zoom/finished.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/camera_zoom/finished.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/camera_zoom/in_between.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/camera_zoom/in_between.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/camera_zoom/no_zoom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/camera_zoom/no_zoom.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/chrome_dino/down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/chrome_dino/down.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/chrome_dino/middle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/chrome_dino/middle.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/chrome_dino/up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/chrome_dino/up.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/dash_animatronic/end.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/dash_animatronic/end.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/dash_animatronic/middle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/dash_animatronic/middle.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/dash_animatronic/start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/dash_animatronic/start.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/dino_walls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/dino_walls.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/flapper/end.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/flapper/end.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/flapper/middle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/flapper/middle.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/flapper/start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/flapper/start.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/flipper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/flipper.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/kickers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/kickers.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/launch_ramp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/launch_ramp.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/multipliers/x2_dimmed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/multipliers/x2_dimmed.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/multipliers/x2_lit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/multipliers/x2_lit.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/multipliers/x3_dimmed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/multipliers/x3_dimmed.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/multipliers/x3_lit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/multipliers/x3_lit.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/multipliers/x4_dimmed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/multipliers/x4_dimmed.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/multipliers/x4_lit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/multipliers/x4_lit.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/multipliers/x5_dimmed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/multipliers/x5_dimmed.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/multipliers/x5_lit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/multipliers/x5_lit.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/multipliers/x6_dimmed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/multipliers/x6_dimmed.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/multipliers/x6_lit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/multipliers/x6_lit.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/plunger/pull.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/plunger/pull.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/plunger/release.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/plunger/release.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/rocket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/rocket.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/score/1m.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/score/1m.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/score/200k.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/score/200k.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/score/20k.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/score/20k.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/score/5k.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/score/5k.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/signpost/active1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/signpost/active1.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/signpost/active2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/signpost/active2.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/signpost/active3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/signpost/active3.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/signpost/inactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/signpost/inactive.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/slingshots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/slingshots.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/spaceship_rail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/spaceship_rail.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/spaceship_ramp/active1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/spaceship_ramp/active1.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/spaceship_ramp/active2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/spaceship_ramp/active2.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/spaceship_ramp/active3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/spaceship_ramp/active3.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/spaceship_ramp/active4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/spaceship_ramp/active4.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/spaceship_ramp/active5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/spaceship_ramp/active5.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/spaceship_ramp/inactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/spaceship_ramp/inactive.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/sparky_animatronic/end.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/sparky_animatronic/end.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/sparky_animatronic/middle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/sparky_animatronic/middle.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/sparky_animatronic/start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/sparky_animatronic/start.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/golden/sparky_computer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_components/test/src/components/golden/sparky_computer.png -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/kicker/cubit/kicker_cubit_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc_test/bloc_test.dart'; 2 | import 'package:flutter_test/flutter_test.dart'; 3 | import 'package:pinball_components/pinball_components.dart'; 4 | 5 | void main() { 6 | group( 7 | 'KickerCubit', 8 | () { 9 | blocTest( 10 | 'onBallContacted emits dimmed', 11 | build: KickerCubit.new, 12 | act: (bloc) => bloc.onBallContacted(), 13 | expect: () => [KickerState.dimmed], 14 | ); 15 | 16 | blocTest( 17 | 'onBlinked emits lit', 18 | build: KickerCubit.new, 19 | act: (bloc) => bloc.onBlinked(), 20 | expect: () => [KickerState.lit], 21 | ); 22 | }, 23 | ); 24 | } 25 | -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/plunger/cubit/plunger_cubit_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc_test/bloc_test.dart'; 2 | import 'package:flutter_test/flutter_test.dart'; 3 | import 'package:pinball_components/pinball_components.dart'; 4 | 5 | void main() { 6 | group('PlungerCubit', () { 7 | test('can be instantiated', () { 8 | expect(PlungerCubit(), isA()); 9 | }); 10 | 11 | blocTest( 12 | 'overrides previous pulling state', 13 | build: PlungerCubit.new, 14 | act: (cubit) => cubit 15 | ..pulled() 16 | ..autoPulled() 17 | ..pulled(), 18 | expect: () => [ 19 | PlungerState.pulling, 20 | PlungerState.autoPulling, 21 | PlungerState.pulling, 22 | ], 23 | ); 24 | }); 25 | } 26 | -------------------------------------------------------------------------------- /packages/pinball_components/test/src/components/sparky_bumper/cubit/sparky_bumper_cubit_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc_test/bloc_test.dart'; 2 | import 'package:flutter_test/flutter_test.dart'; 3 | import 'package:pinball_components/pinball_components.dart'; 4 | 5 | void main() { 6 | group( 7 | 'SparkyBumperCubit', 8 | () { 9 | blocTest( 10 | 'onBallContacted emits dimmed', 11 | build: SparkyBumperCubit.new, 12 | act: (bloc) => bloc.onBallContacted(), 13 | expect: () => [SparkyBumperState.dimmed], 14 | ); 15 | 16 | blocTest( 17 | 'onBlinked emits lit', 18 | build: SparkyBumperCubit.new, 19 | act: (bloc) => bloc.onBlinked(), 20 | expect: () => [SparkyBumperState.lit], 21 | ); 22 | }, 23 | ); 24 | } 25 | -------------------------------------------------------------------------------- /packages/pinball_components/test/src/extensions/score_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_test/flutter_test.dart'; 2 | import 'package:pinball_components/pinball_components.dart'; 3 | 4 | void main() { 5 | group('ScoreX', () { 6 | test('formatScore correctly formats int', () { 7 | expect(1000000.formatScore(), '1,000,000'); 8 | }); 9 | }); 10 | } 11 | -------------------------------------------------------------------------------- /packages/pinball_flame/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # VSCode related 19 | .vscode/ 20 | 21 | # Flutter/Dart/Pub related 22 | **/doc/api/ 23 | **/ios/Flutter/.last_build_id 24 | .dart_tool/ 25 | .flutter-plugins 26 | .flutter-plugins-dependencies 27 | .packages 28 | .pub-cache/ 29 | .pub/ 30 | /build/ 31 | 32 | # Web related 33 | lib/generated_plugin_registrant.dart 34 | 35 | # Symbolication related 36 | app.*.symbols 37 | 38 | # Obfuscation related 39 | app.*.map.json 40 | -------------------------------------------------------------------------------- /packages/pinball_flame/README.md: -------------------------------------------------------------------------------- 1 | # pinball_flame 2 | 3 | [![style: very good analysis][very_good_analysis_badge]][very_good_analysis_link] 4 | [![License: MIT][license_badge]][license_link] 5 | 6 | Set of out-of-the-way solutions for common Pinball game problems. 7 | 8 | [license_badge]: https://img.shields.io/badge/license-MIT-blue.svg 9 | [license_link]: https://opensource.org/licenses/MIT 10 | [very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg 11 | [very_good_analysis_link]: https://pub.dev/packages/very_good_analysis -------------------------------------------------------------------------------- /packages/pinball_flame/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:very_good_analysis/analysis_options.2.4.0.yaml -------------------------------------------------------------------------------- /packages/pinball_flame/lib/pinball_flame.dart: -------------------------------------------------------------------------------- 1 | library pinball_flame; 2 | 3 | export 'src/behaviors/behaviors.dart'; 4 | export 'src/canvas/canvas.dart'; 5 | export 'src/flame_provider.dart'; 6 | export 'src/keyboard_input_controller.dart'; 7 | export 'src/layer.dart'; 8 | export 'src/parent_is_a.dart'; 9 | export 'src/pinball_forge2d_game.dart'; 10 | export 'src/shapes/shapes.dart'; 11 | export 'src/sprite_animation.dart'; 12 | -------------------------------------------------------------------------------- /packages/pinball_flame/lib/src/behaviors/behaviors.dart: -------------------------------------------------------------------------------- 1 | export 'contact_behavior.dart'; 2 | export 'layer_contact_behavior.dart'; 3 | export 'z_index_contact_behavior.dart'; 4 | -------------------------------------------------------------------------------- /packages/pinball_flame/lib/src/canvas/canvas.dart: -------------------------------------------------------------------------------- 1 | export 'canvas_component.dart'; 2 | export 'z_canvas_component.dart'; 3 | -------------------------------------------------------------------------------- /packages/pinball_flame/lib/src/parent_is_a.dart: -------------------------------------------------------------------------------- 1 | import 'package:flame/components.dart'; 2 | 3 | /// A mixin that ensures a parent is of the given type [T]. 4 | mixin ParentIsA on Component { 5 | @override 6 | T get parent => super.parent! as T; 7 | 8 | @override 9 | Future? addToParent(covariant T parent) { 10 | return super.addToParent(parent); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /packages/pinball_flame/lib/src/shapes/bezier_curve_shape.dart: -------------------------------------------------------------------------------- 1 | import 'package:flame_forge2d/flame_forge2d.dart'; 2 | import 'package:geometry/geometry.dart'; 3 | 4 | /// {@template bezier_curve_shape} 5 | /// Creates a bezier curve. 6 | /// {@endtemplate} 7 | class BezierCurveShape extends ChainShape { 8 | /// {@macro bezier_curve_shape} 9 | BezierCurveShape({ 10 | required this.controlPoints, 11 | }) { 12 | createChain(calculateBezierCurve(controlPoints: controlPoints)); 13 | } 14 | 15 | /// Specifies the control points of the curve. 16 | /// 17 | /// First and last [controlPoints] set the beginning and end of the curve, 18 | /// inner points between them set its final shape. 19 | final List controlPoints; 20 | } 21 | -------------------------------------------------------------------------------- /packages/pinball_flame/lib/src/shapes/shapes.dart: -------------------------------------------------------------------------------- 1 | export 'arc_shape.dart'; 2 | export 'bezier_curve_shape.dart'; 3 | export 'ellipse_shape.dart'; 4 | -------------------------------------------------------------------------------- /packages/pinball_flame/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: pinball_flame 2 | description: Set of out-of-the-way solutions for common Pinball game problems. 3 | version: 1.0.0+1 4 | publish_to: none 5 | 6 | environment: 7 | sdk: ">=2.16.0 <3.0.0" 8 | 9 | dependencies: 10 | bloc: ^8.0.0 11 | flame: ^1.1.1 12 | flame_bloc: ^1.4.0 13 | flame_forge2d: 14 | git: 15 | url: https://github.com/flame-engine/flame 16 | path: packages/flame_forge2d/ 17 | ref: a50d4a1e7d9eaf66726ed1bb9894c9d495547d8f 18 | flutter: 19 | sdk: flutter 20 | geometry: 21 | path: ../geometry 22 | 23 | dev_dependencies: 24 | flame_test: ^1.3.0 25 | flutter_test: 26 | sdk: flutter 27 | mocktail: ^0.3.0 28 | very_good_analysis: ^2.4.0 29 | -------------------------------------------------------------------------------- /packages/pinball_flame/test/src/goldens/rendering/blue_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_flame/test/src/goldens/rendering/blue_red.png -------------------------------------------------------------------------------- /packages/pinball_flame/test/src/goldens/rendering/red_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_flame/test/src/goldens/rendering/red_blue.png -------------------------------------------------------------------------------- /packages/pinball_flame/test/src/rendering/golden/rendering/blue_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_flame/test/src/rendering/golden/rendering/blue_red.png -------------------------------------------------------------------------------- /packages/pinball_flame/test/src/rendering/golden/rendering/red_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_flame/test/src/rendering/golden/rendering/red_blue.png -------------------------------------------------------------------------------- /packages/pinball_flame/test/src/shapes/arc_shape_test.dart: -------------------------------------------------------------------------------- 1 | import 'dart:math' as math; 2 | import 'package:flame/extensions.dart'; 3 | import 'package:flame/game.dart'; 4 | import 'package:flutter_test/flutter_test.dart'; 5 | import 'package:pinball_flame/pinball_flame.dart'; 6 | 7 | void main() { 8 | group('ArcShape', () { 9 | test('can be instantiated', () { 10 | expect( 11 | ArcShape( 12 | center: Vector2.zero(), 13 | arcRadius: 10, 14 | angle: 2 * math.pi, 15 | ), 16 | isA(), 17 | ); 18 | }); 19 | }); 20 | } 21 | -------------------------------------------------------------------------------- /packages/pinball_flame/test/src/shapes/bezier_curve_shape_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flame/extensions.dart'; 2 | import 'package:flame/game.dart'; 3 | import 'package:flutter_test/flutter_test.dart'; 4 | import 'package:pinball_flame/pinball_flame.dart'; 5 | 6 | void main() { 7 | group('BezierCurveShape', () { 8 | test('can be instantiated', () { 9 | expect( 10 | BezierCurveShape( 11 | controlPoints: [ 12 | Vector2(0, 0), 13 | Vector2(10, 0), 14 | Vector2(0, 10), 15 | Vector2(10, 10), 16 | ], 17 | ), 18 | isA(), 19 | ); 20 | }); 21 | }); 22 | } 23 | -------------------------------------------------------------------------------- /packages/pinball_theme/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # VSCode related 19 | .vscode/ 20 | 21 | # Flutter/Dart/Pub related 22 | **/doc/api/ 23 | **/ios/Flutter/.last_build_id 24 | .dart_tool/ 25 | .flutter-plugins 26 | .flutter-plugins-dependencies 27 | .packages 28 | .pub-cache/ 29 | .pub/ 30 | /build/ 31 | 32 | # Web related 33 | lib/generated_plugin_registrant.dart 34 | 35 | # Symbolication related 36 | app.*.symbols 37 | 38 | # Obfuscation related 39 | app.*.map.json 40 | -------------------------------------------------------------------------------- /packages/pinball_theme/README.md: -------------------------------------------------------------------------------- 1 | # pinball_theme 2 | 3 | [![style: very good analysis][very_good_analysis_badge]][very_good_analysis_link] 4 | [![License: MIT][license_badge]][license_link] 5 | 6 | Package containing themes for pinball game. 7 | 8 | [license_badge]: https://img.shields.io/badge/license-MIT-blue.svg 9 | [license_link]: https://opensource.org/licenses/MIT 10 | [very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg 11 | [very_good_analysis_link]: https://pub.dev/packages/very_good_analysis -------------------------------------------------------------------------------- /packages/pinball_theme/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:very_good_analysis/analysis_options.2.4.0.yaml 2 | analyzer: 3 | exclude: 4 | - lib/**/*.gen.dart -------------------------------------------------------------------------------- /packages/pinball_theme/assets/images/android/animation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_theme/assets/images/android/animation.png -------------------------------------------------------------------------------- /packages/pinball_theme/assets/images/android/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_theme/assets/images/android/background.jpg -------------------------------------------------------------------------------- /packages/pinball_theme/assets/images/android/ball.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_theme/assets/images/android/ball.png -------------------------------------------------------------------------------- /packages/pinball_theme/assets/images/android/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_theme/assets/images/android/icon.png -------------------------------------------------------------------------------- /packages/pinball_theme/assets/images/android/leaderboard_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_theme/assets/images/android/leaderboard_icon.png -------------------------------------------------------------------------------- /packages/pinball_theme/assets/images/dash/animation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_theme/assets/images/dash/animation.png -------------------------------------------------------------------------------- /packages/pinball_theme/assets/images/dash/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_theme/assets/images/dash/background.jpg -------------------------------------------------------------------------------- /packages/pinball_theme/assets/images/dash/ball.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_theme/assets/images/dash/ball.png -------------------------------------------------------------------------------- /packages/pinball_theme/assets/images/dash/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_theme/assets/images/dash/icon.png -------------------------------------------------------------------------------- /packages/pinball_theme/assets/images/dash/leaderboard_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_theme/assets/images/dash/leaderboard_icon.png -------------------------------------------------------------------------------- /packages/pinball_theme/assets/images/dino/animation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_theme/assets/images/dino/animation.png -------------------------------------------------------------------------------- /packages/pinball_theme/assets/images/dino/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_theme/assets/images/dino/background.jpg -------------------------------------------------------------------------------- /packages/pinball_theme/assets/images/dino/ball.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_theme/assets/images/dino/ball.png -------------------------------------------------------------------------------- /packages/pinball_theme/assets/images/dino/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_theme/assets/images/dino/icon.png -------------------------------------------------------------------------------- /packages/pinball_theme/assets/images/dino/leaderboard_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_theme/assets/images/dino/leaderboard_icon.png -------------------------------------------------------------------------------- /packages/pinball_theme/assets/images/pinball_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_theme/assets/images/pinball_button.png -------------------------------------------------------------------------------- /packages/pinball_theme/assets/images/select_character_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_theme/assets/images/select_character_background.png -------------------------------------------------------------------------------- /packages/pinball_theme/assets/images/sparky/animation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_theme/assets/images/sparky/animation.png -------------------------------------------------------------------------------- /packages/pinball_theme/assets/images/sparky/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_theme/assets/images/sparky/background.jpg -------------------------------------------------------------------------------- /packages/pinball_theme/assets/images/sparky/ball.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_theme/assets/images/sparky/ball.png -------------------------------------------------------------------------------- /packages/pinball_theme/assets/images/sparky/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_theme/assets/images/sparky/icon.png -------------------------------------------------------------------------------- /packages/pinball_theme/assets/images/sparky/leaderboard_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_theme/assets/images/sparky/leaderboard_icon.png -------------------------------------------------------------------------------- /packages/pinball_theme/lib/pinball_theme.dart: -------------------------------------------------------------------------------- 1 | library pinball_theme; 2 | 3 | export 'src/generated/generated.dart'; 4 | export 'src/themes/themes.dart'; 5 | -------------------------------------------------------------------------------- /packages/pinball_theme/lib/src/generated/generated.dart: -------------------------------------------------------------------------------- 1 | export 'assets.gen.dart'; 2 | -------------------------------------------------------------------------------- /packages/pinball_theme/lib/src/themes/android_theme.dart: -------------------------------------------------------------------------------- 1 | import 'package:pinball_theme/pinball_theme.dart'; 2 | 3 | /// {@template android_theme} 4 | /// Defines Android character theme assets and attributes. 5 | /// {@endtemplate} 6 | class AndroidTheme extends CharacterTheme { 7 | /// {@macro android_theme} 8 | const AndroidTheme(); 9 | 10 | @override 11 | String get name => 'Android'; 12 | 13 | @override 14 | AssetGenImage get ball => Assets.images.android.ball; 15 | 16 | @override 17 | AssetGenImage get background => Assets.images.android.background; 18 | 19 | @override 20 | AssetGenImage get icon => Assets.images.android.icon; 21 | 22 | @override 23 | AssetGenImage get leaderboardIcon => Assets.images.android.leaderboardIcon; 24 | 25 | @override 26 | AssetGenImage get animation => Assets.images.android.animation; 27 | } 28 | -------------------------------------------------------------------------------- /packages/pinball_theme/lib/src/themes/dash_theme.dart: -------------------------------------------------------------------------------- 1 | import 'package:pinball_theme/pinball_theme.dart'; 2 | 3 | /// {@template dash_theme} 4 | /// Defines Dash character theme assets and attributes. 5 | /// {@endtemplate} 6 | class DashTheme extends CharacterTheme { 7 | /// {@macro dash_theme} 8 | const DashTheme(); 9 | 10 | @override 11 | String get name => 'Dash'; 12 | 13 | @override 14 | AssetGenImage get ball => Assets.images.dash.ball; 15 | 16 | @override 17 | AssetGenImage get background => Assets.images.dash.background; 18 | 19 | @override 20 | AssetGenImage get icon => Assets.images.dash.icon; 21 | 22 | @override 23 | AssetGenImage get leaderboardIcon => Assets.images.dash.leaderboardIcon; 24 | 25 | @override 26 | AssetGenImage get animation => Assets.images.dash.animation; 27 | } 28 | -------------------------------------------------------------------------------- /packages/pinball_theme/lib/src/themes/dino_theme.dart: -------------------------------------------------------------------------------- 1 | import 'package:pinball_theme/pinball_theme.dart'; 2 | 3 | /// {@template dino_theme} 4 | /// Defines Dino character theme assets and attributes. 5 | /// {@endtemplate} 6 | class DinoTheme extends CharacterTheme { 7 | /// {@macro dino_theme} 8 | const DinoTheme(); 9 | 10 | @override 11 | String get name => 'Dino'; 12 | 13 | @override 14 | AssetGenImage get ball => Assets.images.dino.ball; 15 | 16 | @override 17 | AssetGenImage get background => Assets.images.dino.background; 18 | 19 | @override 20 | AssetGenImage get icon => Assets.images.dino.icon; 21 | 22 | @override 23 | AssetGenImage get leaderboardIcon => Assets.images.dino.leaderboardIcon; 24 | 25 | @override 26 | AssetGenImage get animation => Assets.images.dino.animation; 27 | } 28 | -------------------------------------------------------------------------------- /packages/pinball_theme/lib/src/themes/sparky_theme.dart: -------------------------------------------------------------------------------- 1 | import 'package:pinball_theme/pinball_theme.dart'; 2 | 3 | /// {@template sparky_theme} 4 | /// Defines Sparky character theme assets and attributes. 5 | /// {@endtemplate} 6 | class SparkyTheme extends CharacterTheme { 7 | /// {@macro sparky_theme} 8 | const SparkyTheme(); 9 | 10 | @override 11 | AssetGenImage get ball => Assets.images.sparky.ball; 12 | 13 | @override 14 | String get name => 'Sparky'; 15 | 16 | @override 17 | AssetGenImage get background => Assets.images.sparky.background; 18 | 19 | @override 20 | AssetGenImage get icon => Assets.images.sparky.icon; 21 | 22 | @override 23 | AssetGenImage get leaderboardIcon => Assets.images.sparky.leaderboardIcon; 24 | 25 | @override 26 | AssetGenImage get animation => Assets.images.sparky.animation; 27 | } 28 | -------------------------------------------------------------------------------- /packages/pinball_theme/lib/src/themes/themes.dart: -------------------------------------------------------------------------------- 1 | export 'android_theme.dart'; 2 | export 'character_theme.dart'; 3 | export 'dash_theme.dart'; 4 | export 'dino_theme.dart'; 5 | export 'sparky_theme.dart'; 6 | -------------------------------------------------------------------------------- /packages/pinball_theme/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: pinball_theme 2 | description: Package containing themes for pinball game. 3 | version: 1.0.0+1 4 | publish_to: none 5 | 6 | environment: 7 | sdk: ">=2.16.0 <3.0.0" 8 | 9 | dependencies: 10 | equatable: ^2.0.3 11 | flutter: 12 | sdk: flutter 13 | 14 | dev_dependencies: 15 | flutter_test: 16 | sdk: flutter 17 | very_good_analysis: ^2.4.0 18 | 19 | flutter: 20 | generate: true 21 | assets: 22 | - assets/images/ 23 | - assets/images/android/ 24 | - assets/images/dash/ 25 | - assets/images/dino/ 26 | - assets/images/sparky/ 27 | 28 | flutter_gen: 29 | assets: 30 | package_parameter_enabled: true 31 | output: lib/src/generated/ 32 | line_length: 80 33 | integrations: 34 | flutter_svg: true 35 | -------------------------------------------------------------------------------- /packages/pinball_theme/test/src/themes/android_theme_test.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: prefer_const_constructors 2 | 3 | import 'package:flutter_test/flutter_test.dart'; 4 | import 'package:pinball_theme/pinball_theme.dart'; 5 | 6 | void main() { 7 | group('AndroidTheme', () { 8 | test('can be instantiated', () { 9 | expect(AndroidTheme(), isNotNull); 10 | }); 11 | 12 | test('supports value equality', () { 13 | expect(AndroidTheme(), equals(AndroidTheme())); 14 | }); 15 | }); 16 | } 17 | -------------------------------------------------------------------------------- /packages/pinball_theme/test/src/themes/dash_theme_test.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: prefer_const_constructors 2 | 3 | import 'package:flutter_test/flutter_test.dart'; 4 | import 'package:pinball_theme/pinball_theme.dart'; 5 | 6 | void main() { 7 | group('DashTheme', () { 8 | test('can be instantiated', () { 9 | expect(DashTheme(), isNotNull); 10 | }); 11 | 12 | test('supports value equality', () { 13 | expect(DashTheme(), equals(DashTheme())); 14 | }); 15 | }); 16 | } 17 | -------------------------------------------------------------------------------- /packages/pinball_theme/test/src/themes/dino_theme_test.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: prefer_const_constructors 2 | 3 | import 'package:flutter_test/flutter_test.dart'; 4 | import 'package:pinball_theme/pinball_theme.dart'; 5 | 6 | void main() { 7 | group('DinoTheme', () { 8 | test('can be instantiated', () { 9 | expect(DinoTheme(), isNotNull); 10 | }); 11 | 12 | test('supports value equality', () { 13 | expect(DinoTheme(), equals(DinoTheme())); 14 | }); 15 | }); 16 | } 17 | -------------------------------------------------------------------------------- /packages/pinball_theme/test/src/themes/sparky_theme_test.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: prefer_const_constructors 2 | 3 | import 'package:flutter_test/flutter_test.dart'; 4 | import 'package:pinball_theme/pinball_theme.dart'; 5 | 6 | void main() { 7 | group('SparkyTheme', () { 8 | test('can be instantiated', () { 9 | expect(SparkyTheme(), isNotNull); 10 | }); 11 | 12 | test('supports value equality', () { 13 | expect(SparkyTheme(), equals(SparkyTheme())); 14 | }); 15 | }); 16 | } 17 | -------------------------------------------------------------------------------- /packages/pinball_ui/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # VSCode related 19 | .vscode/ 20 | 21 | # Flutter/Dart/Pub related 22 | **/doc/api/ 23 | **/ios/Flutter/.last_build_id 24 | .dart_tool/ 25 | .flutter-plugins 26 | .flutter-plugins-dependencies 27 | .packages 28 | .pub-cache/ 29 | .pub/ 30 | /build/ 31 | 32 | # Web related 33 | lib/generated_plugin_registrant.dart 34 | 35 | # Symbolication related 36 | app.*.symbols 37 | 38 | # Obfuscation related 39 | app.*.map.json 40 | -------------------------------------------------------------------------------- /packages/pinball_ui/README.md: -------------------------------------------------------------------------------- 1 | # pinball_ui 2 | 3 | [![style: very good analysis][very_good_analysis_badge]][very_good_analysis_link] 4 | [![License: MIT][license_badge]][license_link] 5 | 6 | UI Toolkit for the Pinball Flutter Application 7 | 8 | [license_badge]: https://img.shields.io/badge/license-MIT-blue.svg 9 | [license_link]: https://opensource.org/licenses/MIT 10 | [very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg 11 | [very_good_analysis_link]: https://pub.dev/packages/very_good_analysis 12 | -------------------------------------------------------------------------------- /packages/pinball_ui/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:very_good_analysis/analysis_options.2.4.0.yaml 2 | analyzer: 3 | exclude: 4 | - lib/**/*.gen.dart 5 | -------------------------------------------------------------------------------- /packages/pinball_ui/assets/images/button/dpad_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_ui/assets/images/button/dpad_down.png -------------------------------------------------------------------------------- /packages/pinball_ui/assets/images/button/dpad_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_ui/assets/images/button/dpad_left.png -------------------------------------------------------------------------------- /packages/pinball_ui/assets/images/button/dpad_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_ui/assets/images/button/dpad_right.png -------------------------------------------------------------------------------- /packages/pinball_ui/assets/images/button/dpad_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_ui/assets/images/button/dpad_up.png -------------------------------------------------------------------------------- /packages/pinball_ui/assets/images/button/pinball_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_ui/assets/images/button/pinball_button.png -------------------------------------------------------------------------------- /packages/pinball_ui/assets/images/dialog/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_ui/assets/images/dialog/background.png -------------------------------------------------------------------------------- /packages/pinball_ui/fonts/PixeloidMono-1G8ae.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_ui/fonts/PixeloidMono-1G8ae.ttf -------------------------------------------------------------------------------- /packages/pinball_ui/fonts/PixeloidSans-nR3g1.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_ui/fonts/PixeloidSans-nR3g1.ttf -------------------------------------------------------------------------------- /packages/pinball_ui/fonts/PixeloidSansBold-RpeJo.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/packages/pinball_ui/fonts/PixeloidSansBold-RpeJo.ttf -------------------------------------------------------------------------------- /packages/pinball_ui/lib/gen/fonts.gen.dart: -------------------------------------------------------------------------------- 1 | /// GENERATED CODE - DO NOT MODIFY BY HAND 2 | /// ***************************************************** 3 | /// FlutterGen 4 | /// ***************************************************** 5 | 6 | class FontFamily { 7 | FontFamily._(); 8 | 9 | static const String pixeloidMono = 'PixeloidMono'; 10 | static const String pixeloidSans = 'PixeloidSans'; 11 | } 12 | -------------------------------------------------------------------------------- /packages/pinball_ui/lib/gen/gen.dart: -------------------------------------------------------------------------------- 1 | export 'assets.gen.dart'; 2 | -------------------------------------------------------------------------------- /packages/pinball_ui/lib/pinball_ui.dart: -------------------------------------------------------------------------------- 1 | library pinball_ui; 2 | 3 | export 'package:url_launcher/url_launcher.dart'; 4 | export 'package:url_launcher_platform_interface/url_launcher_platform_interface.dart'; 5 | 6 | export 'src/dialog/dialog.dart'; 7 | export 'src/external_links/external_links.dart'; 8 | export 'src/theme/theme.dart'; 9 | export 'src/widgets/widgets.dart'; 10 | -------------------------------------------------------------------------------- /packages/pinball_ui/lib/src/dialog/dialog.dart: -------------------------------------------------------------------------------- 1 | export 'pinball_dialog.dart'; 2 | export 'pixelated_decoration.dart'; 3 | -------------------------------------------------------------------------------- /packages/pinball_ui/lib/src/external_links/external_links.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/foundation.dart'; 2 | import 'package:url_launcher/url_launcher.dart'; 3 | 4 | /// Opens the given [url] in a new tab of the host browser 5 | Future openLink(String url, {VoidCallback? onError}) async { 6 | final uri = Uri.parse(url); 7 | if (await canLaunchUrl(uri)) { 8 | await launchUrl(uri); 9 | } else if (onError != null) { 10 | onError(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /packages/pinball_ui/lib/src/theme/pinball_theme.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:pinball_ui/pinball_ui.dart'; 3 | 4 | /// Pinball theme 5 | class PinballTheme { 6 | /// Standard [ThemeData] for Pinball UI 7 | static ThemeData get standard { 8 | return ThemeData( 9 | textTheme: _textTheme, 10 | ); 11 | } 12 | 13 | static TextTheme get _textTheme { 14 | return const TextTheme( 15 | headline1: PinballTextStyle.headline1, 16 | headline2: PinballTextStyle.headline2, 17 | headline3: PinballTextStyle.headline3, 18 | headline4: PinballTextStyle.headline4, 19 | headline5: PinballTextStyle.headline5, 20 | subtitle1: PinballTextStyle.subtitle1, 21 | ); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /packages/pinball_ui/lib/src/theme/theme.dart: -------------------------------------------------------------------------------- 1 | export 'pinball_colors.dart'; 2 | export 'pinball_text_style.dart'; 3 | export 'pinball_theme.dart'; 4 | -------------------------------------------------------------------------------- /packages/pinball_ui/lib/src/widgets/crt_background.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:pinball_ui/pinball_ui.dart'; 3 | 4 | /// {@template crt_background} 5 | /// [BoxDecoration] that provides a CRT-like background effect. 6 | /// {@endtemplate} 7 | class CrtBackground extends BoxDecoration { 8 | /// {@macro crt_background} 9 | const CrtBackground() 10 | : super( 11 | gradient: const LinearGradient( 12 | begin: Alignment(1, 0.015), 13 | stops: [0.0, 0.5, 0.5, 1], 14 | colors: [ 15 | PinballColors.darkBlue, 16 | PinballColors.darkBlue, 17 | PinballColors.crtBackground, 18 | PinballColors.crtBackground, 19 | ], 20 | tileMode: TileMode.repeated, 21 | ), 22 | ); 23 | } 24 | -------------------------------------------------------------------------------- /packages/pinball_ui/lib/src/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'animated_ellipsis_text.dart'; 2 | export 'crt_background.dart'; 3 | export 'pinball_button.dart'; 4 | export 'pinball_dpad_button.dart'; 5 | export 'pinball_loading_indicator.dart'; 6 | -------------------------------------------------------------------------------- /packages/pinball_ui/test/src/dialog/pixelated_decoration_test.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: prefer_const_constructors 2 | 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_test/flutter_test.dart'; 5 | import 'package:pinball_ui/pinball_ui.dart'; 6 | 7 | void main() { 8 | group('PixelatedDecoration', () { 9 | testWidgets('renders header and body', (tester) async { 10 | const headerText = 'header'; 11 | const bodyText = 'body'; 12 | 13 | await tester.pumpWidget( 14 | MaterialApp( 15 | home: PixelatedDecoration( 16 | header: Text(headerText), 17 | body: Text(bodyText), 18 | ), 19 | ), 20 | ); 21 | 22 | expect(find.text(headerText), findsOneWidget); 23 | expect(find.text(bodyText), findsOneWidget); 24 | }); 25 | }); 26 | } 27 | -------------------------------------------------------------------------------- /packages/pinball_ui/test/src/widgets/pinball_button_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_test/flutter_test.dart'; 3 | import 'package:pinball_ui/pinball_ui.dart'; 4 | 5 | void main() { 6 | group('PinballButton', () { 7 | testWidgets('renders the given text and responds to taps', (tester) async { 8 | var wasTapped = false; 9 | await tester.pumpWidget( 10 | MaterialApp( 11 | home: Scaffold( 12 | body: Center( 13 | child: PinballButton( 14 | text: 'test', 15 | onTap: () { 16 | wasTapped = true; 17 | }, 18 | ), 19 | ), 20 | ), 21 | ), 22 | ); 23 | await tester.tap(find.text('test')); 24 | expect(wasTapped, isTrue); 25 | }); 26 | }); 27 | } 28 | -------------------------------------------------------------------------------- /packages/platform_helper/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # VSCode related 19 | .vscode/ 20 | 21 | # Flutter/Dart/Pub related 22 | **/doc/api/ 23 | **/ios/Flutter/.last_build_id 24 | .dart_tool/ 25 | .flutter-plugins 26 | .flutter-plugins-dependencies 27 | .packages 28 | .pub-cache/ 29 | .pub/ 30 | /build/ 31 | 32 | # Web related 33 | lib/generated_plugin_registrant.dart 34 | 35 | # Symbolication related 36 | app.*.symbols 37 | 38 | # Obfuscation related 39 | app.*.map.json 40 | -------------------------------------------------------------------------------- /packages/platform_helper/README.md: -------------------------------------------------------------------------------- 1 | # platform_helper 2 | 3 | [![style: very good analysis][very_good_analysis_badge]][very_good_analysis_link] 4 | [![License: MIT][license_badge]][license_link] 5 | 6 | Platform helper for Pinball application. 7 | 8 | [license_badge]: https://img.shields.io/badge/license-MIT-blue.svg 9 | [license_link]: https://opensource.org/licenses/MIT 10 | [very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg 11 | [very_good_analysis_link]: https://pub.dev/packages/very_good_analysis -------------------------------------------------------------------------------- /packages/platform_helper/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:very_good_analysis/analysis_options.2.4.0.yaml -------------------------------------------------------------------------------- /packages/platform_helper/lib/platform_helper.dart: -------------------------------------------------------------------------------- 1 | library platform_helper; 2 | 3 | export 'src/platform_helper.dart'; 4 | -------------------------------------------------------------------------------- /packages/platform_helper/lib/src/platform_helper.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/foundation.dart'; 2 | 3 | /// {@template platform_helper} 4 | /// Returns whether the current platform is running on a mobile device. 5 | /// {@endtemplate} 6 | class PlatformHelper { 7 | /// {@macro platform_helper} 8 | bool get isMobile { 9 | return defaultTargetPlatform == TargetPlatform.iOS || 10 | defaultTargetPlatform == TargetPlatform.android; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /packages/platform_helper/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: platform_helper 2 | description: Platform helper for Pinball application. 3 | version: 1.0.0+1 4 | publish_to: none 5 | 6 | environment: 7 | sdk: ">=2.16.0 <3.0.0" 8 | 9 | dependencies: 10 | flutter: 11 | sdk: flutter 12 | 13 | dev_dependencies: 14 | flutter_test: 15 | sdk: flutter 16 | very_good_analysis: ^2.4.0 -------------------------------------------------------------------------------- /packages/share_repository/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://www.dartlang.org/guides/libraries/private-files 2 | 3 | # Files and directories created by pub 4 | .dart_tool/ 5 | .packages 6 | build/ 7 | pubspec.lock -------------------------------------------------------------------------------- /packages/share_repository/README.md: -------------------------------------------------------------------------------- 1 | # share_repository 2 | 3 | [![style: very good analysis][very_good_analysis_badge]][very_good_analysis_link] 4 | [![License: MIT][license_badge]][license_link] 5 | 6 | Repository to facilitate sharing scores. 7 | 8 | [license_badge]: https://img.shields.io/badge/license-MIT-blue.svg 9 | [license_link]: https://opensource.org/licenses/MIT 10 | [very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg 11 | [very_good_analysis_link]: https://pub.dev/packages/very_good_analysis -------------------------------------------------------------------------------- /packages/share_repository/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:very_good_analysis/analysis_options.2.4.0.yaml -------------------------------------------------------------------------------- /packages/share_repository/lib/share_repository.dart: -------------------------------------------------------------------------------- 1 | library share_repository; 2 | 3 | export 'src/models/models.dart'; 4 | export 'src/share_repository.dart'; 5 | -------------------------------------------------------------------------------- /packages/share_repository/lib/src/models/models.dart: -------------------------------------------------------------------------------- 1 | export 'share_platform.dart'; 2 | -------------------------------------------------------------------------------- /packages/share_repository/lib/src/models/share_platform.dart: -------------------------------------------------------------------------------- 1 | /// The platform that is being used to share a score. 2 | enum SharePlatform { 3 | /// Twitter platform. 4 | twitter, 5 | 6 | /// Facebook platform. 7 | facebook, 8 | } 9 | -------------------------------------------------------------------------------- /packages/share_repository/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: share_repository 2 | description: Repository to facilitate sharing scores. 3 | version: 1.0.0+1 4 | publish_to: none 5 | 6 | environment: 7 | sdk: ">=2.16.0 <3.0.0" 8 | 9 | dev_dependencies: 10 | coverage: ^1.1.0 11 | mocktail: ^0.2.0 12 | test: ^1.19.2 13 | very_good_analysis: ^2.4.0 14 | -------------------------------------------------------------------------------- /storage.rules: -------------------------------------------------------------------------------- 1 | rules_version = '2'; 2 | service firebase.storage { 3 | match /b/{bucket}/o { 4 | match /{folder}/{imageId} { 5 | allow read: if imageId.matches(".*\\.png") || imageId.matches(".*\\.jpg"); 6 | allow write: if false; 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /test/game/components/golden/backbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/test/game/components/golden/backbox.png -------------------------------------------------------------------------------- /test/helpers/helpers.dart: -------------------------------------------------------------------------------- 1 | export 'mock_flame_images.dart'; 2 | export 'pump_app.dart'; 3 | -------------------------------------------------------------------------------- /test/select_character/cubit/character_theme_state_test.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: prefer_const_constructors 2 | 3 | import 'package:flutter_test/flutter_test.dart'; 4 | import 'package:pinball/select_character/select_character.dart'; 5 | 6 | void main() { 7 | group('ThemeState', () { 8 | test('can be instantiated', () { 9 | expect(const CharacterThemeState.initial(), isNotNull); 10 | }); 11 | 12 | test('supports value equality', () { 13 | expect( 14 | CharacterThemeState.initial(), 15 | equals(const CharacterThemeState.initial()), 16 | ); 17 | }); 18 | }); 19 | } 20 | -------------------------------------------------------------------------------- /web/__/firebase/init.js: -------------------------------------------------------------------------------- 1 | if (typeof firebase === 'undefined') throw new Error('hosting/init-error: Firebase SDK not detected. You must include it before /__/firebase/init.js'); 2 | firebase.initializeApp({ 3 | "apiKey": "", 4 | "appId": "", 5 | "authDomain": "", 6 | "databaseURL": "", 7 | "measurementId": "", 8 | "messagingSenderId": "", 9 | "projectId": "", 10 | "storageBucket": "" 11 | }); -------------------------------------------------------------------------------- /web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/web/favicon.png -------------------------------------------------------------------------------- /web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/web/icons/Icon-192.png -------------------------------------------------------------------------------- /web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/web/icons/Icon-512.png -------------------------------------------------------------------------------- /web/icons/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tccpro/Social-auth-flutter/a6fd95c9967622bbbece0bee61161ad29f5fdc94/web/icons/favicon.png -------------------------------------------------------------------------------- /web/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Pinball", 3 | "short_name": "Pinball", 4 | "start_url": ".", 5 | "display": "standalone", 6 | "background_color": "#0175C2", 7 | "theme_color": "#0175C2", 8 | "description": "Google I/O 2022 Pinball game built with Flutter and Firebase", 9 | "orientation": "portrait-primary", 10 | "prefer_related_applications": false, 11 | "icons": [ 12 | { 13 | "src": "icons/Icon-192.png", 14 | "sizes": "192x192", 15 | "type": "image/png" 16 | }, 17 | { 18 | "src": "icons/Icon-512.png", 19 | "sizes": "512x512", 20 | "type": "image/png" 21 | } 22 | ] 23 | } 24 | --------------------------------------------------------------------------------