fuzzyworld

godot-shooter / asteroids / files / scenes / HUD.gd

Branch asteroids · default branch · all branches

HUD.gd

3.1 KB · history · blame

1extends Control
2
3const Utils = preload("res://utils/Utils.gd")
4export var score = 0
5export var objective = "0/5"
6export var is_game_over = false
7var is_dragging = false
8signal paused
9signal debug_signal
10signal position_set(position)
11
12onready var label = $CanvasLayer/MessageLabel
13onready var animation_player = $AnimationPlayer
14onready var score_label = $MarginContainer2/HBoxContainer/Score
15onready var objective_label = $MarginContainer/HBoxContainer2/Objective
16onready var weapon_label = $MarginContainer2/HBoxContainer/Weapon
17onready var ammo_label = $MarginContainer2/HBoxContainer/Ammo
18
19func _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
45func set_position_event(event_pos: Vector2) -> void:
46 emit_signal("position_set", event_pos)
47
48func _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
64func restart():
65 var _error = get_tree().reload_current_scene()
66 get_tree().paused = false
67
68func 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
88func _on_PauseButton_pressed() -> void:
89 emit_signal("paused")
90
91func 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