diff options
| author | Eltrac <hi@guhub.cn> | 2025-03-13 14:04:56 +0800 |
|---|---|---|
| committer | Eltrac <hi@guhub.cn> | 2025-03-13 14:04:56 +0800 |
| commit | 5eb2eb9d6986bdd30c5f0cf65f7f08f96ce40d09 (patch) | |
| tree | fba255be7c2bbd97b1eabf8e5fc60d28359c715c | |
| parent | c6e86ae57442b665d138bdb8bdbd2f7bbd9f5520 (diff) | |
feat: pokob show different appearances in each health state
| -rw-r--r-- | objects/Enemy.lua | 1 | ||||
| -rw-r--r-- | render/draws/objects.lua | 18 |
2 files changed, 15 insertions, 4 deletions
diff --git a/objects/Enemy.lua b/objects/Enemy.lua index 6bb3fce..5ee8793 100644 --- a/objects/Enemy.lua +++ b/objects/Enemy.lua @@ -20,6 +20,7 @@ function Enemy:new(name, location) zoom = data.zoom or 1, speed = data.speed or nil, health = data.health or nil, + maxHealth = data.health or nil, stunned = false, frameTimer = FrameTimer:new(config.frameRate, (data.sprite and data.sprite.totalFrames) or 1), diff --git a/render/draws/objects.lua b/render/draws/objects.lua index 1699077..fea8e63 100644 --- a/render/draws/objects.lua +++ b/render/draws/objects.lua @@ -38,9 +38,6 @@ function draws.enemies() for _, enemy in pairs(G.currentRoom.objects.enemies) do local data = enemyData[enemy.type] if data.sprite then - -- show enemy size - - -- add filter to indicate enemy status if enemy.stunned then love.graphics.setColor({1,0.7,0.5}) @@ -48,8 +45,21 @@ function draws.enemies() love.graphics.setColor({0.5,0.5,0.5}) end - -- draw sprite + -- handle quad index local index = data.sprite.frames[enemy:facing()][enemy.frameTimer.currentFrame] + if enemy.type == "pokob" then + -- pokob has different appearances in different health states + local healthRatio = enemy.health / enemy.maxHealth + local breakpoints = { 0.75, 0.5, 0.25, 0 } + for i, breakpoint in ipairs(breakpoints) do + if healthRatio >= breakpoint then + index = index + (i-1) * 12 + break + end + end + end + + -- draw sprite local r = enemy.r local graphicR = r * enemy.zoom local x, y = enemy.x - r, enemy.y - r |
