pub struct HexLayout {
pub orientation: HexOrientation,
pub origin: Vec2,
pub hex_size: Vec2,
pub invert_x: bool,
pub invert_y: bool,
}
Expand description
Hexagonal layout. This type is the bridge between your world/pixel coordinate system and the hexagonal coordinate system.
§Axis
By default, the Hex
y
axis is pointing down and the x
axis is
pointing right but you have the option to invert them using invert_x
and
invert_y
This may be useful depending on the coordinate system of your
display.
§Example
let layout = HexLayout {
// We want flat topped hexagons
orientation: HexOrientation::Flat,
// We define the world space origin equivalent of `Hex::ZERO` in hex space
origin: Vec2::new(1.0, 2.0),
// We define the world space size of the hexagons
hex_size: Vec2::new(1.0, 1.0),
// We invert the y axis
invert_y: true,
// But not the x axis
invert_x: false,
};
// You can now find the world positon (center) of any given hexagon
let world_pos = layout.hex_to_world_pos(Hex::ZERO);
// You can also find which hexagon is at a given world/screen position
let hex_pos = layout.world_pos_to_hex(Vec2::new(1.23, 45.678));
Fields§
§orientation: HexOrientation
The hexagonal orientation of the layout (usually “flat” or “pointy”)
origin: Vec2
The origin of the hexagonal representation in world/pixel space, usually
Vec2::ZERO
hex_size: Vec2
The size of individual hexagons in world/pixel space. The size can be irregular
invert_x: bool
If set to true
, the Hex
x
axis will be inverted
invert_y: bool
If set to true
, the Hex
y
axis will be inverted
Implementations§
Source§impl HexLayout
impl HexLayout
Sourcepub fn hex_to_world_pos(&self, hex: Hex) -> Vec2
pub fn hex_to_world_pos(&self, hex: Hex) -> Vec2
Computes hexagonal coordinates hex
into world/pixel coordinates
Sourcepub fn fract_hex_to_world_pos(&self, hex: Vec2) -> Vec2
pub fn fract_hex_to_world_pos(&self, hex: Vec2) -> Vec2
Computes fractional hexagonal coordinates hex
into world/pixel
coordinates
Sourcepub fn world_pos_to_hex(&self, pos: Vec2) -> Hex
pub fn world_pos_to_hex(&self, pos: Vec2) -> Hex
Computes world/pixel coordinates pos
into hexagonal coordinates
Sourcepub fn world_pos_to_fract_hex(&self, pos: Vec2) -> Vec2
pub fn world_pos_to_fract_hex(&self, pos: Vec2) -> Vec2
Computes world/pixel coordinates pos
into fractional hexagonal
coordinates
Sourcepub fn hex_corners(&self, hex: Hex) -> [Vec2; 6]
pub fn hex_corners(&self, hex: Hex) -> [Vec2; 6]
Retrieves all 6 corner coordinates of the given hexagonal coordinates
hex
Source§impl HexLayout
impl HexLayout
Sourcepub fn edge_coordinates(&self, edge: GridEdge) -> [Vec2; 2]
pub fn edge_coordinates(&self, edge: GridEdge) -> [Vec2; 2]
Returns the world coordinate of the two edge vertices in clockwise order
Sourcepub fn all_edge_coordinates(&self, coord: Hex) -> [[Vec2; 2]; 6]
pub fn all_edge_coordinates(&self, coord: Hex) -> [[Vec2; 2]; 6]
Returns the world coordinate of all edge vertex pairs in clockwise order
Sourcepub fn vertex_coordinates(&self, vertex: GridVertex) -> Vec2
pub fn vertex_coordinates(&self, vertex: GridVertex) -> Vec2
Returns the world coordinate of the vertex
Trait Implementations§
Source§impl<'de> Deserialize<'de> for HexLayout
impl<'de> Deserialize<'de> for HexLayout
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<HexLayout, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<HexLayout, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Source§impl Serialize for HexLayout
impl Serialize for HexLayout
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
Auto Trait Implementations§
impl Freeze for HexLayout
impl RefUnwindSafe for HexLayout
impl Send for HexLayout
impl Sync for HexLayout
impl Unpin for HexLayout
impl UnwindSafe for HexLayout
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
Source§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Creates Self
using default()
.
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more