Why is CollisionShape2D still disabled after set back to false

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

I am attempting my first project which is started from the 2D tutorial. I added a simple new_game function, but for some reason the CollisionShape2D for the player is still disabled and Mobs can’t kill the player.

This is the ‘body_entered’ method for the Player that shows it’s killed:

	hide()  # Player disappears after being hit.
	emit_signal("player_killed")
	print_debug("hit and dying")
	#defer so it's not disabled in the middle of a collision processing
	$CollisionShape2D.set_deferred("disabled", true)

The method called on the player on new game

func start(pos: Vector2) -> void:
	position = pos
	$CollisionShape2D.disabled = false
	show()

Tried doing $CollisionShape2D.set_deferred(“disabled”, false) but that didn’t work

weird thing is it isn’t disabled in the restart of in the Main class.

func restart():
	get_tree().call_group("mobs", "queue_free")
	
	while($Player/CollisionShape2D.disabled):
		print_debug("waiting I guess..2")
	new_game()

It never prints the debug statement there.

But after restart in the ‘_process’ method in Player, I added a ‘print_debug’ statement if $CollisionShape2D.disabled to find that it was somehow disabled when playing.

The collision works normally in the game before the restart.

:bust_in_silhouette: Reply From: Inces

So it never detects collision with player, but is never disabled according to print ?
Check if collision layers are befitting collision masks

Sorry, I worded my post in kind of a weird order.
In the restart function, at least from what it seems in that loop, it’s not disabled.

But it is disabled when checking the the ‘_process’ method in the Player class afterwards.

And collision works before the restart, so I think I have the layers/masks correct.

jjcard | 2021-03-10 00:36