diff options
| author | mat <27899617+mat-1@users.noreply.github.com> | 2022-08-29 20:41:01 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-08-29 20:41:01 -0500 |
| commit | f42d630544165d11a544224ac273d6aaf89d8095 (patch) | |
| tree | 94bd73771ecb582d89a87cdca8e21b2d6573ef12 /azalea-core/src/direction.rs | |
| parent | 2ea804401f54a45765860201d10d0569d07862ec (diff) | |
| download | azalea-drasl-f42d630544165d11a544224ac273d6aaf89d8095.tar.xz | |
Physics (#11)
* Put physics module in azalea-entity
* port aabb
* add more stuff to PositionXYZ
* azalea-physics
* important collision things
* more physics stuff
* backup because i'm about to delete shapes
* more shape stuff
* CubeVoxelShape
* no compile errors???
insane
* impl VoxelShape for ArrayVoxelShape
* Shapes stuff
* collide_x but it doesn't work yet
* binary_search
* it compiles
* Entity has bounding box
* Update discrete_voxel_shape.rs
* Entity::make_bounding_box
* ok i'm about to merge az-entity and az-world
might be a terrible idea which is why i'm committing first
* ok so i moved entity to world
* on_pos and move_entity compiles
* add send_position
* move collision stuff to collision module in az-physics
* dimension is no longer an Option
* start trying to do collision for the client
* collision works :tada:
* start adding palette resizing
* get_and_set (pain)
* it compiles but probably won't work
* add a test
* remove printlns
* add more tests for palette stuff
* ClientboundMoveVec3Packet -> ClientboundMoveEntityPosPacket
i think i changed this on accident once
* palette resizing works
todo: remove the printlns
* Remove printlns in palette.rs
* fix issues from merge
* fixes + work a bit more on physics
* Better entities (#19)
* well it compiles
* add tests to entity storage
* add suggestions in azalea-brigadier
* this probably causes ub
* fix brigadiersuggestions
* get rid of entityid
* test From<EntityMut> for EntityRef
* don't mention other libraries since there's too many
* fix warnings
* do todos in brigadier suggestions
* work on physics
* more physics stuff
* remove trait feature on az-block
i think rust gets confused and compiles the macro without the feature
* bump ahash
* aes tests in az-crypto
* optimize aes's deps
* fix crashes
* fix section_index for negative numbers and test
* fix BlockPos protocol implementation
* remove some debug prints
* prepare to add ai_step
* make ai step work
* clippy
Diffstat (limited to 'azalea-core/src/direction.rs')
| -rw-r--r-- | azalea-core/src/direction.rs | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/azalea-core/src/direction.rs b/azalea-core/src/direction.rs index d3083922..96d20a10 100644 --- a/azalea-core/src/direction.rs +++ b/azalea-core/src/direction.rs @@ -1,5 +1,7 @@ use azalea_buf::McBuf; +use crate::floor_mod; + #[derive(Clone, Copy, Debug, McBuf)] pub enum Direction { Down = 0, @@ -9,3 +11,73 @@ pub enum Direction { West = 4, East = 5, } + +#[derive(Clone, Copy, Debug)] +pub enum Axis { + X = 0, + Y = 1, + Z = 2, +} + +#[derive(Clone, Copy, Debug)] +pub enum AxisCycle { + None = 0, + Forward = 1, + Backward = 2, +} + +impl Axis { + /// Pick x, y, or z from the arguments depending on the axis. + #[inline] + pub fn choose<T>(&self, x: T, y: T, z: T) -> T { + match self { + Axis::X => x, + Axis::Y => y, + Axis::Z => z, + } + } + + pub fn from_ordinal(ordinal: u32) -> Self { + match ordinal { + 0 => Axis::X, + 1 => Axis::Y, + 2 => Axis::Z, + _ => panic!("Invalid ordinal {}", ordinal), + } + } +} + +impl AxisCycle { + pub fn from_ordinal(ordinal: u32) -> Self { + match ordinal { + 0 => Self::None, + 1 => Self::Forward, + 2 => Self::Backward, + _ => panic!("invalid ordinal"), + } + } + pub fn between(axis0: Axis, axis1: Axis) -> Self { + Self::from_ordinal(floor_mod(axis1 as i32 - axis0 as i32, 3)) + } + pub fn inverse(self) -> Self { + match self { + Self::None => Self::None, + Self::Forward => Self::Backward, + Self::Backward => Self::Forward, + } + } + pub fn cycle(self, axis: Axis) -> Axis { + match self { + Self::None => axis, + Self::Forward => Axis::from_ordinal(floor_mod(axis as i32 + 1, 3)), + Self::Backward => Axis::from_ordinal(floor_mod(axis as i32 - 1, 3)), + } + } + pub fn cycle_xyz(self, x: u32, y: u32, z: u32, axis: Axis) -> u32 { + match self { + Self::None => axis.choose(x, y, z), + Self::Forward => axis.choose(z, x, y), + Self::Backward => axis.choose(y, z, x), + } + } +} |
