sevenx_engine 0.2.11

Engine de jogos 2D/3D completa com suporte Android, física, áudio, partículas, tilemap, UI, eventos e sistema 3D avançado com PBR.
Documentation
// Servidor dedicado para multiplayer
// Compile com: cargo run --example dedicated_server --features multiplayer

#[cfg(feature = "multiplayer")]
use sevenx_engine::{NetworkServer, NetworkMessage, PlayerInfo};
#[cfg(feature = "multiplayer")]
use std::collections::HashMap;

#[cfg(feature = "multiplayer")]
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    println!("🌐 SevenX Engine - Servidor Dedicado");
    println!("=====================================");
    println!();
    
    let addr = "0.0.0.0:8080".parse()?;
    let mut server = NetworkServer::new(addr).await?;
    
    println!("✅ Servidor iniciado em: {}", addr);
    println!("⏳ Aguardando conexões...");
    println!();
    
    // Estado do jogo
    let mut players: HashMap<String, PlayerInfo> = HashMap::new();
    let mut tick: u64 = 0;
    
    loop {
        // Aceita novas conexões
        if let Err(e) = server.accept().await {
            eprintln!("❌ Erro ao aceitar conexão: {}", e);
        }
        
        // Simula tick do servidor (30 Hz)
        tick += 1;
        
        // Broadcast de estado a cada 3 ticks (~100ms)
        if tick % 3 == 0 {
            let state_data = bincode::serialize(&players).unwrap_or_default();
            let msg = NetworkMessage::GameState {
                tick,
                data: state_data,
            };
            
            server.broadcast(msg).await;
        }
        
        // Ping a cada 60 ticks (~2s)
        if tick % 60 == 0 {
            let ping_msg = NetworkMessage::Ping {
                timestamp: std::time::SystemTime::now()
                    .duration_since(std::time::UNIX_EPOCH)
                    .unwrap()
                    .as_millis() as u64,
            };
            server.broadcast(ping_msg).await;
            
            println!("📊 Status: {} jogadores conectados | Tick: {}", players.len(), tick);
        }
        
        // Aguarda próximo tick (33ms = ~30 Hz)
        tokio::time::sleep(tokio::time::Duration::from_millis(33)).await;
    }
}

#[cfg(not(feature = "multiplayer"))]
fn main() {
    eprintln!("❌ Este exemplo requer a feature 'multiplayer'");
    eprintln!("   Compile com: cargo run --example dedicated_server --features multiplayer");
    std::process::exit(1);
}