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;
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) {
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),
}
}
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),
}
}
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),
}
}
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>();
}