| Crates.io | sevenx_engine |
| lib.rs | sevenx_engine |
| version | 0.2.12-beta |
| created_at | 2025-10-09 12:05:10.228974+00 |
| updated_at | 2025-10-11 08:23:22.217573+00 |
| description | Engine de jogos 2D/3D completa com suporte Android, física, áudio, partículas, tilemap, UI, eventos e sistema 3D avançado com PBR. |
| homepage | |
| repository | https://github.com/sevenx777-dev/SevenX-Engine |
| max_upload_size | |
| id | 1875462 |
| size | 2,074,951 |
Uma engine de jogos 2D/3D completa, moderna e otimizada, feita em Rust. Agora com suporte completo para Android! Ideal para aprendizado, prototipagem rápida e desenvolvimento de jogos indie e mobile.
use sevenx_engine::android::*;
let mut android = AndroidManager::new();
// Joystick virtual
android.input.create_virtual_joystick(100.0, 500.0, 50.0);
let (axis_x, axis_y) = android.input.get_virtual_joystick_axis();
// Touch input
if android.input.is_touch_in_area(x, y, width, height) {
android.vibration.vibrate(50); // Feedback tátil
}
// Controle por inclinação
let accel = android.input.get_accelerometer();
player_x += accel.x * 2.0;
# Instalar ferramentas
rustup target add aarch64-linux-android
cargo install cargo-apk
# Compilar e instalar
cargo apk build --release --target aarch64-linux-android
cargo apk run --release
ANDROID_FEATURES_0.2.9.md - Guia completoexamples/android_demo.rs - Demo interativaPLATFORM_SUPPORT.md - Plataformas suportadas[dependencies]
sevenx_engine = "0.2.8"
Com áudio:
[dependencies]
sevenx_engine = { version = "0.2.8", features = ["audio"] }
Com multiplayer (networking real):
[dependencies]
sevenx_engine = { version = "0.2.8", features = ["multiplayer"] }
Tudo junto:
[dependencies]
sevenx_engine = { version = "0.2.8", features = ["audio", "multiplayer"] }
A SevenX Engine funciona em Windows, Linux, macOS e Android!
# Compile para sua plataforma
cargo build --release
# Compile para Android
./build_scripts/build_android.sh
# Compile para todas as plataformas
./build_scripts/build_all_platforms.sh
Veja PLATFORM_SUPPORT.md para detalhes completos.
use sevenx_engine::*;
struct MyGame {
player_x: f32,
player_y: f32,
particles: ParticleSystem,
}
impl GameState for MyGame {
fn new() -> Self {
let mut particles = ParticleSystem::new();
particles.config.lifetime = 1.0;
particles.config.color_start = [100, 200, 255, 255];
particles.config.color_end = [50, 100, 200, 0];
Self {
player_x: 400.0,
player_y: 300.0,
particles,
}
}
fn update(&mut self, dt: f32, input: &InputHandler, _world: &mut World) {
// Movimento com WASD ou setas
let (axis_x, axis_y) = input.get_movement_vector();
let speed = if input.is_shift_pressed() { 400.0 } else { 200.0 };
self.player_x += axis_x * speed * dt;
self.player_y += axis_y * speed * dt;
// Emite partículas ao se mover
if axis_x != 0.0 || axis_y != 0.0 {
self.particles.emit(self.player_x, self.player_y, 5);
}
self.particles.update(dt);
}
fn draw(&mut self, _world: &World, pixels: &mut [u8]) {
// Limpa com cor de fundo
for pixel in pixels.chunks_exact_mut(4) {
pixel.copy_from_slice(&[20, 25, 35, 255]);
}
// Desenha partículas
self.particles.draw(pixels, 800, 600);
// Desenha player
let mut prims = Primitives2D::new(pixels, 800, 600);
prims.draw_circle_filled(
self.player_x as i32,
self.player_y as i32,
20,
[100, 200, 255, 255]
);
// Desenha borda do player
prims.draw_circle(
self.player_x as i32,
self.player_y as i32,
20,
[150, 220, 255, 255]
);
}
}
fn main() {
let config = EngineConfig {
window_title: "Meu Jogo 2D".to_string(),
window_width: 800,
window_height: 600,
clear_color: [20, 25, 35, 255],
..Default::default()
};
Engine::with_config(config).run::<MyGame>();
}
use sevenx_engine::*;
struct My3DGame {
renderer3d: Renderer3D,
skybox: Skybox,
meshes: Vec<LODMesh>,
frustum: Frustum,
time: f32,
}
impl GameState for My3DGame {
fn new() -> Self {
let mut renderer3d = Renderer3D::new(800, 600);
renderer3d.camera.position = Vec3::new(0.0, 5.0, 15.0);
renderer3d.camera.look_at(Vec3::zero());
// Skybox com céu do dia
let skybox = Skybox::day_sky();
// Cria meshes com LOD
let mut meshes = Vec::new();
for i in 0..5 {
let mut sphere = Mesh3D::sphere(1.5, 32);
sphere.position = Vec3::new(i as f32 * 4.0 - 8.0, 0.0, 0.0);
sphere.set_material(Material3D::metal());
meshes.push(LODMesh::new(sphere));
}
let frustum = Frustum::from_camera(&renderer3d.camera, 800.0 / 600.0);
Self { renderer3d, skybox, meshes, frustum, time: 0.0 }
}
fn update(&mut self, dt: f32, input: &InputHandler, _world: &mut World) {
self.time += dt;
// Controles da câmera
let speed = 5.0;
if input.is_key_down(KeyCode::KeyW) {
self.renderer3d.camera.position =
self.renderer3d.camera.position + self.renderer3d.camera.get_forward() * speed * dt;
}
if input.is_key_down(KeyCode::KeyS) {
self.renderer3d.camera.position =
self.renderer3d.camera.position - self.renderer3d.camera.get_forward() * speed * dt;
}
// Atualiza skybox
self.skybox.update(dt);
// Atualiza frustum culling
self.frustum = Frustum::from_camera(&self.renderer3d.camera, 800.0 / 600.0);
// Atualiza LOD das meshes
for lod_mesh in &mut self.meshes {
let mesh = lod_mesh.get_current_mesh();
lod_mesh.update(self.renderer3d.camera.position, mesh.position);
// Anima rotação
let mut mesh_mut = lod_mesh.levels[lod_mesh.current_level].mesh.clone();
mesh_mut.rotation.y = self.time;
}
}
fn draw(&mut self, _world: &World, pixels: &mut [u8]) {
// Limpa com cor do skybox
for pixel in pixels.chunks_exact_mut(4) {
pixel.copy_from_slice(&[135, 206, 235, 255]);
}
self.renderer3d.clear_zbuffer();
// Renderiza skybox (sempre primeiro)
self.renderer3d.render_mesh(&self.skybox.mesh, pixels, 800, 600);
// Renderiza meshes com frustum culling
for lod_mesh in &self.meshes {
let mesh = lod_mesh.get_current_mesh();
let sphere = BoundingSphere::new(mesh.position, 2.0);
// Só renderiza se estiver visível
if self.frustum.contains_sphere(&sphere) {
self.renderer3d.render_mesh(mesh, pixels, 800, 600);
}
}
}
}
fn main() {
let config = EngineConfig {
window_title: "Meu Jogo 3D - v0.2.8".to_string(),
window_width: 800,
window_height: 600,
clear_color: [135, 206, 235, 255],
..Default::default()
};
Engine::with_config(config).run::<My3DGame>();
}
# Jogo teste básico
cargo run --example jogo_teste
# Showcase de input avançado
cargo run --example input_showcase
# Demo de shaders customizáveis
cargo run --example custom_shaders_demo
# Demo de UI avançada
cargo run --example ui_advanced_demo
# Demo de configurações gráficas
cargo run --example graphics_settings_demo
# Demo 3D avançado (LOD, Frustum Culling, Skybox)
cargo run --example advanced_3d_demo
# FPS 3D completo
cargo run --example fps_3d_game
# Plataforma 3D
cargo run --example platformer_3d
# Multiplayer 2D
cargo run --example multiplayer_demo
# Multiplayer com networking real (QUIC)
cargo run --example multiplayer_demo --features multiplayer
# Servidor dedicado
cargo run --example dedicated_server --features multiplayer
# Battle Royale (20 jogadores)
cargo run --example battle_royale --release
Contribuições são bem-vindas! Veja CONTRIBUTING.md para detalhes.
Dual-licensed sob MIT ou Apache-2.0.
SevenX Engine v0.2.8 - Crie jogos incríveis em Rust! 🎮✨🚀
Feito com ❤️ por Rian7x