From f96a8b4b780580e0b74c95fb3a03b85c90b10a32 Mon Sep 17 00:00:00 2001 From: Rokas Puzonas Date: Sun, 1 Feb 2026 05:45:50 +0200 Subject: [PATCH] sort enemy draw --- src/combat_screen.zig | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/combat_screen.zig b/src/combat_screen.zig index 827fede..f1e19cc 100644 --- a/src/combat_screen.zig +++ b/src/combat_screen.zig @@ -905,7 +905,31 @@ pub fn tick(self: *CombatScreen, state: *State, frame: *Engine.Frame) !TickResul } enemy.kinetic.update(dt, .{}); + } + } + { + var sorted_enemies: std.ArrayList(*Enemy) = .empty; + + var enemy_iter = self.enemies.iterator(); + while (enemy_iter.nextItem()) |enemy| { + try sorted_enemies.append(frame.arena.allocator(), enemy); + } + + const Context = struct { + fn lessThan(_: @This(), lhs: *Enemy, rhs: *Enemy) bool { + return lhs.kinetic.pos.y < rhs.kinetic.pos.y; + } + }; + + std.mem.sort( + *Enemy, + sorted_enemies.items, + Context{}, + Context.lessThan + ); + + for (sorted_enemies.items) |enemy| { const pos = enemy.kinetic.pos; const sprite_size = enemy.sprite.getSize(); var sprite = enemy.sprite; @@ -951,6 +975,7 @@ pub fn tick(self: *CombatScreen, state: *State, frame: *Engine.Frame) !TickResul }); if (self.show_colliders) { + const enemy_rect = getCenteredRect(enemy.kinetic.pos, enemy.size); frame.drawRectangle(.{ .rect = enemy_rect, .color = rgba(20, 20, 200, 0.2),