29 lines
690 B
Rust
29 lines
690 B
Rust
use godot::prelude::*;
|
|
|
|
#[derive(GodotClass)]
|
|
#[class(base=Node3D, init, tool)]
|
|
pub struct Arrow {
|
|
#[export]
|
|
mesh: Option<Gd<Node3D>>,
|
|
elapsed: f64,
|
|
|
|
base: Base<Node3D>,
|
|
}
|
|
|
|
#[godot_api]
|
|
impl INode3D for Arrow {
|
|
fn process(&mut self, delta: f64) {
|
|
self.elapsed += delta;
|
|
|
|
let global_pos = self.base().get_global_position();
|
|
if let Some(mesh) = &mut self.mesh {
|
|
mesh.set_global_position(
|
|
global_pos
|
|
+ Vector3::UP * 2.
|
|
+ Vector3::UP * (self.elapsed * 2.).sin() as f32 / 10.,
|
|
);
|
|
mesh.set_global_rotation(Vector3::UP * self.elapsed as f32);
|
|
}
|
|
}
|
|
}
|