Change coordinates, and add .get_block to ChunkBlocks
- Renamed ChunkRelativeScalar to ChunkRelativeOffset - Added more traits to Height and ChunkRelativeOffset - Added .get_block to ChunkBlocks
This commit is contained in:
parent
0c79d38de9
commit
5f05a1886b
38
Cargo.lock
generated
38
Cargo.lock
generated
@ -359,6 +359,15 @@ version = "0.9.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
|
||||
|
||||
[[package]]
|
||||
name = "convert_case"
|
||||
version = "0.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca"
|
||||
dependencies = [
|
||||
"unicode-segmentation",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "core-foundation"
|
||||
version = "0.9.4"
|
||||
@ -604,6 +613,28 @@ dependencies = [
|
||||
"powerfmt",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "derive_more"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05"
|
||||
dependencies = [
|
||||
"derive_more-impl",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "derive_more-impl"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22"
|
||||
dependencies = [
|
||||
"convert_case",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.76",
|
||||
"unicode-xid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "digest"
|
||||
version = "0.10.7"
|
||||
@ -1974,6 +2005,7 @@ dependencies = [
|
||||
name = "pumpkin-world"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"derive_more",
|
||||
"fastnbt",
|
||||
"fastsnbt",
|
||||
"flate2",
|
||||
@ -2966,6 +2998,12 @@ dependencies = [
|
||||
"tinyvec",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unicode-segmentation"
|
||||
version = "1.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-width"
|
||||
version = "0.1.13"
|
||||
|
||||
@ -16,3 +16,4 @@ log = "0.4"
|
||||
tokio = { version = "1.39.2", features = ["net", "macros", "rt-multi-thread", "fs", "io-util", "sync"] }
|
||||
rayon = "1.10.0"
|
||||
uuid = { version = "1.10.0", features = ["serde", "v3"] }
|
||||
derive_more = { version = "1.0.0", features = ["full"] }
|
||||
|
||||
@ -9,6 +9,7 @@ fastnbt = { git = "https://github.com/owengage/fastnbt.git" }
|
||||
fastsnbt = "0.2"
|
||||
tokio.workspace = true
|
||||
rayon.workspace = true
|
||||
derive_more.workspace = true
|
||||
itertools = "0.13.0"
|
||||
thiserror = "1.0.63"
|
||||
futures = "0.3.30"
|
||||
|
||||
@ -131,6 +131,11 @@ impl ChunkBlocks {
|
||||
}
|
||||
}
|
||||
|
||||
/// Gets the given block in the chunk
|
||||
pub fn get_block(&self, position: ChunkRelativeBlockCoordinates) -> BlockId {
|
||||
self.blocks[Self::convert_index(position)]
|
||||
}
|
||||
|
||||
/// Sets the given block in the chunk, returning the old block
|
||||
pub fn set_block(
|
||||
&mut self,
|
||||
|
||||
@ -1,15 +1,16 @@
|
||||
use std::ops::Deref;
|
||||
|
||||
use derive_more::derive::{AsMut, AsRef, Display, Into};
|
||||
use num_traits::{PrimInt, Signed, Unsigned};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{WORLD_LOWEST_Y, WORLD_MAX_Y};
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq)]
|
||||
#[derive(
|
||||
Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, AsRef, AsMut, Into, Display,
|
||||
)]
|
||||
#[serde(transparent)]
|
||||
pub struct Height {
|
||||
height: i16,
|
||||
}
|
||||
pub struct Height(i16);
|
||||
|
||||
impl Height {
|
||||
pub fn from_absolute(height: u16) -> Self {
|
||||
@ -19,7 +20,7 @@ impl Height {
|
||||
/// Absolute height ranges from `0..WORLD_HEIGHT`
|
||||
/// instead of `WORLD_LOWEST_Y..WORLD_MAX_Y`
|
||||
pub fn get_absolute(self) -> u16 {
|
||||
(self.height + WORLD_LOWEST_Y.abs()) as u16
|
||||
(self.0 + WORLD_LOWEST_Y.abs()) as u16
|
||||
}
|
||||
}
|
||||
|
||||
@ -29,7 +30,7 @@ impl<T: PrimInt + Signed> From<T> for Height {
|
||||
|
||||
assert!(height <= WORLD_MAX_Y);
|
||||
assert!(height >= WORLD_LOWEST_Y);
|
||||
Self { height }
|
||||
Self(height)
|
||||
}
|
||||
}
|
||||
|
||||
@ -37,29 +38,30 @@ impl Deref for Height {
|
||||
type Target = i16;
|
||||
|
||||
fn deref(&self) -> &Self::Target {
|
||||
&self.height
|
||||
&self.0
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
pub struct ChunkRelativeScalar {
|
||||
scalar: u8,
|
||||
}
|
||||
#[derive(
|
||||
Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, AsRef, AsMut, Into, Display,
|
||||
)]
|
||||
#[repr(transparent)]
|
||||
pub struct ChunkRelativeOffset(u8);
|
||||
|
||||
impl<T: PrimInt + Unsigned> From<T> for ChunkRelativeScalar {
|
||||
impl<T: PrimInt + Unsigned> From<T> for ChunkRelativeOffset {
|
||||
fn from(scalar: T) -> Self {
|
||||
let scalar = scalar.to_u8().unwrap();
|
||||
|
||||
assert!(scalar < 16);
|
||||
Self { scalar }
|
||||
Self(scalar)
|
||||
}
|
||||
}
|
||||
|
||||
impl Deref for ChunkRelativeScalar {
|
||||
impl Deref for ChunkRelativeOffset {
|
||||
type Target = u8;
|
||||
|
||||
fn deref(&self) -> &Self::Target {
|
||||
&self.scalar
|
||||
&self.0
|
||||
}
|
||||
}
|
||||
|
||||
@ -90,9 +92,9 @@ impl XZBlockCoordinates {
|
||||
/// Coordinates of a block relative to a chunk
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
pub struct ChunkRelativeBlockCoordinates {
|
||||
pub x: ChunkRelativeScalar,
|
||||
pub x: ChunkRelativeOffset,
|
||||
pub y: Height,
|
||||
pub z: ChunkRelativeScalar,
|
||||
pub z: ChunkRelativeOffset,
|
||||
}
|
||||
|
||||
impl ChunkRelativeBlockCoordinates {
|
||||
@ -107,8 +109,8 @@ impl ChunkRelativeBlockCoordinates {
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
pub struct ChunkRelativeXZBlockCoordinates {
|
||||
pub x: ChunkRelativeScalar,
|
||||
pub z: ChunkRelativeScalar,
|
||||
pub x: ChunkRelativeOffset,
|
||||
pub z: ChunkRelativeOffset,
|
||||
}
|
||||
|
||||
impl ChunkRelativeXZBlockCoordinates {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user