WIP: Add rust logic for the plater physics
Some checks are pending
ci/woodpecker/push/woodpecker Pipeline is running

This commit is contained in:
Nikolai Rodionov 2025-01-31 19:53:37 +01:00
parent 221734d8c7
commit 6622a143c8
Signed by: allanger
GPG Key ID: 09F8B434D0FDD99B
4 changed files with 15 additions and 37 deletions

View File

@ -1,31 +1,7 @@
use godot::prelude::*; use godot::prelude::*;
use godot::classes::Sprite2D;
use godot::classes::ISprite2D;
struct MyExtension; struct MyExtension;
mod player; mod player;
#[gdextension] #[gdextension]
unsafe impl ExtensionLibrary for MyExtension {} unsafe impl ExtensionLibrary for MyExtension {}
#[derive(GodotClass)]
#[class(base=Sprite2D)]
struct Player {
speed: f64,
angular_speed: f64,
base: Base<Sprite2D>
}
#[godot_api]
impl ISprite2D for Player {
fn init(base: Base<Sprite2D>) -> Self {
godot_print!("Hello, world!"); // Prints to the Godot console
Self {
speed: 400.0,
angular_speed: std::f64::consts::PI,
base,
}
}
}

View File

@ -0,0 +1 @@

View File

@ -1,2 +1,2 @@
mod server_node;
mod client_node; mod client_node;
mod server_node;

View File

@ -15,10 +15,10 @@ const JUMP_VELOCITY: f32 = 4.5;
const SPEED: f32 = 5.0; const SPEED: f32 = 5.0;
#[godot_api] #[godot_api]
impl ICharacterBody3D for PlayerServerNode{ impl ICharacterBody3D for PlayerServerNode {
fn init(base: Base<CharacterBody3D>) -> Self { fn init(base: Base<CharacterBody3D>) -> Self {
Self { Self {
base, base,
jumping: false, jumping: false,
input_direction: Vector2::new(0.0, 0.0), input_direction: Vector2::new(0.0, 0.0),
input_rotation: Vector3::new(0.0, 0.0, 0.0), input_rotation: Vector3::new(0.0, 0.0, 0.0),
@ -33,7 +33,7 @@ impl ICharacterBody3D for PlayerServerNode{
let new_velocity = self.base().get_velocity() + new_gravity; let new_velocity = self.base().get_velocity() + new_gravity;
self.base_mut().set_velocity(new_velocity); self.base_mut().set_velocity(new_velocity);
} }
if self.base().is_on_floor() && self.jumping { if self.base().is_on_floor() && self.jumping {
let mut new_velocity = self.base().get_velocity(); let mut new_velocity = self.base().get_velocity();
new_velocity.y = JUMP_VELOCITY; new_velocity.y = JUMP_VELOCITY;
@ -42,7 +42,8 @@ impl ICharacterBody3D for PlayerServerNode{
self.jumping = false; self.jumping = false;
if self.base().is_on_floor() { if self.base().is_on_floor() {
let direction = self.base().get_transform().basis * Vector3::new(self.input_direction.x, 0.0, self.input_direction.y); let direction = self.base().get_transform().basis
* Vector3::new(self.input_direction.x, 0.0, self.input_direction.y);
if direction.length() > 0.0 { if direction.length() > 0.0 {
let direction = direction.normalized(); let direction = direction.normalized();
let new_velocity = Vector3::new( let new_velocity = Vector3::new(
@ -52,14 +53,14 @@ impl ICharacterBody3D for PlayerServerNode{
); );
self.base_mut().set_velocity(new_velocity); self.base_mut().set_velocity(new_velocity);
} else { } else {
let moved = self.base().get_velocity().clone().move_toward(Vector3::new(0.0, 0.0, 0.0), SPEED); let moved = self
let new_velocity = Vector3::new( .base()
moved.x, .get_velocity()
self.base().get_velocity().y, .clone()
moved.z, .move_toward(Vector3::new(0.0, 0.0, 0.0), SPEED);
); let new_velocity = Vector3::new(moved.x, self.base().get_velocity().y, moved.z);
self.base_mut().set_velocity(new_velocity); self.base_mut().set_velocity(new_velocity);
} }
} }
self.base_mut().move_and_slide(); self.base_mut().move_and_slide();
@ -84,7 +85,7 @@ impl PlayerServerNode {
new_rotation.x = x; new_rotation.x = x;
self.base_mut().set_rotation(new_rotation); self.base_mut().set_rotation(new_rotation);
} }
#[rpc(any_peer, call_local, unreliable_ordered)] #[rpc(any_peer, call_local, unreliable_ordered)]
fn set_rotation_y(&mut self, y: f32) { fn set_rotation_y(&mut self, y: f32) {
let mut new_rotation = self.base().get_rotation(); let mut new_rotation = self.base().get_rotation();