aboutsummaryrefslogtreecommitdiff
path: root/server/replaytool/src/main.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-09-11 23:59:43 +0200
committermetamuffin <metamuffin@disroot.org>2025-09-11 23:59:43 +0200
commit732850dbde6788c7585ad0152e2ef6c17da79bfc (patch)
tree1df1d0ff5577e066752e2fbd0b1cc29f1781137f /server/replaytool/src/main.rs
parent2b1d79588241fc9afa3ef9ddc3b20b26b8ce2433 (diff)
downloadhurrycurry-732850dbde6788c7585ad0152e2ef6c17da79bfc.tar
hurrycurry-732850dbde6788c7585ad0152e2ef6c17da79bfc.tar.bz2
hurrycurry-732850dbde6788c7585ad0152e2ef6c17da79bfc.tar.zst
add render subcommand to replaytool
Diffstat (limited to 'server/replaytool/src/main.rs')
-rw-r--r--server/replaytool/src/main.rs25
1 files changed, 23 insertions, 2 deletions
diff --git a/server/replaytool/src/main.rs b/server/replaytool/src/main.rs
index 5ff821cc..40496786 100644
--- a/server/replaytool/src/main.rs
+++ b/server/replaytool/src/main.rs
@@ -15,10 +15,13 @@
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
+#![feature(exit_status_error)]
pub mod record;
+pub mod render;
pub mod replay;
+use crate::{record::record, render::render, replay::replay};
use clap::Parser;
use hurrycurry_protocol::PacketC;
use log::{info, warn, LevelFilter};
@@ -29,8 +32,6 @@ use std::{
};
use tokio::{net::TcpListener, time::sleep};
-use crate::{record::record, replay::replay};
-
#[derive(Parser)]
enum Args {
/// Connects as a spectator and saves the protocol packets for replay
@@ -43,6 +44,18 @@ enum Args {
},
/// Starts a local server that replays previously recorded sessions
Replay { input: PathBuf },
+ /// Runs a replay server and the client in movie mode to record that replay
+ Render {
+ /// Replay file path
+ input: PathBuf,
+ /// Output video file path passed to godot (must end in either .avi for MJPEG or .png for PNG sequence)
+ output: PathBuf,
+ #[arg(short = 'r', long, default_value = "30")]
+ framerate: usize,
+ /// Render without display server; Requires wlheadless-run and mutter
+ #[arg(short = 'H', long)]
+ headless: bool,
+ },
}
#[derive(Serialize, Deserialize)]
@@ -99,6 +112,14 @@ async fn main() -> anyhow::Result<()> {
replay(&ws_listener, &input).await?;
}
}
+ Args::Render {
+ input,
+ output,
+ framerate,
+ headless,
+ } => {
+ render(&input, &output, framerate, headless).await?;
+ }
}
Ok(())
}