cubik 0.1.0

OpenGL/glium-based multiplayer game engine
Documentation
mod support;

use cubik::server::ServerContainer;
use cubik::player::{Player, PlayerControlType};
use cubik::quadoctree::{QuadOctreeNode, BoundingBox};
use support::msg::AppMessage;
use std::time::{Instant, Duration};
use std::thread::sleep;
use std::collections::HashMap;
use crate::support::constants::APP_ID;
use cubik::map::GameMap;

const PORT: u16 = 27020;

fn main() {
	let mut server_container: ServerContainer<AppMessage> = ServerContainer::new(PORT, 10).unwrap();

	println!("server listening on port {}", PORT);

	let mut last_status_update = Instant::now();
	let mut player_map: HashMap<u8, Player> = HashMap::new();

	let map = GameMap::load_map("models/map2", APP_ID, None, None, true).unwrap();

	let mut last_time = Instant::now();

	loop {
		server_container.update();

		let current_pids = server_container.pids();
		player_map.retain(|&k, _| current_pids.contains(&k));

		for pid in current_pids {
			let player = player_map.entry(pid)
				.or_insert(Player::new([0., 1.5, 0.], PlayerControlType::MultiplayerServer, [-0.28, 0.275, 0.0], [0.44, 0.275, 0.08]));
			if let Ok(msgs) = server_container.get_msgs(pid) {
				for msg in msgs {
					if let AppMessage::PlayerChange { msg, .. } = msg {
						player.update(0., Some(map.quadoctree.as_ref().unwrap()), None, Some(msg));
					}
				}
				
			}
			if let Some(msg) = player.update(last_time.elapsed().as_secs_f32(), Some(map.quadoctree.as_ref().unwrap()), None, None) {
				server_container.broadcast(AppMessage::PlayerChange {
					msg: msg,
					player_id: pid
				});
			}
		}

		if last_status_update.elapsed().as_secs_f32() > 5. {
			last_status_update = Instant::now();
			println!("peer status update:");
			for (pid, conn) in &server_container.connections {
				println!("pid: {} name: {}", pid, conn.name.as_ref().unwrap_or(&"".to_string()));
			}
			println!("");
			server_container.broadcast(AppMessage::Chat {
				text: format!("I see {} peers", server_container.connections.len()),
				sender: None
			});
		}

		last_time = Instant::now();

		sleep(Duration::from_millis(17));
	}
}