Files
wolf_dart/lib/features/player/weapon.dart
2026-03-13 20:36:40 +01:00

52 lines
1.3 KiB
Dart

enum WeaponState { idle, firing }
abstract class Weapon {
final String name;
final int idleSprite;
final List<int> fireFrames;
final int damage;
final int msPerFrame;
WeaponState state = WeaponState.idle;
int frameIndex = 0;
int lastFrameTime = 0;
Weapon({
required this.name,
required this.idleSprite,
required this.fireFrames,
required this.damage,
this.msPerFrame = 100, // Speed of animation
});
int get currentSprite =>
state == WeaponState.idle ? idleSprite : fireFrames[frameIndex];
bool get isFiring => state == WeaponState.firing;
/// The main entry point for the player to use the gun.
/// Returns true if a bullet was actually spent.
bool fire(int currentTime, {required int currentAmmo}) {
if (state == WeaponState.idle && currentAmmo > 0) {
state = WeaponState.firing;
frameIndex = 0;
lastFrameTime = currentTime;
return true;
}
return false;
}
void update(int currentTime) {
if (state == WeaponState.firing) {
if (currentTime - lastFrameTime > msPerFrame) {
frameIndex++;
lastFrameTime = currentTime;
if (frameIndex >= fireFrames.length) {
state = WeaponState.idle;
frameIndex = 0;
}
}
}
}
}