mirror of
https://github.com/cyberarm/cyberarm_engine.git
synced 2025-12-16 05:02:34 +00:00
Further scrolling improvements (should be smoother/more consistent with varied frame time)
This commit is contained in:
@@ -23,7 +23,8 @@ module CyberarmEngine
|
|||||||
@last_scroll_position = Vector.new(0, 0)
|
@last_scroll_position = Vector.new(0, 0)
|
||||||
@scroll_position = Vector.new(0, 0)
|
@scroll_position = Vector.new(0, 0)
|
||||||
@scroll_target_position = Vector.new(0, 0)
|
@scroll_target_position = Vector.new(0, 0)
|
||||||
@scroll_speed = 80
|
@scroll_chunk = 120
|
||||||
|
@scroll_speed = 40
|
||||||
|
|
||||||
@text_color = options[:color]
|
@text_color = options[:color]
|
||||||
|
|
||||||
@@ -127,11 +128,13 @@ module CyberarmEngine
|
|||||||
end
|
end
|
||||||
|
|
||||||
def update_scroll
|
def update_scroll
|
||||||
|
dt = window.dt > 1 ? 1.0 : window.dt
|
||||||
|
|
||||||
scroll_x_diff = (@scroll_target_position.x - @scroll_position.x)
|
scroll_x_diff = (@scroll_target_position.x - @scroll_position.x)
|
||||||
scroll_y_diff = (@scroll_target_position.y - @scroll_position.y)
|
scroll_y_diff = (@scroll_target_position.y - @scroll_position.y)
|
||||||
|
|
||||||
@scroll_position.x += (scroll_x_diff * 0.25).round
|
@scroll_position.x += (scroll_x_diff * @scroll_speed * 0.25 * dt).round
|
||||||
@scroll_position.y += (scroll_y_diff * 0.25).round
|
@scroll_position.y += (scroll_y_diff * @scroll_speed * 0.25 * dt).round
|
||||||
|
|
||||||
@scroll_position.x = @scroll_target_position.x if scroll_x_diff.abs < 1.0
|
@scroll_position.x = @scroll_target_position.x if scroll_x_diff.abs < 1.0
|
||||||
@scroll_position.y = @scroll_target_position.y if scroll_y_diff.abs < 1.0
|
@scroll_position.y = @scroll_target_position.y if scroll_y_diff.abs < 1.0
|
||||||
@@ -293,9 +296,9 @@ module CyberarmEngine
|
|||||||
# Allow overscrolling UP, only if one can scroll DOWN
|
# Allow overscrolling UP, only if one can scroll DOWN
|
||||||
if height < scroll_height
|
if height < scroll_height
|
||||||
if @scroll_target_position.y > 0
|
if @scroll_target_position.y > 0
|
||||||
@scroll_target_position.y = @scroll_speed
|
@scroll_target_position.y = @scroll_chunk
|
||||||
else
|
else
|
||||||
@scroll_target_position.y += @scroll_speed
|
@scroll_target_position.y += @scroll_chunk
|
||||||
end
|
end
|
||||||
|
|
||||||
return :handled
|
return :handled
|
||||||
@@ -308,9 +311,9 @@ module CyberarmEngine
|
|||||||
return unless height < scroll_height
|
return unless height < scroll_height
|
||||||
|
|
||||||
if @scroll_target_position.y > 0
|
if @scroll_target_position.y > 0
|
||||||
@scroll_target_position.y = -@scroll_speed
|
@scroll_target_position.y = -@scroll_chunk
|
||||||
else
|
else
|
||||||
@scroll_target_position.y -= @scroll_speed
|
@scroll_target_position.y -= @scroll_chunk
|
||||||
end
|
end
|
||||||
|
|
||||||
return :handled
|
return :handled
|
||||||
|
|||||||
Reference in New Issue
Block a user