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 all 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 'item.dart';
export 'player.dart';
export 'score_label.dart';
export 'sprite_object_group_builder.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,
});

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();
}
}
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.

52 changes: 52 additions & 0 deletions lib/game/components/sprite_object_group_builder.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
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';

typedef SpriteObjectGroupComponentBuilder = Component Function({
required TiledObject tiledObject,
required Sprite sprite,
});

/// A component that given a tileset and object group, creates its components.
class SpriteObjectGroupBuilder extends Component with HasGameRef<DashRunGame> {
SpriteObjectGroupBuilder({
required this.tileset,
required this.tileLayerName,
required this.tilesetPath,
required this.componentBuilder,
});

final Tileset tileset;
final String tileLayerName;
final String tilesetPath;
final SpriteObjectGroupComponentBuilder componentBuilder;

@override
FutureOr<void> onLoad() async {
await super.onLoad();
final firstGid = tileset.firstGid ?? 0;
final layer = gameRef.leapMap.getTileLayer<ObjectGroup>(tileLayerName);
final tiles = await gameRef.images.load(
tilesetPath,
);

for (final object in layer.objects) {
final spritesheet = SpriteSheet(
image: tiles,
srcSize: Vector2.all(gameRef.tileSize),
);

gameRef.leapMap.add(
componentBuilder(
tiledObject: object,
sprite: spritesheet.getSpriteById(
(object.gid ?? 0) - firstGid,
),
),
);
}
}
}
27 changes: 22 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,27 @@ 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 = SpriteObjectGroupBuilder(
tileset: itemsTileset,
tileLayerName: 'items',
tilesetPath: 'objects/tile_items_v2.png',
componentBuilder: Item.new,
);

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

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

Expand Down