pub struct HexagonalMap<T> { /* private fields */ }
Expand description
Vec
Based storage for hexagonal maps.
See this article
HexagonalMap
is made for hexagonal large dense maps, utilizing some
tricks to map Hex
coordinate to a positive 2D array.
It can be used only if:
- The map is an hexagon shape
- The map is dense
- No coordinate will be added or removed from the map
If your use case doesn’t match all of the above, use a HashMap
instead
§Performance agains HashMap
This struct is uses less memory and the larger the map, the faster get
operations are agains a hashmap, approximately 10x faster
But for iterating this storage is less performant than a hashmap approximately 3x slower
Implementations§
Source§impl<T> HexagonalMap<T>
impl<T> HexagonalMap<T>
Sourcepub fn new(center: Hex, radius: u32, values: impl FnMut(Hex) -> T) -> Self
pub fn new(center: Hex, radius: u32, values: impl FnMut(Hex) -> T) -> Self
Creates and fills a hexagon shaped map
§Arguments
center
- The center coordinate of the hexagonradius
- The radius of the map, aroundcenter
values
- Function called for each coordinate in theradius
to fill the map
§Example
let map = HexagonalMap::new(Hex::ZERO, 10, |coord| coord.length());
assert_eq!(map[hex(1, 0)], 1);
Trait Implementations§
Source§impl<T> Clone for HexagonalMap<T>where
T: Clone,
impl<T> Clone for HexagonalMap<T>where
T: Clone,
Source§impl<T> Debug for HexagonalMap<T>where
T: Debug,
impl<T> Debug for HexagonalMap<T>where
T: Debug,
Source§impl<'de, T> Deserialize<'de> for HexagonalMap<T>where
T: Deserialize<'de>,
impl<'de, T> Deserialize<'de> for HexagonalMap<T>where
T: Deserialize<'de>,
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl<T> FromReflect for HexagonalMap<T>where
HexagonalMap<T>: Any + Send + Sync,
T: TypePath,
Vec<Vec<T>>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HexagonalMapMetadata: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl<T> FromReflect for HexagonalMap<T>where
HexagonalMap<T>: Any + Send + Sync,
T: TypePath,
Vec<Vec<T>>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HexagonalMapMetadata: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§fn from_reflect(reflect: &dyn PartialReflect) -> Option<Self>
fn from_reflect(reflect: &dyn PartialReflect) -> Option<Self>
Constructs a concrete instance of
Self
from a reflected value.Source§fn take_from_reflect(
reflect: Box<dyn PartialReflect>,
) -> Result<Self, Box<dyn PartialReflect>>
fn take_from_reflect( reflect: Box<dyn PartialReflect>, ) -> Result<Self, Box<dyn PartialReflect>>
Attempts to downcast the given value to
Self
using,
constructing the value using from_reflect
if that fails. Read moreSource§impl<T> GetTypeRegistration for HexagonalMap<T>where
HexagonalMap<T>: Any + Send + Sync,
T: TypePath,
Vec<Vec<T>>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HexagonalMapMetadata: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl<T> GetTypeRegistration for HexagonalMap<T>where
HexagonalMap<T>: Any + Send + Sync,
T: TypePath,
Vec<Vec<T>>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HexagonalMapMetadata: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§fn get_type_registration() -> TypeRegistration
fn get_type_registration() -> TypeRegistration
Returns the default
TypeRegistration
for this type.Source§fn register_type_dependencies(registry: &mut TypeRegistry)
fn register_type_dependencies(registry: &mut TypeRegistry)
Registers other types needed by this type. Read more
Source§impl<T> HexStore<T> for HexagonalMap<T>
impl<T> HexStore<T> for HexagonalMap<T>
Source§fn get(&self, hex: Hex) -> Option<&T>
fn get(&self, hex: Hex) -> Option<&T>
Returns a reference the stored value associated with
idx
.
Returns None
if idx
is out of boundsSource§fn get_mut(&mut self, hex: Hex) -> Option<&mut T>
fn get_mut(&mut self, hex: Hex) -> Option<&mut T>
Returns a mutable reference the stored value associated with
idx
.
Returns None
if idx
is out of boundsSource§fn values<'s>(&'s self) -> impl ExactSizeIterator<Item = &'s T>where
T: 's,
fn values<'s>(&'s self) -> impl ExactSizeIterator<Item = &'s T>where
T: 's,
An iterator visiting all values in arbitrary order.
The iterator element type is
&'s T
.Source§fn values_mut<'s>(&'s mut self) -> impl ExactSizeIterator<Item = &'s mut T>where
T: 's,
fn values_mut<'s>(&'s mut self) -> impl ExactSizeIterator<Item = &'s mut T>where
T: 's,
An iterator visiting all values mutably in arbitrary order.
The iterator element type is
&'s mut T
.Source§impl<T> Index<&Hex> for HexagonalMap<T>
impl<T> Index<&Hex> for HexagonalMap<T>
Source§impl<T> Index<Hex> for HexagonalMap<T>
impl<T> Index<Hex> for HexagonalMap<T>
Source§impl<T> IndexMut<&Hex> for HexagonalMap<T>
impl<T> IndexMut<&Hex> for HexagonalMap<T>
Source§impl<T> IndexMut<Hex> for HexagonalMap<T>
impl<T> IndexMut<Hex> for HexagonalMap<T>
Source§impl<T> PartialReflect for HexagonalMap<T>where
HexagonalMap<T>: Any + Send + Sync,
T: TypePath,
Vec<Vec<T>>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HexagonalMapMetadata: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl<T> PartialReflect for HexagonalMap<T>where
HexagonalMap<T>: Any + Send + Sync,
T: TypePath,
Vec<Vec<T>>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HexagonalMapMetadata: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
Source§fn try_apply(&mut self, value: &dyn PartialReflect) -> Result<(), ApplyError>
fn try_apply(&mut self, value: &dyn PartialReflect) -> Result<(), ApplyError>
Source§fn reflect_kind(&self) -> ReflectKind
fn reflect_kind(&self) -> ReflectKind
Returns a zero-sized enumeration of “kinds” of type. Read more
Source§fn reflect_ref(&self) -> ReflectRef<'_>
fn reflect_ref(&self) -> ReflectRef<'_>
Returns an immutable enumeration of “kinds” of type. Read more
Source§fn reflect_mut(&mut self) -> ReflectMut<'_>
fn reflect_mut(&mut self) -> ReflectMut<'_>
Returns a mutable enumeration of “kinds” of type. Read more
Source§fn reflect_owned(self: Box<Self>) -> ReflectOwned
fn reflect_owned(self: Box<Self>) -> ReflectOwned
Returns an owned enumeration of “kinds” of type. Read more
Source§fn try_into_reflect(
self: Box<Self>,
) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
fn try_into_reflect( self: Box<Self>, ) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
Attempts to cast this type to a boxed, fully-reflected value.
Source§fn try_as_reflect(&self) -> Option<&dyn Reflect>
fn try_as_reflect(&self) -> Option<&dyn Reflect>
Attempts to cast this type to a fully-reflected value.
Source§fn try_as_reflect_mut(&mut self) -> Option<&mut dyn Reflect>
fn try_as_reflect_mut(&mut self) -> Option<&mut dyn Reflect>
Attempts to cast this type to a mutable, fully-reflected value.
Source§fn into_partial_reflect(self: Box<Self>) -> Box<dyn PartialReflect>
fn into_partial_reflect(self: Box<Self>) -> Box<dyn PartialReflect>
Casts this type to a boxed, reflected value. Read more
Source§fn as_partial_reflect(&self) -> &dyn PartialReflect
fn as_partial_reflect(&self) -> &dyn PartialReflect
Casts this type to a reflected value. Read more
Source§fn as_partial_reflect_mut(&mut self) -> &mut dyn PartialReflect
fn as_partial_reflect_mut(&mut self) -> &mut dyn PartialReflect
Casts this type to a mutable, reflected value. Read more
Source§fn reflect_partial_eq(&self, value: &dyn PartialReflect) -> Option<bool>
fn reflect_partial_eq(&self, value: &dyn PartialReflect) -> Option<bool>
Returns a “partial equality” comparison result. Read more
Source§fn reflect_clone(&self) -> Result<Box<dyn Reflect>, ReflectCloneError>
fn reflect_clone(&self) -> Result<Box<dyn Reflect>, ReflectCloneError>
Attempts to clone
Self
using reflection. Read moreSource§fn apply(&mut self, value: &(dyn PartialReflect + 'static))
fn apply(&mut self, value: &(dyn PartialReflect + 'static))
Applies a reflected value to this value. Read more
Source§fn clone_value(&self) -> Box<dyn PartialReflect>
fn clone_value(&self) -> Box<dyn PartialReflect>
👎Deprecated since 0.16.0: to clone reflected values, prefer using
reflect_clone
. To convert reflected values to dynamic ones, use to_dynamic
.Clones
Self
into its dynamic representation. Read moreSource§fn to_dynamic(&self) -> Box<dyn PartialReflect>
fn to_dynamic(&self) -> Box<dyn PartialReflect>
Source§fn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
Returns a hash of the value (which includes the type). Read more
Source§fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
Debug formatter for the value. Read more
Source§fn is_dynamic(&self) -> bool
fn is_dynamic(&self) -> bool
Indicates whether or not this type is a dynamic type. Read more
Source§impl<T> Reflect for HexagonalMap<T>where
HexagonalMap<T>: Any + Send + Sync,
T: TypePath,
Vec<Vec<T>>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HexagonalMapMetadata: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl<T> Reflect for HexagonalMap<T>where
HexagonalMap<T>: Any + Send + Sync,
T: TypePath,
Vec<Vec<T>>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HexagonalMapMetadata: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§fn as_any_mut(&mut self) -> &mut dyn Any
fn as_any_mut(&mut self) -> &mut dyn Any
Returns the value as a
&mut dyn Any
. Read moreSource§fn into_reflect(self: Box<Self>) -> Box<dyn Reflect>
fn into_reflect(self: Box<Self>) -> Box<dyn Reflect>
Casts this type to a boxed, fully-reflected value.
Source§fn as_reflect(&self) -> &dyn Reflect
fn as_reflect(&self) -> &dyn Reflect
Casts this type to a fully-reflected value.
Source§fn as_reflect_mut(&mut self) -> &mut dyn Reflect
fn as_reflect_mut(&mut self) -> &mut dyn Reflect
Casts this type to a mutable, fully-reflected value.
Source§impl<T> Serialize for HexagonalMap<T>where
T: Serialize,
impl<T> Serialize for HexagonalMap<T>where
T: Serialize,
Source§impl<T> Struct for HexagonalMap<T>where
HexagonalMap<T>: Any + Send + Sync,
T: TypePath,
Vec<Vec<T>>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HexagonalMapMetadata: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl<T> Struct for HexagonalMap<T>where
HexagonalMap<T>: Any + Send + Sync,
T: TypePath,
Vec<Vec<T>>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HexagonalMapMetadata: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§fn field(&self, name: &str) -> Option<&dyn PartialReflect>
fn field(&self, name: &str) -> Option<&dyn PartialReflect>
Returns a reference to the value of the field named
name
as a &dyn PartialReflect
.Source§fn field_mut(&mut self, name: &str) -> Option<&mut dyn PartialReflect>
fn field_mut(&mut self, name: &str) -> Option<&mut dyn PartialReflect>
Returns a mutable reference to the value of the field named
name
as a
&mut dyn PartialReflect
.Source§fn field_at(&self, index: usize) -> Option<&dyn PartialReflect>
fn field_at(&self, index: usize) -> Option<&dyn PartialReflect>
Returns a reference to the value of the field with index
index
as a
&dyn PartialReflect
.Source§fn field_at_mut(&mut self, index: usize) -> Option<&mut dyn PartialReflect>
fn field_at_mut(&mut self, index: usize) -> Option<&mut dyn PartialReflect>
Returns a mutable reference to the value of the field with index
index
as a &mut dyn PartialReflect
.Source§fn name_at(&self, index: usize) -> Option<&str>
fn name_at(&self, index: usize) -> Option<&str>
Returns the name of the field with index
index
.Source§fn iter_fields(&self) -> FieldIter<'_>
fn iter_fields(&self) -> FieldIter<'_>
Returns an iterator over the values of the reflectable fields for this struct.
fn to_dynamic_struct(&self) -> DynamicStruct
Source§fn clone_dynamic(&self) -> DynamicStruct
fn clone_dynamic(&self) -> DynamicStruct
👎Deprecated since 0.16.0: use
to_dynamic_struct
insteadClones the struct into a
DynamicStruct
.Source§fn get_represented_struct_info(&self) -> Option<&'static StructInfo>
fn get_represented_struct_info(&self) -> Option<&'static StructInfo>
Will return
None
if TypeInfo
is not available.Source§impl<T> TypePath for HexagonalMap<T>
impl<T> TypePath for HexagonalMap<T>
Source§fn type_path() -> &'static str
fn type_path() -> &'static str
Returns the fully qualified path of the underlying type. Read more
Source§fn short_type_path() -> &'static str
fn short_type_path() -> &'static str
Returns a short, pretty-print enabled path to the type. Read more
Source§fn type_ident() -> Option<&'static str>
fn type_ident() -> Option<&'static str>
Source§fn crate_name() -> Option<&'static str>
fn crate_name() -> Option<&'static str>
Source§impl<T> Typed for HexagonalMap<T>where
HexagonalMap<T>: Any + Send + Sync,
T: TypePath,
Vec<Vec<T>>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HexagonalMapMetadata: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl<T> Typed for HexagonalMap<T>where
HexagonalMap<T>: Any + Send + Sync,
T: TypePath,
Vec<Vec<T>>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HexagonalMapMetadata: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Auto Trait Implementations§
impl<T> Freeze for HexagonalMap<T>
impl<T> RefUnwindSafe for HexagonalMap<T>where
T: RefUnwindSafe,
impl<T> Send for HexagonalMap<T>where
T: Send,
impl<T> Sync for HexagonalMap<T>where
T: Sync,
impl<T> Unpin for HexagonalMap<T>where
T: Unpin,
impl<T> UnwindSafe for HexagonalMap<T>where
T: UnwindSafe,
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
Mutably borrows from an owned value. Read more
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>
Converts
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
, which can then be
downcast
into Box<dyn 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>
Converts
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
, which 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)
Converts
&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)
Converts
&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> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DynamicTypePath for Twhere
T: TypePath,
impl<T> DynamicTypePath for Twhere
T: TypePath,
Source§fn reflect_type_path(&self) -> &str
fn reflect_type_path(&self) -> &str
See
TypePath::type_path
.Source§fn reflect_short_type_path(&self) -> &str
fn reflect_short_type_path(&self) -> &str
Source§fn reflect_type_ident(&self) -> Option<&str>
fn reflect_type_ident(&self) -> Option<&str>
See
TypePath::type_ident
.Source§fn reflect_crate_name(&self) -> Option<&str>
fn reflect_crate_name(&self) -> Option<&str>
See
TypePath::crate_name
.Source§fn reflect_module_path(&self) -> Option<&str>
fn reflect_module_path(&self) -> Option<&str>
Source§impl<T> DynamicTyped for Twhere
T: Typed,
impl<T> DynamicTyped for Twhere
T: Typed,
Source§fn reflect_type_info(&self) -> &'static TypeInfo
fn reflect_type_info(&self) -> &'static TypeInfo
See
Typed::type_info
.Source§impl<S> GetField for Swhere
S: Struct,
impl<S> GetField for Swhere
S: Struct,
Source§impl<T> GetPath for T
impl<T> GetPath for T
Source§fn reflect_path<'p>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&(dyn PartialReflect + 'static), ReflectPathError<'p>>
fn reflect_path<'p>( &self, path: impl ReflectPath<'p>, ) -> Result<&(dyn PartialReflect + 'static), ReflectPathError<'p>>
Returns a reference to the value specified by
path
. Read moreSource§fn reflect_path_mut<'p>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut (dyn PartialReflect + 'static), ReflectPathError<'p>>
fn reflect_path_mut<'p>( &mut self, path: impl ReflectPath<'p>, ) -> Result<&mut (dyn PartialReflect + 'static), ReflectPathError<'p>>
Returns a mutable reference to the value specified by
path
. Read moreSource§fn path<'p, T>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&T, ReflectPathError<'p>>where
T: Reflect,
fn path<'p, T>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&T, ReflectPathError<'p>>where
T: Reflect,
Returns a statically typed reference to the value specified by
path
. Read moreSource§fn path_mut<'p, T>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut T, ReflectPathError<'p>>where
T: Reflect,
fn path_mut<'p, T>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut T, ReflectPathError<'p>>where
T: Reflect,
Returns a statically typed mutable reference to the value specified by
path
. Read more