And once again

This commit is contained in:
2025-02-18 13:30:48 +01:00
parent 37154955d6
commit 16b06ba642
77 changed files with 581 additions and 199 deletions

23
rust/src/entrypoint.rs Normal file
View File

@ -0,0 +1,23 @@
use godot::classes::{INode, Node};
use godot::prelude::*;
use std;
#[derive(GodotClass)]
#[class(base=Node)]
// EntryPoint should decide whether the game should be launched in the
// server or the playing mode and load corresponding resources
struct EntryPoint {
base: Base<Node>,
}
#[godot_api]
impl INode for EntryPoint {
fn init(base: Base<Node>) -> Self {
Self { base }
}
fn ready(&mut self) {}
}
#[godot_api]
impl EntryPoint {}

View File

@ -5,6 +5,7 @@ struct MyExtension;
mod player;
//mod server;
mod globals;
mod entrypoint;
#[gdextension]
unsafe impl ExtensionLibrary for MyExtension {}

View File

@ -13,68 +13,16 @@ use super::player_data::PlayerData;
#[class(base=Node)]
struct GameServer {
base: Base<Node>,
#[export]
port: i32,
#[export]
player_limit: i32,
#[export]
current_map: GString,
#[export]
current_player_data: Gd<PlayerData>,
#[export]
pub(crate) players: Dictionary
}
#[godot_api]
impl INode for GameServer {
fn init(base: Base<Node>) -> Self {
let players = Dictionary::new();
Self {
base,
players,
port: 27015,
player_limit: 10,
current_map: "lowpoly_tdm_2".into(),
current_player_data: PlayerData::new_gd(),
}
Self { base }
}
fn ready(&mut self) {
if let Some(multiplayer) = self.base().get_multiplayer() {
let on_connected = multiplayer.callable("peer_connected");
self.base_mut().connect("on_player_connected", &on_connected);
}
}
fn ready(&mut self) {}
}
#[godot_api]
impl GameServer {
// Signals
#[func]
fn on_player_connected(&mut self, id: i32) {
godot_print!("test");
}
// Main methods
#[func]
fn create_server(&mut self, server_only: bool) {
let mut peer = ENetMultiplayerPeer::new_gd();
let server = peer.create_server_ex(self.port)
.max_clients(self.player_limit)
.done();
if let Some(mut multiplayer) = self.base().get_multiplayer() {
let id = multiplayer.get_unique_id();
multiplayer.set_multiplayer_peer(&peer);
let player = PlayerData::new_gd();
self.players.set(id, player);
}
}
#[func]
fn join_server(&mut self, ip: GString, port: i32) {
let mut peer = ENetMultiplayerPeer::new_gd();
peer.create_client(&ip, port);
if let Some(mut multiplayer) = self.base().get_multiplayer() {
multiplayer.set_multiplayer_peer(&peer);
}
}
}
impl GameServer {}