Refactor enemy movement logic for simplicity; adjust character sprite drawing position
This commit is contained in:
+1
-1
@@ -129,7 +129,7 @@ class Character
|
|||||||
|
|
||||||
elapsed = Gosu.milliseconds / 1000.0
|
elapsed = Gosu.milliseconds / 1000.0
|
||||||
frame_index = ((elapsed * 7).floor) % 6
|
frame_index = ((elapsed * 7).floor) % 6
|
||||||
@animations[@current_animation][frame_index].draw(sprite_x, sprite_y, sprite_y, 1.8, 1.8)
|
@animations[@current_animation][frame_index].draw(sprite_x, sprite_y, sprite_y + 30, 1.8, 1.8)
|
||||||
|
|
||||||
return unless DEBUG
|
return unless DEBUG
|
||||||
|
|
||||||
|
|||||||
+2
-27
@@ -131,33 +131,8 @@ class EnemyAI
|
|||||||
dx = Gosu.offset_x(angle, SPEED)
|
dx = Gosu.offset_x(angle, SPEED)
|
||||||
dy = Gosu.offset_y(angle, SPEED)
|
dy = Gosu.offset_y(angle, SPEED)
|
||||||
|
|
||||||
steps = SPEED.ceil
|
@enemy.x += dx
|
||||||
step_dx = dx / steps.to_f
|
@enemy.y += dy
|
||||||
step_dy = dy / steps.to_f
|
|
||||||
|
|
||||||
steps.times do
|
|
||||||
moved_x = false
|
|
||||||
moved_y = false
|
|
||||||
|
|
||||||
# Try X
|
|
||||||
@enemy.x += step_dx
|
|
||||||
if ($bus.get(:collides?, @enemy.rect) & [:wall, :object])&.any?
|
|
||||||
@enemy.x -= step_dx
|
|
||||||
else
|
|
||||||
moved_x = true
|
|
||||||
end
|
|
||||||
|
|
||||||
# Try Y (independent — keeps full intent)
|
|
||||||
@enemy.y += step_dy
|
|
||||||
if ($bus.get(:collides?, @enemy.rect) & [:wall, :object])&.any?
|
|
||||||
@enemy.y -= step_dy
|
|
||||||
else
|
|
||||||
moved_y = true
|
|
||||||
end
|
|
||||||
|
|
||||||
# If both failed, stop early
|
|
||||||
break unless moved_x || moved_y
|
|
||||||
end
|
|
||||||
|
|
||||||
if $bus.get(:collides?, @enemy.rect)&.include?(:character)
|
if $bus.get(:collides?, @enemy.rect)&.include?(:character)
|
||||||
# Attack player
|
# Attack player
|
||||||
|
|||||||
Reference in New Issue
Block a user