From 5f8704ccc51d75a05a2441fdd1a8cc9e2ff90173 Mon Sep 17 00:00:00 2001 From: mat Date: Sun, 10 Sep 2023 18:18:49 -0500 Subject: fix physics bugs --- azalea-core/src/lib.rs | 1 + azalea-core/src/math.rs | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) (limited to 'azalea-core/src') diff --git a/azalea-core/src/lib.rs b/azalea-core/src/lib.rs index 8ed62b06..6554d71d 100755 --- a/azalea-core/src/lib.rs +++ b/azalea-core/src/lib.rs @@ -1,6 +1,7 @@ #![doc = include_str!("../README.md")] #![feature(int_roundings)] #![feature(const_for)] +#![feature(lazy_cell)] #![allow(incomplete_features)] #![feature(generic_const_exprs)] diff --git a/azalea-core/src/math.rs b/azalea-core/src/math.rs index 2e5e78f6..40d147e4 100644 --- a/azalea-core/src/math.rs +++ b/azalea-core/src/math.rs @@ -1,3 +1,27 @@ +use std::sync::LazyLock; + +pub static SIN: LazyLock<[f32; 65536]> = LazyLock::new(|| { + let mut sin = [0.0; 65536]; + for i in 0..65536 { + sin[i] = f64::sin((i as f64) * 3.141592653589793 * 2.0 / 65536.0) as f32; + } + sin +}); + +/// A sine function that uses a lookup table. +pub fn sin(var0: f32) -> f32 { + let var0 = var0 * 10430.378; + let var0 = var0 as usize; + SIN[var0 & 65535] +} + +/// A cosine function that uses a lookup table. +pub fn cos(var0: f32) -> f32 { + let var0 = var0 * 10430.378 + 16384.0; + let var0 = var0 as usize; + SIN[var0 & 65535] +} + // TODO: make this generic pub fn binary_search(mut min: i32, max: i32, predicate: &dyn Fn(i32) -> bool) -> i32 { let mut diff = max - min; -- cgit v1.2.3