Adding more enemy types

Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
2026-03-14 19:19:45 +01:00
parent 278c73a256
commit 9915aec674
12 changed files with 638 additions and 104 deletions

View File

@@ -20,15 +20,17 @@ class Dog extends Enemy {
state: EntityState.idle,
);
static Dog? trySpawn(int objId, double x, double y, Difficulty difficulty) {
// The renderer already checked difficulty, so we just check the ID block!
if (objId >= MapObject.dogStart && objId <= MapObject.dogStart + 17) {
static Dog? trySpawn(int objId, double x, double y, Difficulty _) {
// Dogs span 216 to 251.
if (objId >= MapObject.dogStart && objId <= MapObject.dogStart + 35) {
bool isPatrolling = objId >= MapObject.dogStart + 18;
return Dog(
x: x,
y: y,
angle: MapObject.getAngle(objId),
mapId: objId,
);
)..state = isPatrolling ? EntityState.patrolling : EntityState.idle;
}
return null;
}
@@ -61,8 +63,12 @@ class Dog extends Enemy {
double diff = angleToPlayer - newAngle;
while (diff <= -math.pi) diff += 2 * math.pi;
while (diff > math.pi) diff -= 2 * math.pi;
while (diff <= -math.pi) {
diff += 2 * math.pi;
}
while (diff > math.pi) {
diff -= 2 * math.pi;
}
int octant = ((diff + (math.pi / 8)) / (math.pi / 4)).floor() % 8;
if (octant < 0) octant += 8;
@@ -92,13 +98,13 @@ class Dog extends Enemy {
spriteIndex = 107 + (walkFrame * 8) + octant;
if (distance < 1.0 && elapsedMs - lastActionTime > 1000) {
state = EntityState.shooting;
state = EntityState.attacking;
lastActionTime = elapsedMs;
_hasBittenThisCycle = false;
}
break;
case EntityState.shooting:
case EntityState.attacking:
int timeAttacking = elapsedMs - lastActionTime;
if (timeAttacking < 200) {
spriteIndex = 139;