This commit is contained in:
Marek Lenczewski
2026-04-04 00:00:15 +02:00
parent 3488856b91
commit f1d34ebf1d
104 changed files with 1912 additions and 1789 deletions

View File

@@ -43,17 +43,19 @@ func get_top_target(table: Dictionary) -> Node:
return top
func update_target(enemy: Node) -> void:
if not "state" in enemy:
return
var table: Dictionary = aggro_tables[enemy]
var top: Node = get_top_target(table)
if top and top != enemy.target:
enemy.target = top
if enemy.state == enemy.State.IDLE or enemy.state == enemy.State.RETURN:
enemy.state = enemy.State.CHASE
elif not top and enemy.state != enemy.State.IDLE and enemy.state != enemy.State.RETURN:
enemy.target = null
enemy.state = enemy.State.RETURN
var data_source: Node = _get_data_source(enemy)
if not data_source:
return
var state: int = data_source.get_stat(enemy, "state")
if top and top != data_source.get_stat(enemy, "target"):
data_source.set_stat(enemy, "target", top)
if state == 0 or state == 3:
data_source.set_stat(enemy, "state", 1)
elif not top and state != 0 and state != 3:
data_source.set_stat(enemy, "target", null)
data_source.set_stat(enemy, "state", 3)
func get_enemies_in_radius(source: Node, radius: float) -> Array:
var result: Array = []
@@ -65,8 +67,12 @@ func get_enemies_in_radius(source: Node, radius: float) -> Array:
return result
func get_alert_radius(entity: Node) -> float:
var base: BaseStats = Stats.get_base(entity)
return base.alert_radius if base is EnemyStats else 10.0
var data_source: Node = _get_data_source(entity)
if data_source:
var base: EnemyStats = data_source.get_base(entity)
if base:
return base.alert_radius
return 10.0
func erase_entity(entity: Node) -> void:
aggro_tables.erase(entity)
@@ -74,9 +80,17 @@ func erase_entity(entity: Node) -> void:
for enemy in aggro_tables:
if is_instance_valid(enemy):
aggro_tables[enemy].erase(entity)
if "target" in enemy and entity == enemy.target:
enemy.target = null
enemy.state = enemy.State.RETURN
var data_source: Node = _get_data_source(enemy)
if data_source and data_source.get_stat(enemy, "target") == entity:
data_source.set_stat(enemy, "target", null)
data_source.set_stat(enemy, "state", 3)
for enemy in players_in_range:
if is_instance_valid(enemy):
players_in_range[enemy].erase(entity)
func _get_data_source(entity: Node) -> Node:
if entity.is_in_group("boss"):
return BossData
elif entity.is_in_group("enemies"):
return EnemyData
return null