fix(candy-survival): implement stagger (knockdown), lunge visual bump, and target stealing/backfire animations for Knock (Q)

This commit is contained in:
2026-07-08 17:40:01 +08:00
parent 5cf08f249b
commit f060a2f4b8
2 changed files with 37 additions and 10 deletions
+15 -1
View File
@@ -395,11 +395,21 @@ func try_knock(attacker: int, target: int) -> bool:
var target_colors = player_candy_colors.get(target, [])
var target_candies = target_colors.size()
var attacker_node = main_scene.get_node_or_null(str(attacker))
var target_node = main_scene.get_node_or_null(str(target))
if attacker_node and target_node:
attacker_node.rpc("sync_bump", target_node.current_position)
if target_candies == 0:
# Backfire: both lose a charge
player_knocks[attacker] = player_knocks.get(attacker, 0) - 1
rpc("sync_knock_charge_count", attacker, player_knocks[attacker])
# Attacker is also knocked down briefly (visual handled by caller)
# Attacker is also knocked down briefly (backfire)
if attacker_node:
attacker_node.rpc("apply_stagger", 2.0)
rpc("sync_knock_result", attacker, target, 0)
return false
@@ -416,6 +426,10 @@ func try_knock(attacker: int, target: int) -> bool:
rpc("sync_knock_charge_count", attacker, player_knocks[attacker])
player_last_knocked_by[target] = attacker
# Target is knocked down / staggered on successful knock
if target_node:
target_node.rpc("apply_stagger", 2.0)
_add_score(attacker, target_candies * 100)
_update_candy_badge(attacker)
_update_candy_badge(target)