Reorganize weapons

Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
2026-03-13 23:11:41 +01:00
parent a4bc6f8520
commit a6a5cb705d
5 changed files with 4 additions and 4 deletions

View File

@@ -0,0 +1,48 @@
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,
});
int get currentSprite =>
state == WeaponState.idle ? idleSprite : fireFrames[frameIndex];
/// Core firing logic. Returns true if a bullet was 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;
}
}
}
}
}