refactor!: begin switching to bevy ECS, all tests broken, all systems broken

This commit is contained in:
2025-08-14 15:06:56 -05:00
parent 2f1ff85d8f
commit bc759f1ed4
23 changed files with 2373 additions and 1414 deletions

View File

@@ -1,12 +1,13 @@
//! Map construction and building functionality.
use crate::constants::{MapTile, BOARD_CELL_SIZE, CELL_SIZE, RAW_BOARD};
use crate::ecs::NodeId;
use crate::entity::direction::Direction;
use crate::entity::graph::{EdgePermissions, Graph, Node, NodeId};
use crate::entity::item::{Item, ItemType};
use crate::entity::graph::{EdgePermissions, Graph, Node};
use crate::map::parser::MapTileParser;
use crate::map::render::MapRenderer;
use crate::texture::sprite::{Sprite, SpriteAtlas};
use bevy_ecs::resource::Resource;
use glam::{IVec2, Vec2};
use sdl2::render::{Canvas, RenderTarget};
use std::collections::{HashMap, VecDeque};
@@ -24,6 +25,7 @@ pub struct NodePositions {
}
/// The main map structure containing the game board and navigation graph.
#[derive(Resource)]
pub struct Map {
/// The node map for entity movement.
pub graph: Graph,
@@ -155,42 +157,42 @@ impl Map {
}
/// Generates Item entities for pellets and energizers from the parsed map.
pub fn generate_items(&self, atlas: &SpriteAtlas) -> GameResult<Vec<Item>> {
// Pre-load sprites to avoid repeated texture lookups
let pellet_sprite = SpriteAtlas::get_tile(atlas, "maze/pellet.png")
.ok_or_else(|| MapError::InvalidConfig("Pellet texture not found".to_string()))?;
let energizer_sprite = SpriteAtlas::get_tile(atlas, "maze/energizer.png")
.ok_or_else(|| MapError::InvalidConfig("Energizer texture not found".to_string()))?;
// pub fn generate_items(&self, atlas: &SpriteAtlas) -> GameResult<Vec<Item>> {
// // Pre-load sprites to avoid repeated texture lookups
// let pellet_sprite = SpriteAtlas::get_tile(atlas, "maze/pellet.png")
// .ok_or_else(|| MapError::InvalidConfig("Pellet texture not found".to_string()))?;
// let energizer_sprite = SpriteAtlas::get_tile(atlas, "maze/energizer.png")
// .ok_or_else(|| MapError::InvalidConfig("Energizer texture not found".to_string()))?;
// Pre-allocate with estimated capacity (typical Pac-Man maps have ~240 pellets + 4 energizers)
let mut items = Vec::with_capacity(250);
// // Pre-allocate with estimated capacity (typical Pac-Man maps have ~240 pellets + 4 energizers)
// let mut items = Vec::with_capacity(250);
// Parse the raw board once
let parsed_map = MapTileParser::parse_board(RAW_BOARD)?;
let map = parsed_map.tiles;
// // Parse the raw board once
// let parsed_map = MapTileParser::parse_board(RAW_BOARD)?;
// let map = parsed_map.tiles;
// Iterate through the map and collect items more efficiently
for (x, row) in map.iter().enumerate() {
for (y, tile) in row.iter().enumerate() {
match tile {
MapTile::Pellet | MapTile::PowerPellet => {
let grid_pos = IVec2::new(x as i32, y as i32);
if let Some(&node_id) = self.grid_to_node.get(&grid_pos) {
let (item_type, sprite) = match tile {
MapTile::Pellet => (ItemType::Pellet, Sprite::new(pellet_sprite)),
MapTile::PowerPellet => (ItemType::Energizer, Sprite::new(energizer_sprite)),
_ => unreachable!(), // We already filtered for these types
};
items.push(Item::new(node_id, item_type, sprite));
}
}
_ => {}
}
}
}
// // Iterate through the map and collect items more efficiently
// for (x, row) in map.iter().enumerate() {
// for (y, tile) in row.iter().enumerate() {
// match tile {
// MapTile::Pellet | MapTile::PowerPellet => {
// let grid_pos = IVec2::new(x as i32, y as i32);
// if let Some(&node_id) = self.grid_to_node.get(&grid_pos) {
// let (item_type, sprite) = match tile {
// MapTile::Pellet => (ItemType::Pellet, Sprite::new(pellet_sprite)),
// MapTile::PowerPellet => (ItemType::Energizer, Sprite::new(energizer_sprite)),
// _ => unreachable!(), // We already filtered for these types
// };
// items.push(Item::new(node_id, item_type, sprite));
// }
// }
// _ => {}
// }
// }
// }
Ok(items)
}
// Ok(items)
// }
/// Renders a debug visualization with cursor-based highlighting.
///