@@ -47,9 +47,18 @@ void Parallax2D::_notification(int p_what) {
4747 } break ;
4848
4949 case NOTIFICATION_INTERNAL_PROCESS: {
50- autoscroll_offset += autoscroll * get_process_delta_time () ;
51- autoscroll_offset = autoscroll_offset. posmodv (repeat_size );
50+ Point2 offset = scroll_offset ;
51+ offset += autoscroll * get_process_delta_time ( );
5252
53+ if (repeat_size.x ) {
54+ offset.x = Math::fposmod (offset.x , repeat_size.x );
55+ }
56+
57+ if (repeat_size.y ) {
58+ offset.y = Math::fposmod (offset.y , repeat_size.y );
59+ }
60+
61+ scroll_offset = offset;
5362 _update_scroll ();
5463 } break ;
5564
@@ -106,14 +115,14 @@ void Parallax2D::_update_scroll() {
106115 scroll_ofs *= scroll_scale;
107116
108117 if (repeat_size.x ) {
109- real_t mod = Math::fposmod (scroll_ofs.x - scroll_offset.x - autoscroll_offset. x , repeat_size.x * get_scale ().x );
118+ real_t mod = Math::fposmod (scroll_ofs.x - scroll_offset.x , repeat_size.x * get_scale ().x );
110119 scroll_ofs.x = screen_offset.x - mod;
111120 } else {
112121 scroll_ofs.x = screen_offset.x + scroll_offset.x - scroll_ofs.x ;
113122 }
114123
115124 if (repeat_size.y ) {
116- real_t mod = Math::fposmod (scroll_ofs.y - scroll_offset.y - autoscroll_offset. y , repeat_size.y * get_scale ().y );
125+ real_t mod = Math::fposmod (scroll_ofs.y - scroll_offset.y , repeat_size.y * get_scale ().y );
117126 scroll_ofs.y = screen_offset.y - mod;
118127 } else {
119128 scroll_ofs.y = screen_offset.y + scroll_offset.y - scroll_ofs.y ;
@@ -193,7 +202,6 @@ void Parallax2D::set_autoscroll(const Point2 &p_autoscroll) {
193202 }
194203
195204 autoscroll = p_autoscroll;
196- autoscroll_offset = Point2 ();
197205
198206 _update_process ();
199207 _update_scroll ();
0 commit comments