@@ -114,20 +114,21 @@ class UpdateSubState extends FlxSubState
114114 httpGet (url , function (html )
115115 {
116116 var bestName : String = null ;
117- var bestVer : Int = Globals .APP_VERSION ;
118- var re = ~/ href="(STLGameLauncher-v( \d + )\. exe)"/ ig ;
117+ var bestVer : Array < Int > = versionToArray ( Globals .APP_VERSION_STR ) ;
118+ var re = ~/ href="(STLGameLauncher-Setup-v( [ \d _] + )\. exe)"/ ig ;
119119 while (re .match (html ))
120120 {
121121 final name = re .matched (1 );
122- final ver = Std .parseInt (re .matched (2 ));
123- if (ver != null && ver > bestVer )
122+ final verStr = re .matched (2 );
123+ final verArr = versionToArray (verStr );
124+ if (compareVersions (verArr , bestVer ) > 0 )
124125 {
125- bestVer = ver ;
126+ bestVer = verArr ;
126127 bestName = name ;
127128 }
128129 }
129130 if (bestName != null )
130- onResult (bestName , bestVer );
131+ onResult (bestName , arrayToVersion ( bestVer ) );
131132 else
132133 onResult (null , - 1 );
133134 }, onError );
@@ -151,15 +152,16 @@ class UpdateSubState extends FlxSubState
151152 httpGet (url , function (html )
152153 {
153154 var bestName : String = null ;
154- var bestVer : Int = Globals .APP_VERSION ;
155- var re = ~/ href="(STLGameLauncher-v( \d + )\. exe)"/ ig ;
155+ var bestVer : Array < Int > = versionToArray ( Globals .APP_VERSION_STR ) ;
156+ var re = ~/ href="(STLGameLauncher-Setup-v( [ \d _] + )\. exe)"/ ig ;
156157 while (re .match (html ))
157158 {
158159 final name = re .matched (1 );
159- final ver = Std .parseInt (re .matched (2 ));
160- if (ver != null && ver > bestVer )
160+ final verStr = re .matched (2 );
161+ final verArr = versionToArray (verStr );
162+ if (compareVersions (verArr , bestVer ) > 0 )
161163 {
162- bestVer = ver ;
164+ bestVer = verArr ;
163165 bestName = name ;
164166 }
165167 }
@@ -168,14 +170,50 @@ class UpdateSubState extends FlxSubState
168170 onDone (false );
169171 return ;
170172 }
171- appendStatic (' [UPDATE] New APP installer: ' + bestName + ' (server ver ' + bestVer + ' )' );
173+ appendStatic (' [UPDATE] New APP installer: ' + bestName + ' (server ver ' + arrayToVersion ( bestVer ) + ' )' );
172174 final tmp = tempPath (bestName );
173175 downloadFile (url + bestName , tmp , function ()
174176 {
175177 appendStatic (' [UPDATE] Running installer: ' + tmp );
176178 runInstallerAndExit (tmp );
177179 onDone (true );
178180 }, onError );
181+ // --- Semantic version helpers ---
182+ static function versionToArray (ver : Dynamic ): Array <Int >
183+ {
184+ if (ver == null ) return [0 ];
185+ var s = Std .string (ver ).replace (" _" , " ." );
186+ var parts = s .split (/ [._ ]/ );
187+ var arr = [];
188+ for (p in parts )
189+ {
190+ var n = Std .parseInt (p );
191+ arr .push ((n == null ) ? 0 : n );
192+ }
193+ return arr ;
194+ }
195+
196+ static function compareVersions (a : Array <Int >, b : Array <Int >): Int
197+ {
198+ var len = Math .max (a .length , b .length );
199+ for (i in 0 ... len )
200+ {
201+ var ai = (i < a .length ) ? a [i ] : 0 ;
202+ var bi = (i < b .length ) ? b [i ] : 0 ;
203+ if (ai > bi ) return 1 ;
204+ if (ai < bi ) return - 1 ;
205+ }
206+ return 0 ;
207+ }
208+
209+ static function arrayToVersion (arr : Array <Int >): Int
210+ {
211+ // Return a comparable integer for legacy code (e.g., 1.1.0 => 10100)
212+ var v = 0 ;
213+ for (i in 0 ... arr .length )
214+ v = v * 100 + arr [i ];
215+ return v ;
216+ }
179217 }, onError );
180218 }
181219 catch (e : Dynamic )
@@ -320,8 +358,22 @@ class UpdateSubState extends FlxSubState
320358 var i = 0 ;
321359 var total = toDelete .length + toDownload .length ;
322360 var self = this ;
361+ var lastDraw = Sys .time ();
362+ function pumpEvents () {
363+ #if !flash
364+ try {
365+ FlxG .update ();
366+ FlxG .draw ();
367+ } catch (_ : Dynamic ) {}
368+ #end
369+ }
323370 function next ()
324371 {
372+ // Periodically pump events to keep UI responsive
373+ if (Sys .time () - lastDraw > 0.2 ) {
374+ pumpEvents ();
375+ lastDraw = Sys .time ();
376+ }
325377 if (i < toDelete .length )
326378 {
327379 var file = toDelete [i ++ ];
0 commit comments