From d57f986117dc73ed8818da55c6e0bf9c171fb0e9 Mon Sep 17 00:00:00 2001 From: Mikhail Mitrofanov Date: Sun, 28 Jun 2026 13:57:55 +0300 Subject: [PATCH] Change inner hex table code --- src/hex_table.rs | 67 +++++++++++++++++++++++++++----------- src/main.rs | 6 ++-- src/plate_automation.rs | 2 +- src/seed_automation.rs | 2 +- src/subplate_automation.rs | 6 ++-- src/{basic.rs => table.rs} | 0 6 files changed, 56 insertions(+), 27 deletions(-) rename src/{basic.rs => table.rs} (100%) diff --git a/src/hex_table.rs b/src/hex_table.rs index 8c58441..ba0be36 100644 --- a/src/hex_table.rs +++ b/src/hex_table.rs @@ -1,12 +1,23 @@ -pub struct HexTable { - len: usize, - scale: f32, +pub struct HexTable { + default: T, + pub(crate) data: Vec, + pub(crate) len: usize, + pub(crate) scale: f32, + pub(crate) dimensions: (usize, usize), } const VERTICAL_OFFSET: f32 = 0.866025; -impl HexTable { - pub fn new(len: usize, scale: f32) -> Self { - Self { len, scale } +impl HexTable { + pub fn new(len: usize, default: T, scale: f32) -> Self { + let rows = len - 1; + let columns = (len as f32 / VERTICAL_OFFSET) as usize; + Self { + default: default.clone(), + len, + scale, + data: vec![default; rows * columns], + dimensions: (rows, columns), + } } pub fn calculate(&self) -> Vec<(f32, f32)> { @@ -30,25 +41,43 @@ impl HexTable { vec } - pub fn around(&self, x: f32, y: f32) -> Vec<(f32, f32)> { - let around = vec![ - (x + self.scale, y), - (x - self.scale, y), - (x + 0.5 * self.scale, y + VERTICAL_OFFSET * self.scale), - (x - 0.5 * self.scale, y + VERTICAL_OFFSET * self.scale), - (x + 0.5 * self.scale, y - VERTICAL_OFFSET * self.scale), - (x - 0.5 * self.scale, y - VERTICAL_OFFSET * self.scale), + pub fn around(&self, x: usize, y: usize) -> Vec<&T> { + let x = x as isize; + let y = y as isize; + let around : Vec<(isize, isize)> = vec![ + (x, y + 1), + (x + 1, y + 1), + (x, y - 1), + (x + 1, y - 1), + (x - 1, y), + (x + 1, y), ]; around .iter() .filter(|(x, y)| { - *x >= 0.0 - && *x < self.scale * self.len as f32 - && *y >= 0.0 - && *y < self.scale * self.len as f32 + *x >= 0 + && *x <= self.dimensions.0 as isize + && *y >= 0 + && *y < self.dimensions.1 as isize }) - .map(|(x, y)| (*x, *y)) + .map(|(x, y)| self.get_dim(*x as usize, *y as usize)) .collect() } + + pub fn get(&self, index: usize) -> &T { + &self.data[index] + } + + pub fn get_dim(&self, x: usize, y: usize) -> &T { + self.get(x + y * self.dimensions.0) + } + + pub fn set(&mut self, index: usize, value: T) { + self.data[index] = value; + } + + pub fn set_dim(&mut self, x: usize, y: usize, value: T) { + self.set(x + y * self.dimensions.0, value); + } } diff --git a/src/main.rs b/src/main.rs index 915072d..80dfe2a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,10 +1,10 @@ -mod basic; +mod table; mod seed_automation; mod plate_automation; mod subplate_automation; mod hex_table; -use crate::basic::{IntoImage, Table}; +use crate::table::{IntoImage, Table}; use bevy::asset::io::embedded::GetAssetServer; use bevy::image::TextureFormatPixelInfo; use bevy::input::keyboard::keyboard_input_system; @@ -84,7 +84,7 @@ struct SeededRng(ChaCha8Rng); #[cfg(test)] mod tests { - use crate::basic::Table; + use crate::table::Table; #[test] fn around_1(){ diff --git a/src/plate_automation.rs b/src/plate_automation.rs index a2b798b..d03011e 100644 --- a/src/plate_automation.rs +++ b/src/plate_automation.rs @@ -1,7 +1,7 @@ use rayon::iter::IndexedParallelIterator; use std::time::Instant; use crate::SeededRng; -use crate::basic::{IntoImage, Table}; +use crate::table::{IntoImage, Table}; use bevy::asset::{Assets, RenderAssetUsages}; use bevy::image::{BevyDefault, Image}; use bevy::input::ButtonInput; diff --git a/src/seed_automation.rs b/src/seed_automation.rs index b80d3ae..fc31656 100644 --- a/src/seed_automation.rs +++ b/src/seed_automation.rs @@ -1,5 +1,5 @@ use crate::SeededRng; -use crate::basic::{IntoImage, Table}; +use crate::table::{IntoImage, Table}; use bevy::asset::{Assets, RenderAssetUsages}; use bevy::image::{BevyDefault, Image}; use bevy::input::ButtonInput; diff --git a/src/subplate_automation.rs b/src/subplate_automation.rs index 9d67a45..4a7bea7 100644 --- a/src/subplate_automation.rs +++ b/src/subplate_automation.rs @@ -1,4 +1,4 @@ -use crate::basic::{IntoImage, Table}; +use crate::table::{IntoImage, Table}; use crate::hex_table::HexTable; use crate::SeededRng; use bevy::asset::{Assets, RenderAssetUsages}; @@ -196,7 +196,7 @@ pub fn setup_hex_matrix( let resolution = automation.world.side / 4; - let generator = HexTable::new(resolution, 4.0); + let generator = HexTable::new(resolution, true, 4.0); let mut table = Table::new(false, automation.world.side); generator.calculate().iter().for_each(|(x, y)| { let x = *x as usize; @@ -281,5 +281,5 @@ pub struct HexMatrixView; #[derive(Component)] pub struct HexMatrixBuild{ points: Table, - hex_matrix: HexTable + hex_matrix: HexTable } \ No newline at end of file diff --git a/src/basic.rs b/src/table.rs similarity index 100% rename from src/basic.rs rename to src/table.rs