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
# 🚀 Quick Start 3D - SevenX Engine


## ⚡ Exemplo Mínimo Funcional


Copie e cole este código - **GARANTIDO QUE FUNCIONA!**

```rust
use sevenx_engine::*;

struct Game3D {
    renderer: Renderer3D,
    camera: Camera3D,
    cube: 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.set_color([255, 100, 100, 255]);
        
        Self {
            renderer,
            camera,
            cube,
            time: 0.0,
        }
    }
    
    fn update(&mut self, dt: f32, input: &input::InputHandler, _world: &mut world::World) {
        self.time += dt;
        self.cube.rotation.y = self.time;
        
        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());
    }
    
    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
        self.renderer.camera = self.camera.clone();
        
        // Renderizar
        self.renderer.render_mesh(&self.cube, pixels, 800, 600);
    }
}

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

## 📝 Cargo.toml


```toml
[package]
name = "meu_jogo_3d"
version = "0.1.0"
edition = "2021"

[dependencies]
sevenx_engine = "0.2.10"
```

## ▶️ Executar


```bash
cargo run
```

---

## ❌ Erros Comuns e Soluções


### Erro 1: "cannot find type `InputHandler`"


**Causa**: Imports incorretos

**Solução**: Use os imports corretos
```rust
fn update(&mut self, dt: f32, input: &input::InputHandler, _world: &mut world::World)
//                                    ^^^^^^^^^^^^^^^^^^^         ^^^^^^^^^^^^^
```

### Erro 2: "this method takes 4 arguments but 5 were supplied"


**Causa**: Passar câmera para `render_mesh`

**Solução**: Não passe a câmera, atualize `renderer.camera`
```rust
// ❌ ERRADO
self.renderer.render_mesh(&self.cube, &self.camera, pixels, 800, 600);

// ✅ CERTO
self.renderer.camera = self.camera.clone();
self.renderer.render_mesh(&self.cube, pixels, 800, 600);
```

### Erro 3: "this function takes 2 arguments but 3 were supplied"


**Causa**: API antiga do `Mesh3D::sphere`

**Solução**: Use apenas 2 parâmetros
```rust
// ❌ ERRADO (API antiga)
let sphere = Mesh3D::sphere(1.0, 32, 16);

// ✅ CERTO (API v0.2.9+)
let sphere = Mesh3D::sphere(1.0, 16);
```

### Erro 4: "method `set_color` takes 1 argument but 4 were supplied"


**Causa**: API antiga

**Solução**: Use array
```rust
// ❌ ERRADO
mesh.set_color(255, 0, 0, 255);

// ✅ CERTO
mesh.set_color([255, 0, 0, 255]);
```

---

## 🎯 Checklist Rápido


Antes de compilar, verifique:

- [ ] `Cargo.toml` tem `sevenx_engine = "0.2.10"`
- [ ] `use sevenx_engine::*;` no topo
- [ ] `input: &input::InputHandler` no update
- [ ] `_world: &mut world::World` no update e draw
- [ ] `config::EngineConfig::new()` no main
- [ ] `renderer.camera = self.camera.clone()` antes de renderizar
- [ ] `render_mesh` recebe apenas `(mesh, pixels, width, height)`

---

## 📚 Exemplos Testados


Execute estes exemplos que **FUNCIONAM**:

```bash
# Exemplo simples

cargo run --example simple_3d_working

# Exemplo com múltiplos objetos

cargo run --example simple_3d_demo

# Exemplo PBR (avançado)

cargo run --example pbr_demo
```

---

## 🆘 Ainda com Problemas?


1. **Limpe o projeto**
```bash
cargo clean

cargo build

```

2. **Verifique a versão**
```bash
cargo update sevenx_engine

```

3. **Use o exemplo testado**
```bash
cargo run --example simple_3d_working

```

4. **Copie o código exato** deste guia

---

## 💡 Dicas


### Adicionar Mais Objetos


```rust
// No new()
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]);

// No draw()
self.renderer.render_mesh(&self.sphere, pixels, 800, 600);
```

### Controles de Câmera


```rust
// No update()
if input.is_key_pressed(KeyCode::ArrowLeft) {
    self.camera.position.x -= 5.0 * dt;
}
if input.is_key_pressed(KeyCode::ArrowRight) {
    self.camera.position.x += 5.0 * dt;
}
```

### Wireframe


```rust
// No new()
renderer.wireframe = true;
```

### HUD


```rust
// No draw()
ui::render_text(
    "Meu Jogo 3D",
    10, 10,
    [255, 255, 255, 255],
    pixels,
    800
);
```

---

**Pronto! Agora você tem um jogo 3D funcionando! 🎮✨**