Skip to content
This repository has been archived by the owner on Mar 6, 2024. It is now read-only.

feat: adding enemies and items back in the game #16

Merged
merged 7 commits into from
Oct 24, 2023
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions lib/game/components/components.dart
Original file line number Diff line number Diff line change
@@ -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';
62 changes: 0 additions & 62 deletions lib/game/components/enemies.dart

This file was deleted.

35 changes: 35 additions & 0 deletions lib/game/components/enemy.dart
Original file line number Diff line number Diff line change
@@ -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<DashRunGame> {
Enemy({
required this.sprite,
required this.tiledObject,
this.enemyDamage = 1,
super.collisionType = CollisionType.standard,
}); //: super(priority: 1);
erickzanardo marked this conversation as resolved.
Show resolved Hide resolved

final int enemyDamage;
late final Sprite sprite;
late final TiledObject tiledObject;

@override
int get priority => 1;

@override
Future<void> onLoad() async {
size = sprite.srcSize;
position = Vector2(tiledObject.x, tiledObject.y);

add(
SpriteComponent(
size: size,
sprite: sprite,
),
);

return super.onLoad();
}
}
55 changes: 55 additions & 0 deletions lib/game/components/image_object_group_builder.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
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.
erickzanardo marked this conversation as resolved.
Show resolved Hide resolved
class ImageObjectGroupBuilder extends Component with HasGameRef<DashRunGame> {
erickzanardo marked this conversation as resolved.
Show resolved Hide resolved
ImageObjectGroupBuilder({
required this.tileset,
required this.leapMap,
required this.tileLayerName,
required this.tilesetPath,
required this.componentBuilder,
});

final Tileset tileset;
final LeapMap leapMap;
erickzanardo marked this conversation as resolved.
Show resolved Hide resolved
final String tileLayerName;
final String tilesetPath;
final ImageObjectGroupComponentBuilder componentBuilder;

@override
FutureOr<void> onLoad() async {
await super.onLoad();
final firstGId = tileset.firstGid ?? 0;
erickzanardo marked this conversation as resolved.
Show resolved Hide resolved
final itemsLayer = gameRef.leapMap.getTileLayer<ObjectGroup>(tileLayerName);
erickzanardo marked this conversation as resolved.
Show resolved Hide resolved
final itemTiles = await gameRef.images.load(
erickzanardo marked this conversation as resolved.
Show resolved Hide resolved
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,
),
),
);
}
}
}
34 changes: 34 additions & 0 deletions lib/game/components/item.dart
Original file line number Diff line number Diff line change
@@ -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<DashRunGame> {
Item({
required this.sprite,
required this.tiledObject,
}) : super(static: true);

late final Sprite sprite;
late final TiledObject tiledObject;

@override
int get priority => 1;

@override
Future<void> onLoad() async {
size = sprite.srcSize;
position = Vector2(tiledObject.x, tiledObject.y);

add(
SpriteComponent(
size: size,
sprite: sprite,
),
);

return super.onLoad();
}
}
62 changes: 0 additions & 62 deletions lib/game/components/items.dart

This file was deleted.

29 changes: 24 additions & 5 deletions lib/game/dash_run_game.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -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;
Expand Down Expand Up @@ -55,8 +53,29 @@ class DashRunGame extends LeapGame
);

input = SimpleCombinedInput();
items = Items();
enemies = Enemies();

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',
componentBuilder: Item.new,
);

final enemies = ImageObjectGroupBuilder(
tileset: enemiesTileset,
leapMap: leapMap,
tileLayerName: 'enemies',
tilesetPath: 'objects/tile_enemies_v2.png',
componentBuilder: Enemy.new,
);

await addAll([items, enemies, input]);

Expand Down