Move commands to game/commands.rs
This commit is contained in:
parent
215c88cb49
commit
eb6ea6caf3
74
rust/src/game/commands.rs
Normal file
74
rust/src/game/commands.rs
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
use godot::classes::class_macros::private::virtuals::Xrvrs::Gd;
|
||||||
|
|
||||||
|
use crate::{
|
||||||
|
game::Game,
|
||||||
|
ui::cli::{CliColor, Command, CommandLinePanel},
|
||||||
|
};
|
||||||
|
|
||||||
|
pub fn register_commands(cli: &mut Gd<CommandLinePanel>) {
|
||||||
|
cli.bind_mut()
|
||||||
|
.register_command("respawn_ball".to_string(), Box::new(RespawnBallCommand));
|
||||||
|
cli.bind_mut()
|
||||||
|
.register_command("players".to_string(), Box::new(ListPlayersCommand));
|
||||||
|
cli.bind_mut()
|
||||||
|
.register_command("kill".to_string(), Box::new(KillCommand));
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn unregister_commands(cli: &mut Gd<CommandLinePanel>) {
|
||||||
|
cli.bind_mut()
|
||||||
|
.unregister_command("respawn_ball".to_string());
|
||||||
|
cli.bind_mut().unregister_command("players".to_string());
|
||||||
|
cli.bind_mut().unregister_command("kill".to_string());
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct RespawnBallCommand;
|
||||||
|
impl Command for RespawnBallCommand {
|
||||||
|
fn execute(&self, _: &mut CommandLinePanel, _: &[&str]) {
|
||||||
|
if let Some(game) = &mut Game::singleton() {
|
||||||
|
game.bind_mut().respawn_ball();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn help(&self) -> &str {
|
||||||
|
"respawns the ball"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct ListPlayersCommand;
|
||||||
|
impl Command for ListPlayersCommand {
|
||||||
|
fn execute(&self, cli: &mut CommandLinePanel, _: &[&str]) {
|
||||||
|
if let Some(game) = &mut Game::singleton() {
|
||||||
|
for player in &game.bind().players {
|
||||||
|
cli.publish_message(
|
||||||
|
format!(" - {} ({})", player.data.name, player.id()),
|
||||||
|
CliColor::Info,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn help(&self) -> &str {
|
||||||
|
"lists all players"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct KillCommand;
|
||||||
|
impl Command for KillCommand {
|
||||||
|
fn execute(&self, cli: &mut CommandLinePanel, args: &[&str]) {
|
||||||
|
if let Some(player_str) = args.first() {
|
||||||
|
if let Ok(player_id) = player_str.parse() {
|
||||||
|
if let Some(game) = &mut Game::singleton() {
|
||||||
|
game.bind_mut().kill_player(player_id);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
cli.publish_message("Invalid player id".to_string(), CliColor::Error);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
cli.publish_message("Usage: kill [player_id]".to_string(), CliColor::Error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn help(&self) -> &str {
|
||||||
|
"kills given player"
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -10,7 +10,13 @@ use crate::{
|
|||||||
},
|
},
|
||||||
bgm::{Music, MusicManager},
|
bgm::{Music, MusicManager},
|
||||||
chat::{Chat, ChatMessage},
|
chat::{Chat, ChatMessage},
|
||||||
game::opts::{GameOption, GameOptionValue, GameOptions},
|
game::{
|
||||||
|
commands::{
|
||||||
|
KillCommand, ListPlayersCommand, RespawnBallCommand, register_commands,
|
||||||
|
unregister_commands,
|
||||||
|
},
|
||||||
|
opts::{GameOption, GameOptionValue, GameOptions},
|
||||||
|
},
|
||||||
map::Map,
|
map::Map,
|
||||||
map_resource::MapResource,
|
map_resource::MapResource,
|
||||||
net::{
|
net::{
|
||||||
@ -33,6 +39,7 @@ use crate::{
|
|||||||
ui::cli::{CliColor, Command, CommandLinePanel},
|
ui::cli::{CliColor, Command, CommandLinePanel},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pub mod commands;
|
||||||
pub mod opts;
|
pub mod opts;
|
||||||
|
|
||||||
pub const GAME_MANAGER_GLOBAL: &str = "GameManagerGlobal";
|
pub const GAME_MANAGER_GLOBAL: &str = "GameManagerGlobal";
|
||||||
@ -155,58 +162,6 @@ impl GameManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct RespawnBallCommand;
|
|
||||||
impl Command for RespawnBallCommand {
|
|
||||||
fn execute(&self, _: &mut CommandLinePanel, _: &[&str]) {
|
|
||||||
if let Some(game) = &mut Game::singleton() {
|
|
||||||
game.bind_mut().respawn_ball();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn help(&self) -> &str {
|
|
||||||
"respawns the ball"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub struct ListPlayersCommand;
|
|
||||||
impl Command for ListPlayersCommand {
|
|
||||||
fn execute(&self, cli: &mut CommandLinePanel, _: &[&str]) {
|
|
||||||
if let Some(game) = &mut Game::singleton() {
|
|
||||||
for player in &game.bind().players {
|
|
||||||
cli.publish_message(
|
|
||||||
format!(" - {} ({})", player.data.name, player.id()),
|
|
||||||
CliColor::Info,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn help(&self) -> &str {
|
|
||||||
"lists all players"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub struct KillCommand;
|
|
||||||
impl Command for KillCommand {
|
|
||||||
fn execute(&self, cli: &mut CommandLinePanel, args: &[&str]) {
|
|
||||||
if let Some(player_str) = args.first() {
|
|
||||||
if let Ok(player_id) = player_str.parse() {
|
|
||||||
if let Some(game) = &mut Game::singleton() {
|
|
||||||
game.bind_mut().kill_player(player_id);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
cli.publish_message("Invalid player id".to_string(), CliColor::Error);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
cli.publish_message("Usage: kill [player_id]".to_string(), CliColor::Error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn help(&self) -> &str {
|
|
||||||
"kills given player"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(GodotClass)]
|
#[derive(GodotClass)]
|
||||||
#[class(base=Node, init)]
|
#[class(base=Node, init)]
|
||||||
pub struct Game {
|
pub struct Game {
|
||||||
@ -440,12 +395,7 @@ impl Game {
|
|||||||
peer.set_accepting_connections(false);
|
peer.set_accepting_connections(false);
|
||||||
|
|
||||||
let mut cli = CommandLinePanel::singleton();
|
let mut cli = CommandLinePanel::singleton();
|
||||||
cli.bind_mut()
|
register_commands(&mut cli);
|
||||||
.register_command("respawn_ball".to_string(), Box::new(RespawnBallCommand));
|
|
||||||
cli.bind_mut()
|
|
||||||
.register_command("players".to_string(), Box::new(ListPlayersCommand));
|
|
||||||
cli.bind_mut()
|
|
||||||
.register_command("kill".to_string(), Box::new(KillCommand));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -514,10 +464,7 @@ impl Game {
|
|||||||
});
|
});
|
||||||
|
|
||||||
let mut cli = CommandLinePanel::singleton();
|
let mut cli = CommandLinePanel::singleton();
|
||||||
cli.bind_mut()
|
unregister_commands(&mut cli);
|
||||||
.unregister_command("respawn_ball".to_string());
|
|
||||||
cli.bind_mut().unregister_command("players".to_string());
|
|
||||||
cli.bind_mut().unregister_command("kill".to_string());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn change_option(&mut self, opt: GameOption, value: GameOptionValue) {
|
pub fn change_option(&mut self, opt: GameOption, value: GameOptionValue) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user