mirror of
https://github.com/flame-engine/flame.git
synced 2025-11-01 19:12:31 +08:00
This adds a platformer tutorial called Ember Quest. I hope I have done a service, because I am tired, lol. I am sure there will be comments. I just want to say, I did my best. I approached this as someone new to Flame, just like I was about 10 months ago. Are there concepts that can be improved, sure. We can always optimize code, but I didn't want any concepts to be super abstract. I had never coded a game before when I began my journey with Flame this year, so things might be a bit simple for experienced game developers, but for myself, I had never even thought about a game loop or animations, etc.
55 lines
1.1 KiB
Dart
55 lines
1.1 KiB
Dart
import 'package:flame/components.dart';
|
|
|
|
import '../ember_quest.dart';
|
|
|
|
enum HeartState {
|
|
available,
|
|
unavailable,
|
|
}
|
|
|
|
class HeartHealthComponent extends SpriteGroupComponent<HeartState>
|
|
with HasGameRef<EmberQuestGame> {
|
|
final int heartNumber;
|
|
|
|
HeartHealthComponent({
|
|
required this.heartNumber,
|
|
required super.position,
|
|
required super.size,
|
|
super.scale,
|
|
super.angle,
|
|
super.anchor,
|
|
super.priority,
|
|
});
|
|
|
|
@override
|
|
Future<void> onLoad() async {
|
|
await super.onLoad();
|
|
final availableSprite = await game.loadSprite(
|
|
'heart.png',
|
|
srcSize: Vector2.all(32),
|
|
);
|
|
|
|
final unavailableSprite = await game.loadSprite(
|
|
'heart_half.png',
|
|
srcSize: Vector2.all(32),
|
|
);
|
|
|
|
sprites = {
|
|
HeartState.available: availableSprite,
|
|
HeartState.unavailable: unavailableSprite,
|
|
};
|
|
|
|
current = HeartState.available;
|
|
}
|
|
|
|
@override
|
|
void update(double dt) {
|
|
if (game.health < heartNumber) {
|
|
current = HeartState.unavailable;
|
|
} else {
|
|
current = HeartState.available;
|
|
}
|
|
super.update(dt);
|
|
}
|
|
}
|