generated from tipragot/rust
Add utils for hexagonal grild #50
7
Cargo.lock
generated
7
Cargo.lock
generated
|
@ -1317,6 +1317,7 @@ dependencies = [
|
||||||
"bevy",
|
"bevy",
|
||||||
"bevy_egui",
|
"bevy_egui",
|
||||||
"num",
|
"num",
|
||||||
|
"partial-min-max",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -3328,6 +3329,12 @@ dependencies = [
|
||||||
"windows-targets 0.48.5",
|
"windows-targets 0.48.5",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "partial-min-max"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6448add382c60bbbc64f9dab41309a12ec530c05191601042f911356ac09758c"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "paste"
|
name = "paste"
|
||||||
version = "1.0.14"
|
version = "1.0.14"
|
||||||
|
|
|
@ -14,3 +14,4 @@ workspace = true
|
||||||
bevy = "0.12.1"
|
bevy = "0.12.1"
|
||||||
bevy_egui = "0.24.0"
|
bevy_egui = "0.24.0"
|
||||||
num = "0.4.1"
|
num = "0.4.1"
|
||||||
|
partial-min-max = "0.4.0"
|
||||||
|
|
|
@ -5,25 +5,10 @@ use std::hash::Hash;
|
||||||
use std::ops;
|
use std::ops;
|
||||||
|
|
||||||
use num::Signed;
|
use num::Signed;
|
||||||
|
use partial_min_max::{max, min};
|
||||||
|
|
||||||
/// Represents a number that can be used in a hexagonal grid.
|
/// Represents a number that can be used in a hexagonal grid.
|
||||||
pub trait HexNumber: Signed + PartialEq + Copy + PartialOrd {
|
pub trait HexNumber: Signed + PartialEq + Copy + PartialOrd {}
|
||||||
/// Returns the minimum value between `self` and `other`.
|
|
||||||
fn min(&self, other: Self) -> Self {
|
|
||||||
if *self < other {
|
|
||||||
return *self;
|
|
||||||
}
|
|
||||||
other
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns the maximum value between `self` and `other`.
|
|
||||||
fn max(&self, other: Self) -> Self {
|
|
||||||
if *self > other {
|
|
||||||
return *self;
|
|
||||||
}
|
|
||||||
other
|
|
||||||
}
|
|
||||||
}
|
|
||||||
impl<T: Signed + PartialEq + Copy + PartialOrd> HexNumber for T {}
|
impl<T: Signed + PartialEq + Copy + PartialOrd> HexNumber for T {}
|
||||||
|
|
||||||
/// Represents a position in a hexagonal grid.
|
/// Represents a position in a hexagonal grid.
|
||||||
|
@ -99,7 +84,7 @@ impl<T: HexNumber + Eq + Hash + std::cmp::PartialOrd + num::ToPrimitive> HexPosi
|
||||||
pub fn range(&self, range: T) -> HashSet<Self> {
|
pub fn range(&self, range: T) -> HashSet<Self> {
|
||||||
let mut result_positions = HashSet::new();
|
let mut result_positions = HashSet::new();
|
||||||
for q in num::range_inclusive(-range, range) {
|
for q in num::range_inclusive(-range, range) {
|
||||||
for r in num::range_inclusive((-range).max(-q - range), range.min(-q + range)) {
|
for r in num::range_inclusive(max(-range, -q - range), min(range, -q + range)) {
|
||||||
result_positions.insert(Self { q, r });
|
result_positions.insert(Self { q, r });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue