From 202f27366c74cb84aa796b346ee5ba938b853416 Mon Sep 17 00:00:00 2001 From: Erick Zanardo Date: Fri, 10 Apr 2020 11:43:34 -0300 Subject: [PATCH 01/17] Preparing for next iteration --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ed6a74c44..59bdaea02 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,5 @@ +## [next] + ## 0.19.0 - Fixing component lifecycle calls on BaseGame#addLater - Fixing Component#onDestroy, which was been called multiple times sometimes From 796191bedfec5e5cd4d39d3c936e222dca934a4b Mon Sep 17 00:00:00 2001 From: Erick Zanardo Date: Fri, 10 Apr 2020 15:12:23 -0300 Subject: [PATCH 02/17] Initial proposal for pause and resume engine --- example/lib/generated_plugin_registrant.dart | 15 ++++++++++ example/lib/main.dart | 21 ++++++++++++-- lib/game/game.dart | 29 +++++++++++++++++++- 3 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 example/lib/generated_plugin_registrant.dart diff --git a/example/lib/generated_plugin_registrant.dart b/example/lib/generated_plugin_registrant.dart new file mode 100644 index 000000000..2fe34b2c2 --- /dev/null +++ b/example/lib/generated_plugin_registrant.dart @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// ignore: unused_import +import 'dart:ui'; + +import 'package:audioplayers/audioplayers_web.dart'; + +import 'package:flutter_web_plugins/flutter_web_plugins.dart'; + +void registerPlugins(PluginRegistry registry) { + AudioplayersPlugin.registerWith(registry.registrarFor(AudioplayersPlugin)); + registry.registerMessageHandler(); +} diff --git a/example/lib/main.dart b/example/lib/main.dart index 03b85057b..ca185954f 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -2,13 +2,18 @@ import 'dart:math' as math; import 'dart:ui'; import 'package:flame/anchor.dart'; +import 'package:flame/gestures.dart'; import 'package:flame/components/component.dart'; import 'package:flame/components/mixins/has_game_ref.dart'; import 'package:flame/game.dart'; import 'package:flame/palette.dart'; import 'package:flutter/material.dart'; -void main() => runApp(MyGame().widget); +void main() { + final game = MyGame()..runOnCreation = false; + + runApp(game.widget); +} class Palette { static const PaletteEntry white = BasicPalette.white; @@ -47,10 +52,22 @@ class Square extends PositionComponent with HasGameRef { } } -class MyGame extends BaseGame { +class MyGame extends BaseGame with TapDetector { final double squareSize = 128; + bool running = false; MyGame() { add(Square()); } + + @override + void onTap() { + if (running) { + pauseEngine(); + } else { + resumeEngine(); + } + + running = !running; + } } diff --git a/lib/game/game.dart b/lib/game/game.dart index e2f1670af..dbf32b5e3 100644 --- a/lib/game/game.dart +++ b/lib/game/game.dart @@ -89,6 +89,18 @@ abstract class Game { RawKeyboard.instance.removeListener(_handleKeyEvent); } } + + /// Flag to tell the game loop if it should start running upon creation + bool runOnCreation = true; + + /// Pauses the engine game loop execution + void pauseEngine() => _pauseEngineFn?.call(); + + /// Resumes the engine game loop execution + void resumeEngine() => _resumeEngineFn?.call(); + + VoidCallback _pauseEngineFn; + VoidCallback _resumeEngineFn; } class OverlayWidget { @@ -334,6 +346,7 @@ class GameRenderBox extends RenderBox with WidgetsBindingObserver { Game game; int _frameCallbackId; + bool _running = false; Duration previous = Duration.zero; @@ -353,7 +366,19 @@ class GameRenderBox extends RenderBox with WidgetsBindingObserver { super.attach(owner); game.onAttach(); - _scheduleTick(); + game._pauseEngineFn = () { + if (_running) { + previous = Duration.zero; + _unscheduleTick(); + } + }; + + game._resumeEngineFn = () { + if (!_running) _scheduleTick(); + }; + + if (game.runOnCreation) _scheduleTick(); + _bindLifecycleListener(); } @@ -366,10 +391,12 @@ class GameRenderBox extends RenderBox with WidgetsBindingObserver { } void _scheduleTick() { + _running = true; _frameCallbackId = SchedulerBinding.instance.scheduleFrameCallback(_tick); } void _unscheduleTick() { + _running = false; SchedulerBinding.instance.cancelFrameCallbackWithId(_frameCallbackId); } From d27eb464a565ace5b27de0dd99bdc9de72920517 Mon Sep 17 00:00:00 2001 From: Luan Nico Date: Sat, 11 Apr 2020 15:07:31 -0400 Subject: [PATCH 03/17] Rename license file as per flutter recomendation --- LICENSE.md => LICENSE | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename LICENSE.md => LICENSE (100%) diff --git a/LICENSE.md b/LICENSE similarity index 100% rename from LICENSE.md rename to LICENSE From 8827fb37bcd314495badf3ab426e01b17c83ec3c Mon Sep 17 00:00:00 2001 From: Luan Nico Date: Sat, 11 Apr 2020 14:55:22 -0400 Subject: [PATCH 04/17] Bump ap version --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index 119edc1f3..12c8a0d90 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -6,7 +6,7 @@ homepage: https://github.com/flame-engine/flame dependencies: flutter: sdk: flutter - audioplayers: ^0.15.0 + audioplayers: 0.15.1-beta ordered_set: ^2.0.0 path_provider: ^1.6.0 box2d_flame: ^0.4.5 From e1351ec37760915272d1ce9a8382e465f0884ffc Mon Sep 17 00:00:00 2001 From: Luan Nico Date: Sat, 11 Apr 2020 15:03:22 -0400 Subject: [PATCH 05/17] bump version --- CHANGELOG.md | 5 +++++ pubspec.yaml | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 59bdaea02..069f117bb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ +# CHANGELOG + ## [next] +## 0.19.1-beta +- Bump AP version to allow for web support + ## 0.19.0 - Fixing component lifecycle calls on BaseGame#addLater - Fixing Component#onDestroy, which was been called multiple times sometimes diff --git a/pubspec.yaml b/pubspec.yaml index 12c8a0d90..cf5969469 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: flame description: A minimalist Flutter game engine, provides a nice set of somewhat independent modules you can choose from. -version: 0.19.0 +version: 0.19.1-beta homepage: https://github.com/flame-engine/flame dependencies: From f6351ec6d2094803d0a3b2c2be6ee6aca8c05919 Mon Sep 17 00:00:00 2001 From: Luan Nico Date: Sat, 11 Apr 2020 15:07:06 -0400 Subject: [PATCH 06/17] more lenient version --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index cf5969469..dd448336a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -6,7 +6,7 @@ homepage: https://github.com/flame-engine/flame dependencies: flutter: sdk: flutter - audioplayers: 0.15.1-beta + audioplayers: ^0.15.1-beta ordered_set: ^2.0.0 path_provider: ^1.6.0 box2d_flame: ^0.4.5 From 846360e950d7420f699356c2d490ac195d3c61ef Mon Sep 17 00:00:00 2001 From: Luan Nico Date: Sat, 11 Apr 2020 19:08:46 -0400 Subject: [PATCH 07/17] sed --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 069f117bb..ead179fb7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ## [next] ## 0.19.1-beta -- Bump AP version to allow for web support +- Bump AudioPlayers version to allow for web support ## 0.19.0 - Fixing component lifecycle calls on BaseGame#addLater From d55797e0a759291392bd92312d4de4b1de1b610a Mon Sep 17 00:00:00 2001 From: Lukas Klingsbo Date: Sun, 12 Apr 2020 19:59:15 +0200 Subject: [PATCH 08/17] Invalid inheritance with new flutter --- lib/flame.dart | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/lib/flame.dart b/lib/flame.dart index 6b67541f5..8e43b6404 100644 --- a/lib/flame.dart +++ b/lib/flame.dart @@ -41,8 +41,6 @@ class Flame { {AssetBundle bundle, bool fullScreen = true, DeviceOrientation orientation}) async { - initializeWidget(); - if (fullScreen) { await util.fullScreen(); } @@ -53,24 +51,5 @@ class Flame { _bundle = bundle; } - - /// TODO verify if this is still needed (I don't think so) - static void initializeWidget() { - WidgetsFlutterBinding.ensureInitialized(); - } } -/// This class never needs to be used. -/// -/// It only exists here in order for [BindingBase] to setup Flutter services. -/// TODO: this could possibly be private, verify if it'd work. -class FlameBiding extends BindingBase with GestureBinding, ServicesBinding { - static FlameBiding instance; - - static FlameBiding ensureInitialized() { - if (FlameBiding.instance == null) { - FlameBiding(); - } - return FlameBiding.instance; - } -} From c2d982d5668541d9532bf8678891c12bd941e352 Mon Sep 17 00:00:00 2001 From: Lukas Klingsbo Date: Mon, 13 Apr 2020 19:45:49 +0200 Subject: [PATCH 09/17] Retain initializeWidget --- lib/flame.dart | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/flame.dart b/lib/flame.dart index 8e43b6404..6bf843d46 100644 --- a/lib/flame.dart +++ b/lib/flame.dart @@ -41,6 +41,8 @@ class Flame { {AssetBundle bundle, bool fullScreen = true, DeviceOrientation orientation}) async { + initializeWidget(); + if (fullScreen) { await util.fullScreen(); } @@ -51,5 +53,9 @@ class Flame { _bundle = bundle; } + + static void initializeWidget() { + WidgetsFlutterBinding.ensureInitialized(); + } } From f3eed9e7b982ef4232fbdce6f95a41c50b98604e Mon Sep 17 00:00:00 2001 From: Lukas Klingsbo Date: Mon, 13 Apr 2020 19:50:01 +0200 Subject: [PATCH 10/17] Changelog entry for FlameBinding removal --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 59bdaea02..4416b3e1e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,5 @@ ## [next] + - Removing FlameBinding since it isn't used and clashes with newest flutter ## 0.19.0 - Fixing component lifecycle calls on BaseGame#addLater From 63e373937044d11acaea11eb7aedd136ced8d830 Mon Sep 17 00:00:00 2001 From: Erick Zanardo Date: Mon, 13 Apr 2020 20:15:52 -0300 Subject: [PATCH 11/17] Making sure to avoid a null pointer exception on engine pause --- lib/game/game.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/game/game.dart b/lib/game/game.dart index dbf32b5e3..3b84b1561 100644 --- a/lib/game/game.dart +++ b/lib/game/game.dart @@ -397,7 +397,8 @@ class GameRenderBox extends RenderBox with WidgetsBindingObserver { void _unscheduleTick() { _running = false; - SchedulerBinding.instance.cancelFrameCallbackWithId(_frameCallbackId); + if (_frameCallbackId != null) + SchedulerBinding.instance.cancelFrameCallbackWithId(_frameCallbackId); } void _tick(Duration timestamp) { From e3e1c8d630599aad9e340220ec64935445ac39ac Mon Sep 17 00:00:00 2001 From: Erick Zanardo Date: Mon, 13 Apr 2020 20:26:07 -0300 Subject: [PATCH 12/17] Updating CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 59bdaea02..1678d5e57 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,5 @@ ## [next] + - Adding Game#pauseEngine and Game#resumeEngine methods ## 0.19.0 - Fixing component lifecycle calls on BaseGame#addLater From 3119dcae255448e80e79b98734fececac4c41a24 Mon Sep 17 00:00:00 2001 From: Luan Nico Date: Tue, 14 Apr 2020 07:45:14 -0400 Subject: [PATCH 13/17] Use the official release of AudioPlayers --- CHANGELOG.md | 2 +- doc/README.md | 2 +- pubspec.yaml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ead179fb7..8d979f892 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ## [next] -## 0.19.1-beta +## 0.19.1 - Bump AudioPlayers version to allow for web support ## 0.19.0 diff --git a/doc/README.md b/doc/README.md index bae1471f0..2dad7aafd 100644 --- a/doc/README.md +++ b/doc/README.md @@ -23,7 +23,7 @@ Check out the [awesome flame repository](https://github.com/flame-engine/awesome ```yaml dependencies: - flame: ^0.19.0 + flame: ^0.19.1 ``` And start using it! diff --git a/pubspec.yaml b/pubspec.yaml index dd448336a..94913b7ad 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,12 +1,12 @@ name: flame description: A minimalist Flutter game engine, provides a nice set of somewhat independent modules you can choose from. -version: 0.19.1-beta +version: 0.19.1 homepage: https://github.com/flame-engine/flame dependencies: flutter: sdk: flutter - audioplayers: ^0.15.1-beta + audioplayers: ^0.15.1 ordered_set: ^2.0.0 path_provider: ^1.6.0 box2d_flame: ^0.4.5 From 4629a76cca09ddd6f7e40c935dcdede13766359f Mon Sep 17 00:00:00 2001 From: Luan Nico Date: Tue, 14 Apr 2020 07:49:23 -0400 Subject: [PATCH 14/17] Address comment --- CHANGELOG.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d979f892..012401705 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,6 @@ # CHANGELOG ## [next] - -## 0.19.1 - Bump AudioPlayers version to allow for web support ## 0.19.0 From 4df24f71e715ebc132506b3c323f9ee3e7eedcc4 Mon Sep 17 00:00:00 2001 From: Erick Zanardo Date: Tue, 14 Apr 2020 08:57:44 -0300 Subject: [PATCH 15/17] PR suggestion --- example/lib/main.dart | 4 ++-- lib/game/game.dart | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/example/lib/main.dart b/example/lib/main.dart index ca185954f..824d11f5c 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -10,7 +10,7 @@ import 'package:flame/palette.dart'; import 'package:flutter/material.dart'; void main() { - final game = MyGame()..runOnCreation = false; + final game = MyGame(); runApp(game.widget); } @@ -54,7 +54,7 @@ class Square extends PositionComponent with HasGameRef { class MyGame extends BaseGame with TapDetector { final double squareSize = 128; - bool running = false; + bool running = true; MyGame() { add(Square()); diff --git a/lib/game/game.dart b/lib/game/game.dart index 3b84b1561..32f656022 100644 --- a/lib/game/game.dart +++ b/lib/game/game.dart @@ -397,8 +397,9 @@ class GameRenderBox extends RenderBox with WidgetsBindingObserver { void _unscheduleTick() { _running = false; - if (_frameCallbackId != null) + if (_frameCallbackId != null) { SchedulerBinding.instance.cancelFrameCallbackWithId(_frameCallbackId); + } } void _tick(Duration timestamp) { From 7667779718c0f1ad0464f0f76e44761776b6a3f5 Mon Sep 17 00:00:00 2001 From: Erick Zanardo Date: Tue, 14 Apr 2020 09:01:32 -0300 Subject: [PATCH 16/17] Linting --- lib/flame.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/flame.dart b/lib/flame.dart index 6bf843d46..619fb73d7 100644 --- a/lib/flame.dart +++ b/lib/flame.dart @@ -58,4 +58,3 @@ class Flame { WidgetsFlutterBinding.ensureInitialized(); } } - From 3bfa2398a884bc67e389cdb2c9e7e7b3275990b4 Mon Sep 17 00:00:00 2001 From: Erick Zanardo Date: Tue, 14 Apr 2020 14:02:12 -0300 Subject: [PATCH 17/17] Bumping version --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5032b11d1..05fb0a786 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # CHANGELOG -## [next] +## 1.19.1 - Bump AudioPlayers version to allow for web support - Adding Game#pauseEngine and Game#resumeEngine methods - Removing FlameBinding since it isn't used and clashes with newest flutter