From d074487941b8038256764640f63db2024049937b Mon Sep 17 00:00:00 2001 From: Erick Date: Fri, 20 Oct 2023 13:33:30 -0300 Subject: [PATCH 1/6] feat: adding enemies and items back in the game --- lib/game/components/components.dart | 5 +- lib/game/components/enemies.dart | 62 ------------------- lib/game/components/enemy.dart | 35 +++++++++++ .../image_object_group_builder.dart | 54 ++++++++++++++++ lib/game/components/item.dart | 34 ++++++++++ lib/game/components/items.dart | 62 ------------------- lib/game/dash_run_game.dart | 22 +++++-- pubspec.yaml | 4 ++ 8 files changed, 147 insertions(+), 131 deletions(-) delete mode 100644 lib/game/components/enemies.dart create mode 100644 lib/game/components/enemy.dart create mode 100644 lib/game/components/image_object_group_builder.dart create mode 100644 lib/game/components/item.dart delete mode 100644 lib/game/components/items.dart diff --git a/lib/game/components/components.dart b/lib/game/components/components.dart index baf42e0f..019206cf 100644 --- a/lib/game/components/components.dart +++ b/lib/game/components/components.dart @@ -1,5 +1,6 @@ export 'camera_debugger.dart'; -export 'enemies.dart'; -export 'items.dart'; +export 'enemy.dart'; +export 'image_object_group_builder.dart'; +export 'item.dart'; export 'player.dart'; export 'score_label.dart'; diff --git a/lib/game/components/enemies.dart b/lib/game/components/enemies.dart deleted file mode 100644 index eec75938..00000000 --- a/lib/game/components/enemies.dart +++ /dev/null @@ -1,62 +0,0 @@ -import 'package:dash_run/game/dash_run_game.dart'; -import 'package:flame/components.dart'; -import 'package:flame/sprite.dart'; -import 'package:flame_tiled/flame_tiled.dart'; -import 'package:leap/leap.dart'; - -class Enemies extends Component with HasGameRef { - @override - Future onLoad() async { - final enemiesLayer = gameRef.leapMap.getTileLayer('enemies'); - final enemyTiles = await gameRef.images.load( - 'objects/tile_enemies_v2.png', - ); - - for (final object in enemiesLayer.objects) { - final spritesheet = SpriteSheet( - image: enemyTiles, - srcSize: Vector2.all(gameRef.tileSize), - ); - - gameRef.leapMap.add( - Enemy( - // We are sure we have a gid. - sprite: spritesheet.getSpriteById(object.gid!), - tiledObject: object, - ), - ); - } - - return super.onLoad(); - } -} - -class Enemy extends PhysicalEntity { - Enemy({ - required this.sprite, - required this.tiledObject, - this.enemyDamage = 1, - super.static = true, - super.collisionType = CollisionType.standard, - }); - - final int enemyDamage; - late final Sprite sprite; - late final TiledObject tiledObject; - - @override - Future onLoad() async { - size = sprite.srcSize; - anchor = Anchor.center; - position = Vector2(tiledObject.x, tiledObject.y); - - add( - SpriteComponent( - size: size, - sprite: sprite, - ), - ); - - return super.onLoad(); - } -} diff --git a/lib/game/components/enemy.dart b/lib/game/components/enemy.dart new file mode 100644 index 00000000..6dc525cc --- /dev/null +++ b/lib/game/components/enemy.dart @@ -0,0 +1,35 @@ +import 'package:dash_run/game/dash_run_game.dart'; +import 'package:flame/components.dart'; +import 'package:flame_tiled/flame_tiled.dart'; +import 'package:leap/leap.dart'; + +class Enemy extends PhysicalEntity { + Enemy({ + required this.sprite, + required this.tiledObject, + this.enemyDamage = 1, + super.collisionType = CollisionType.standard, + }); //: super(priority: 1); + + final int enemyDamage; + late final Sprite sprite; + late final TiledObject tiledObject; + + @override + int get priority => 1; + + @override + Future onLoad() async { + size = sprite.srcSize; + position = Vector2(tiledObject.x, tiledObject.y); + + add( + SpriteComponent( + size: size, + sprite: sprite, + ), + ); + + return super.onLoad(); + } +} diff --git a/lib/game/components/image_object_group_builder.dart b/lib/game/components/image_object_group_builder.dart new file mode 100644 index 00000000..bf03fe97 --- /dev/null +++ b/lib/game/components/image_object_group_builder.dart @@ -0,0 +1,54 @@ +import 'dart:async'; + +import 'package:dash_run/game/dash_run_game.dart'; +import 'package:flame/components.dart'; +import 'package:flame/sprite.dart'; +import 'package:flame_tiled/flame_tiled.dart'; +import 'package:leap/leap.dart'; + +typedef ImageObjectGroupComponentBuilder = Component Function({ + required TiledObject tiledObject, + required Sprite sprite, +}); + +/// An object that given a tileset and object group, creates its components. +class ImageObjectGroupBuilder extends Component with HasGameRef { + ImageObjectGroupBuilder({ + required this.leapMap, + required this.tileLayerName, + required this.tilesetPath, + required this.firstGId, + required this.componentBuilder, + }); + + final LeapMap leapMap; + final String tileLayerName; + final String tilesetPath; + final int firstGId; + final ImageObjectGroupComponentBuilder componentBuilder; + + @override + FutureOr onLoad() async { + await super.onLoad(); + final itemsLayer = gameRef.leapMap.getTileLayer(tileLayerName); + final itemTiles = await gameRef.images.load( + tilesetPath, + ); + + for (final object in itemsLayer.objects) { + final spritesheet = SpriteSheet( + image: itemTiles, + srcSize: Vector2.all(gameRef.tileSize), + ); + + gameRef.leapMap.add( + componentBuilder( + tiledObject: object, + sprite: spritesheet.getSpriteById( + (object.gid ?? 0) - firstGId, + ), + ), + ); + } + } +} diff --git a/lib/game/components/item.dart b/lib/game/components/item.dart new file mode 100644 index 00000000..e1631477 --- /dev/null +++ b/lib/game/components/item.dart @@ -0,0 +1,34 @@ +import 'dart:async'; + +import 'package:dash_run/game/dash_run_game.dart'; +import 'package:flame/components.dart'; +import 'package:flame_tiled/flame_tiled.dart'; +import 'package:leap/leap.dart'; + +class Item extends PhysicalEntity { + Item({ + required this.sprite, + required this.tiledObject, + }); + + late final Sprite sprite; + late final TiledObject tiledObject; + + @override + int get priority => 1; + + @override + Future onLoad() async { + size = sprite.srcSize; + position = Vector2(tiledObject.x, tiledObject.y); + + add( + SpriteComponent( + size: size, + sprite: sprite, + ), + ); + + return super.onLoad(); + } +} diff --git a/lib/game/components/items.dart b/lib/game/components/items.dart deleted file mode 100644 index 1c609fcc..00000000 --- a/lib/game/components/items.dart +++ /dev/null @@ -1,62 +0,0 @@ -import 'dart:async'; - -import 'package:dash_run/game/dash_run_game.dart'; -import 'package:flame/components.dart'; -import 'package:flame/sprite.dart'; -import 'package:flame_tiled/flame_tiled.dart'; -import 'package:leap/leap.dart'; - -class Items extends Component with HasGameRef { - @override - Future onLoad() async { - final itemsLayer = gameRef.leapMap.getTileLayer('items'); - final itemTiles = await gameRef.images.load( - 'objects/tile_items_v2.png', - ); - - for (final object in itemsLayer.objects) { - final spritesheet = SpriteSheet( - image: itemTiles, - srcSize: Vector2.all(gameRef.tileSize), - ); - - gameRef.leapMap.add( - Item( - // We are sure we have a gid. - sprite: spritesheet.getSpriteById(object.id), - tiledObject: object, - ), - ); - } - - return super.onLoad(); - } -} - -class Item extends PhysicalEntity { - Item({ - required this.sprite, - required this.tiledObject, - super.static = true, - super.collisionType = CollisionType.standard, - }); - - late final Sprite sprite; - late final TiledObject tiledObject; - - @override - Future onLoad() async { - size = sprite.srcSize; - anchor = Anchor.center; - position = Vector2(tiledObject.x, tiledObject.y); - - add( - SpriteComponent( - size: size, - sprite: sprite, - ), - ); - - return super.onLoad(); - } -} diff --git a/lib/game/dash_run_game.dart b/lib/game/dash_run_game.dart index c13fd849..3693ebac 100644 --- a/lib/game/dash_run_game.dart +++ b/lib/game/dash_run_game.dart @@ -9,7 +9,7 @@ import 'package:flutter/material.dart'; import 'package:leap/leap.dart'; class DashRunGame extends LeapGame - with TapCallbacks, HasKeyboardHandlerComponents, HasCollisionDetection { + with TapCallbacks, HasKeyboardHandlerComponents { DashRunGame({ this.customBundle, }) : super( @@ -19,8 +19,6 @@ class DashRunGame extends LeapGame static const prefix = 'assets/map/'; late final Player player; - late final Items items; - late final Enemies enemies; late final SimpleCombinedInput input; final AssetBundle? customBundle; @@ -55,8 +53,22 @@ class DashRunGame extends LeapGame ); input = SimpleCombinedInput(); - items = Items(); - enemies = Enemies(); + + final items = ImageObjectGroupBuilder( + leapMap: leapMap, + tileLayerName: 'items', + tilesetPath: 'objects/tile_items_v2.png', + firstGId: 740, + componentBuilder: Item.new, + ); + + final enemies = ImageObjectGroupBuilder( + leapMap: leapMap, + tileLayerName: 'enemies', + tilesetPath: 'objects/tile_enemies_v2.png', + firstGId: 734, + componentBuilder: Item.new, + ); await addAll([items, enemies, input]); diff --git a/pubspec.yaml b/pubspec.yaml index de9b9437..e47a2be1 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -22,6 +22,10 @@ dependencies: leap: ^0.2.0 path: ^1.8.3 +dependency_overrides: + leap: + path: ../../gamedev/leap/packages/leap + dev_dependencies: bloc_test: ^9.1.2 flame_test: ^1.13.2 From a61a1d4ea7dd7c4b3d5b40f7f8cfc43ba71426f7 Mon Sep 17 00:00:00 2001 From: Erick Date: Fri, 20 Oct 2023 13:46:54 -0300 Subject: [PATCH 2/6] fix leap dependency --- pubspec.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/pubspec.yaml b/pubspec.yaml index e47a2be1..de9b9437 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -22,10 +22,6 @@ dependencies: leap: ^0.2.0 path: ^1.8.3 -dependency_overrides: - leap: - path: ../../gamedev/leap/packages/leap - dev_dependencies: bloc_test: ^9.1.2 flame_test: ^1.13.2 From 833b8c97631056bae7e1b9972da7608a91494b7c Mon Sep 17 00:00:00 2001 From: Erick Date: Fri, 20 Oct 2023 13:49:49 -0300 Subject: [PATCH 3/6] fix test --- lib/game/dash_run_game.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/game/dash_run_game.dart b/lib/game/dash_run_game.dart index 3693ebac..08885b62 100644 --- a/lib/game/dash_run_game.dart +++ b/lib/game/dash_run_game.dart @@ -67,7 +67,7 @@ class DashRunGame extends LeapGame tileLayerName: 'enemies', tilesetPath: 'objects/tile_enemies_v2.png', firstGId: 734, - componentBuilder: Item.new, + componentBuilder: Enemy.new, ); await addAll([items, enemies, input]); From 0f7ca5f31329321da60c8614b23bf1c310efe0f3 Mon Sep 17 00:00:00 2001 From: Erick Date: Fri, 20 Oct 2023 14:04:59 -0300 Subject: [PATCH 4/6] making items static --- lib/game/components/item.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/game/components/item.dart b/lib/game/components/item.dart index e1631477..0a745e0e 100644 --- a/lib/game/components/item.dart +++ b/lib/game/components/item.dart @@ -9,7 +9,7 @@ class Item extends PhysicalEntity { Item({ required this.sprite, required this.tiledObject, - }); + }) : super(static: true); late final Sprite sprite; late final TiledObject tiledObject; From da1c3ed98326a12f688b4be71b53c5cc14dd35c5 Mon Sep 17 00:00:00 2001 From: Erick Date: Fri, 20 Oct 2023 14:39:06 -0300 Subject: [PATCH 5/6] improving --- lib/game/components/image_object_group_builder.dart | 5 +++-- lib/game/dash_run_game.dart | 11 +++++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/game/components/image_object_group_builder.dart b/lib/game/components/image_object_group_builder.dart index bf03fe97..ef35f6bf 100644 --- a/lib/game/components/image_object_group_builder.dart +++ b/lib/game/components/image_object_group_builder.dart @@ -14,22 +14,23 @@ typedef ImageObjectGroupComponentBuilder = Component Function({ /// An object that given a tileset and object group, creates its components. class ImageObjectGroupBuilder extends Component with HasGameRef { ImageObjectGroupBuilder({ + required this.tileset, required this.leapMap, required this.tileLayerName, required this.tilesetPath, - required this.firstGId, required this.componentBuilder, }); + final Tileset tileset; final LeapMap leapMap; final String tileLayerName; final String tilesetPath; - final int firstGId; final ImageObjectGroupComponentBuilder componentBuilder; @override FutureOr onLoad() async { await super.onLoad(); + final firstGId = tileset.firstGid ?? 0; final itemsLayer = gameRef.leapMap.getTileLayer(tileLayerName); final itemTiles = await gameRef.images.load( tilesetPath, diff --git a/lib/game/dash_run_game.dart b/lib/game/dash_run_game.dart index 08885b62..1fa72827 100644 --- a/lib/game/dash_run_game.dart +++ b/lib/game/dash_run_game.dart @@ -54,19 +54,26 @@ class DashRunGame extends LeapGame input = SimpleCombinedInput(); + final tilesets = leapMap.tiledMap.tileMap.map.tilesets; + final itemsTileset = + tilesets.firstWhere((tileset) => tileset.name == 'tile_items_v2'); + + final enemiesTileset = + tilesets.firstWhere((tileset) => tileset.name == 'tile_enemies_v2'); + final items = ImageObjectGroupBuilder( + tileset: itemsTileset, leapMap: leapMap, tileLayerName: 'items', tilesetPath: 'objects/tile_items_v2.png', - firstGId: 740, componentBuilder: Item.new, ); final enemies = ImageObjectGroupBuilder( + tileset: enemiesTileset, leapMap: leapMap, tileLayerName: 'enemies', tilesetPath: 'objects/tile_enemies_v2.png', - firstGId: 734, componentBuilder: Enemy.new, ); From b2d9e1ab0bbeb2bef7d68fcb9541ef719f49f49e Mon Sep 17 00:00:00 2001 From: Erick Date: Mon, 23 Oct 2023 14:44:19 -0300 Subject: [PATCH 6/6] PR suggestions --- lib/game/components/components.dart | 2 +- lib/game/components/enemy.dart | 2 +- ....dart => sprite_object_group_builder.dart} | 25 ++++++++----------- lib/game/dash_run_game.dart | 6 ++--- 4 files changed, 15 insertions(+), 20 deletions(-) rename lib/game/components/{image_object_group_builder.dart => sprite_object_group_builder.dart} (55%) diff --git a/lib/game/components/components.dart b/lib/game/components/components.dart index 019206cf..b75bfa7b 100644 --- a/lib/game/components/components.dart +++ b/lib/game/components/components.dart @@ -1,6 +1,6 @@ export 'camera_debugger.dart'; export 'enemy.dart'; -export 'image_object_group_builder.dart'; export 'item.dart'; export 'player.dart'; export 'score_label.dart'; +export 'sprite_object_group_builder.dart'; diff --git a/lib/game/components/enemy.dart b/lib/game/components/enemy.dart index 6dc525cc..c679baea 100644 --- a/lib/game/components/enemy.dart +++ b/lib/game/components/enemy.dart @@ -9,7 +9,7 @@ class Enemy extends PhysicalEntity { required this.tiledObject, this.enemyDamage = 1, super.collisionType = CollisionType.standard, - }); //: super(priority: 1); + }); final int enemyDamage; late final Sprite sprite; diff --git a/lib/game/components/image_object_group_builder.dart b/lib/game/components/sprite_object_group_builder.dart similarity index 55% rename from lib/game/components/image_object_group_builder.dart rename to lib/game/components/sprite_object_group_builder.dart index ef35f6bf..61981d92 100644 --- a/lib/game/components/image_object_group_builder.dart +++ b/lib/game/components/sprite_object_group_builder.dart @@ -4,41 +4,38 @@ import 'package:dash_run/game/dash_run_game.dart'; import 'package:flame/components.dart'; import 'package:flame/sprite.dart'; import 'package:flame_tiled/flame_tiled.dart'; -import 'package:leap/leap.dart'; -typedef ImageObjectGroupComponentBuilder = Component Function({ +typedef SpriteObjectGroupComponentBuilder = Component Function({ required TiledObject tiledObject, required Sprite sprite, }); -/// An object that given a tileset and object group, creates its components. -class ImageObjectGroupBuilder extends Component with HasGameRef { - ImageObjectGroupBuilder({ +/// A component that given a tileset and object group, creates its components. +class SpriteObjectGroupBuilder extends Component with HasGameRef { + SpriteObjectGroupBuilder({ required this.tileset, - required this.leapMap, required this.tileLayerName, required this.tilesetPath, required this.componentBuilder, }); final Tileset tileset; - final LeapMap leapMap; final String tileLayerName; final String tilesetPath; - final ImageObjectGroupComponentBuilder componentBuilder; + final SpriteObjectGroupComponentBuilder componentBuilder; @override FutureOr onLoad() async { await super.onLoad(); - final firstGId = tileset.firstGid ?? 0; - final itemsLayer = gameRef.leapMap.getTileLayer(tileLayerName); - final itemTiles = await gameRef.images.load( + final firstGid = tileset.firstGid ?? 0; + final layer = gameRef.leapMap.getTileLayer(tileLayerName); + final tiles = await gameRef.images.load( tilesetPath, ); - for (final object in itemsLayer.objects) { + for (final object in layer.objects) { final spritesheet = SpriteSheet( - image: itemTiles, + image: tiles, srcSize: Vector2.all(gameRef.tileSize), ); @@ -46,7 +43,7 @@ class ImageObjectGroupBuilder extends Component with HasGameRef { componentBuilder( tiledObject: object, sprite: spritesheet.getSpriteById( - (object.gid ?? 0) - firstGId, + (object.gid ?? 0) - firstGid, ), ), ); diff --git a/lib/game/dash_run_game.dart b/lib/game/dash_run_game.dart index 1fa72827..a02e5533 100644 --- a/lib/game/dash_run_game.dart +++ b/lib/game/dash_run_game.dart @@ -61,17 +61,15 @@ class DashRunGame extends LeapGame final enemiesTileset = tilesets.firstWhere((tileset) => tileset.name == 'tile_enemies_v2'); - final items = ImageObjectGroupBuilder( + final items = SpriteObjectGroupBuilder( tileset: itemsTileset, - leapMap: leapMap, tileLayerName: 'items', tilesetPath: 'objects/tile_items_v2.png', componentBuilder: Item.new, ); - final enemies = ImageObjectGroupBuilder( + final enemies = SpriteObjectGroupBuilder( tileset: enemiesTileset, - leapMap: leapMap, tileLayerName: 'enemies', tilesetPath: 'objects/tile_enemies_v2.png', componentBuilder: Enemy.new,