Allow entering battle from free aim throw
This commit is contained in:
parent
c4de43f990
commit
c4c2bf5f7b
|
|
@ -30,6 +30,7 @@ var play_char : CharacterBody3D
|
|||
@export_group("Targeting")
|
||||
@export var throw_range : float = 20.0
|
||||
@export_flags_3d_physics var ground_mask : int = 1
|
||||
@export var free_hit_radius : float = 2.0 #lancer sans cible verrouillee : rayon autour du point d'atterrissage pour trouver une cible de combat
|
||||
|
||||
var _elapsed : float = 0.0
|
||||
var _released : bool = false #true des que RT est relachee (phase windup/recovery)
|
||||
|
|
@ -256,6 +257,10 @@ func _on_ball_landed(landing_pos : Vector3, pokemon : PokemonInstance, target :
|
|||
var scene : Node = get_tree().current_scene if is_inside_tree() else null
|
||||
if scene == null: return
|
||||
|
||||
#lancer sans cible verrouillee : si la balle atterrit pres d'une cible de combat, c'est elle qui est visee
|
||||
if !is_instance_valid(target):
|
||||
target = _find_battle_target_near(landing_pos)
|
||||
|
||||
var target_valid : bool = is_instance_valid(target)
|
||||
#le pokemon regarde la cible, ou dans la direction du lancer s'il n'y en a pas
|
||||
var look_pos : Vector3 = target.global_position if target_valid else landing_pos + (landing_pos - thrower_pos)
|
||||
|
|
@ -267,6 +272,19 @@ func _on_ball_landed(landing_pos : Vector3, pokemon : PokemonInstance, target :
|
|||
#diagnostic : retire ce message quand tout fonctionne
|
||||
push_warning("ThrowState : la cible '%s' ne lance pas de combat (starts_battle faux : Encounter vide, ou aim_target.gd pas remplace)." % target.name)
|
||||
|
||||
func _find_battle_target_near(point : Vector3) -> AimTarget:
|
||||
#cible de combat active la plus proche du point d'atterrissage, dans free_hit_radius
|
||||
var best : AimTarget = null
|
||||
var best_dist : float = free_hit_radius
|
||||
for node in get_tree().get_nodes_in_group("aim_targets"):
|
||||
var t := node as AimTarget
|
||||
if t == null or !t.enabled or !_starts_battle(t): continue
|
||||
var dist : float = point.distance_to(t.global_position)
|
||||
if dist <= best_dist:
|
||||
best_dist = dist
|
||||
best = t
|
||||
return best
|
||||
|
||||
#---------- nettoyage ----------
|
||||
|
||||
func _release_aim() -> void:
|
||||
|
|
|
|||
Loading…
Reference in a new issue