From 7f86dae8a0e2dfa8126f7fa5c40f3242798e9a97 Mon Sep 17 00:00:00 2001 From: Alula <6276139+alula@users.noreply.github.com> Date: Sat, 16 Jan 2021 23:49:43 +0100 Subject: [PATCH] subpixel coords / motion interpolation toggle --- src/common.rs | 8 ++++---- src/settings.rs | 2 ++ src/shared_game_state.rs | 4 +--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/common.rs b/src/common.rs index 2fafb94..6ee0ff0 100644 --- a/src/common.rs +++ b/src/common.rs @@ -2,7 +2,7 @@ use std::cmp::Ordering; use std::fmt; use lazy_static::lazy_static; -use num_traits::{AsPrimitive, Num}; +use num_traits::{abs, AsPrimitive, Num}; use serde::{de, Deserialize, Deserializer, Serialize, Serializer}; use serde::de::{SeqAccess, Visitor}; use serde::ser::SerializeTupleStruct; @@ -361,12 +361,12 @@ pub fn fix9_scale(val: i32, scale: f32) -> f32 { #[inline(always)] fn lerp_f64(v1: f64, v2: f64, t: f64) -> f64 { - v1 * (1.0 - t.fract()) + v2 * t.fract() + v1 * (1.0 - t) + v2 * t } pub fn interpolate_fix9_scale(old_val: i32, val: i32, frame_delta: f64) -> f32 { - if (frame_delta - 1.0).abs() < 0.001 { - return (val / 0x200) as f32; + if abs(old_val - val) > 8 * 0x200 { + return val as f32 / 512.0; } (lerp_f64(old_val as f64, val as f64, frame_delta) / 512.0) as f32 diff --git a/src/settings.rs b/src/settings.rs index 8bd2310..8543ee9 100644 --- a/src/settings.rs +++ b/src/settings.rs @@ -12,6 +12,7 @@ pub struct Settings { pub seasonal_textures: bool, pub original_textures: bool, pub shader_effects: bool, + pub subpixel_coords: bool, pub motion_interpolation: bool, pub touch_controls: bool, pub player1_key_map: PlayerKeyMap, @@ -50,6 +51,7 @@ impl Default for Settings { seasonal_textures: true, original_textures: false, shader_effects: true, + subpixel_coords: true, motion_interpolation: true, touch_controls: cfg!(target_os = "android"), player1_key_map: p1_default_keymap(), diff --git a/src/shared_game_state.rs b/src/shared_game_state.rs index 78c78a7..a242a4c 100644 --- a/src/shared_game_state.rs +++ b/src/shared_game_state.rs @@ -26,7 +26,7 @@ use crate::sound::SoundManager; use crate::stage::StageData; use crate::str; use crate::text_script::{ScriptMode, TextScriptExecutionState, TextScriptVM}; -use crate::texture_set::{G_MAG, TextureSet}; +use crate::texture_set::{TextureSet}; #[derive(PartialEq, Eq, Copy, Clone)] pub enum TimingMode { @@ -125,7 +125,6 @@ impl SharedGameState { pub fn new(ctx: &mut Context) -> GameResult { let screen_size = graphics::drawable_size(ctx); let scale = screen_size.1.div(235.0).floor().max(1.0); - unsafe { G_MAG = scale }; let canvas_size = (screen_size.0 / scale, screen_size.1 / scale); @@ -292,7 +291,6 @@ impl SharedGameState { self.screen_size = graphics::drawable_size(ctx); self.scale = self.screen_size.1.div(240.0).floor().max(1.0); self.canvas_size = (self.screen_size.0 / self.scale, self.screen_size.1 / self.scale); - unsafe { G_MAG = self.scale }; graphics::set_screen_coordinates(ctx, graphics::Rect::new(0.0, 0.0, self.screen_size.0, self.screen_size.1))?;