From 68f6292c4d1de0392484c3e521a194e1ed8cb030 Mon Sep 17 00:00:00 2001 From: Emil Date: Sat, 20 Jun 2026 18:21:26 +0300 Subject: [PATCH] feat: Verbatim MVP - terminal renderer, cellular automaton, Verlet physics - World: 250x250 grid with 14 materials (sand, water, lava, stone, wood, etc.) - Physics: cellular automaton for materials + Verlet solver for entities - Entity: multi-cell humanoid (7 sub-bodies with distance constraints) - Render: terminal renderer with ANSI colors and diff-based updates - Game loop: fixed 60Hz timestep with accumulator pattern - Input: WASD movement, number keys for material painting --- .gitignore | 2 + Cargo.toml | 13 ++ assets/DejaVuSansMono.ttf | Bin 0 -> 343140 bytes src/entity/entity.rs | 195 ++++++++++++++++ src/entity/mod.rs | 5 + src/entity/player.rs | 64 ++++++ src/game.rs | 311 ++++++++++++++++++++++++++ src/input.rs | 112 ++++++++++ src/main.rs | 37 ++++ src/physics/collision.rs | 106 +++++++++ src/physics/mod.rs | 5 + src/physics/verlet.rs | 154 +++++++++++++ src/render/mod.rs | 12 + src/render/terminal.rs | 193 ++++++++++++++++ src/world/cell.rs | 138 ++++++++++++ src/world/cellular.rs | 454 ++++++++++++++++++++++++++++++++++++++ src/world/grid.rs | 122 ++++++++++ src/world/material.rs | 286 ++++++++++++++++++++++++ src/world/mod.rs | 9 + 19 files changed, 2218 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.toml create mode 100644 assets/DejaVuSansMono.ttf create mode 100644 src/entity/entity.rs create mode 100644 src/entity/mod.rs create mode 100644 src/entity/player.rs create mode 100644 src/game.rs create mode 100644 src/input.rs create mode 100644 src/main.rs create mode 100644 src/physics/collision.rs create mode 100644 src/physics/mod.rs create mode 100644 src/physics/verlet.rs create mode 100644 src/render/mod.rs create mode 100644 src/render/terminal.rs create mode 100644 src/world/cell.rs create mode 100644 src/world/cellular.rs create mode 100644 src/world/grid.rs create mode 100644 src/world/material.rs create mode 100644 src/world/mod.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..96ef6c0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/target +Cargo.lock diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..ff1a06b --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "verbatim" +version = "0.1.0" +edition = "2024" + +[dependencies] +crossterm = "0.28" +clap = { version = "4", features = ["derive"] } + +[profile.release] +opt-level = 3 +lto = true +codegen-units = 1 diff --git a/assets/DejaVuSansMono.ttf b/assets/DejaVuSansMono.ttf new file mode 100644 index 0000000000000000000000000000000000000000..67ce0486275bf22fb9eb5582a4fc2194c8d6dc1b GIT binary patch literal 343140 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%0D*eMt7x;U5yOiRW>9LR3<>DrtXT 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ℑ_4ca2a20& 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 Xhvr}KlA$O3|M}bUfBaM)x#fQVe&^x^ literal 0 HcmV?d00001 diff --git a/src/entity/entity.rs b/src/entity/entity.rs new file mode 100644 index 0000000..9d53960 --- /dev/null +++ b/src/entity/entity.rs @@ -0,0 +1,195 @@ +use crate::physics::verlet::{SubBody, Constraint}; +use crate::world::cell::MaterialId; + +pub type EntityId = u32; + +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +pub enum EntityKind { + Player, + Goblin, + Corpse, +} + +pub struct Entity { + pub id: EntityId, + pub kind: EntityKind, + pub bodies: Vec, + pub constraints: Vec, + pub alive: bool, + pub health: f32, + pub max_health: f32, + pub constraint_stiffness: f32, + pub on_fire: bool, + pub fire_timer: u32, +} + +impl Entity { + pub fn new(id: EntityId, kind: EntityKind) -> Self { + Self { + id, + kind, + bodies: Vec::new(), + constraints: Vec::new(), + alive: true, + health: 100.0, + max_health: 100.0, + constraint_stiffness: 1.0, + on_fire: false, + fire_timer: 0, + } + } + + pub fn center(&self) -> (f32, f32) { + if self.bodies.is_empty() { + return (0.0, 0.0); + } + let mut sx = 0.0; + let mut sy = 0.0; + let mut n = 0; + for b in &self.bodies { + if b.alive { + sx += b.x; + sy += b.y; + n += 1; + } + } + if n > 0 { + (sx / n as f32, sy / n as f32) + } else { + (self.bodies[0].x, self.bodies[0].y) + } + } + + pub fn head(&self) -> Option<&SubBody> { + self.bodies.first() + } + + pub fn head_mut(&mut self) -> Option<&mut SubBody> { + self.bodies.first_mut() + } + + pub fn kill(&mut self) { + self.alive = false; + self.health = 0.0; + self.constraint_stiffness = 0.0; + for c in &mut self.constraints { + c.stiffness = 0.0; + } + if self.kind == EntityKind::Player || self.kind == EntityKind::Goblin { + self.kind = EntityKind::Corpse; + } + } + + pub fn take_damage(&mut self, dmg: f32) { + self.health -= dmg; + if self.health <= 0.0 && self.alive { + self.kill(); + } + } + + pub fn build_humanoid(&mut self, cx: f32, cy: f32) { + self.bodies.clear(); + self.constraints.clear(); + + let r = 0.4; + let mat = match self.kind { + EntityKind::Player => MaterialId::Flesh, + EntityKind::Goblin => MaterialId::Flesh, + EntityKind::Corpse => MaterialId::Flesh, + }; + + self.bodies.push(SubBody::new(cx, cy - 2.0, r, mat)); + self.bodies.push(SubBody::new(cx, cy - 1.0, r, mat)); + self.bodies.push(SubBody::new(cx - 0.8, cy - 1.0, r, mat)); + self.bodies.push(SubBody::new(cx + 0.8, cy - 1.0, r, mat)); + self.bodies.push(SubBody::new(cx - 0.5, cy, r, mat)); + self.bodies.push(SubBody::new(cx + 0.5, cy, r, mat)); + self.bodies.push(SubBody::new(cx, cy + 1.0, r, MaterialId::Bone)); + + let s = self.constraint_stiffness; + let mk = |a: usize, b: usize, len: f32| Constraint::new(a, b, len, s); + + self.constraints.push(mk(0, 1, 1.0)); + self.constraints.push(mk(1, 2, 0.9)); + self.constraints.push(mk(1, 3, 0.9)); + self.constraints.push(mk(2, 4, 0.9)); + self.constraints.push(mk(3, 5, 0.9)); + self.constraints.push(mk(1, 6, 2.0)); + self.constraints.push(mk(4, 5, 1.0)); + self.constraints.push(mk(4, 6, 1.1)); + self.constraints.push(mk(5, 6, 1.1)); + } + + pub fn apply_fire_damage(&mut self) { + if !self.on_fire { + return; + } + self.fire_timer += 1; + let dmg = 0.5; + self.take_damage(dmg); + for b in &mut self.bodies { + if b.alive { + b.health -= dmg; + } + } + if self.fire_timer > 180 { + self.on_fire = false; + self.fire_timer = 0; + } + } +} + +pub struct EntityManager { + entities: Vec, + next_id: EntityId, +} + +impl EntityManager { + pub fn new() -> Self { + Self { + entities: Vec::new(), + next_id: 0, + } + } + + pub fn spawn(&mut self, kind: EntityKind) -> EntityId { + let id = self.next_id; + self.next_id += 1; + let mut e = Entity::new(id, kind); + match kind { + EntityKind::Player => { + e.max_health = 100.0; + e.health = 100.0; + } + EntityKind::Goblin => { + e.max_health = 40.0; + e.health = 40.0; + } + EntityKind::Corpse => { + e.alive = false; + } + } + self.entities.push(e); + id + } + + pub fn get(&self, id: EntityId) -> Option<&Entity> { + self.entities.iter().find(|e| e.id == id) + } + + pub fn get_mut(&mut self, id: EntityId) -> Option<&mut Entity> { + self.entities.iter_mut().find(|e| e.id == id) + } + + pub fn all(&self) -> &[Entity] { + &self.entities + } + + pub fn all_mut(&mut self) -> &mut [Entity] { + &mut self.entities + } + + pub fn iter_mut(&mut self) -> impl Iterator { + self.entities.iter_mut() + } +} diff --git a/src/entity/mod.rs b/src/entity/mod.rs new file mode 100644 index 0000000..0431bb3 --- /dev/null +++ b/src/entity/mod.rs @@ -0,0 +1,5 @@ +pub mod entity; +pub mod player; + +pub use entity::{Entity, EntityId, EntityManager, EntityKind}; +pub use player::Player; diff --git a/src/entity/player.rs b/src/entity/player.rs new file mode 100644 index 0000000..65938dd --- /dev/null +++ b/src/entity/player.rs @@ -0,0 +1,64 @@ +use crate::entity::entity::{Entity, EntityKind, EntityManager, EntityId}; + +pub struct Player { + pub entity_id: EntityId, + pub move_speed: f32, + pub jump_force: f32, +} + +impl Player { + pub fn new(manager: &mut EntityManager) -> Self { + let id = manager.spawn(EntityKind::Player); + Self { + entity_id: id, + move_speed: 0.15, + jump_force: 0.8, + } + } + + pub fn spawn_at(&self, manager: &mut EntityManager, cx: f32, cy: f32) { + if let Some(e) = manager.get_mut(self.entity_id) { + e.build_humanoid(cx, cy); + } + } + + pub fn move_left(&self, manager: &mut EntityManager) { + if let Some(e) = manager.get_mut(self.entity_id) { + if let Some(head) = e.head_mut() { + head.add_vel(-self.move_speed, 0.0); + } + } + } + + pub fn move_right(&self, manager: &mut EntityManager) { + if let Some(e) = manager.get_mut(self.entity_id) { + if let Some(head) = e.head_mut() { + head.add_vel(self.move_speed, 0.0); + } + } + } + + pub fn jump(&self, manager: &mut EntityManager, on_ground: bool) { + if on_ground { + if let Some(e) = manager.get_mut(self.entity_id) { + for b in &mut e.bodies { + if b.alive { + b.add_vel(0.0, -self.jump_force); + } + } + } + } + } + + pub fn entity<'a>(&self, manager: &'a EntityManager) -> Option<&'a Entity> { + manager.get(self.entity_id) + } + + pub fn entity_mut<'a>(&self, manager: &'a mut EntityManager) -> Option<&'a mut Entity> { + manager.get_mut(self.entity_id) + } + + pub fn center(&self, manager: &EntityManager) -> (f32, f32) { + manager.get(self.entity_id).map(|e| e.center()).unwrap_or((0.0, 0.0)) + } +} diff --git a/src/game.rs b/src/game.rs new file mode 100644 index 0000000..8a711c6 --- /dev/null +++ b/src/game.rs @@ -0,0 +1,311 @@ +use std::time::{Duration, Instant}; + +use crate::entity::{EntityManager, EntityKind}; +use crate::input::{Action, InputHandler}; +use crate::physics::verlet::VerletSolver; +use crate::physics::collision::resolve_grid_collision; +use crate::render::Renderer; +use crate::world::cell::MaterialId; +use crate::world::grid::Grid; +use crate::world::cellular::CellularAutomaton; +use crate::entity::player::Player; + +pub struct Game { + pub grid: Grid, + pub ca: CellularAutomaton, + pub verlet: VerletSolver, + pub entities: EntityManager, + pub player: Player, + pub input: InputHandler, + pub cam_x: i32, + pub cam_y: i32, + pub running: bool, + pub tick: u64, + pub fixed_dt: Duration, + pub accumulator: Duration, + pub last_time: Instant, +} + +impl Game { + pub fn new() -> Self { + let mut entities = EntityManager::new(); + let player = Player::new(&mut entities); + Self { + grid: Grid::new(), + ca: CellularAutomaton::new(), + verlet: VerletSolver::new(), + entities, + player, + input: InputHandler::new(), + cam_x: 100, + cam_y: 100, + running: true, + tick: 0, + fixed_dt: Duration::from_millis(16), + accumulator: Duration::ZERO, + last_time: Instant::now(), + } + } + + pub fn init_world(&mut self) { + let w = self.grid.width; + let h = self.grid.height; + + for x in 0..w { + self.grid.set_material(x as i32, (h - 1) as i32, MaterialId::Stone); + self.grid.set_material(x as i32, (h - 2) as i32, MaterialId::Dirt); + } + + for x in 0..w { + let surface = (h as i32 - 3) - ((x as f32 * 0.1).sin() * 5.0) as i32; + let surface = surface.max(10).min(h as i32 - 3); + for y in surface..(h as i32 - 2) { + if y == surface { + self.grid.set_material(x as i32, y, MaterialId::Grass); + } else { + self.grid.set_material(x as i32, y, MaterialId::Dirt); + } + } + } + + let cx = (w / 2) as f32; + let cy = (h as f32 / 2.0) - 20.0; + self.player.spawn_at(&mut self.entities, cx, cy); + + let (px, py) = self.player.center(&self.entities); + self.center_camera_on(px, py); + + self.grid.fill_border(MaterialId::Stone); + } + + fn center_camera_on(&mut self, px: f32, py: f32) { + self.cam_x = px as i32 - 40; + self.cam_y = py as i32 - 12; + } + + pub fn run(&mut self, renderer: &mut R) { + let _ = renderer.init(); + self.init_world(); + + self.last_time = Instant::now(); + + while self.running { + let now = Instant::now(); + let frame_time = now.duration_since(self.last_time); + self.last_time = now; + self.accumulator += frame_time; + + while self.accumulator >= self.fixed_dt { + self.fixed_update(); + self.accumulator -= self.fixed_dt; + } + + let (px, py) = self.player.center(&self.entities); + self.center_camera_on(px, py); + + let _ = renderer.render(&self.grid, &self.entities, self.cam_x, self.cam_y); + + self.handle_input(renderer.viewport_w(), renderer.viewport_h()); + } + + let _ = renderer.shutdown(); + } + + fn handle_input(&mut self, vw: usize, vh: usize) { + let action = self.input.poll(); + match action { + Action::Quit => self.running = false, + Action::MoveLeft => self.player.move_left(&mut self.entities), + Action::MoveRight => self.player.move_right(&mut self.entities), + Action::Jump => { + let on_ground = self.check_on_ground(); + self.player.jump(&mut self.entities, on_ground); + } + Action::MoveCameraLeft => self.cam_x -= 5, + Action::MoveCameraRight => self.cam_x += 5, + Action::MoveCameraUp => self.cam_y -= 5, + Action::MoveCameraDown => self.cam_y += 5, + Action::Paint(brush) => { + let mat = brush.to_material(); + let cx = self.cam_x + (vw as i32 / 2); + let cy = self.cam_y + (vh as i32 / 2); + let r = 2; + for dy in -r..=r { + for dx in -r..=r { + if dx * dx + dy * dy <= r * r + 1 { + if let Some(m) = mat { + self.grid.set_material(cx + dx, cy + dy, m); + } else { + self.grid.set(cx + dx, cy + dy, crate::world::cell::Cell::empty()); + } + } + } + } + } + Action::None => {} + } + } + + fn check_on_ground(&self) -> bool { + if let Some(e) = self.player.entity(&self.entities) { + for b in &e.bodies { + if !b.alive { + continue; + } + let bx = b.x as i32; + let by = b.y as i32; + let below = self.grid.get(bx, by + 1); + if below.is_solid() { + return true; + } + } + } + false + } + + fn fixed_update(&mut self) { + self.tick += 1; + + self.ca.step(&mut self.grid); + + self.update_entities(); + + self.apply_world_damage(); + + if self.tick % 30 == 0 { + self.try_spawn_goblin(); + } + } + + fn update_entities(&mut self) { + let solver = self.verlet.clone(); + let grid = &self.grid; + + let entities_data: Vec<(usize, Vec, Vec)>; + entities_data = { + let mut data = Vec::new(); + for (i, e) in self.entities.all().iter().enumerate() { + data.push((i, e.bodies.clone(), e.constraints.clone())); + } + data + }; + + for (idx, mut bodies, constraints) in entities_data { + for b in &mut bodies { + if !b.alive { + continue; + } + + if b.on_fire { + b.fire_timer += 1; + b.health -= 0.3; + if b.fire_timer > 120 { + b.on_fire = false; + b.fire_timer = 0; + } + } + } + + solver.integrate(&mut bodies); + + for b in &mut bodies { + if !b.alive { + continue; + } + let result = resolve_grid_collision(grid, b); + if result.touching_lava { + b.health -= 2.0; + if !b.on_fire { + b.on_fire = true; + } + } + if result.touching_fire { + b.health -= 0.5; + if !b.on_fire && b.health < 80.0 { + b.on_fire = true; + } + } + if result.touching_acid { + b.health -= 1.0; + } + if result.in_liquid { + let body_density = crate::world::material::MaterialRegistry::instance() + .get(b.material).density; + if body_density > result.liquid_density { + b.y += 0.02; + } + } + } + + solver.solve_constraints(&mut bodies, &constraints, 3); + + if let Some(e) = self.entities.all_mut().get_mut(idx) { + e.bodies = bodies; + + let mut total_health = 0.0; + let mut alive_count = 0; + for b in &e.bodies { + if b.alive { + total_health += b.health; + alive_count += 1; + } + } + if alive_count > 0 { + let avg = total_health / alive_count as f32; + if avg < 0.0 && e.alive { + e.kill(); + } + } + + let any_on_fire = e.bodies.iter().any(|b| b.alive && b.on_fire); + e.on_fire = any_on_fire; + if e.on_fire { + e.apply_fire_damage(); + } + } + } + } + + fn apply_world_damage(&mut self) { + let mut to_kill: Vec = Vec::new(); + for (i, e) in self.entities.all().iter().enumerate() { + if !e.alive { + continue; + } + let mut dead_parts = 0; + for b in &e.bodies { + if !b.alive || b.health <= 0.0 { + dead_parts += 1; + } + } + if dead_parts == e.bodies.len() { + to_kill.push(i); + } + } + for i in to_kill { + if let Some(e) = self.entities.all_mut().get_mut(i) { + e.kill(); + } + } + } + + fn try_spawn_goblin(&mut self) { + let alive_goblins = self.entities.all().iter().filter(|e| e.alive && e.kind == EntityKind::Goblin).count(); + if alive_goblins >= 3 { + return; + } + + let (px, py) = self.player.center(&self.entities); + let spawn_x = px as i32 + if px as i32 % 2 == 0 { 15 } else { -15 }; + let spawn_y = py as i32 - 5; + + if !self.grid.in_bounds(spawn_x, spawn_y) { + return; + } + + let id = self.entities.spawn(EntityKind::Goblin); + if let Some(g) = self.entities.get_mut(id) { + g.build_humanoid(spawn_x as f32, spawn_y as f32); + } + } +} diff --git a/src/input.rs b/src/input.rs new file mode 100644 index 0000000..fa46edd --- /dev/null +++ b/src/input.rs @@ -0,0 +1,112 @@ +use crossterm::event::{self, Event, KeyCode, KeyEvent, KeyModifiers}; +use std::time::Duration; + +pub enum Action { + MoveLeft, + MoveRight, + Jump, + MoveCameraUp, + MoveCameraDown, + MoveCameraLeft, + MoveCameraRight, + Paint(MaterialBrush), + Quit, + None, +} + +pub enum MaterialBrush { + Sand, + Water, + Stone, + Lava, + Wood, + Acid, + Grass, + Dirt, + Fire, + Flesh, + Erase, +} + +pub struct InputHandler { + pub paint_brush: MaterialBrush, +} + +impl InputHandler { + pub fn new() -> Self { + Self { + paint_brush: MaterialBrush::Sand, + } + } + + pub fn poll(&mut self) -> Action { + if !event::poll(Duration::from_millis(0)).unwrap_or(false) { + return Action::None; + } + match event::read() { + Ok(Event::Key(KeyEvent { code, modifiers, .. })) => { + if modifiers.contains(KeyModifiers::CONTROL) && code == KeyCode::Char('c') { + return Action::Quit; + } + match code { + KeyCode::Char('q') => Action::Quit, + KeyCode::Left | KeyCode::Char('a') => Action::MoveLeft, + KeyCode::Right | KeyCode::Char('d') => Action::MoveRight, + KeyCode::Up | KeyCode::Char('w') | KeyCode::Char(' ') => Action::Jump, + KeyCode::Char('h') => Action::MoveCameraLeft, + KeyCode::Char('l') => Action::MoveCameraRight, + KeyCode::Char('k') => Action::MoveCameraUp, + KeyCode::Char('j') => Action::MoveCameraDown, + KeyCode::Char('1') => { self.paint_brush = MaterialBrush::Sand; Action::Paint(MaterialBrush::Sand) } + KeyCode::Char('2') => { self.paint_brush = MaterialBrush::Water; Action::Paint(MaterialBrush::Water) } + KeyCode::Char('3') => { self.paint_brush = MaterialBrush::Stone; Action::Paint(MaterialBrush::Stone) } + KeyCode::Char('4') => { self.paint_brush = MaterialBrush::Lava; Action::Paint(MaterialBrush::Lava) } + KeyCode::Char('5') => { self.paint_brush = MaterialBrush::Wood; Action::Paint(MaterialBrush::Wood) } + KeyCode::Char('6') => { self.paint_brush = MaterialBrush::Acid; Action::Paint(MaterialBrush::Acid) } + KeyCode::Char('7') => { self.paint_brush = MaterialBrush::Grass; Action::Paint(MaterialBrush::Grass) } + KeyCode::Char('8') => { self.paint_brush = MaterialBrush::Dirt; Action::Paint(MaterialBrush::Dirt) } + KeyCode::Char('9') => { self.paint_brush = MaterialBrush::Fire; Action::Paint(MaterialBrush::Fire) } + KeyCode::Char('0') => { self.paint_brush = MaterialBrush::Flesh; Action::Paint(MaterialBrush::Flesh) } + KeyCode::Char('x') => { self.paint_brush = MaterialBrush::Erase; Action::Paint(MaterialBrush::Erase) } + _ => Action::None, + } + } + _ => Action::None, + } + } +} + +impl MaterialBrush { + pub fn to_material(&self) -> Option { + use crate::world::cell::MaterialId; + match self { + MaterialBrush::Sand => Some(MaterialId::Sand), + MaterialBrush::Water => Some(MaterialId::Water), + MaterialBrush::Stone => Some(MaterialId::Stone), + MaterialBrush::Lava => Some(MaterialId::Lava), + MaterialBrush::Wood => Some(MaterialId::Wood), + MaterialBrush::Acid => Some(MaterialId::Acid), + MaterialBrush::Grass => Some(MaterialId::Grass), + MaterialBrush::Dirt => Some(MaterialId::Dirt), + MaterialBrush::Fire => Some(MaterialId::Fire), + MaterialBrush::Flesh => Some(MaterialId::Flesh), + MaterialBrush::Erase => None, + } + } + + pub fn name(&self) -> &'static str { + match self { + MaterialBrush::Sand => "Sand", + MaterialBrush::Water => "Water", + MaterialBrush::Stone => "Stone", + MaterialBrush::Lava => "Lava", + MaterialBrush::Wood => "Wood", + MaterialBrush::Acid => "Acid", + MaterialBrush::Grass => "Grass", + MaterialBrush::Dirt => "Dirt", + MaterialBrush::Fire => "Fire", + MaterialBrush::Flesh => "Flesh", + MaterialBrush::Erase => "Erase", + } + } +} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..dd0fb5a --- /dev/null +++ b/src/main.rs @@ -0,0 +1,37 @@ +mod world; +mod physics; +mod entity; +mod render; +mod input; +mod game; + +use clap::Parser; +use game::Game; +use render::terminal::TerminalRenderer; + +#[derive(Parser, Debug)] +#[command(name = "verbatim", about = "ASCII physics RPG - Noita meets Caves of Qud")] +struct Cli { + #[arg(long, default_value = "terminal")] + render_mode: String, +} + +fn main() { + let cli = Cli::parse(); + + match cli.render_mode.as_str() { + "terminal" => { + let mut renderer = TerminalRenderer::new(); + let mut game = Game::new(); + game.run(&mut renderer); + } + "vulkan" => { + eprintln!("Vulkan renderer not yet implemented. Use --render-mode terminal."); + std::process::exit(1); + } + _ => { + eprintln!("Unknown render mode: {}. Use 'terminal' or 'vulkan'.", cli.render_mode); + std::process::exit(1); + } + } +} diff --git a/src/physics/collision.rs b/src/physics/collision.rs new file mode 100644 index 0000000..cd44535 --- /dev/null +++ b/src/physics/collision.rs @@ -0,0 +1,106 @@ +use crate::world::cell::MaterialId; +use crate::world::grid::Grid; +use crate::physics::verlet::SubBody; + +pub struct CollisionResult { + pub on_ground: bool, + pub in_liquid: bool, + pub liquid_density: f32, + pub touching_lava: bool, + pub touching_fire: bool, + pub touching_acid: bool, +} + +impl CollisionResult { + pub fn none() -> Self { + Self { + on_ground: false, + in_liquid: false, + liquid_density: 0.0, + touching_lava: false, + touching_fire: false, + touching_acid: false, + } + } +} + +pub fn resolve_grid_collision(grid: &Grid, body: &mut SubBody) -> CollisionResult { + let mut result = CollisionResult::none(); + + let r = body.radius; + let min_x = (body.x - r).floor() as i32; + let max_x = (body.x + r).ceil() as i32; + let min_y = (body.y - r).floor() as i32; + let max_y = (body.y + r).ceil() as i32; + + for cy in min_y..=max_y { + for cx in min_x..=max_x { + if !grid.in_bounds(cx, cy) { + continue; + } + let cell = grid.get(cx, cy); + if cell.is_empty() { + continue; + } + + if cell.is_liquid() { + result.in_liquid = true; + result.liquid_density = result.liquid_density.max(cell.density()); + if cell.material == MaterialId::Lava { + result.touching_lava = true; + } + if cell.material == MaterialId::Acid { + result.touching_acid = true; + } + apply_liquid_drag(body, cell.density()); + continue; + } + + if cell.material == MaterialId::Fire { + result.touching_fire = true; + continue; + } + + if cell.is_solid() { + let closest_x = body.x.max(cx as f32).min((cx + 1) as f32); + let closest_y = body.y.max(cy as f32).min((cy + 1) as f32); + let dx = body.x - closest_x; + let dy = body.y - closest_y; + let dist_sq = dx * dx + dy * dy; + if dist_sq < r * r { + let dist = dist_sq.sqrt(); + if dist > 0.0001 { + let overlap = r - dist; + let nx = dx / dist; + let ny = dy / dist; + body.x += nx * overlap; + body.y += ny * overlap; + if ny < -0.5 { + result.on_ground = true; + } + } else { + let bcx = cx as f32 + 0.5; + let bcy = cy as f32 + 0.5; + let dx = body.x - bcx; + let dy = body.y - bcy; + let dist = (dx * dx + dy * dy).sqrt(); + if dist > 0.0001 { + body.x = bcx + dx / dist * r * 1.1; + body.y = bcy + dy / dist * r * 1.1; + } + } + } + } + } + } + + result +} + +fn apply_liquid_drag(body: &mut SubBody, density: f32) { + let drag = 1.0 - density * 0.08; + let drag = drag.max(0.5); + let vx = body.vx() * drag; + let vy = body.vy() * drag; + body.set_vel(vx, vy); +} diff --git a/src/physics/mod.rs b/src/physics/mod.rs new file mode 100644 index 0000000..e8cdda0 --- /dev/null +++ b/src/physics/mod.rs @@ -0,0 +1,5 @@ +pub mod verlet; +pub mod collision; + +pub use verlet::{SubBody, Constraint, VerletSolver}; +pub use collision::resolve_grid_collision; diff --git a/src/physics/verlet.rs b/src/physics/verlet.rs new file mode 100644 index 0000000..dee1996 --- /dev/null +++ b/src/physics/verlet.rs @@ -0,0 +1,154 @@ +use crate::world::cell::MaterialId; + +#[derive(Clone, Copy, Debug)] +pub struct SubBody { + pub x: f32, + pub y: f32, + pub old_x: f32, + pub old_y: f32, + pub ax: f32, + pub ay: f32, + pub radius: f32, + pub material: MaterialId, + pub alive: bool, + pub health: f32, + pub on_fire: bool, + pub fire_timer: u32, +} + +impl SubBody { + pub fn new(x: f32, y: f32, radius: f32, material: MaterialId) -> Self { + Self { + x, + y, + old_x: x, + old_y: y, + ax: 0.0, + ay: 0.0, + radius, + material, + alive: true, + health: 100.0, + on_fire: false, + fire_timer: 0, + } + } + + #[inline] + pub fn vx(&self) -> f32 { + self.x - self.old_x + } + + #[inline] + pub fn vy(&self) -> f32 { + self.y - self.old_y + } + + #[inline] + pub fn set_vel(&mut self, vx: f32, vy: f32) { + self.old_x = self.x - vx; + self.old_y = self.y - vy; + } + + #[inline] + pub fn add_vel(&mut self, vx: f32, vy: f32) { + self.old_x -= vx; + self.old_y -= vy; + } + + #[inline] + pub fn apply_force(&mut self, fx: f32, fy: f32) { + self.ax += fx; + self.ay += fy; + } +} + +#[derive(Clone, Copy, Debug)] +pub struct Constraint { + pub a: usize, + pub b: usize, + pub rest_length: f32, + pub stiffness: f32, +} + +impl Constraint { + pub fn new(a: usize, b: usize, rest_length: f32, stiffness: f32) -> Self { + Self { + a, + b, + rest_length, + stiffness, + } + } +} + +#[derive(Clone)] +pub struct VerletSolver { + pub gravity: f32, + pub damping: f32, + pub dt: f32, +} + +impl VerletSolver { + pub fn new() -> Self { + Self { + gravity: 0.3, + damping: 0.98, + dt: 1.0, + } + } + + pub fn integrate(&self, bodies: &mut [SubBody]) { + for b in bodies.iter_mut() { + if !b.alive { + continue; + } + let vx = (b.x - b.old_x) * self.damping; + let vy = (b.y - b.old_y) * self.damping; + b.old_x = b.x; + b.old_y = b.y; + b.x += vx + b.ax * self.dt * self.dt; + b.y += vy + (b.ay + self.gravity) * self.dt * self.dt; + b.ax = 0.0; + b.ay = 0.0; + } + } + + pub fn solve_constraints(&self, bodies: &mut [SubBody], constraints: &[Constraint], iterations: u32) { + for _ in 0..iterations { + for c in constraints { + let (ba, bb) = if c.a < bodies.len() && c.b < bodies.len() { + (bodies[c.a], bodies[c.b]) + } else { + continue; + }; + if !ba.alive || !bb.alive { + continue; + } + let dx = bb.x - ba.x; + let dy = bb.y - ba.y; + let dist = (dx * dx + dy * dy).sqrt(); + if dist < 0.0001 { + continue; + } + let diff = (dist - c.rest_length) / dist; + let sx = dx * 0.5 * diff * c.stiffness; + let sy = dy * 0.5 * diff * c.stiffness; + bodies[c.a].x += sx; + bodies[c.a].y += sy; + bodies[c.b].x -= sx; + bodies[c.b].y -= sy; + } + } + } + + pub fn step( + &self, + bodies: &mut [SubBody], + constraints: &[Constraint], + iterations: u32, + ) { + self.integrate(bodies); + self.solve_constraints(bodies, constraints, iterations); + } +} diff --git a/src/render/mod.rs b/src/render/mod.rs new file mode 100644 index 0000000..90418b5 --- /dev/null +++ b/src/render/mod.rs @@ -0,0 +1,12 @@ +pub mod terminal; + +use crate::entity::EntityManager; +use crate::world::grid::Grid; + +pub trait Renderer { + fn init(&mut self) -> std::io::Result<()>; + fn render(&mut self, grid: &Grid, entities: &EntityManager, cam_x: i32, cam_y: i32) -> std::io::Result<()>; + fn shutdown(&mut self) -> std::io::Result<()>; + fn viewport_w(&self) -> usize; + fn viewport_h(&self) -> usize; +} diff --git a/src/render/terminal.rs b/src/render/terminal.rs new file mode 100644 index 0000000..2a213ca --- /dev/null +++ b/src/render/terminal.rs @@ -0,0 +1,193 @@ +use std::io::{self, Write, stdout}; +use crossterm::{ + cursor::{Hide, MoveTo, Show}, + event::{DisableMouseCapture, EnableMouseCapture}, + execute, queue, + style::{Color, SetBackgroundColor, SetForegroundColor, ResetColor, Print}, + terminal::{self, Clear, ClearType, EnterAlternateScreen, LeaveAlternateScreen, size as term_size}, +}; + +use crate::entity::EntityManager; +use crate::render::Renderer; +use crate::world::cell::MaterialId; +use crate::world::grid::Grid; +use crate::world::material::MaterialRegistry; + +pub struct TerminalRenderer { + width: usize, + height: usize, + prev_frame: Vec<(char, (u8, u8, u8), (u8, u8, u8))>, + initialized: bool, +} + +impl TerminalRenderer { + pub fn new() -> Self { + Self { + width: 80, + height: 25, + prev_frame: Vec::new(), + initialized: false, + } + } + + fn detect_size(&mut self) -> io::Result<()> { + let (w, h) = term_size().unwrap_or((80, 25)); + self.width = (w as usize).min(120).max(40); + self.height = (h as usize).min(50).max(15); + Ok(()) + } + + fn empty_cell() -> (char, (u8, u8, u8), (u8, u8, u8)) { + (' ', (0, 0, 0), (10, 10, 15)) + } +} + +impl Renderer for TerminalRenderer { + fn init(&mut self) -> io::Result<()> { + self.detect_size()?; + let total = self.width * self.height; + self.prev_frame = vec![Self::empty_cell(); total]; + + terminal::enable_raw_mode().map_err(|e| io::Error::other(e))?; + execute!( + stdout(), + EnterAlternateScreen, + Hide, + EnableMouseCapture, + Clear(ClearType::All), + )?; + + self.initialized = true; + Ok(()) + } + + fn render(&mut self, grid: &Grid, entities: &EntityManager, cam_x: i32, cam_y: i32) -> io::Result<()> { + if !self.initialized { + return Ok(()); + } + + let reg = MaterialRegistry::instance(); + let mut out = stdout(); + let mut frame: Vec<(char, (u8, u8, u8), (u8, u8, u8))>; + let total = self.width * self.height; + frame = vec![Self::empty_cell(); total]; + + for dy in 0..self.height { + for dx in 0..self.width { + let wx = cam_x + dx as i32; + let wy = cam_y + dy as i32; + if !grid.in_bounds(wx, wy) { + let idx = dy * self.width + dx; + frame[idx] = ('?', (80, 80, 80), (10, 10, 15)); + continue; + } + let cell = grid.get(wx, wy); + let mat = reg.get(cell.material); + let idx = dy * self.width + dx; + if cell.is_empty() { + frame[idx] = (' ', mat.color_fg, mat.color_bg); + } else { + let ch = if cell.material == MaterialId::Lava { + if cell.variant % 2 == 0 { '#' } else { '#' } + } else if cell.material == MaterialId::Water { + if cell.variant % 3 == 0 { '~' } else { '~' } + } else { + mat.display_char + }; + let fg = if cell.material == MaterialId::Lava { + let flicker = cell.variant as u8; + let r = 255u8.min(200 + flicker / 2); + (r, 60, 20) + } else { + mat.color_fg + }; + frame[idx] = (ch, fg, mat.color_bg); + } + } + } + + for e in entities.all() { + for b in &e.bodies { + if !b.alive { + continue; + } + let sx = b.x as i32 - cam_x; + let sy = b.y as i32 - cam_y; + if sx >= 0 && sx < self.width as i32 && sy >= 0 && sy < self.height as i32 { + let idx = sy as usize * self.width + sx as usize; + let ch = match e.kind { + crate::entity::EntityKind::Player if e.alive => '@', + crate::entity::EntityKind::Goblin if e.alive => 'g', + _ => '%', + }; + let fg = if e.on_fire { + (255, 160, 40) + } else if !e.alive { + (100, 60, 60) + } else { + match e.kind { + crate::entity::EntityKind::Player => (255, 255, 100), + crate::entity::EntityKind::Goblin => (100, 220, 100), + _ => (180, 50, 50), + } + }; + frame[idx] = (ch, fg, (20, 10, 10)); + } + } + } + + let mut prev_color: Option<(Color, Color)> = None; + for i in 0..total { + if frame[i] == self.prev_frame[i] { + continue; + } + let dx = i % self.width; + let dy = i / self.width; + let (ch, fg, bg) = frame[i]; + + queue!(out, MoveTo(dx as u16, dy as u16))?; + + let new_fg = Color::Rgb { r: fg.0, g: fg.1, b: fg.2 }; + let new_bg = Color::Rgb { r: bg.0, g: bg.1, b: bg.2 }; + if prev_color != Some((new_fg, new_bg)) { + queue!(out, SetForegroundColor(new_fg), SetBackgroundColor(new_bg))?; + prev_color = Some((new_fg, new_bg)); + } + queue!(out, Print(ch))?; + } + + out.flush()?; + self.prev_frame = frame; + Ok(()) + } + + fn shutdown(&mut self) -> io::Result<()> { + if !self.initialized { + return Ok(()); + } + execute!( + stdout(), + ResetColor, + Show, + LeaveAlternateScreen, + DisableMouseCapture, + )?; + terminal::disable_raw_mode().map_err(|e| io::Error::other(e))?; + self.initialized = false; + Ok(()) + } + + fn viewport_w(&self) -> usize { + self.width + } + + fn viewport_h(&self) -> usize { + self.height + } +} + +impl Drop for TerminalRenderer { + fn drop(&mut self) { + let _ = self.shutdown(); + } +} diff --git a/src/world/cell.rs b/src/world/cell.rs new file mode 100644 index 0000000..033e882 --- /dev/null +++ b/src/world/cell.rs @@ -0,0 +1,138 @@ +use crate::world::material::MaterialRegistry; + +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +#[repr(u8)] +pub enum MaterialId { + Empty = 0, + Sand = 1, + Water = 2, + Stone = 3, + Lava = 4, + Wood = 5, + Flesh = 6, + Bone = 7, + Steam = 8, + Fire = 9, + Acid = 10, + Smoke = 11, + Grass = 12, + Dirt = 13, +} + +impl MaterialId { + pub const ALL: [MaterialId; 14] = [ + MaterialId::Empty, + MaterialId::Sand, + MaterialId::Water, + MaterialId::Stone, + MaterialId::Lava, + MaterialId::Wood, + MaterialId::Flesh, + MaterialId::Bone, + MaterialId::Steam, + MaterialId::Fire, + MaterialId::Acid, + MaterialId::Smoke, + MaterialId::Grass, + MaterialId::Dirt, + ]; + + pub fn from_u8(v: u8) -> Self { + unsafe { std::mem::transmute(v) } + } + + pub fn display_char(self) -> char { + match self { + MaterialId::Empty => ' ', + MaterialId::Sand => '.', + MaterialId::Water => '~', + MaterialId::Stone => '#', + MaterialId::Lava => '#', + MaterialId::Wood => 'T', + MaterialId::Flesh => '%', + MaterialId::Bone => '`', + MaterialId::Steam => '~', + MaterialId::Fire => '^', + MaterialId::Acid => '~', + MaterialId::Smoke => '*', + MaterialId::Grass => '"', + MaterialId::Dirt => ':', + } + } +} + +#[derive(Clone, Copy, Debug)] +pub struct Cell { + pub material: MaterialId, + pub temp: f32, + pub updated_this_tick: bool, + pub variant: u8, +} + +impl Cell { + pub fn empty() -> Self { + Self { + material: MaterialId::Empty, + temp: 20.0, + updated_this_tick: false, + variant: 0, + } + } + + pub fn new(material: MaterialId) -> Self { + let temp = match material { + MaterialId::Lava => 1200.0, + MaterialId::Fire => 800.0, + MaterialId::Steam => 150.0, + MaterialId::Smoke => 120.0, + _ => 20.0, + }; + Self { + material, + temp, + updated_this_tick: false, + variant: rand_u8(), + } + } + + pub fn is_empty(self) -> bool { + self.material == MaterialId::Empty + } + + pub fn is_solid(self) -> bool { + let reg = MaterialRegistry::instance(); + reg.get(self.material).solid + } + + pub fn is_liquid(self) -> bool { + let reg = MaterialRegistry::instance(); + reg.get(self.material).liquid + } + + pub fn is_gas(self) -> bool { + let reg = MaterialRegistry::instance(); + reg.get(self.material).gas + } + + pub fn is_static(self) -> bool { + let reg = MaterialRegistry::instance(); + reg.get(self.material).static_ + } + + pub fn density(self) -> f32 { + let reg = MaterialRegistry::instance(); + reg.get(self.material).density + } + + pub fn display_char(self) -> char { + self.material.display_char() + } +} + +fn rand_u8() -> u8 { + static mut COUNTER: u8 = 0; + unsafe { + COUNTER = COUNTER.wrapping_add(7); + COUNTER + } +} diff --git a/src/world/cellular.rs b/src/world/cellular.rs new file mode 100644 index 0000000..4c18d1a --- /dev/null +++ b/src/world/cellular.rs @@ -0,0 +1,454 @@ +use crate::world::cell::{Cell, MaterialId}; +use crate::world::grid::Grid; +use crate::world::material::MaterialRegistry; + +pub struct CellularAutomaton { + tick: u64, + rng_state: u64, +} + +impl CellularAutomaton { + pub fn new() -> Self { + Self { + tick: 0, + rng_state: 0x1234567890ABCDEF, + } + } + + #[inline] + fn rand(&mut self) -> u32 { + self.rng_state ^= self.rng_state << 13; + self.rng_state ^= self.rng_state >> 7; + self.rng_state ^= self.rng_state << 17; + (self.rng_state & 0xFFFFFFFF) as u32 + } + + #[inline] + fn rand_bool(&mut self) -> bool { + self.rand() & 1 == 1 + } + + pub fn step(&mut self, grid: &mut Grid) { + grid.reset_tick_flags(); + let flip = self.rand_bool(); + let h = grid.height; + let w = grid.width; + + for y_idx in (0..h).rev() { + let y = y_idx as i32; + let xs: Vec = if flip { + (0..w as i32).collect() + } else { + (0..w as i32).rev().collect() + }; + + for x in xs { + let cell = grid.get(x, y); + if cell.updated_this_tick || cell.is_empty() || cell.is_static() { + continue; + } + match cell.material { + MaterialId::Sand => self.update_sand(grid, x, y), + MaterialId::Water => self.update_water(grid, x, y), + MaterialId::Lava => self.update_lava(grid, x, y), + MaterialId::Steam => self.update_steam(grid, x, y), + MaterialId::Fire => self.update_fire(grid, x, y), + MaterialId::Smoke => self.update_smoke(grid, x, y), + MaterialId::Acid => self.update_acid(grid, x, y), + MaterialId::Flesh => self.update_flesh(grid, x, y), + MaterialId::Grass => self.update_grass(grid, x, y), + MaterialId::Dirt => self.update_dirt(grid, x, y), + _ => {} + } + } + } + + self.heat_transfer(grid); + self.tick += 1; + } + + fn try_move_down(&mut self, grid: &mut Grid, x: i32, y: i32, _mat: MaterialId, density: f32) { + let below = grid.get(x, y + 1); + if below.is_empty() || (below.is_liquid() && below.density() < density) { + let src = grid.get(x, y); + let i_dst = grid.idx(x, y + 1); + let i_src = grid.idx(x, y); + grid.cells[i_dst] = src; + grid.cells[i_dst].updated_this_tick = true; + grid.cells[i_src] = Cell::empty(); + return; + } + + let dir = if self.rand_bool() { 1 } else { -1 }; + let dl = grid.get(x - dir, y + 1); + let dr = grid.get(x + dir, y + 1); + + let can_left = grid.in_bounds(x - dir, y + 1) + && (dl.is_empty() || (dl.is_liquid() && dl.density() < density)); + let can_right = grid.in_bounds(x + dir, y + 1) + && (dr.is_empty() || (dr.is_liquid() && dr.density() < density)); + + if can_left && can_right { + if self.rand_bool() { + self.do_swap(grid, x, y, x - dir, y + 1); + } else { + self.do_swap(grid, x, y, x + dir, y + 1); + } + } else if can_left { + self.do_swap(grid, x, y, x - dir, y + 1); + } else if can_right { + self.do_swap(grid, x, y, x + dir, y + 1); + } + } + + #[inline] + fn do_swap(&self, grid: &mut Grid, x1: i32, y1: i32, x2: i32, y2: i32) { + let a = grid.get(x1, y1); + let b = grid.get(x2, y2); + let i1 = grid.idx(x1, y1); + let i2 = grid.idx(x2, y2); + grid.cells[i1] = b; + grid.cells[i2] = a; + grid.cells[i2].updated_this_tick = true; + } + + fn update_sand(&mut self, grid: &mut Grid, x: i32, y: i32) { + self.try_move_down(grid, x, y, MaterialId::Sand, 1.5); + } + + fn update_water(&mut self, grid: &mut Grid, x: i32, y: i32) { + let below = grid.get(x, y + 1); + if below.is_empty() || (below.is_liquid() && below.density() < 1.0) { + self.do_swap(grid, x, y, x, y + 1); + return; + } + + let dir = if self.rand_bool() { 1 } else { -1 }; + let dl = grid.get(x - dir, y + 1); + let dr = grid.get(x + dir, y + 1); + + let can_dl = grid.in_bounds(x - dir, y + 1) + && (dl.is_empty() || (dl.is_liquid() && dl.density() < 1.0)); + let can_dr = grid.in_bounds(x + dir, y + 1) + && (dr.is_empty() || (dr.is_liquid() && dr.density() < 1.0)); + + if can_dl && can_dr { + if self.rand_bool() { + self.do_swap(grid, x, y, x - dir, y + 1); + } else { + self.do_swap(grid, x, y, x + dir, y + 1); + } + } else if can_dl { + self.do_swap(grid, x, y, x - dir, y + 1); + } else if can_dr { + self.do_swap(grid, x, y, x + dir, y + 1); + } else { + let can_l = grid.in_bounds(x - dir, y) && grid.get(x - dir, y).is_empty(); + let can_r = grid.in_bounds(x + dir, y) && grid.get(x + dir, y).is_empty(); + if can_l && can_r { + if self.rand_bool() { + self.do_swap(grid, x, y, x - dir, y); + } else { + self.do_swap(grid, x, y, x + dir, y); + } + } else if can_l { + self.do_swap(grid, x, y, x - dir, y); + } else if can_r { + self.do_swap(grid, x, y, x + dir, y); + } + } + + let cell = grid.get(x, y); + if cell.temp > 100.0 { + let mut new = cell; + new.material = MaterialId::Steam; + new.temp = 110.0; + let i = grid.idx(x, y); + grid.cells[i] = new; + } + } + + fn update_lava(&mut self, grid: &mut Grid, x: i32, y: i32) { + let cell = grid.get(x, y); + if cell.temp < 800.0 { + let mut new = cell; + new.material = MaterialId::Stone; + let i = grid.idx(x, y); + grid.cells[i] = new; + return; + } + + let below = grid.get(x, y + 1); + if below.is_empty() { + self.do_swap(grid, x, y, x, y + 1); + return; + } + + let dir = if self.rand_bool() { 1 } else { -1 }; + if grid.in_bounds(x - dir, y + 1) && grid.get(x - dir, y + 1).is_empty() { + self.do_swap(grid, x, y, x - dir, y + 1); + return; + } + if grid.in_bounds(x + dir, y + 1) && grid.get(x + dir, y + 1).is_empty() { + self.do_swap(grid, x, y, x + dir, y + 1); + return; + } + + if self.rand() % 10 == 0 { + if grid.in_bounds(x - dir, y) && grid.get(x - dir, y).is_empty() { + self.do_swap(grid, x, y, x - dir, y); + } else if grid.in_bounds(x + dir, y) && grid.get(x + dir, y).is_empty() { + self.do_swap(grid, x, y, x + dir, y); + } + } + + self.lava_interact(grid, x, y); + } + + fn lava_interact(&mut self, grid: &mut Grid, x: i32, y: i32) { + for &(dx, dy) in &NEIGHBORS4 { + let nx = x + dx; + let ny = y + dy; + if !grid.in_bounds(nx, ny) { + continue; + } + let neighbor = grid.get(nx, ny); + match neighbor.material { + MaterialId::Water => { + let i_n = grid.idx(nx, ny); + grid.cells[i_n] = Cell::new(MaterialId::Steam); + let lava = grid.get(x, y); + let mut new_lava = lava; + new_lava.temp -= 50.0; + let i_l = grid.idx(x, y); + grid.cells[i_l] = new_lava; + } + MaterialId::Wood | MaterialId::Grass | MaterialId::Flesh if neighbor.temp < 300.0 => { + let i_n = grid.idx(nx, ny); + grid.cells[i_n] = Cell::new(MaterialId::Fire); + } + MaterialId::Sand if neighbor.temp > 1700.0 => { + let i_n = grid.idx(nx, ny); + grid.cells[i_n] = Cell::new(MaterialId::Stone); + } + _ => {} + } + } + } + + fn update_steam(&mut self, grid: &mut Grid, x: i32, y: i32) { + let cell = grid.get(x, y); + if cell.temp < 80.0 { + let mut new = cell; + new.material = MaterialId::Water; + new.temp = 50.0; + let i = grid.idx(x, y); + grid.cells[i] = new; + return; + } + + if y > 0 && grid.get(x, y - 1).is_empty() { + self.do_swap(grid, x, y, x, y - 1); + return; + } + + let dir = if self.rand_bool() { 1 } else { -1 }; + if grid.in_bounds(x - dir, y - 1) && grid.get(x - dir, y - 1).is_empty() { + self.do_swap(grid, x, y, x - dir, y - 1); + return; + } + if grid.in_bounds(x + dir, y - 1) && grid.get(x + dir, y - 1).is_empty() { + self.do_swap(grid, x, y, x + dir, y - 1); + return; + } + + if self.rand() % 3 == 0 { + if grid.in_bounds(x - dir, y) && grid.get(x - dir, y).is_empty() { + self.do_swap(grid, x, y, x - dir, y); + } else if grid.in_bounds(x + dir, y) && grid.get(x + dir, y).is_empty() { + self.do_swap(grid, x, y, x + dir, y); + } + } + } + + fn update_fire(&mut self, grid: &mut Grid, x: i32, y: i32) { + let cell = grid.get(x, y); + if cell.temp < 100.0 || self.rand() % 20 == 0 { + let i = grid.idx(x, y); + if self.rand() % 3 == 0 { + grid.cells[i] = Cell::new(MaterialId::Smoke); + } else { + grid.cells[i] = Cell::empty(); + } + return; + } + + let mut new = cell; + new.temp -= 15.0; + let i = grid.idx(x, y); + grid.cells[i] = new; + + if y > 0 && grid.get(x, y - 1).is_empty() && self.rand() % 2 == 0 { + self.do_swap(grid, x, y, x, y - 1); + } + + for &(dx, dy) in &NEIGHBORS4 { + let nx = x + dx; + let ny = y + dy; + if !grid.in_bounds(nx, ny) { + continue; + } + let neighbor = grid.get(nx, ny); + let reg = crate::world::material::MaterialRegistry::instance(); + let mat = reg.get(neighbor.material); + if mat.flammable && neighbor.temp < mat.ignition_temp { + let mut new_n = neighbor; + new_n.material = MaterialId::Fire; + new_n.temp = 400.0; + let i_n = grid.idx(nx, ny); + grid.cells[i_n] = new_n; + } + } + } + + fn update_smoke(&mut self, grid: &mut Grid, x: i32, y: i32) { + if self.rand() % 60 == 0 { + let i = grid.idx(x, y); + grid.cells[i] = Cell::empty(); + return; + } + + if y > 0 && grid.get(x, y - 1).is_empty() { + self.do_swap(grid, x, y, x, y - 1); + return; + } + + let dir = if self.rand_bool() { 1 } else { -1 }; + if grid.in_bounds(x - dir, y - 1) && grid.get(x - dir, y - 1).is_empty() { + self.do_swap(grid, x, y, x - dir, y - 1); + } else if grid.in_bounds(x + dir, y - 1) && grid.get(x + dir, y - 1).is_empty() { + self.do_swap(grid, x, y, x + dir, y - 1); + } else if grid.in_bounds(x - dir, y) && grid.get(x - dir, y).is_empty() { + self.do_swap(grid, x, y, x - dir, y); + } else if grid.in_bounds(x + dir, y) && grid.get(x + dir, y).is_empty() { + self.do_swap(grid, x, y, x + dir, y); + } + } + + fn update_acid(&mut self, grid: &mut Grid, x: i32, y: i32) { + for &(dx, dy) in &NEIGHBORS4 { + let nx = x + dx; + let ny = y + dy; + if !grid.in_bounds(nx, ny) { + continue; + } + let neighbor = grid.get(nx, ny); + if neighbor.material != MaterialId::Empty + && neighbor.material != MaterialId::Acid + && neighbor.material != MaterialId::Stone + && self.rand() % 4 == 0 + { + let i_n = grid.idx(nx, ny); + grid.cells[i_n] = Cell::empty(); + if self.rand() % 2 == 0 { + let i = grid.idx(x, y); + grid.cells[i] = Cell::empty(); + return; + } + } + } + + let below = grid.get(x, y + 1); + if below.is_empty() || (below.is_liquid() && below.density() < 1.2) { + self.do_swap(grid, x, y, x, y + 1); + return; + } + + let dir = if self.rand_bool() { 1 } else { -1 }; + if grid.in_bounds(x - dir, y + 1) && grid.get(x - dir, y + 1).is_empty() { + self.do_swap(grid, x, y, x - dir, y + 1); + } else if grid.in_bounds(x + dir, y + 1) && grid.get(x + dir, y + 1).is_empty() { + self.do_swap(grid, x, y, x + dir, y + 1); + } else if grid.in_bounds(x - dir, y) && grid.get(x - dir, y).is_empty() { + self.do_swap(grid, x, y, x - dir, y); + } else if grid.in_bounds(x + dir, y) && grid.get(x + dir, y).is_empty() { + self.do_swap(grid, x, y, x + dir, y); + } + } + + fn update_flesh(&mut self, grid: &mut Grid, x: i32, y: i32) { + let cell = grid.get(x, y); + if cell.temp > 200.0 { + let mut new = cell; + new.material = MaterialId::Fire; + new.temp = 400.0; + let i = grid.idx(x, y); + grid.cells[i] = new; + } + } + + fn update_grass(&mut self, grid: &mut Grid, x: i32, y: i32) { + let cell = grid.get(x, y); + if cell.temp > 250.0 { + let i = grid.idx(x, y); + grid.cells[i] = Cell::new(MaterialId::Fire); + } + } + + fn update_dirt(&mut self, grid: &mut Grid, x: i32, y: i32) { + let cell = grid.get(x, y); + if cell.temp < 0.0 { + let mut new = cell; + new.material = MaterialId::Stone; + let i = grid.idx(x, y); + grid.cells[i] = new; + } + } + + fn heat_transfer(&mut self, grid: &mut Grid) { + let w = grid.width; + let h = grid.height; + let temps: Vec = grid.cells.iter().map(|c| c.temp).collect(); + + for y in 0..h { + for x in 0..w { + let i = y * w + x; + let cell = grid.cells[i]; + if cell.is_empty() || cell.is_static() { + continue; + } + let reg = crate::world::material::MaterialRegistry::instance(); + let mat = reg.get(cell.material); + let k = mat.heat_conductivity; + if k == 0.0 { + continue; + } + + let mut sum = 0.0; + let mut count = 0; + for &(dx, dy) in &NEIGHBORS4 { + let nx = x as i32 + dx; + let ny = y as i32 + dy; + if nx < 0 || nx >= w as i32 || ny < 0 || ny >= h as i32 { + continue; + } + let ni = ny as usize * w + nx as usize; + sum += temps[ni]; + count += 1; + } + if count > 0 { + let avg = sum / count as f32; + let mut new = cell; + new.temp += (avg - cell.temp) * k * 0.5; + grid.cells[i] = new; + } + } + } + } + + pub fn tick_count(&self) -> u64 { + self.tick + } +} + +const NEIGHBORS4: [(i32, i32); 4] = [(0, -1), (0, 1), (-1, 0), (1, 0)]; diff --git a/src/world/grid.rs b/src/world/grid.rs new file mode 100644 index 0000000..cf0cf94 --- /dev/null +++ b/src/world/grid.rs @@ -0,0 +1,122 @@ +use crate::world::cell::{Cell, MaterialId}; + +pub const WORLD_W: usize = 250; +pub const WORLD_H: usize = 250; + +pub struct Grid { + pub cells: Vec, + pub next: Vec, + pub width: usize, + pub height: usize, +} + +impl Grid { + pub fn new() -> Self { + let size = WORLD_W * WORLD_H; + Self { + cells: vec![Cell::empty(); size], + next: vec![Cell::empty(); size], + width: WORLD_W, + height: WORLD_H, + } + } + + #[inline] + pub fn idx(&self, x: i32, y: i32) -> usize { + (y as usize) * self.width + (x as usize) + } + + #[inline] + pub fn in_bounds(&self, x: i32, y: i32) -> bool { + x >= 0 && x < self.width as i32 && y >= 0 && y < self.height as i32 + } + + #[inline] + pub fn get(&self, x: i32, y: i32) -> Cell { + if !self.in_bounds(x, y) { + return Cell::new(MaterialId::Stone); + } + self.cells[self.idx(x, y)] + } + + #[inline] + pub fn get_mut(&mut self, x: i32, y: i32) -> &mut Cell { + let i = self.idx(x, y); + &mut self.cells[i] + } + + #[inline] + pub fn set(&mut self, x: i32, y: i32, cell: Cell) { + if self.in_bounds(x, y) { + let i = self.idx(x, y); + self.cells[i] = cell; + self.next[i] = cell; + } + } + + #[inline] + pub fn set_material(&mut self, x: i32, y: i32, mat: MaterialId) { + if self.in_bounds(x, y) { + let cell = Cell::new(mat); + let i = self.idx(x, y); + self.cells[i] = cell; + self.next[i] = cell; + } + } + + pub fn clear(&mut self) { + for c in &mut self.cells { + *c = Cell::empty(); + } + for c in &mut self.next { + *c = Cell::empty(); + } + } + + pub fn fill_rect(&mut self, x0: i32, y0: i32, w: i32, h: i32, mat: MaterialId) { + for dy in 0..h { + for dx in 0..w { + self.set_material(x0 + dx, y0 + dy, mat); + } + } + } + + pub fn fill_border(&mut self, mat: MaterialId) { + for x in 0..self.width { + self.set_material(x as i32, 0, mat); + self.set_material(x as i32, (self.height - 1) as i32, mat); + } + for y in 0..self.height { + self.set_material(0, y as i32, mat); + self.set_material((self.width - 1) as i32, y as i32, mat); + } + } + + pub fn swap(&mut self) { + std::mem::swap(&mut self.cells, &mut self.next); + } + + pub fn reset_tick_flags(&mut self) { + for c in &mut self.cells { + c.updated_this_tick = false; + } + } + + pub fn dump_region(&self, x0: i32, y0: i32, w: usize, h: usize) -> String { + let mut buf = String::with_capacity(w * h + h); + for dy in 0..h { + for dx in 0..w { + let x = x0 + dx as i32; + let y = y0 + dy as i32; + let ch = if self.in_bounds(x, y) { + self.get(x, y).display_char() + } else { + '?' + }; + buf.push(ch); + } + buf.push('\n'); + } + buf + } +} diff --git a/src/world/material.rs b/src/world/material.rs new file mode 100644 index 0000000..e279d79 --- /dev/null +++ b/src/world/material.rs @@ -0,0 +1,286 @@ +use crate::world::cell::MaterialId; + +#[derive(Clone, Copy, Debug)] +pub struct Material { + pub id: MaterialId, + pub name: &'static str, + pub density: f32, + pub solid: bool, + pub liquid: bool, + pub gas: bool, + pub static_: bool, + pub flammable: bool, + pub ignition_temp: f32, + pub melt_temp: f32, + pub heat_conductivity: f32, + pub color_fg: (u8, u8, u8), + pub color_bg: (u8, u8, u8), + pub display_char: char, +} + +impl Material { + pub const fn empty() -> Self { + Self { + id: MaterialId::Empty, + name: "empty", + density: 0.0, + solid: false, + liquid: false, + gas: false, + static_: true, + flammable: false, + ignition_temp: f32::INFINITY, + melt_temp: f32::INFINITY, + heat_conductivity: 0.0, + color_fg: (0, 0, 0), + color_bg: (0, 0, 0), + display_char: ' ', + } + } +} + +pub struct MaterialRegistry { + materials: [Material; 14], +} + +impl MaterialRegistry { + fn new() -> Self { + Self { + materials: [ + Material { + id: MaterialId::Empty, + name: "empty", + density: 0.0, + solid: false, + liquid: false, + gas: false, + static_: true, + flammable: false, + ignition_temp: f32::INFINITY, + melt_temp: f32::INFINITY, + heat_conductivity: 0.0, + color_fg: (15, 15, 20), + color_bg: (10, 10, 15), + display_char: ' ', + }, + Material { + id: MaterialId::Sand, + name: "sand", + density: 1.5, + solid: true, + liquid: false, + gas: false, + static_: false, + flammable: false, + ignition_temp: f32::INFINITY, + melt_temp: 1700.0, + heat_conductivity: 0.2, + color_fg: (218, 178, 90), + color_bg: (60, 50, 30), + display_char: '.', + }, + Material { + id: MaterialId::Water, + name: "water", + density: 1.0, + solid: false, + liquid: true, + gas: false, + static_: false, + flammable: false, + ignition_temp: f32::INFINITY, + melt_temp: 0.0, + heat_conductivity: 0.4, + color_fg: (64, 128, 220), + color_bg: (20, 40, 80), + display_char: '~', + }, + Material { + id: MaterialId::Stone, + name: "stone", + density: 3.0, + solid: true, + liquid: false, + gas: false, + static_: true, + flammable: false, + ignition_temp: f32::INFINITY, + melt_temp: 1200.0, + heat_conductivity: 0.3, + color_fg: (120, 120, 130), + color_bg: (40, 40, 50), + display_char: '#', + }, + Material { + id: MaterialId::Lava, + name: "lava", + density: 2.5, + solid: false, + liquid: true, + gas: false, + static_: false, + flammable: false, + ignition_temp: f32::INFINITY, + melt_temp: f32::INFINITY, + heat_conductivity: 0.5, + color_fg: (255, 80, 20), + color_bg: (120, 20, 0), + display_char: '#', + }, + Material { + id: MaterialId::Wood, + name: "wood", + density: 0.8, + solid: true, + liquid: false, + gas: false, + static_: true, + flammable: true, + ignition_temp: 300.0, + melt_temp: f32::INFINITY, + heat_conductivity: 0.1, + color_fg: (140, 90, 50), + color_bg: (50, 30, 20), + display_char: 'T', + }, + Material { + id: MaterialId::Flesh, + name: "flesh", + density: 1.06, + solid: true, + liquid: false, + gas: false, + static_: false, + flammable: true, + ignition_temp: 200.0, + melt_temp: f32::INFINITY, + heat_conductivity: 0.15, + color_fg: (180, 50, 50), + color_bg: (60, 15, 15), + display_char: '%', + }, + Material { + id: MaterialId::Bone, + name: "bone", + density: 1.8, + solid: true, + liquid: false, + gas: false, + static_: true, + flammable: false, + ignition_temp: f32::INFINITY, + melt_temp: f32::INFINITY, + heat_conductivity: 0.1, + color_fg: (220, 210, 190), + color_bg: (60, 55, 50), + display_char: '`', + }, + Material { + id: MaterialId::Steam, + name: "steam", + density: 0.3, + solid: false, + liquid: false, + gas: true, + static_: false, + flammable: false, + ignition_temp: f32::INFINITY, + melt_temp: f32::INFINITY, + heat_conductivity: 0.2, + color_fg: (200, 200, 220), + color_bg: (30, 30, 40), + display_char: '~', + }, + Material { + id: MaterialId::Fire, + name: "fire", + density: 0.1, + solid: false, + liquid: false, + gas: true, + static_: false, + flammable: false, + ignition_temp: f32::INFINITY, + melt_temp: f32::INFINITY, + heat_conductivity: 0.6, + color_fg: (255, 160, 40), + color_bg: (100, 30, 0), + display_char: '^', + }, + Material { + id: MaterialId::Acid, + name: "acid", + density: 1.2, + solid: false, + liquid: true, + gas: false, + static_: false, + flammable: false, + ignition_temp: f32::INFINITY, + melt_temp: f32::INFINITY, + heat_conductivity: 0.3, + color_fg: (100, 255, 60), + color_bg: (20, 60, 10), + display_char: '~', + }, + Material { + id: MaterialId::Smoke, + name: "smoke", + density: 0.2, + solid: false, + liquid: false, + gas: true, + static_: false, + flammable: false, + ignition_temp: f32::INFINITY, + melt_temp: f32::INFINITY, + heat_conductivity: 0.1, + color_fg: (100, 100, 100), + color_bg: (20, 20, 20), + display_char: '*', + }, + Material { + id: MaterialId::Grass, + name: "grass", + density: 1.0, + solid: true, + liquid: false, + gas: false, + static_: true, + flammable: true, + ignition_temp: 250.0, + melt_temp: f32::INFINITY, + heat_conductivity: 0.1, + color_fg: (80, 200, 60), + color_bg: (20, 50, 15), + display_char: '"', + }, + Material { + id: MaterialId::Dirt, + name: "dirt", + density: 1.3, + solid: true, + liquid: false, + gas: false, + static_: true, + flammable: false, + ignition_temp: f32::INFINITY, + melt_temp: f32::INFINITY, + heat_conductivity: 0.2, + color_fg: (100, 70, 50), + color_bg: (40, 30, 20), + display_char: ':', + }, + ], + } + } + + pub fn get(&self, id: MaterialId) -> &Material { + &self.materials[id as usize] + } + + pub fn instance() -> &'static MaterialRegistry { + static REGISTRY: std::sync::OnceLock = std::sync::OnceLock::new(); + REGISTRY.get_or_init(MaterialRegistry::new) + } +} diff --git a/src/world/mod.rs b/src/world/mod.rs new file mode 100644 index 0000000..680c6ff --- /dev/null +++ b/src/world/mod.rs @@ -0,0 +1,9 @@ +pub mod cell; +pub mod material; +pub mod grid; +pub mod cellular; + +pub use cell::{Cell, MaterialId}; +pub use material::{Material, MaterialRegistry}; +pub use grid::{Grid, WORLD_W, WORLD_H}; +pub use cellular::CellularAutomaton;