subpixel coords / motion interpolation toggle

This commit is contained in:
Alula 2021-01-16 23:49:43 +01:00
parent 9d76cf7e48
commit 7f86dae8a0
No known key found for this signature in database
GPG Key ID: 3E00485503A1D8BA
3 changed files with 7 additions and 7 deletions

View File

@ -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

View File

@ -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(),

View File

@ -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<SharedGameState> {
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))?;