Tween isn't stopping

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By Dumuz

On AI node:

func _process(delta):
	var distance2opponent = self.transform.origin.distance_to(get_node("../Player").transform.origin)
	if distance2opponent < 5 and $Tween2.is_active():

On Player node:

func _process(delta):
	var distance2opponent = self.transform.origin.distance_to(get_node("../AI").transform.origin)
	if distance2opponent < 5 and $Tween1.is_active():

I tried using this script to have two meshes (A.I. and Player) check their distance between each other. If they get within 5 units of each other they’re supposed to stop, but they just end up ignoring it can going right through each other. They’re both only moving on the z axis.

I know the functions are being called because it prints the distance like it’s supposed to a bunch of times till getting to 0 (When the two meshes stop based off the tween). But round is ignored, as well as the stop call. There are no errors popping up in the debugger.


I notice that in the A.I. enemy, the line var distance2opponent = self.transform.origin.distance_to(get_node("../Player").transform.origin) has the property “transform”. Maybe it needs to be ”global_transform"?

Ertain | 2019-11-28 21:45

Nope, just does the same thing. The nodes understand where each other are; I can see it in the debugger, because it prints the distance2opponent variable, every frame. But they don’t stop, they ignore the rest of the commands.

Dumuz | 2019-11-28 22:24

:bust_in_silhouette: Reply From: Zylann


This looks incorrect, unless you really have a variable named Tween containing the object your tween is animating (which would conflict with the class of the same name). Check my answer in Why does tween.stop() need an argument? - Archive - Godot Forum