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
use sevenx_engine::{
    input::InputHandler,
    level::{Level, LevelObject},
    world::World,
    Engine, EngineConfig, GameState, KeyCode,
};

struct LevelEditor {
    level: Level,
    current_tile: u32,
}

impl GameState for LevelEditor {
    fn new() -> Self {
        let mut level = Level::new("Test Level", 25, 19, 32, 32);
        level.tileset_path = "assets/tileset.png".to_string();
        level.properties.gravity = 980.0;

        // Adiciona alguns objetos de exemplo
        level.add_object(LevelObject {
            object_type: "Player".to_string(),
            x: 100.0,
            y: 100.0,
            properties: std::collections::HashMap::new(),
        });

        LevelEditor {
            level,
            current_tile: 0,
        }
    }

    fn update(&mut self, _dt: f32, input: &InputHandler, _world: &mut World) {
        // Salva nível
        if input.is_key_pressed(KeyCode::KeyS) {
            match self.level.save_json("level.json") {
                Ok(_) => println!("💾 Nível salvo em level.json"),
                Err(e) => println!("❌ Erro ao salvar: {}", e),
            }
        }

        // Carrega nível
        if input.is_key_pressed(KeyCode::KeyL) {
            match Level::load_json("level.json") {
                Ok(level) => {
                    self.level = level;
                    println!("📂 Nível carregado de level.json");
                }
                Err(e) => println!("❌ Erro ao carregar: {}", e),
            }
        }

        // Salva em TOML
        if input.is_key_pressed(KeyCode::KeyT) {
            match self.level.save_toml("level.toml") {
                Ok(_) => println!("💾 Nível salvo em level.toml"),
                Err(e) => println!("❌ Erro ao salvar: {}", e),
            }
        }

        // Muda tile atual
        if input.is_key_pressed(KeyCode::ArrowUp) {
            self.current_tile = self.current_tile.saturating_add(1);
            println!("🎨 Tile atual: {}", self.current_tile);
        }
        if input.is_key_pressed(KeyCode::ArrowDown) {
            self.current_tile = self.current_tile.saturating_sub(1);
            println!("🎨 Tile atual: {}", self.current_tile);
        }

        println!("Nível: {} ({}x{})", self.level.name, self.level.width, self.level.height);
        println!("Objetos: {}", self.level.objects.len());
    }

    fn draw(&mut self, _world: &World, _pixels: &mut [u8]) {}
}

fn main() {
    let config = EngineConfig::new()
        .with_title("SevenX Engine - Level Editor")
        .with_size(800, 600);

    println!("🛠️ Editor de Níveis");
    println!("Controles:");
    println!("  S - Salvar (JSON)");
    println!("  L - Carregar (JSON)");
    println!("  T - Salvar (TOML)");
    println!("  ↑/↓ - Mudar tile");

    Engine::with_config(config).run::<LevelEditor>();
}