54 lines
1.1 KiB
Rust
54 lines
1.1 KiB
Rust
use actix::prelude::*;
|
|
use shipyard::World;
|
|
use std::{collections::HashMap, time::Duration};
|
|
|
|
// Minimum delay between updates, in milliseconds
|
|
const MIN_UPDATE_MS: u64 = 10;
|
|
|
|
pub struct Player {}
|
|
|
|
#[derive(Message)]
|
|
#[rtype(result = "()")]
|
|
pub struct PlayerConnected {
|
|
pub conn_id: usize,
|
|
}
|
|
|
|
pub struct Game {
|
|
world: World,
|
|
players: HashMap<usize, Player>,
|
|
}
|
|
|
|
impl Game {
|
|
pub fn new() -> Self {
|
|
// Create world
|
|
let world = World::default();
|
|
|
|
// Create workload
|
|
world.add_workload("update").build();
|
|
|
|
Game {
|
|
world,
|
|
players: HashMap::new(),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Actor for Game {
|
|
type Context = Context<Game>;
|
|
|
|
fn started(&mut self, ctx: &mut Self::Context) {
|
|
// Start update loop
|
|
ctx.run_interval(Duration::from_millis(MIN_UPDATE_MS), |game, _ctx| {
|
|
game.world.run_workload("update");
|
|
});
|
|
}
|
|
}
|
|
|
|
impl Handler<PlayerConnected> for Game {
|
|
type Result = ();
|
|
fn handle(&mut self, msg: PlayerConnected, _ctx: &mut Self::Context) -> Self::Result {
|
|
log::info!("Added player {:?} to lobby", msg.conn_id);
|
|
self.players.insert(msg.conn_id, Player {});
|
|
}
|
|
}
|