Signal between two different scenes

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

Hello guys, I’m having some problem to emit a signal between 2 scene.
What I’m trying to make is that:
I’m in the first scene, and after 1 minute a character (let’s call it “Ghost”) will be add in the first scene. I need that Ghost if he touch the player, emit a signal in a player function (to let the character player die), but like this I don’t know how to connect this.
(If it was in the same scene from the start, were simple)
Thank you for any reply, and sorry about my bad english.

:bust_in_silhouette: Reply From: SIsilicon

In this case, what can do instead is have the player detect a collision with a ghost. In your ghost’s script add an empty method is_ghost so that your player can tell whether it collided with a ghost or not.

With player it depends on what type of CollisionBody it’s using.

  • Area2D:
    In the editor, connect this node’s body_entered(Node body) signal to itself. The function this signal is connected to is where you will test which body you “collided” with, and if it’s a ghost, die.
    _on_Area2D_body_entered(body):
        if body.has_method("is_ghost"):
            die()
  • KinematicBody2D:
    In the script in _physics_process you will add code to detect the body you collided with. This depends on whether your body uses,
  • move_and_collide In which case you’d do
        # replace original call to move_and_collide with this.
        if move_and_collide(your_velocity_var).collider.has_method("is_ghost"):
            die()
  • move_and_slide In which case you’d do
        # comes after call to move_and_slide
        for i in get_slide_count():
            if get_slide_collision(i).collider.has_method("is_ghost"):
                die()
                break