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
// SevenX Engine - Simple 3D Working Example
// Exemplo 3D testado e funcional

use sevenx_engine::*;

struct Game3D {
    renderer: Renderer3D,
    camera: Camera3D,
    cube: Mesh3D,
    sphere: Mesh3D,
    time: f32,
}

impl GameState for Game3D {
    fn new() -> Self {
        let renderer = Renderer3D::new(800, 600);
        
        let mut camera = Camera3D::new(800, 600);
        camera.position = Vec3::new(0.0, 2.0, 5.0);
        camera.look_at(Vec3::zero());
        
        let mut cube = Mesh3D::cube(1.0);
        cube.position = Vec3::new(-2.0, 0.0, 0.0);
        cube.set_color([255, 100, 100, 255]);
        
        let mut sphere = Mesh3D::sphere(1.0, 16);
        sphere.position = Vec3::new(2.0, 0.0, 0.0);
        sphere.set_color([100, 100, 255, 255]);
        
        Self {
            renderer,
            camera,
            cube,
            sphere,
            time: 0.0,
        }
    }
    
    fn update(&mut self, dt: f32, input: &input::InputHandler, _world: &mut world::World) {
        self.time += dt;
        
        // Rotacionar objetos
        self.cube.rotation.y = self.time;
        self.sphere.rotation.x = self.time * 0.5;
        
        // Câmera orbital
        let radius = 5.0;
        self.camera.position.x = self.time.cos() * radius;
        self.camera.position.z = self.time.sin() * radius;
        self.camera.look_at(Vec3::zero());
        
        // Controles
        if input.is_key_pressed(KeyCode::Escape) {
            std::process::exit(0);
        }
    }
    
    fn draw(&mut self, _world: &world::World, pixels: &mut [u8]) {
        // Limpar tela
        for pixel in pixels.chunks_exact_mut(4) {
            pixel.copy_from_slice(&[20, 20, 30, 255]);
        }
        
        // Limpar zbuffer
        for z in &mut self.renderer.zbuffer {
            *z = f32::INFINITY;
        }
        
        // Atualizar câmera do renderer
        self.renderer.camera = self.camera.clone();
        
        // Renderizar
        self.renderer.render_mesh(&self.cube, pixels, 800, 600);
        self.renderer.render_mesh(&self.sphere, pixels, 800, 600);
        
        // HUD
        ui::render_text(
            "SevenX Engine - 3D Demo",
            10, 10,
            [255, 255, 255, 255],
            pixels,
            800
        );
        
        ui::render_text(
            &format!("FPS: {:.0}", 1.0 / if dt > 0.0 { dt } else { 0.016 }),
            10, 30,
            [255, 255, 0, 255],
            pixels,
            800
        );
        
        ui::render_text(
            "ESC: Sair",
            10, 50,
            [200, 200, 200, 255],
            pixels,
            800
        );
    }
}

fn main() {
    let config = config::EngineConfig::new()
        .with_title("3D Game - SevenX Engine")
        .with_size(800, 600);
    
    Engine::with_config(config).run::<Game3D>();
}