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_group("Targeting")
|
||||||
@export var throw_range : float = 20.0
|
@export var throw_range : float = 20.0
|
||||||
@export_flags_3d_physics var ground_mask : int = 1
|
@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 _elapsed : float = 0.0
|
||||||
var _released : bool = false #true des que RT est relachee (phase windup/recovery)
|
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
|
var scene : Node = get_tree().current_scene if is_inside_tree() else null
|
||||||
if scene == null: return
|
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)
|
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
|
#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)
|
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
|
#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)
|
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 ----------
|
#---------- nettoyage ----------
|
||||||
|
|
||||||
func _release_aim() -> void:
|
func _release_aim() -> void:
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue