From f42d630544165d11a544224ac273d6aaf89d8095 Mon Sep 17 00:00:00 2001 From: mat <27899617+mat-1@users.noreply.github.com> Date: Mon, 29 Aug 2022 20:41:01 -0500 Subject: 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 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 --- azalea-entity/src/data.rs | 148 ---------------------------------------------- azalea-entity/src/lib.rs | 59 ------------------ 2 files changed, 207 deletions(-) delete mode 100644 azalea-entity/src/data.rs delete mode 100644 azalea-entity/src/lib.rs (limited to 'azalea-entity/src') diff --git a/azalea-entity/src/data.rs b/azalea-entity/src/data.rs deleted file mode 100644 index ff708653..00000000 --- a/azalea-entity/src/data.rs +++ /dev/null @@ -1,148 +0,0 @@ -use azalea_buf::{BufReadError, McBufVarReadable}; -use azalea_buf::{McBuf, McBufReadable, McBufWritable}; -use azalea_chat::component::Component; -use azalea_core::{BlockPos, Direction, Particle, Slot}; -use std::io::{Read, Write}; -use uuid::Uuid; - -#[derive(Clone, Debug)] -pub struct EntityMetadata(Vec); - -#[derive(Clone, Debug)] -pub struct EntityDataItem { - // we can't identify what the index is for here because we don't know the - // entity type - pub index: u8, - pub value: EntityDataValue, -} - -impl McBufReadable for EntityMetadata { - fn read_from(buf: &mut impl Read) -> Result { - let mut metadata = Vec::new(); - loop { - let index = u8::read_from(buf)?; - if index == 0xff { - break; - } - let value = EntityDataValue::read_from(buf)?; - metadata.push(EntityDataItem { index, value }); - } - Ok(EntityMetadata(metadata)) - } -} - -impl McBufWritable for EntityMetadata { - fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { - for item in &self.0 { - item.index.write_into(buf)?; - item.value.write_into(buf)?; - } - 0xffu8.write_into(buf)?; - Ok(()) - } -} - -#[derive(Clone, Debug)] -pub enum EntityDataValue { - Byte(u8), - // varint - Int(i32), - Float(f32), - String(String), - Component(Component), - OptionalComponent(Option), - ItemStack(Slot), - Boolean(bool), - Rotations { x: f32, y: f32, z: f32 }, - BlockPos(BlockPos), - OptionalBlockPos(Option), - Direction(Direction), - OptionalUuid(Option), - // 0 for absent (implies air); otherwise, a block state ID as per the global palette - // this is a varint - OptionalBlockState(Option), - CompoundTag(azalea_nbt::Tag), - Particle(Particle), - VillagerData(VillagerData), - // 0 for absent; 1 + actual value otherwise. Used for entity IDs. - OptionalUnsignedInt(Option), - Pose(Pose), -} - -impl McBufReadable for EntityDataValue { - fn read_from(buf: &mut impl Read) -> Result { - let data_type = u32::var_read_from(buf)?; - Ok(match data_type { - 0 => EntityDataValue::Byte(u8::read_from(buf)?), - 1 => EntityDataValue::Int(i32::var_read_from(buf)?), - 2 => EntityDataValue::Float(f32::read_from(buf)?), - 3 => EntityDataValue::String(String::read_from(buf)?), - 4 => EntityDataValue::Component(Component::read_from(buf)?), - 5 => EntityDataValue::OptionalComponent(Option::::read_from(buf)?), - 6 => EntityDataValue::ItemStack(Slot::read_from(buf)?), - 7 => EntityDataValue::Boolean(bool::read_from(buf)?), - 8 => EntityDataValue::Rotations { - x: f32::read_from(buf)?, - y: f32::read_from(buf)?, - z: f32::read_from(buf)?, - }, - 9 => EntityDataValue::BlockPos(BlockPos::read_from(buf)?), - 10 => EntityDataValue::OptionalBlockPos(Option::::read_from(buf)?), - 11 => EntityDataValue::Direction(Direction::read_from(buf)?), - 12 => EntityDataValue::OptionalUuid(Option::::read_from(buf)?), - 13 => EntityDataValue::OptionalBlockState({ - let val = i32::read_from(buf)?; - if val == 0 { - None - } else { - Some(val) - } - }), - 14 => EntityDataValue::CompoundTag(azalea_nbt::Tag::read_from(buf)?), - 15 => EntityDataValue::Particle(Particle::read_from(buf)?), - 16 => EntityDataValue::VillagerData(VillagerData::read_from(buf)?), - 17 => EntityDataValue::OptionalUnsignedInt({ - let val = u32::var_read_from(buf)?; - if val == 0 { - None - } else { - Some((val - 1) as u32) - } - }), - 18 => EntityDataValue::Pose(Pose::read_from(buf)?), - _ => { - return Err(BufReadError::UnexpectedEnumVariant { - id: data_type as i32, - }) - } - }) - } -} - -impl McBufWritable for EntityDataValue { - fn write_into(&self, _buf: &mut impl Write) -> Result<(), std::io::Error> { - todo!(); - } -} - -#[derive(Clone, Debug, Copy, McBuf)] -pub enum Pose { - Standing = 0, - FallFlying = 1, - Sleeping = 2, - Swimming = 3, - SpinAttack = 4, - Sneaking = 5, - LongJumping = 6, - Dying = 7, -} - -#[derive(Debug, Clone, McBuf)] -pub struct VillagerData { - #[var] - type_: u32, - #[var] - profession: u32, - #[var] - level: u32, -} diff --git a/azalea-entity/src/lib.rs b/azalea-entity/src/lib.rs deleted file mode 100644 index 9436d753..00000000 --- a/azalea-entity/src/lib.rs +++ /dev/null @@ -1,59 +0,0 @@ -mod data; - -use azalea_core::{EntityPos, PositionDelta}; -pub use data::*; -use uuid::Uuid; - -#[derive(Default, Debug)] -pub struct Entity { - /// The incrementing numerical id of the entity. - pub id: u32, - pub uuid: Uuid, - /// The position of the entity right now. - pos: EntityPos, - /// The position of the entity last tick. - pub old_pos: EntityPos, - pub delta: PositionDelta, - - pub x_rot: f32, - pub y_rot: f32, -} - -impl Entity { - pub fn new(id: u32, uuid: Uuid, pos: EntityPos) -> Self { - Self { - id, - uuid, - pos, - old_pos: pos, - delta: PositionDelta::default(), - x_rot: 0.0, - y_rot: 0.0, - } - } - - pub fn pos(&self) -> &EntityPos { - &self.pos - } - - /// Sets the position of the entity. This doesn't update the cache in - /// azalea-world, and should only be used within azalea-world! - pub fn unsafe_move(&mut self, new_pos: EntityPos) { - self.pos = new_pos; - } - - pub fn set_rotation(&mut self, y_rot: f32, x_rot: f32) { - self.y_rot = y_rot.clamp(-90.0, 90.0) % 360.0; - self.x_rot = x_rot % 360.0; - // TODO: minecraft also sets yRotO and xRotO to xRot and yRot ... but idk what they're used for so - } -} - -// #[cfg(test)] -// mod tests { -// #[test] -// fn it_works() { -// let result = 2 + 2; -// assert_eq!(result, 4); -// } -// } -- cgit v1.2.3