#+title: Section 03 - Lesson 15 | Scoring
#+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/45070487#announcements][S03:L26.15 - Scoring]]

* Notes

** add a Label node
- add Label node to Root node of Game
  - child of CanvasItem and Control
  - NOT a Node2D
- appears in upper left corner of the 2D screen

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

*** set label text
- go Scene->Label node->Inspector->Label->text
- type in whatever you want, e.g. '0000' for score

*** make the size bigger
- Scene->Label node->Inspector->Control->Theme Override
  - set the font and font size

*** move the label
- Scene->Label node->Inspector->Control->Layout->Transform
- change the Position values

*** if using shadow and offsets
- you set the colors in Theme Overrides
- change shadow offset and outline size in
  - Inspector->Label->Theme Overrides->Constants


** Displaying the score

*** create a var to hold the score
#+BEGIN_SRC gdscript
var _score: int
#+END_SRC

*** register when the paddle hits a gem
- currently this is a signal on the paddle node
- disconnect paddle from receiving the signal bc we only want game node to receive it

**** in the game scene
- Scene->Paddle->Node->Signals
- Area2D -> ~area_entered~

- set the register to the Game node

*** create a reference the Label node
- purpose: modify what the Label displays from the script

**** using onready
1. type it in
 #+BEGIN_SRC gdscript
 @onready var score_label: Label = $Label
  #+END_SRC

2. drag and drop
   - grab the node from the Scene panel
   - hold down CMD
   - drop it on the script

*** update the score and the label
- update the _score variable in receiving method
- set the text property in the label reference to the score
  #+BEGIN_SRC gdscript
  func _on_paddle_area_entered(area: Area2D) -> void:
    _score +=1
      label.text = str(_score)
  #+END_SRC

** remove the gem from the scene if it hits the padde
- the area2D node passed into the receiver method is a reference to the gem node
- so you can use the queue_free method to remove it from the scene queue

  #+BEGIN_SRC gdscript
  area.queue_free()
  #+END_SRC
