Use autoload singletons instead

This commit is contained in:
Sofia 2026-07-15 20:58:56 +03:00
parent 17086a2ef4
commit b7f8ac320e
2 changed files with 24 additions and 3 deletions

View File

@ -1,3 +1,5 @@
use std::net::SocketAddr;
use godot::prelude::*;
mod ui;
@ -13,9 +15,21 @@ struct NetworkManager {
base: Base<Node>,
}
pub const NETWORK_SINGLETON_NAME: &str = "NetworkManagerGlob";
#[godot_api]
impl INode for NetworkManager {
fn init(base: Base<Node>) -> Self {
NetworkManager { base }
}
}
impl NetworkManager {
pub fn host(&mut self, port: u32) {
godot_print!("Hosting server at {}", port);
}
pub fn join(&mut self, addr: SocketAddr) {
godot_print!("Joining server at {:?}", addr);
}
}

View File

@ -3,15 +3,18 @@ use std::net::SocketAddr;
use std::ops::DerefMut;
use std::rc::Rc;
use godot::classes::{RichTextLabel, ScrollContainer};
use godot::classes::{Engine, RichTextLabel, ScrollContainer};
use godot::prelude::*;
use godot::tools::get_autoload_by_name;
use godot::{
classes::{IPanel, Panel, TextEdit},
obj::Base,
register::{GodotClass, godot_api},
};
use crate::{NETWORK_SINGLETON_NAME, NetworkManager};
pub enum CliColor {
Command,
Info,
@ -154,7 +157,9 @@ impl Command for HostCommand {
if let Some(port_str) = params.first() {
if let Ok(port) = u32::from_str_radix(*port_str, 10) {
cli.publish_message(format!("Server hosted at {}", port), CliColor::Info);
// TODO host server
get_autoload_by_name::<NetworkManager>(NETWORK_SINGLETON_NAME)
.bind_mut()
.host(port);
} else {
cli.publish_message(format!("Invalid port: {}", port_str), CliColor::Error);
}
@ -175,7 +180,9 @@ impl Command for JoinCommand {
if let Some(address_str) = params.first() {
if let Ok(address) = address_str.parse::<SocketAddr>() {
cli.publish_message(format!("Joining server at {}", address), CliColor::Info);
// TODO join server
get_autoload_by_name::<NetworkManager>(NETWORK_SINGLETON_NAME)
.bind_mut()
.join(address);
} else {
cli.publish_message(format!("Invalid address: {}", address_str), CliColor::Error);
}