summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEltrac <hi@guhub.cn>2025-03-13 20:33:47 +0800
committerEltrac <hi@guhub.cn>2025-03-13 20:33:47 +0800
commitef200e9aaeff9d2a8194df3561ee3cf6996ea571 (patch)
tree8638d90ce1fb0b555a58c089b3f860de522cc640
parent9babe340626007bf28e13c792a68736a09187a49 (diff)
fix: knockback does not work due to velocity overwriting
-rw-r--r--config.lua2
-rw-r--r--objects/Enemy.lua5
-rw-r--r--objects/Player.lua1
3 files changed, 7 insertions, 1 deletions
diff --git a/config.lua b/config.lua
index 5465112..e6aa398 100644
--- a/config.lua
+++ b/config.lua
@@ -31,7 +31,7 @@ config = {
punch = {
radius = 15,
angle = 120,
- force = 1000,
+ force = 200,
damage = 10,
cooldown = 0.5
},
diff --git a/objects/Enemy.lua b/objects/Enemy.lua
index 64dea31..a6e7738 100644
--- a/objects/Enemy.lua
+++ b/objects/Enemy.lua
@@ -54,6 +54,11 @@ function Enemy:move(dt)
self.speed = self.originalSpeed
end
+ -- deal with punched status
+ if self.punched and self.punched > G.time then
+ return
+ end
+
if self.movePattern == "vertical" then
self:moveVertical(G.player.x, dt)
else self:moveTo(G.player.x, G.player.y, dt)
diff --git a/objects/Player.lua b/objects/Player.lua
index c23fb14..74f9833 100644
--- a/objects/Player.lua
+++ b/objects/Player.lua
@@ -127,6 +127,7 @@ function Player:punch(target)
-- check if enemy is in range
if distance <= attack_radius + enemy.r + self.r and angle_diff <= math.rad(attack_angle / 2) then
enemy:takeDamage(config.player.punch.damage)
+ enemy.punched = G.time + config.player.punch.cooldown
-- knock back enemy
local normEdx, normEdy = edx / distance, edy / distance
local knockbackX, knockbackY = normEdx * knockback_force, normEdy * knockback_force