more precise timing

renamed Time::elapsed -> Time::seconds, change type to double
updated game to store ticks (microseconds) instead of milliseconds for better update precision
This commit is contained in:
Noel Berry
2021-02-06 00:13:50 -08:00
parent 2c2d668927
commit ac58379de8
13 changed files with 101 additions and 87 deletions

View File

@ -93,7 +93,7 @@ void InputBackend::on_mouse_down(MouseButton button)
{
g_next_state.mouse.down[i] = true;
g_next_state.mouse.pressed[i] = true;
g_next_state.mouse.timestamp[i] = Time::milliseconds;
g_next_state.mouse.timestamp[i] = Time::ticks;
}
}
@ -114,7 +114,7 @@ void InputBackend::on_key_down(Key key)
{
g_next_state.keyboard.down[i] = true;
g_next_state.keyboard.pressed[i] = true;
g_next_state.keyboard.timestamp[i] = Time::milliseconds;
g_next_state.keyboard.timestamp[i] = Time::ticks;
}
}
@ -170,7 +170,7 @@ void InputBackend::on_button_down(int index, int button)
{
g_next_state.controllers[index].down[button] = 1;
g_next_state.controllers[index].pressed[button] = 1;
g_next_state.controllers[index].button_timestamp[button] = Time::milliseconds;
g_next_state.controllers[index].button_timestamp[button] = Time::ticks;
}
}
@ -194,7 +194,7 @@ void InputBackend::on_axis_move(int index, int axis, float value)
axis < g_next_state.controllers[index].axis_count)
{
g_next_state.controllers[index].axis[axis] = value;
g_next_state.controllers[index].axis_timestamp[axis] = Time::milliseconds;
g_next_state.controllers[index].axis_timestamp[axis] = Time::ticks;
}
}

View File

@ -102,16 +102,16 @@ void VirtualAxis::update()
if (m_value_i != 0 && m_last_value_i != m_value_i)
{
m_pressed = true;
m_last_press_time = m_repeat_press_time = Time::elapsed;
m_last_press_time = m_repeat_press_time = Time::seconds;
}
else if (m_value_i == m_last_value_i && m_value_i != 0)
{
if (Time::elapsed - m_last_press_time <= m_press_buffer)
if (Time::seconds - m_last_press_time <= m_press_buffer)
m_pressed = true;
else if (m_repeat_interval > 0 && Time::elapsed >= m_repeat_press_time + m_repeat_delay)
else if (m_repeat_interval > 0 && Time::seconds >= m_repeat_press_time + m_repeat_delay)
{
int prev = (int)((Time::previous_elapsed - m_repeat_press_time - m_repeat_delay) / m_repeat_interval);
int cur = (int)((Time::elapsed - m_repeat_press_time - m_repeat_delay) / m_repeat_interval);
int prev = (int)((Time::previous_seconds - m_repeat_press_time - m_repeat_delay) / m_repeat_interval);
int cur = (int)((Time::seconds - m_repeat_press_time - m_repeat_delay) / m_repeat_interval);
m_pressed = prev < cur;
}
}
@ -120,9 +120,9 @@ void VirtualAxis::update()
if (m_last_value_i != 0 && m_value_i != m_last_value_i)
{
m_released = true;
m_last_release_time = Time::elapsed;
m_last_release_time = Time::seconds;
}
else if (Time::elapsed - m_last_release_time <= m_release_buffer)
else if (Time::seconds - m_last_release_time <= m_release_buffer)
m_released = true;
else
m_released = false;

View File

@ -68,7 +68,7 @@ void VirtualButton::update()
m_pressed = false;
m_released = false;
//Keys
// Keys
for (int i = 0; i < m_keys_len; i++)
{
m_keys[i].update();
@ -78,7 +78,7 @@ void VirtualButton::update()
m_released = m_released || m_keys[i].released;
}
//Buttons
// Buttons
for (int i = 0; i < m_buttons_len; i++)
{
m_buttons[i].update();
@ -88,7 +88,7 @@ void VirtualButton::update()
m_released = m_released || m_buttons[i].released;
}
//Axes
// Axes
for (int i = 0; i < m_axes_len; i++)
{
m_axes[i].update();
@ -98,27 +98,27 @@ void VirtualButton::update()
m_released = m_released || m_axes[i].released;
}
//pressed?
// pressed?
if (m_pressed)
{
m_repeat_press_time = m_last_press_time = Time::elapsed;
m_repeat_press_time = m_last_press_time = Time::seconds;
}
else if (Time::elapsed - m_last_press_time <= m_press_buffer)
else if (Time::seconds - m_last_press_time <= m_press_buffer)
{
m_pressed = true;
}
else if (m_down && m_repeat_interval > 0 && Time::elapsed >= m_repeat_press_time + m_repeat_delay)
else if (m_down && m_repeat_interval > 0 && Time::seconds >= m_repeat_press_time + m_repeat_delay)
{
int prev = (int)((Time::previous_elapsed - m_repeat_press_time - m_repeat_delay) / m_repeat_interval);
int cur = (int)((Time::elapsed - m_repeat_press_time - m_repeat_delay) / m_repeat_interval);
int prev = (int)((Time::previous_seconds - m_repeat_press_time - m_repeat_delay) / m_repeat_interval);
int cur = (int)((Time::seconds - m_repeat_press_time - m_repeat_delay) / m_repeat_interval);
m_pressed = prev < cur;
}
//released?
// released?
if (m_released)
m_last_release_time = Time::elapsed;
m_last_release_time = Time::seconds;
else
m_released = Time::elapsed - m_last_release_time <= m_release_buffer;
m_released = Time::seconds - m_last_release_time <= m_release_buffer;
}
void VirtualButton::KeyNode::init(Key key)

View File

@ -118,16 +118,16 @@ void VirtualStick::update()
if (m_value_i != Point::zero && m_last_value_i != m_value_i)
{
m_pressed = true;
m_last_press_time = m_repeat_press_time = Time::elapsed;
m_last_press_time = m_repeat_press_time = Time::seconds;
}
else if (m_value_i == m_last_value_i && m_value_i != Point::zero)
{
if (Time::elapsed - m_last_press_time <= m_press_buffer)
if (Time::seconds - m_last_press_time <= m_press_buffer)
m_pressed = true;
else if (m_repeat_interval > 0 && Time::elapsed >= m_repeat_press_time + m_repeat_delay)
else if (m_repeat_interval > 0 && Time::seconds >= m_repeat_press_time + m_repeat_delay)
{
int prev = (int)((Time::previous_elapsed - m_repeat_press_time - m_repeat_delay) / m_repeat_interval);
int cur = (int)((Time::elapsed - m_repeat_press_time - m_repeat_delay) / m_repeat_interval);
int prev = (int)((Time::previous_seconds - m_repeat_press_time - m_repeat_delay) / m_repeat_interval);
int cur = (int)((Time::seconds - m_repeat_press_time - m_repeat_delay) / m_repeat_interval);
m_pressed = prev < cur;
}
}
@ -136,9 +136,9 @@ void VirtualStick::update()
if (m_last_value_i != Point::zero && m_value_i != m_last_value_i)
{
m_released = true;
m_last_release_time = Time::elapsed;
m_last_release_time = Time::seconds;
}
else if (Time::elapsed - m_last_release_time <= m_release_buffer)
else if (Time::seconds - m_last_release_time <= m_release_buffer)
m_released = true;
else
m_released = false;