blob: ece5a54e60f3cc00220b6c44c189661b93c7cc89 (
plain) (
blame)
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
|
use gdnative::api::*;
use gdnative::prelude::*;
/// The Game "class"
#[derive(NativeClass)]
#[inherit(Spatial)]
#[register_with(Self::register_builder)]
pub struct Game {
name: String,
}
// __One__ `impl` block can have the `#[methods]` attribute, which will generate
// code to automatically bind any exported methods to Godot.
#[methods]
impl Game {
// Register the builder for methods, properties and/or signals.
fn register_builder(_builder: &ClassBuilder<Self>) {
godot_print!("Game builder is registered!");
}
/// The "constructor" of the class.
fn new(_owner: &Spatial) -> Self {
godot_print!("Game is created!");
Game {
name: "".to_string(),
}
}
// In order to make a method known to Godot, the #[export] attribute has to be used.
// In Godot script-classes do not actually inherit the parent class.
// Instead they are "attached" to the parent object, called the "owner".
// The owner is passed to every single exposed method.
#[export]
unsafe fn _ready(&mut self, _owner: &Spatial) {
// The `godot_print!` macro works like `println!` but prints to the Godot-editor
// output tab as well.
self.name = "Game".to_string();
godot_print!("{} is ready!", self.name);
}
// This function will be called in every frame
#[export]
unsafe fn _process(&self, _owner: &Spatial, delta: f64) {
godot_print!("Inside {} _process(), delta is {}", self.name, delta);
}
}
|