update
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
extends Node
|
||||
|
||||
const AGGRO_DECAY := 1.0
|
||||
const PORTAL_RADIUS := 10.0
|
||||
var aggro_table: Dictionary = {}
|
||||
var seconds_outside := 0.0
|
||||
|
||||
@onready var enemy: CharacterBody3D = get_parent()
|
||||
|
||||
@@ -10,15 +12,32 @@ func _ready() -> void:
|
||||
EventBus.entity_died.connect(_on_entity_died)
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
var outside_portal := false
|
||||
if enemy.portal and is_instance_valid(enemy.portal):
|
||||
var dist_to_portal: float = enemy.global_position.distance_to(enemy.portal.global_position)
|
||||
if dist_to_portal > PORTAL_RADIUS:
|
||||
outside_portal = true
|
||||
seconds_outside += delta
|
||||
else:
|
||||
seconds_outside = 0.0
|
||||
|
||||
for player in aggro_table.keys():
|
||||
aggro_table[player] -= AGGRO_DECAY * delta
|
||||
var decay: float = AGGRO_DECAY * delta
|
||||
if outside_portal:
|
||||
var bonus_decay: float = aggro_table[player] * 0.01 * pow(2, seconds_outside) * delta
|
||||
decay += bonus_decay
|
||||
aggro_table[player] -= decay
|
||||
if aggro_table[player] <= 0:
|
||||
aggro_table.erase(player)
|
||||
|
||||
var top_target: Node = _get_top_target()
|
||||
if top_target and top_target != enemy.target:
|
||||
enemy.target = top_target
|
||||
if enemy.state == enemy.State.IDLE or enemy.state == enemy.State.RETURN:
|
||||
enemy.state = enemy.State.CHASE
|
||||
elif not top_target and enemy.state != enemy.State.IDLE and enemy.state != enemy.State.RETURN:
|
||||
enemy.target = null
|
||||
enemy.state = enemy.State.RETURN
|
||||
|
||||
func _on_damage_dealt(attacker: Node, target: Node, amount: float) -> void:
|
||||
if target != enemy:
|
||||
|
||||
Reference in New Issue
Block a user