diff --git a/.gitignore b/.gitignore index 5edfcbb..ca27149 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,7 @@ migrate_working_dir/ *.ipr *.iws .idea/ +.vscode/ # The .vscode folder contains launch configuration and tasks you configure in # VS Code which you may wish to be included in version control, so this line diff --git a/lib/game/components/game_border.dart b/lib/game/components/game_border.dart index e44cd25..96485af 100644 --- a/lib/game/components/game_border.dart +++ b/lib/game/components/game_border.dart @@ -34,10 +34,10 @@ class GameBorder extends PositionComponent position = game.playArea.topLeft.toVector2(); size = game.playArea.size.toVector2(); - rRect = RRect.fromRectAndRadius(Vector2.zero() & size, _radius); - clipArea = game.playArea.inflate(200.0).toFlameRectangle(); - clipAreaCenter = clipArea.center; + final rect = Vector2.zero() & size; + rRect = RRect.fromRectAndRadius(rect, _radius); + clipArea = rect.toFlameRectangle(); } @override @@ -54,9 +54,7 @@ class GameBorder extends PositionComponent for (final (color, path) in _generateBorderClips(clipArea)) { canvas.save(); - canvas.translateVector(clipAreaCenter); canvas.clipPath(path); - canvas.translateVector(-clipAreaCenter); canvas.drawRRect(rRect, paint..color = color); canvas.restore(); } @@ -91,7 +89,11 @@ class GameBorder extends PositionComponent .toList(); } - Path _generateClipPath(double alpha1, double alpha2, Rectangle clipArea) { + static Path _generateClipPath( + double alpha1, + double alpha2, + Rectangle clipArea, + ) { final cornerAngle = atan(clipArea.height / clipArea.width); final cornerAngles = [ cornerAngle, @@ -116,10 +118,18 @@ class GameBorder extends PositionComponent final points = angles .map((e) => Vector2(cos(e), sin(e))..scale(clipLength)) .map((e) => LineSegment(Vector2.zero(), e)) + .map((e) => e.translate(clipArea.center)) .map((e) => clipArea.intersections(e).firstOrNull) .nonNulls .map((e) => e.toOffset()) .toList(); - return Path()..addPolygon([Offset.zero, ...points], true); + final center = clipArea.center.toOffset(); + return Path()..addPolygon([center, ...points], true); + } +} + +extension on LineSegment { + LineSegment translate(Vector2 delta) { + return LineSegment(from + delta, to + delta); } } diff --git a/lib/game/components/score_panel.dart b/lib/game/components/score_panel.dart index 70992cd..888fc27 100644 --- a/lib/game/components/score_panel.dart +++ b/lib/game/components/score_panel.dart @@ -5,13 +5,14 @@ import 'package:lightrunners/game/components/score_box.dart'; import 'package:lightrunners/game/lightrunners_game.dart'; import 'package:lightrunners/ui/palette.dart'; import 'package:lightrunners/utils/constants.dart'; +import 'package:lightrunners/utils/utils.dart'; class ScorePanel extends RectangleComponent with HasGameReference { @override void onLoad() { - position = Vector2(game.camera.viewport.size.x - scoreBoxWidth, 0); - size = Vector2(scoreBoxWidth, game.camera.viewport.size.y); + position = Vector2(fixedSize.x - scoreBoxWidth, 0) - fixedSize / 2; + size = Vector2(scoreBoxWidth, fixedSize.y); paint = Paint()..color = GamePalette.black; addAll( game.ships.values.map( diff --git a/lib/game/components/ship.dart b/lib/game/components/ship.dart index 7f86b30..dcc796c 100644 --- a/lib/game/components/ship.dart +++ b/lib/game/components/ship.dart @@ -141,7 +141,7 @@ class Ship extends SpriteComponent @override bool onKeyEvent( - RawKeyEvent event, + KeyEvent event, Set keysPressed, ) { final keyboardControl = playerKeyboardControlsMapping[player.slotNumber]; diff --git a/lib/game/lightrunners_game.dart b/lib/game/lightrunners_game.dart index 0d17cdb..7e8c7ce 100644 --- a/lib/game/lightrunners_game.dart +++ b/lib/game/lightrunners_game.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'dart:ui'; import 'package:flame/components.dart'; +import 'package:flame/extensions.dart'; import 'package:flame/game.dart'; import 'package:flame/input.dart'; import 'package:gamepads/gamepads.dart'; @@ -24,9 +25,12 @@ class LightRunnersGame extends FlameGame StreamSubscription? _subscription; final void Function(Map) onEndGame; - LightRunnersGame({required this.players, required this.onEndGame}) - : super( + LightRunnersGame({ + required this.players, + required this.onEndGame, + }) : super( camera: CameraComponent.withFixedResolution( + world: World(), width: fixedSize.x, height: fixedSize.y, ), @@ -42,9 +46,14 @@ class LightRunnersGame extends FlameGame fixedSize.x - 2 * screenMargin - scoreBoxWidth - 2 * scoreBoxMargin, fixedSize.y - 2 * screenMargin, ); - camera.viewport.add(ScorePanel()); - world.addAll([Background(), GameBorder()]); - world.addAll([Spotlight(), ...ships.values]); + + world.addAll([ + Background(), + GameBorder(), + Spotlight(), + ...ships.values, + ScorePanel(), + ]); late final CountDown countDown; add( diff --git a/lib/lobby/view/lobby_page.dart b/lib/lobby/view/lobby_page.dart index 1eeb0bc..d99c100 100644 --- a/lib/lobby/view/lobby_page.dart +++ b/lib/lobby/view/lobby_page.dart @@ -9,6 +9,7 @@ import 'package:lightrunners/game/view/game_page.dart'; import 'package:lightrunners/title/view/title_page.dart'; import 'package:lightrunners/ui/palette.dart'; import 'package:lightrunners/utils/gamepad_map.dart'; +import 'package:lightrunners/utils/input_handler_utils.dart'; import 'package:lightrunners/widgets/screen_scaffold.dart'; class LobbyPage extends StatefulWidget { @@ -73,9 +74,9 @@ class _LobbyPageState extends State { fontWeight: FontWeight.bold, ); - return RawKeyboardListener( + return KeyboardListener( focusNode: _focusNode, - onKey: (RawKeyEvent event) { + onKeyEvent: (KeyEvent event) { if (event.isKeyPressed(LogicalKeyboardKey.space)) { setState(() { _players.add(Player(slotNumber: _players.length)); diff --git a/lib/main.dart b/lib/main.dart index 0c2aadd..ed2c45c 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -11,7 +11,7 @@ void main() async { Scores.init(); runApp( CRTShader( - enabled: true, + enabled: false, child: MaterialApp( debugShowCheckedModeBanner: false, home: const TitlePage(), diff --git a/lib/utils/flame_utils.dart b/lib/utils/flame_utils.dart index 4370286..dfb9877 100644 --- a/lib/utils/flame_utils.dart +++ b/lib/utils/flame_utils.dart @@ -1,8 +1,7 @@ -import 'package:flame/experimental.dart'; import 'package:flame/extensions.dart'; import 'package:flame/geometry.dart'; -// TODO(luan): optmize, test, and move this to Flame +// TODO(luan): optimize, test, and move this to Flame const _epsilon = 10e-9; @@ -20,25 +19,3 @@ bool isSameVector(Vector2 v1, Vector2 v2, {double epsilon = _epsilon}) { Vector2 lineMidPoint(LineSegment line) { return line.from + (line.to - line.from) / 2; } - -extension RectangleExtension on Rectangle { - Rect toRect() => Rect.fromLTWH(left, top, width, height); - - List intersections(LineSegment line) { - return edges.expand((e) => e.intersections(line)).toList(); - } - - List get edges => [topEdge, rightEdge, bottomEdge, leftEdge]; - - LineSegment get topEdge => LineSegment(topLeft, topRight); - LineSegment get rightEdge => LineSegment(topRight, bottomRight); - LineSegment get bottomEdge => LineSegment(bottomRight, bottomLeft); - LineSegment get leftEdge => LineSegment(bottomLeft, topLeft); - - List get vertices => [topLeft, topRight, bottomRight, bottomLeft]; - - Vector2 get topLeft => Vector2(left, top); - Vector2 get topRight => Vector2(right, top); - Vector2 get bottomRight => Vector2(right, bottom); - Vector2 get bottomLeft => Vector2(left, bottom); -} diff --git a/lib/utils/input_handler_utils.dart b/lib/utils/input_handler_utils.dart index c52af5e..64eaf6a 100644 --- a/lib/utils/input_handler_utils.dart +++ b/lib/utils/input_handler_utils.dart @@ -31,7 +31,7 @@ class GamepadJoystick { } bool readArrowLikeKeysIntoVector2( - RawKeyEvent event, + KeyEvent event, Set keysPressed, Vector2 vector, { required LogicalKeyboardKey up, @@ -39,7 +39,7 @@ bool readArrowLikeKeysIntoVector2( required LogicalKeyboardKey left, required LogicalKeyboardKey right, }) { - final isDown = event is RawKeyDownEvent; + final isDown = event is KeyDownEvent; if (event.logicalKey == up) { if (isDown) { vector.y = -1; @@ -79,3 +79,9 @@ bool readArrowLikeKeysIntoVector2( } return true; } + +extension IsKeyPressed on KeyEvent { + bool isKeyPressed(LogicalKeyboardKey logicalKey) { + return this is KeyDownEvent && this.logicalKey == logicalKey; + } +} diff --git a/lib/utils/triangle2.dart b/lib/utils/triangle2.dart index ce53762..a9034b7 100644 --- a/lib/utils/triangle2.dart +++ b/lib/utils/triangle2.dart @@ -1,4 +1,3 @@ -import 'dart:math'; import 'dart:ui'; import 'package:collection/collection.dart'; @@ -89,7 +88,7 @@ class Triangle2 { } Circle circumcircle() { - return _circleFromPoints(vertices)!; + return Circle.fromPoints(v1, v2, v3)!; } Triangle2 translateBy(Vector2 offset) { @@ -103,24 +102,3 @@ class Triangle2 { return 'Triangle2(vertices: $vertices)'; } } - -// TODO(luan): add to Flame: Circle.fromPoints -Circle? _circleFromPoints(List points) { - final p1 = points[0]; - final p2 = points[1]; - final p3 = points[2]; - - final offset = pow(p2.x, 2) + pow(p2.y, 2); - final bc = (pow(p1.x, 2) + pow(p1.y, 2) - offset) / 2.0; - final cd = (offset - pow(p3.x, 2) - pow(p3.y, 2)) / 2.0; - final det = (p1.x - p2.x) * (p2.y - p3.y) - (p2.x - p3.x) * (p1.y - p2.y); - if (det == 0) { - return null; - } - - final centerX = (bc * (p2.y - p3.y) - cd * (p1.y - p2.y)) / det; - final centerY = (cd * (p1.x - p2.x) - bc * (p2.x - p3.x)) / det; - final radius = sqrt(pow(p2.x - centerX, 2) + pow(p2.y - centerY, 2)); - - return Circle(Vector2(centerX, centerY), radius); -} diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index 3793777..ca94310 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -1,9 +1,5 @@ -import 'dart:math'; - import 'package:flame/extensions.dart'; -const tau = 2 * pi; - void moveTowards(Vector2 pos, Vector2 target, double ds) { final diff = target - pos; if (diff.length < ds) { diff --git a/macos/Podfile.lock b/macos/Podfile.lock index 4465d01..0d1ebf5 100644 --- a/macos/Podfile.lock +++ b/macos/Podfile.lock @@ -2,7 +2,7 @@ PODS: - audioplayers_darwin (0.0.1): - FlutterMacOS - FlutterMacOS (1.0.0) - - gamepads_darwin (0.0.1): + - gamepads_darwin (0.1.1): - FlutterMacOS - path_provider_foundation (0.0.1): - Flutter @@ -27,9 +27,9 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: audioplayers_darwin: dcad41de4fbd0099cb3749f7ab3b0cb8f70b810c FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 - gamepads_darwin: a41ed976610d94faace1821c306a173e3ac55c3a - path_provider_foundation: c68054786f1b4f3343858c1e1d0caaded73f0be9 + gamepads_darwin: 07af6c60c282902b66574c800e20b2b26e68fda8 + path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943 PODFILE CHECKSUM: 236401fc2c932af29a9fcf0e97baeeb2d750d367 -COCOAPODS: 1.12.1 +COCOAPODS: 1.15.0 diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index de882a8..68d1e47 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -259,7 +259,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0920; - LastUpgradeCheck = 1300; + LastUpgradeCheck = 1510; ORGANIZATIONNAME = ""; TargetAttributes = { 331C80D4294CF70F00263BE5 = { diff --git a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 20663dc..3f84ef6 100644 --- a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ Bool { return true diff --git a/pubspec.lock b/pubspec.lock index 169c565..da9c565 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -141,10 +141,10 @@ packages: dependency: "direct main" description: name: collection - sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a url: "https://pub.dev" source: hosted - version: "1.17.2" + version: "1.18.0" convert: dependency: transitive description: @@ -157,10 +157,10 @@ packages: dependency: transitive description: name: coverage - sha256: "2fb815080e44a09b85e0f2ca8a820b15053982b2e714b59267719e8a9ff17097" + sha256: "3945034e86ea203af7a056d98e98e42a5518fff200d6e8e6647e1886b07e936e" url: "https://pub.dev" source: hosted - version: "1.6.3" + version: "1.8.0" crypto: dependency: transitive description: @@ -213,10 +213,10 @@ packages: dependency: transitive description: name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" url: "https://pub.dev" source: hosted - version: "6.1.4" + version: "7.0.0" firebase_admin: dependency: "direct main" description: @@ -253,10 +253,10 @@ packages: dependency: "direct main" description: name: flame - sha256: b61d557d340e4541dec5ffa9c5bc82dd0fb42cce7ec99d3e8cab3c745c93c327 + sha256: "79133dc46a3ff870950f41d0dc1598414e7bd7ae2c29bd9f0a9de208d9a70cb7" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.18.0" flame_audio: dependency: "direct main" description: @@ -326,26 +326,42 @@ packages: dependency: "direct main" description: name: gamepads - sha256: "5c6b0b576b455a29295306004cee7c51699958efb9fad6e6371d89a076f2688d" + sha256: a71b8ce0a71d5f0977f4ea761f320421679f5bd7a70d10362e2e6985f772c785 url: "https://pub.dev" source: hosted - version: "0.1.1" + version: "0.1.2" + gamepads_android: + dependency: transitive + description: + name: gamepads_android + sha256: d7b329d279fe230e5b255bc146c8b5c988bd139fc318d118586c1d1fdf7f52ee + url: "https://pub.dev" + source: hosted + version: "0.1.2" gamepads_darwin: dependency: transitive description: name: gamepads_darwin - sha256: a101811ef2a7c57632ed54d78b4c1b2e1e83a4b0031da62151b0537de9b5932d + sha256: "6fc0395e8605bbdea8fc0887c1906602e9de0220275c9ca8cbbb085633194f18" url: "https://pub.dev" source: hosted - version: "0.1.1" + version: "0.1.2" + gamepads_ios: + dependency: transitive + description: + name: gamepads_ios + sha256: "2e0e5e699d674f31eed53ae0cf6cb9cbf2c9e00042862794215fc1bd51c4006a" + url: "https://pub.dev" + source: hosted + version: "0.1.2" gamepads_linux: dependency: transitive description: name: gamepads_linux - sha256: "7a16bef9d773648aae86204da3915e0172d3f5789b08714f65b18ce663a12611" + sha256: ade4c1a17f57cdf288201d1c70a360f76c446e0df6e5881cf4d3f8d79f63bd9a url: "https://pub.dev" source: hosted - version: "0.1.1" + version: "0.1.1+1" gamepads_platform_interface: dependency: transitive description: @@ -358,10 +374,10 @@ packages: dependency: transitive description: name: gamepads_windows - sha256: "177b98ce0c34f20a72c778641965d1428908ff1dc31dcede64320f309af4c635" + sha256: ae2aa9436757cf8af3bb79fa0813e09ed92d9d93e3c0998619021f5d9ba591ad url: "https://pub.dev" source: hosted - version: "0.1.1" + version: "0.1.1+1" gcloud: dependency: transitive description: @@ -487,6 +503,30 @@ packages: url: "https://pub.dev" source: hosted version: "0.6.7" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05" + url: "https://pub.dev" + source: hosted + version: "10.0.5" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806" + url: "https://pub.dev" + source: hosted + version: "3.0.5" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" logging: dependency: transitive description: @@ -499,26 +539,26 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.11.1" meta: dependency: transitive description: name: meta - sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + sha256: "25dfcaf170a0190f47ca6355bdd4552cb8924b430512ff0cafb8db9bd41fe33b" url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.14.0" mime: dependency: transitive description: @@ -547,10 +587,10 @@ packages: dependency: transitive description: name: ordered_set - sha256: "3858c7d84619edfab87c3e367584648020903187edb70b52697646f4b2a93022" + sha256: "1bfaaaee0419e43ecc9eaebd410eb4bd5039657b72011de75ff3e2915c9aac60" url: "https://pub.dev" source: hosted - version: "5.0.2" + version: "5.0.3" package_config: dependency: transitive description: @@ -563,10 +603,10 @@ packages: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_provider: dependency: transitive description: @@ -635,10 +675,10 @@ packages: dependency: transitive description: name: platform - sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" + sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.1.4" plugin_platform_interface: dependency: transitive description: @@ -667,10 +707,10 @@ packages: dependency: transitive description: name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + sha256: "21e54fd2faf1b5bdd5102afd25012184a6793927648ea81eea80552ac9405b32" url: "https://pub.dev" source: hosted - version: "4.2.4" + version: "5.0.2" protobuf: dependency: transitive description: @@ -784,18 +824,18 @@ packages: dependency: transitive description: name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.11.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" string_scanner: dependency: transitive description: @@ -832,26 +872,26 @@ packages: dependency: transitive description: name: test - sha256: "13b41f318e2a5751c3169137103b60c584297353d4b1761b66029bae6411fe46" + sha256: d11b55850c68c1f6c0cf00eabded4e66c4043feaf6c0d7ce4a36785137df6331 url: "https://pub.dev" source: hosted - version: "1.24.3" + version: "1.25.5" test_api: dependency: transitive description: name: test_api - sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" + sha256: "2419f20b0c8677b2d67c8ac4d1ac7372d862dc6c460cdbb052b40155408cd794" url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.7.1" test_core: dependency: transitive description: name: test_core - sha256: "99806e9e6d95c7b059b7a0fc08f07fc53fabe54a829497f0d9676299f1e8637e" + sha256: "4d070a6bc36c1c4e89f20d353bfd71dc30cdf2bd0e14349090af360a029ab292" url: "https://pub.dev" source: hosted - version: "0.5.3" + version: "0.6.2" typed_data: dependency: transitive description: @@ -880,10 +920,10 @@ packages: dependency: transitive description: name: vm_service - sha256: c620a6f783fa22436da68e42db7ebbf18b8c44b9a46ab911f666ff09ffd9153f + sha256: "7475cb4dd713d57b6f7464c0e13f06da0d535d8b2067e188962a59bac2cf280b" url: "https://pub.dev" source: hosted - version: "11.7.1" + version: "14.2.2" watcher: dependency: transitive description: @@ -892,14 +932,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" - web: - dependency: transitive - description: - name: web - sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 - url: "https://pub.dev" - source: hosted - version: "0.1.4-beta" web_socket_channel: dependency: transitive description: @@ -912,10 +944,10 @@ packages: dependency: transitive description: name: webdriver - sha256: "3c923e918918feeb90c4c9fdf1fe39220fa4c0e8e2c0fffaded174498ef86c49" + sha256: "003d7da9519e1e5f329422b36c4dcdf18d7d2978d1ba099ea4e45ba490ed845e" url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.0.3" webkit_inspection_protocol: dependency: transitive description: @@ -957,5 +989,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.1.0-185.0.dev <4.0.0" - flutter: ">=3.10.0" + dart: ">=3.4.0 <4.0.0" + flutter: ">=3.22.0" diff --git a/pubspec.yaml b/pubspec.yaml index b2a0cf7..17e43f8 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,5 +1,5 @@ name: lightrunners -description: A simple Flame game. +description: Lightrunners is a local multiplayer "King of the Hill"-style game built for FlutterCon 2023. version: 0.1.0 publish_to: 'none' @@ -11,12 +11,12 @@ dependencies: collection: ^1.17.0 firebase_admin: ^0.2.0 firedart: ^0.9.7 - flame: ^1.9.0 + flame: ^1.18.0 flame_audio: ^2.1.0 flutter: sdk: flutter flutter_shaders: ^0.1.2 - gamepads: ^0.1.1 + gamepads: ^0.1.2 google_fonts: ^4.0.4 phased: ^0.0.3 vector_math: ^2.1.4