-
Notifications
You must be signed in to change notification settings - Fork 208
/
hud.rs
58 lines (47 loc) · 1.74 KB
/
hud.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
use gdnative::prelude::*;
#[derive(NativeClass)]
#[inherit(CanvasLayer)]
#[user_data(user_data::ArcData<Hud>)]
#[register_with(Self::register_hud)]
pub struct Hud;
#[methods]
impl Hud {
fn register_hud(builder: &ClassBuilder<Self>) {
builder.signal("start_game").done();
}
fn new(_owner: &CanvasLayer) -> Self {
Hud
}
#[export]
pub fn show_message(&self, owner: &CanvasLayer, text: String) {
let message_label = unsafe { owner.get_node_as::<Label>("message_label").unwrap() };
message_label.set_text(text);
message_label.show();
let timer = unsafe { owner.get_node_as::<Timer>("message_timer").unwrap() };
timer.start(0.0);
}
pub fn show_game_over(&self, owner: &CanvasLayer) {
self.show_message(owner, "Game Over".into());
let message_label = unsafe { owner.get_node_as::<Label>("message_label").unwrap() };
message_label.set_text("Dodge the\nCreeps!");
message_label.show();
let button = unsafe { owner.get_node_as::<Button>("start_button").unwrap() };
button.show();
}
#[export]
pub fn update_score(&self, owner: &CanvasLayer, score: i64) {
let label = unsafe { owner.get_node_as::<Label>("score_label").unwrap() };
label.set_text(score.to_string());
}
#[export]
fn on_start_button_pressed(&self, owner: &CanvasLayer) {
let button = unsafe { owner.get_node_as::<Button>("start_button").unwrap() };
button.hide();
owner.emit_signal("start_game", &[]);
}
#[export]
fn on_message_timer_timeout(&self, owner: &CanvasLayer) {
let message_label = unsafe { owner.get_node_as::<Label>("message_label").unwrap() };
message_label.hide()
}
}