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/cursor3d.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/cursor3d.rs')
| -rw-r--r-- | azalea-core/src/cursor3d.rs | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/azalea-core/src/cursor3d.rs b/azalea-core/src/cursor3d.rs new file mode 100644 index 00000000..fa265c8a --- /dev/null +++ b/azalea-core/src/cursor3d.rs @@ -0,0 +1,115 @@ +use crate::BlockPos; + +pub struct Cursor3d { + index: usize, + + origin_x: i32, + origin_y: i32, + origin_z: i32, + + width: usize, + height: usize, + depth: usize, + + end: usize, +} + +impl Iterator for Cursor3d { + type Item = CursorIteration; + + fn next(&mut self) -> Option<Self::Item> { + if self.index == self.end { + return None; + } + let x = self.index % self.width; + let r = self.index / self.width; + let y = r % self.height; + let z = r / self.height; + self.index += 1; + + let mut iteration_type = 0; + if x == 0 || x == self.width - 1 { + iteration_type += 1; + } + if y == 0 || y == self.height - 1 { + iteration_type += 1; + } + if z == 0 || z == self.depth - 1 { + iteration_type += 1; + } + + Some(CursorIteration { + pos: BlockPos { + x: self.origin_x + x as i32, + y: self.origin_y + y as i32, + z: self.origin_z + z as i32, + }, + iteration_type: iteration_type.into(), + }) + } +} + +#[repr(u8)] +#[derive(Eq, PartialEq, Debug)] +pub enum CursorIterationType { + Inside = 0, + Face = 1, + Edge = 2, + Corner = 3, +} + +pub struct CursorIteration { + pub pos: BlockPos, + pub iteration_type: CursorIterationType, +} + +impl Cursor3d { + pub fn new( + origin_x: i32, + origin_y: i32, + origin_z: i32, + end_x: i32, + end_y: i32, + end_z: i32, + ) -> Self { + println!( + "making cursor3d with origin: {}, {}, {} and end: {}, {}, {}", + origin_x, origin_y, origin_z, end_x, end_y, end_z + ); + let width = (end_x - origin_x + 1) + .try_into() + .expect("Impossible width."); + let height = (end_y - origin_y + 1) + .try_into() + .expect("Impossible height."); + let depth = (end_z - origin_z + 1) + .try_into() + .expect("Impossible depth."); + + Self { + index: 0, + + origin_x, + origin_y, + origin_z, + + width, + height, + depth, + + end: width * height * depth, + } + } +} + +impl From<u8> for CursorIterationType { + fn from(value: u8) -> Self { + match value { + 0 => CursorIterationType::Inside, + 1 => CursorIterationType::Face, + 2 => CursorIterationType::Edge, + 3 => CursorIterationType::Corner, + _ => panic!("Invalid iteration type"), + } + } +} |
