#+title: Section 03 - Lesson 11, 12 | Signals, Custom Signals
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="../../_share/media/css/godot.css" />

* Links
- [[../../toc.org][TOC - Godot Notes]]
- [[https://www.udemy.com/course/jumpstart-to-2d-game-development-godot-4-for-beginners/learn/lecture/45070477#announcements][S03:L22.11 - Signals]]
- [[https://www.udemy.com/course/jumpstart-to-2d-game-development-godot-4-for-beginners/learn/lecture/45070479#announcements][S03:L23.12 - Custom Signals]]

* Notes

** Signals
- messaging system
- way of communicating between nodes

*** connect basics
- means of connecting
  - ide
  - code
- the node giving the signal has a list of everyone that connected

*** connecting via ide
1. select Node panel on leftside, and then select the approrpiate signal
   -
        #+ATTR_HTML: :width 600px
        [[file:../../_share/media/img/albert/section03/S03_L11_EX01.png]]

2. double click the selected filter
   - options available:
     - from signal
     - connect to script
     - receiver method
       - you can also click on "Pick" next to receiver method so that you can choose a different method that already exists

3. click connect and the boilerplate code will appear in the script you had selected in the signal creation pane above in (2)

   - if you look at the node pane on the right and scroll to the signal, you'll see a green indicator showing that you have connected that signal (to something)

     -
          #+ATTR_HTML: :width 300px
          [[file:../../_share/media/img/albert/section03/S03_L11_EX02.png]]

   - similarly, you can see a green icon by the function in the code editor

     -
          #+ATTR_HTML: :width 600px
          [[file:../../_share/media/img/albert/section03/S03_L11_EX03.png]]

** Custom Signals
*** declare the signal
to create a signal, use the following format:
 #+BEGIN_SRC godot
 signal name_of_signal
 #+END_SRC

*** activate the signal
#+BEGIN_SRC godot
name_of_signal.emit()
#+END_SRC

*** register to signal
- go to the scene you want to attach the signal to
- pick the node
- the signal should be available under Inspector->Node->Signals
- connect the signal, and give the function a name you want, this will be your receiver function
  - if you want to attach another node to the same receiver function, use "pick" when connecting the signal
    -
        #+ATTR_HTML: :width 700px
        [[file:../../_share/media/img/albert/section03/S03_L12_EX01.png]]

- if you have more than one node connected to a receiver function you can see which are connected by clicking on the green icon next to the receiver function

  -
    #+ATTR_HTML: :width 600px
    [[file:../../_share/media/img/albert/section03/S03_L12_EX02.png]]
