Add quaterdirection and fix multistation off by one errors
This commit is contained in:
parent
1af9712bcb
commit
c3bb980fcf
5 changed files with 137 additions and 47 deletions
|
|
@ -5,6 +5,7 @@ pub mod color;
|
|||
pub mod direction;
|
||||
pub mod pathfield;
|
||||
pub mod position;
|
||||
pub mod quaterdirection;
|
||||
pub mod transformation;
|
||||
pub mod visualize;
|
||||
|
||||
|
|
@ -14,6 +15,7 @@ pub mod prelude {
|
|||
block::Block,
|
||||
direction::Direction,
|
||||
position::{Position, PositionType},
|
||||
quaterdirection::QuaterDirection,
|
||||
transformation::{Transformable, Transformation},
|
||||
};
|
||||
}
|
||||
|
|
|
|||
78
factorio-core/src/quaterdirection.rs
Normal file
78
factorio-core/src/quaterdirection.rs
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
use crate::prelude::{Transformable, Transformation};
|
||||
|
||||
#[derive(Clone, Copy, PartialEq, Eq, Debug, Hash)]
|
||||
pub enum QuaterDirection {
|
||||
N,
|
||||
NNE,
|
||||
NE,
|
||||
ENE,
|
||||
E,
|
||||
ESE,
|
||||
SE,
|
||||
SSE,
|
||||
S,
|
||||
SSW,
|
||||
SW,
|
||||
WSW,
|
||||
W,
|
||||
WNW,
|
||||
NW,
|
||||
NNW,
|
||||
}
|
||||
|
||||
impl QuaterDirection {
|
||||
pub fn to_int_direction(&self) -> u8 {
|
||||
match self {
|
||||
QuaterDirection::N => 0,
|
||||
QuaterDirection::NNE => 1,
|
||||
QuaterDirection::NE => 2,
|
||||
QuaterDirection::ENE => 3,
|
||||
QuaterDirection::E => 4,
|
||||
QuaterDirection::ESE => 5,
|
||||
QuaterDirection::SE => 6,
|
||||
QuaterDirection::SSE => 7,
|
||||
QuaterDirection::S => 8,
|
||||
QuaterDirection::SSW => 9,
|
||||
QuaterDirection::SW => 10,
|
||||
QuaterDirection::WSW => 11,
|
||||
QuaterDirection::W => 12,
|
||||
QuaterDirection::WNW => 13,
|
||||
QuaterDirection::NW => 14,
|
||||
QuaterDirection::NNW => 15,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn from_int_direction(x: u8) -> Self {
|
||||
match x {
|
||||
0 => QuaterDirection::N,
|
||||
1 => QuaterDirection::NNE,
|
||||
2 => QuaterDirection::NE,
|
||||
3 => QuaterDirection::ENE,
|
||||
4 => QuaterDirection::E,
|
||||
5 => QuaterDirection::ESE,
|
||||
6 => QuaterDirection::SE,
|
||||
7 => QuaterDirection::SSE,
|
||||
8 => QuaterDirection::S,
|
||||
9 => QuaterDirection::SSW,
|
||||
10 => QuaterDirection::SW,
|
||||
11 => QuaterDirection::WSW,
|
||||
12 => QuaterDirection::W,
|
||||
13 => QuaterDirection::WNW,
|
||||
14 => QuaterDirection::NW,
|
||||
15 => QuaterDirection::NNW,
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Transformable for QuaterDirection {
|
||||
fn transform(&self, t: Transformation) -> Self {
|
||||
Self::from_int_direction((self.to_int_direction() + 4 * t.rot().get_index()) % 16)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<u8> for QuaterDirection {
|
||||
fn from(value: u8) -> Self {
|
||||
Self::from_int_direction(value)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue