diff options
Diffstat (limited to 'azalea-core/src')
| -rwxr-xr-x | azalea-core/src/direction.rs | 5 | ||||
| -rw-r--r-- | azalea-core/src/game_type.rs | 36 | ||||
| -rw-r--r-- | azalea-core/src/math.rs | 23 |
3 files changed, 38 insertions, 26 deletions
diff --git a/azalea-core/src/direction.rs b/azalea-core/src/direction.rs index 0cca7aaf..6ff55615 100755 --- a/azalea-core/src/direction.rs +++ b/azalea-core/src/direction.rs @@ -62,7 +62,10 @@ impl Direction { } } -// TODO: make azalea_block use this instead of FacingCardinal +/// The four cardinal directions. +/// +/// Note that azalea_block has a similar enum named `FacingCardinal` that is +/// used for block states. #[derive(Clone, Copy, Debug, AzBuf, PartialEq, Eq, Hash)] #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] pub enum CardinalDirection { diff --git a/azalea-core/src/game_type.rs b/azalea-core/src/game_type.rs index 5bac06d5..5d9ee8f5 100644 --- a/azalea-core/src/game_type.rs +++ b/azalea-core/src/game_type.rs @@ -1,6 +1,7 @@ use std::io::{Cursor, Write}; use azalea_buf::{AzaleaRead, AzaleaReadVar, AzaleaWrite, BufReadError}; +use azalea_chat::translatable_component::TranslatableComponent; use tracing::debug; /// A Minecraft gamemode, like survival or creative. @@ -51,26 +52,15 @@ impl GameMode { ) } - pub fn short_name(&self) -> &'static str { - // TODO: these should be translated - // TranslatableComponent("selectWorld.gameMode." + string2) - match self { - GameMode::Survival => "Survival", - GameMode::Creative => "Creative", - GameMode::Adventure => "Adventure", - GameMode::Spectator => "Spectator", - } + /// The short translatable display name for the gamemode, like "Survival". + pub fn short_name(&self) -> TranslatableComponent { + TranslatableComponent::new(format!("selectWorld.gameMode.{}", self.name()), vec![]) } - pub fn long_name(&self) -> &'static str { - // TODO: These should be translated TranslatableComponent("gameMode." + - // string2); - match self { - GameMode::Survival => "Survival Mode", - GameMode::Creative => "Creative Mode", - GameMode::Adventure => "Adventure Mode", - GameMode::Spectator => "Spectator Mode", - } + /// The long translatable display name for the gamemode, like "Survival + /// Mode". + pub fn long_name(&self) -> TranslatableComponent { + TranslatableComponent::new(format!("gameMode.{}", self.name()), vec![]) } pub fn from_name(name: &str) -> GameMode { @@ -82,6 +72,16 @@ impl GameMode { _ => panic!("Unknown game type name: {name}"), } } + + /// The internal name for the game mode, like "survival". + pub fn name(&self) -> &'static str { + match self { + GameMode::Survival => "survival", + GameMode::Creative => "creative", + GameMode::Adventure => "adventure", + GameMode::Spectator => "spectator", + } + } } impl GameMode { diff --git a/azalea-core/src/math.rs b/azalea-core/src/math.rs index 62215749..67ece5cc 100644 --- a/azalea-core/src/math.rs +++ b/azalea-core/src/math.rs @@ -1,4 +1,8 @@ -use std::{f64::consts::PI, sync::LazyLock}; +use std::{ + f64::consts::PI, + ops::{Add, Div, Sub}, + sync::LazyLock, +}; pub const EPSILON: f64 = 1.0E-7; @@ -24,17 +28,22 @@ pub fn cos(x: f32) -> f32 { SIN[x] } -// TODO: make this generic -pub fn binary_search(mut min: i32, max: i32, predicate: &dyn Fn(i32) -> bool) -> i32 { +pub fn binary_search< + T: Ord + PartialOrd + Add<Output = T> + Sub<Output = T> + Div<Output = T> + From<u8> + Copy, +>( + mut min: T, + max: T, + predicate: impl Fn(T) -> bool, +) -> T { let mut diff = max - min; - while diff > 0 { - let diff_mid = diff / 2; + while diff > T::from(0) { + let diff_mid = diff / T::from(2); let mid = min + diff_mid; if predicate(mid) { diff = diff_mid; } else { - min = mid + 1; - diff -= diff_mid + 1; + min = mid + T::from(1); + diff = diff - (diff_mid + T::from(1)); } } |
