godot-shooter / files / scenes / HUD.gd
HUD.gd
| 1 | extends Control |
| 2 | |
| 3 | const Utils = preload("res://utils/Utils.gd") |
| 4 | export var score = 0 |
| 5 | export var objective = "0/5" |
| 6 | export var is_game_over = false |
| 7 | var is_dragging = false |
| 8 | signal paused |
| 9 | signal debug_signal |
| 10 | signal position_set(position) |
| 11 | |
| 12 | onready var label = $CanvasLayer/MessageLabel |
| 13 | onready var animation_player = $AnimationPlayer |
| 14 | onready var score_label = $MarginContainer2/HBoxContainer/Score |
| 15 | onready var objective_label = $MarginContainer/HBoxContainer2/Objective |
| 16 | onready var weapon_label = $MarginContainer2/HBoxContainer/Weapon |
| 17 | onready var ammo_label = $MarginContainer2/HBoxContainer/Ammo |
| 18 | |
| 19 | func _input(event: InputEvent) -> void: |
| 20 | if is_game_over: |
| 21 | return |
| 22 | var nodes = get_tree().get_nodes_in_group("pause_menu") |
| 23 | var is_pause_menu_open = false |
| 24 | for n in nodes: |
| 25 | var node: Control = n |
| 26 | is_pause_menu_open = is_pause_menu_open or node.visible |
| 27 | if is_pause_menu_open: |
| 28 | return |
| 29 | |
| 30 | if event is InputEventScreenTouch and event.pressed: |
| 31 | set_position_event(event.position) |
| 32 | if event is InputEventScreenDrag: |
| 33 | set_position_event(event.position) |
| 34 | if event is InputEventMouseButton: |
| 35 | if not is_dragging and event.pressed: |
| 36 | is_dragging = true |
| 37 | get_tree().paused = true |
| 38 | set_position_event(event.position) |
| 39 | if is_dragging and not event.pressed: |
| 40 | is_dragging = false |
| 41 | get_tree().paused = false |
| 42 | if event is InputEventMouseMotion and is_dragging: |
| 43 | set_position_event(event.position) |
| 44 | |
| 45 | func set_position_event(event_pos: Vector2) -> void: |
| 46 | emit_signal("position_set", event_pos) |
| 47 | |
| 48 | func _process(_delta: float) -> void: |
| 49 | score_label.text = "%s" % score |
| 50 | objective_label.text = "%s" % objective |
| 51 | if Input.is_action_just_pressed("pause"): |
| 52 | emit_signal("paused") |
| 53 | if Input.is_action_just_pressed("exit"): |
| 54 | if OS.get_name() == "OSX": |
| 55 | get_tree().quit() |
| 56 | else: |
| 57 | emit_signal("paused") |
| 58 | # restart() |
| 59 | if Input.is_action_just_pressed("restart"): |
| 60 | restart() |
| 61 | if Input.is_action_just_pressed("debug_action"): |
| 62 | emit_signal("debug_signal") |
| 63 | |
| 64 | func restart(): |
| 65 | var _error = get_tree().reload_current_scene() |
| 66 | get_tree().paused = false |
| 67 | |
| 68 | func show_message(message: String, duration_seconds: int = 2) -> void: |
| 69 | var now_msecs = OS.get_system_time_msecs() |
| 70 | # var stack = Utils.get_stack_string() |
| 71 | # Utils.log("showing message:", message, "at:", now_msecs, "in stack:", stack) |
| 72 | var fade_in = animation_player.get_animation("message fade in") |
| 73 | fade_in.track_set_key_value(1, 0, message) |
| 74 | var fade_out = animation_player.get_animation("message fade out") |
| 75 | fade_out.track_set_key_time(0, 1, duration_seconds) |
| 76 | |
| 77 | var new_fade_in = "fade in %s" % now_msecs |
| 78 | animation_player.add_animation(new_fade_in, fade_in) |
| 79 | var new_fade_out = "fade out %s" % now_msecs |
| 80 | animation_player.add_animation(new_fade_out, fade_out) |
| 81 | |
| 82 | if animation_player.is_playing(): |
| 83 | animation_player.queue(new_fade_in) |
| 84 | else: |
| 85 | animation_player.play(new_fade_in) |
| 86 | animation_player.queue(new_fade_out) |
| 87 | |
| 88 | func _on_PauseButton_pressed() -> void: |
| 89 | emit_signal("paused") |
| 90 | |
| 91 | func set_current_weapon(weapon: Weapon) -> void: |
| 92 | var is_non_weapon = weapon.name == "" |
| 93 | if is_non_weapon: |
| 94 | weapon_label.text = "" |
| 95 | ammo_label.text = "" |
| 96 | else: |
| 97 | weapon_label.text = "%s:" % weapon.name |
| 98 | ammo_label.text = "%s" % weapon.ammo |