Skip to content

Commit

Permalink
Minimum viable product for a rollback enabled match
Browse files Browse the repository at this point in the history
  • Loading branch information
james7132 committed Jun 16, 2021
1 parent a010087 commit 07212cd
Show file tree
Hide file tree
Showing 2 changed files with 114 additions and 37 deletions.
22 changes: 11 additions & 11 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

129 changes: 103 additions & 26 deletions src/game.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,12 @@ use crate::{player, r#match::input::*};
#[windows_subsystem = "windows"]
use bevy::prelude::*;
use bevy_backroll::backroll;
use backroll_transport_udp::*;
use bevy_steamworks::{AppId, SteamworksPlugin};
use bevy::tasks::IoTaskPool;
use std::collections::HashMap;
use std::net::SocketAddr;
use std::ops::Deref;

mod assets;
mod character;
Expand Down Expand Up @@ -57,25 +61,115 @@ fn main() {
std::env::set_var("SteamGameId", app_id);
}

let mut args = std::env::args();
let base = args.next().unwrap();
if let Some(player_num) = args.next() {
start_app(player_num.parse().unwrap());
} else {
let mut child_1 = std::process::Command::new(base.clone())
.args(&["0"])
.spawn()
.unwrap();
let mut child_2 = std::process::Command::new(base)
.args(&["1"])
.spawn()
.unwrap();
child_1.wait();
child_2.wait();
}
}

#[derive(Debug)]
struct StartupConfig {
client: usize,
bind: SocketAddr,
remote: SocketAddr,
}

fn start_app(player_num: usize) {
let bind_addr = if player_num == 0 {
"127.0.0.1:4001".parse().unwrap()
} else {
"127.0.0.1:4002".parse().unwrap()
};

let remote_addr = if player_num == 0 {
"127.0.0.1:4002".parse().unwrap()
} else {
"127.0.0.1:4001".parse().unwrap()
};

let mut app = App::build();
app.insert_resource(WindowDescriptor {
app.insert_resource(StartupConfig {
client: player_num,
bind: bind_addr,
remote: remote_addr,
})
.insert_resource(WindowDescriptor {
title: "Fantasy Crescendo".to_string(),
vsync: true,
..Default::default()
})
.add_state(AppState::STARTUP)
.add_plugins(DefaultPlugins)
.add_plugins_with(DefaultPlugins, |cfg| {
if player_num != 0 {
cfg.disable::<bevy::log::LogPlugin>();
}
cfg
})
.add_plugin(SteamworksPlugin)
.add_plugin(input::FcInputPlugin)
.add_plugin(assets::FcAssetsPlugin)
.add_plugin(r#match::FcMatchPlugin)
.insert_resource(Msaa { samples: 1 })
.insert_resource(MatchConfig {
.add_startup_system(setup.system())
.add_system(events.system());

// Optional Plugins
#[cfg(debug_assertions)]
app.add_plugin(debug::FcDebugPlugin);

app.run();
}

fn events(mut events: EventReader<backroll::Event>) {
for event in events.iter() {
info!("{:?}", event);
}
}

/// set up a simple 3D scene
fn setup(
config: Res<StartupConfig>,
pool: Res<IoTaskPool>,
mut commands: Commands) {
// cameras
commands.spawn_bundle(UiCameraBundle::default());
commands.spawn_bundle(PerspectiveCameraBundle {
transform: Transform::from_xyz(0.0, 0.0, 5.0).looking_at(Vec3::ZERO, Vec3::Y),
perspective_projection: bevy::render::camera::PerspectiveProjection {
fov: 60.0 * std::f32::consts::PI / 180.0,
..Default::default()
},
..Default::default()
});

println!("{:?}", config);
let socket = UdpManager::bind(pool.deref().deref().clone(), config.bind).unwrap();
let peer = socket.connect(UdpConnectionConfig::unbounded(config.remote));
let remote = backroll::Player::Remote(peer);

commands.insert_resource(socket);
commands.insert_resource(MatchConfig {
rule: r#match::rule::MatchRule::Stock(3),
time: None,
players: [
Some(player::PlayerConfig {
player: backroll::Player::Local,
player: if config.client == 0 {
backroll::Player::Local
} else {
remote.clone()
},
character_id: 0,
pallete: 0,
default_damage: 0.0,
Expand All @@ -94,7 +188,11 @@ fn main() {
),
}),
Some(player::PlayerConfig {
player: backroll::Player::Local,
player: if config.client == 1 {
backroll::Player::Local
} else {
remote
},
character_id: 0,
pallete: 0,
default_damage: 0.0,
Expand All @@ -115,26 +213,5 @@ fn main() {
None,
None,
],
})
.add_startup_system(setup.system());

// Optional Plugins
#[cfg(debug_assertions)]
app.add_plugin(debug::FcDebugPlugin);

app.run();
}

/// set up a simple 3D scene
fn setup(mut commands: Commands) {
// cameras
commands.spawn_bundle(UiCameraBundle::default());
commands.spawn_bundle(PerspectiveCameraBundle {
transform: Transform::from_xyz(0.0, 0.0, 5.0).looking_at(Vec3::ZERO, Vec3::Y),
perspective_projection: bevy::render::camera::PerspectiveProjection {
fov: 60.0 * std::f32::consts::PI / 180.0,
..Default::default()
},
..Default::default()
});
}

0 comments on commit 07212cd

Please sign in to comment.