aboutsummaryrefslogtreecommitdiff
path: root/azalea-core/src/direction.rs
diff options
context:
space:
mode:
authormat <27899617+mat-1@users.noreply.github.com>2023-05-03 20:57:27 -0500
committerGitHub <noreply@github.com>2023-05-03 20:57:27 -0500
commit634cb8d72c6608512aedba19e5cd669104bc35ea (patch)
treef8e76ce9eb43403d29cc0cbcf9a4f51522419dc2 /azalea-core/src/direction.rs
parent1fb4418f2c9cbd004c64c2f23d2d0352ee12c0e5 (diff)
downloadazalea-drasl-634cb8d72c6608512aedba19e5cd669104bc35ea.tar.xz
Inventory (#48)
* start adding azalea-inventory * design more of how inventories are defined * start working on az-inv-macros * inventory macro works * start adding inventory codegen * update some deps * add inventory codegen * manually write inventory menus * put the inventories in Client * start on containersetcontent * inventory menu should hopefully work * checks in containersetcontent * format a comment * move some variant matches * inventory.rs * inventory stuff * more inventory stuff * inventory/container tracking works * start adding interact function * sequence number * start adding HitResultComponent * implement traverse_blocks * start adding clip * add clip function * update_hit_result_component * start trying to fix * fix * make some stuff simpler * clippy * lever * chest * container handle * fix ambiguity * fix some doc tests * move some container stuff from az-client to azalea * clicking container * start implementing simulate_click * keep working on simulate click * implement more of simulate_click this is really boring * inventory fixes * start implementing shift clicking * fix panic in azalea-chat i hope * shift clicking implemented * more inventory stuff * fix items not showing in containers sometimes * fix test * fix all warnings * remove a println --------- Co-authored-by: mat <git@matdoes.dev>
Diffstat (limited to 'azalea-core/src/direction.rs')
-rwxr-xr-xazalea-core/src/direction.rs52
1 files changed, 51 insertions, 1 deletions
diff --git a/azalea-core/src/direction.rs b/azalea-core/src/direction.rs
index 95dacc69..c872f26c 100755
--- a/azalea-core/src/direction.rs
+++ b/azalea-core/src/direction.rs
@@ -1,6 +1,8 @@
use azalea_buf::McBuf;
-#[derive(Clone, Copy, Debug, McBuf, Default)]
+use crate::Vec3;
+
+#[derive(Clone, Copy, Debug, McBuf, Default, Eq, PartialEq)]
pub enum Direction {
#[default]
Down = 0,
@@ -11,6 +13,54 @@ pub enum Direction {
East,
}
+impl Direction {
+ pub fn nearest(vec: Vec3) -> Direction {
+ let mut best_direction = Direction::North;
+ let mut best_direction_amount = 0.0;
+
+ for dir in [
+ Direction::Down,
+ Direction::Up,
+ Direction::North,
+ Direction::South,
+ Direction::West,
+ Direction::East,
+ ]
+ .iter()
+ {
+ let amount = dir.normal().dot(vec);
+ if amount > best_direction_amount {
+ best_direction = *dir;
+ best_direction_amount = amount;
+ }
+ }
+
+ best_direction
+ }
+
+ pub fn normal(self) -> Vec3 {
+ match self {
+ Direction::Down => Vec3::new(0.0, -1.0, 0.0),
+ Direction::Up => Vec3::new(0.0, 1.0, 0.0),
+ Direction::North => Vec3::new(0.0, 0.0, -1.0),
+ Direction::South => Vec3::new(0.0, 0.0, 1.0),
+ Direction::West => Vec3::new(-1.0, 0.0, 0.0),
+ Direction::East => Vec3::new(1.0, 0.0, 0.0),
+ }
+ }
+
+ pub fn opposite(self) -> Direction {
+ match self {
+ Direction::Down => Direction::Up,
+ Direction::Up => Direction::Down,
+ Direction::North => Direction::South,
+ Direction::South => Direction::North,
+ Direction::West => Direction::East,
+ Direction::East => Direction::West,
+ }
+ }
+}
+
// TODO: make azalea_block use this instead of FacingCardinal
#[derive(Clone, Copy, Debug, McBuf)]
pub enum CardinalDirection {