use ffi;
use rlbot;
use std::env;
use std::error::Error;
pub trait Bot {
fn set_player_index(&mut self, index: usize);
fn tick(&mut self, packet: &ffi::LiveDataPacket) -> ffi::PlayerInput;
}
pub fn run_bot<B: Bot>(mut bot: B) -> Result<(), Box<Error>> {
let mut args = env::args().skip(1);
if args.next().as_ref().map(|s| &s[..]) != Some("--player-index") {
return Err(protocol_err());
}
let player_index: i32 = args.next().ok_or_else(protocol_err)?.parse()?;
let rlbot = rlbot::init()?;
bot.set_player_index(player_index as usize);
let mut packets = rlbot.packeteer();
loop {
let packet = packets.next()?;
let input = bot.tick(&packet);
rlbot.update_player_input(input, player_index)?;
}
}
fn protocol_err() -> Box<Error> {
From::from("Framework protocol violation")
}