This commit is contained in:
2026-04-23 00:51:28 +03:00
parent 174e9dfb08
commit cdb0ffd6a5
22 changed files with 386 additions and 28 deletions
+14 -12
View File
@@ -16,7 +16,8 @@ static var first_iron_spawned: bool = false
static var first_essence_spawned: bool = false
var kickable_type: String = ""
var tier: int = 1
var kick_tier: int = 1
var toughness_tier: int = 1
var move_speed: float = 3.0
var health: int = 30
var damage_to_player: int = 8
@@ -90,7 +91,8 @@ func setup(type: String, wave: int) -> void:
COLOR_CHASE = Color(0.3, 0.7, 0.3)
mat.albedo_color = COLOR_CHASE
enemy_level = 3
tier = enemy_level
kick_tier = enemy_level
toughness_tier = enemy_level
func _physics_process(delta: float) -> void:
match state:
@@ -144,19 +146,19 @@ func _try_enemy_kick() -> void:
nearest_dist = d.length()
nearest_kickable = k
if nearest_kickable != null:
nearest_kickable.call("receive_kick", kick_dir, 35.0 + tier * 8.0)
nearest_kickable.call("receive_kick", kick_dir, 35.0 + kick_tier * 8.0)
kickable_kick_timer = KICKABLE_KICK_COOLDOWN
return
# 2. Kick lower-tier enemy nearest to player direction
if tier > 0:
# 2. Kick lower-toughness enemy nearest to player direction
if kick_tier > 0:
var nearest_enemy: Node3D = null
var nearest_enemy_dist := ENEMY_KICK_RANGE
for node in get_tree().get_nodes_in_group("enemies"):
var en := node as Node3D
if en == null or en == self or not is_instance_valid(en):
continue
if (en.get("tier") if en.get("tier") != null else 0) >= tier:
if (en.get("toughness_tier") if en.get("toughness_tier") != null else 0) >= kick_tier:
continue
var d := (en.global_position - global_position)
d.y = 0.0
@@ -164,15 +166,15 @@ func _try_enemy_kick() -> void:
nearest_enemy_dist = d.length()
nearest_enemy = en
if nearest_enemy != null:
nearest_enemy.call("receive_kick", kick_dir, 40.0 + tier * 10.0)
nearest_enemy.call("receive_kick", kick_dir, 40.0 + kick_tier * 10.0)
enemy_kick_timer = ENEMY_KICK_COOLDOWN
return
# 3. Kick player directly if lower tier and in range
if tier > 0 and to_player.length() < ENEMY_KICK_RANGE:
var player_tier: int = target.get("tier") if target.get("tier") != null else 0
if player_tier < tier:
target.call("receive_kick", kick_dir, 35.0 + tier * 8.0)
# 3. Kick player directly if lower toughness and in range
if kick_tier > 0 and to_player.length() < ENEMY_KICK_RANGE:
var player_toughness: int = target.get("toughness_tier") if target.get("toughness_tier") != null else 0
if player_toughness < kick_tier:
target.call("receive_kick", kick_dir, 35.0 + kick_tier * 8.0)
enemy_kick_timer = ENEMY_KICK_COOLDOWN
func _fly(delta: float) -> void: