diff --git a/Cargo.lock b/Cargo.lock index e8a0151..fe08d76 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1109,7 +1109,7 @@ checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" dependencies = [ "serde", "termcolor", - "unicode-width 0.2.0", + "unicode-width 0.1.14", ] [[package]] @@ -1120,7 +1120,7 @@ checksum = "af491d569909a7e4dee0ad7db7f5341fef5c614d5b8ec8cf765732aba3cff681" dependencies = [ "serde", "termcolor", - "unicode-width 0.2.0", + "unicode-width 0.1.14", ] [[package]] @@ -1135,7 +1135,7 @@ version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "faf9468729b8cbcea668e36183cb69d317348c2e08e994829fb56ebfdfbaac34" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -2028,7 +2028,7 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -2232,7 +2232,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -2919,7 +2919,7 @@ dependencies = [ "log", "presser", "thiserror 2.0.18", - "windows 0.61.3", + "windows 0.58.0", ] [[package]] @@ -3968,7 +3968,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -4339,6 +4339,12 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "pollster" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3" + [[package]] name = "portable-atomic" version = "1.13.1" @@ -5048,7 +5054,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.12.1", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -5391,7 +5397,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -5445,6 +5451,7 @@ name = "strafe-ai" version = "0.1.0" dependencies = [ "burn", + "pollster", "strafesnet_common", "strafesnet_graphics", "strafesnet_physics", @@ -5471,9 +5478,9 @@ dependencies = [ [[package]] name = "strafesnet_graphics" -version = "0.0.9" +version = "0.0.10" source = "sparse+https://git.itzana.me/api/packages/strafesnet/cargo/" -checksum = "b57ac0ecfbb48b89d53220a794f191b541ed9fa6b710e5f3ba5490bff887845a" +checksum = "5080cb31a6cf898daab6c960801828ce9834dba8e932dea6b02823651ea53c33" dependencies = [ "bytemuck", "ddsfile", @@ -5508,9 +5515,9 @@ dependencies = [ [[package]] name = "strafesnet_roblox_bot_player" -version = "0.6.0" +version = "0.6.1" source = "sparse+https://git.itzana.me/api/packages/strafesnet/cargo/" -checksum = "e9051e539a1ff4e49d0a8e35a933ff49c652fea0a6d4416d2b99d4a7f51a8fed" +checksum = "0669779b58836ac36b0166f5a3f326ee46ce25b4d14b7fd6f75bf273e806c1bf" dependencies = [ "glam", "strafesnet_common", @@ -5722,7 +5729,7 @@ dependencies = [ "getrandom 0.4.2", "once_cell", "rustix 1.1.4", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -6981,7 +6988,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 8deabd2..af9fb76 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,8 +8,9 @@ burn = { version = "0.20.1", features = ["cuda", "autodiff"] } wgpu = "29.0.0" strafesnet_common = { version = "0.9.0", registry = "strafesnet" } -strafesnet_graphics = { version = "0.0.9", registry = "strafesnet" } +strafesnet_graphics = { version = "0.0.10", registry = "strafesnet" } strafesnet_physics = { version = "=0.0.2-surf", registry = "strafesnet" } strafesnet_roblox_bot_file = { version = "0.9.4", registry = "strafesnet" } -strafesnet_roblox_bot_player = { version = "0.6.0", registry = "strafesnet" } +strafesnet_roblox_bot_player = { version = "0.6.1", registry = "strafesnet" } strafesnet_snf = { version = "0.4.0", registry = "strafesnet" } +pollster = "0.4.0" diff --git a/src/main.rs b/src/main.rs index 7dbba51..15a1aa3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,6 +8,10 @@ use burn::prelude::*; type InferenceBackend = burn::backend::Cuda; type TrainingBackend = Autodiff; +const LIMITS: wgpu::Limits = wgpu::Limits::defaults(); +use strafesnet_common::session::Time as SessionTime; +use strafesnet_graphics::setup; + const INPUT: usize = 2; const HIDDEN: usize = 64; // MoveForward @@ -53,6 +57,50 @@ fn training() { // load map // load replay // setup player + const SIZE_X: usize = 64; + const SIZE_Y: usize = 36; + + let map_file = include_bytes!("../bhop_marble_5692093612.snfm"); + let bot_file = include_bytes!("../bhop_marble_7cf33a64-7120-4514-b9fa-4fe29d9523d.qbot"); + + // read files + let map = strafesnet_snf::read_map(std::io::Cursor::new(map_file)) + .unwrap() + .into_complete_map() + .unwrap(); + let timelines = + strafesnet_roblox_bot_file::v0::read_all_to_block(std::io::Cursor::new(bot_file)).unwrap(); + + let bot = strafesnet_roblox_bot_player::bot::CompleteBot::new(timelines).unwrap(); + let mut playback_head = + strafesnet_roblox_bot_player::head::PlaybackHead::new(&bot, SessionTime::ZERO); + + // setup graphics + let desc = wgpu::InstanceDescriptor::new_without_display_handle_from_env(); + let instance = wgpu::Instance::new(desc); + let (device, queue) = pollster::block_on(async { + let adapter = instance + .request_adapter(&wgpu::RequestAdapterOptions { + power_preference: wgpu::PowerPreference::HighPerformance, + force_fallback_adapter: false, + compatible_surface: None, + }) + .await + .unwrap(); + setup::step4::request_device(&adapter, LIMITS) + .await + .unwrap() + }); + + const FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::Rgba8UnormSrgb; + let graphics = strafesnet_roblox_bot_player::graphics::Graphics::new( + &device, + &queue, + [SIZE_X as u32, SIZE_Y as u32].into(), + FORMAT, + LIMITS, + ); + // setup simulation // run progressively longer segments of the map, starting very close to the end of the run and working the starting time backwards until the ai can run the whole map