@@ -1014,56 +1014,83 @@ internal void MigrateJson(ref ReadFileJson parsedJson)
10141014        { 
10151015            if  ( parsedJson . version  >=  JsonVersion . Version1 ) 
10161016                return ; 
1017-             if  ( ( parsedJson . maps ? . Length  ??  0 )  >  0  &&  ( parsedJson . version )  <  JsonVersion . Version1 ) 
1017+             
1018+             if  ( ( parsedJson . maps ? . Length  ??  0 )  >  0  &&  parsedJson . version  <  JsonVersion . Version1 ) 
10181019            { 
10191020                for  ( var  mi  =  0 ;  mi  <  parsedJson . maps . Length ;  ++ mi ) 
10201021                { 
10211022                    var  mapJson  =  parsedJson . maps [ mi ] ; 
1023+                     if  ( mapJson . actions  ==  null  ||  mapJson . actions . Length  ==  0 ) 
1024+                         continue ; 
10221025                    for  ( var  ai  =  0 ;  ai  <  mapJson . actions . Length ;  ++ ai ) 
10231026                    { 
10241027                        var  actionJson  =  mapJson . actions [ ai ] ; 
10251028                        var  raw  =  actionJson . processors ; 
10261029                        if  ( string . IsNullOrEmpty ( raw ) ) 
10271030                            continue ; 
10281031
1029-                         var  list  =  NameAndParameters . ParseMultiple ( raw ) . ToList ( ) ; 
1030-                         var  rebuilt  =  new  List < string > ( list . Count ) ; 
1031-                         foreach  ( var  nap  in  list ) 
1032+                         var  originalTokens  =  raw . Split ( new [ ]  {  ';'  } ,  StringSplitOptions . RemoveEmptyEntries ) . Select ( t =>  t . Trim ( ) ) . ToList ( ) ; 
1033+ 
1034+                         List < NameAndParameters >  parsed  =  null ; 
1035+                         NameAndParameters . ParseMultiple ( raw ,  ref  parsed ) ; 
1036+                         if  ( parsed  ==  null  ||  parsed . Count  ==  0 ) 
1037+                             continue ; 
1038+ 
1039+                         var  canPreservePerToken  =  parsed . Count  ==  originalTokens . Count ; 
1040+                         var  rebuiltTokens  =  canPreservePerToken  ?  new  List < string > ( originalTokens )  :  new  List < string > ( parsed . Count ) ; 
1041+                         var  anyProcessorChanged  =  false ; 
1042+ 
1043+                         for  ( int  pi  =  0 ;  pi  <  parsed . Count ;  pi ++ ) 
10321044                        { 
1045+                             var  nap  =  parsed [ pi ] ; 
10331046                            var  procType  =  InputSystem . TryGetProcessor ( nap . name ) ; 
1034-                             if  ( nap . parameters . Count  ==  0  ||  procType  ==  null ) 
1047+                             if  ( procType  ==  null  ||  nap . parameters . Count  ==  0 ) 
10351048                            { 
1036-                                 rebuilt . Add ( nap . ToString ( ) ) ; 
1049+                                 if  ( ! canPreservePerToken ) 
1050+                                     rebuiltTokens . Add ( nap . ToString ( ) ) ; 
10371051                                continue ; 
10381052                            } 
10391053
10401054                            var  dict  =  nap . parameters . ToDictionary ( p =>  p . name ,  p =>  p . value . ToString ( ) ) ; 
1041-                             var  anyChanged  =  false ; 
1055+                             var  changedThisProcessor  =  false ; 
1056+ 
1057+                             // For each enum parameter, if value is an ordinal index, replace with the underlying numeric enum value. 
10421058                            foreach  ( var  field  in  procType . GetFields ( BindingFlags . Public  |  BindingFlags . Instance ) . Where ( f =>  f . FieldType . IsEnum ) ) 
10431059                            { 
1044-                                 if  ( dict . TryGetValue ( field . Name ,  out  var  ordS )  &&  int . TryParse ( ordS ,  out  var  ord ) ) 
1060+                                 if  ( dict . TryGetValue ( field . Name ,  out  var  ordStr )  &&  int . TryParse ( ordStr ,  out  var  ordinal ) ) 
10451061                                { 
10461062                                    var  values  =  Enum . GetValues ( field . FieldType ) . Cast < object > ( ) . ToArray ( ) ; 
1047-                                     if  ( ord  >=  0  &&  ord  <  values . Length ) 
1063+                                     if  ( ordinal  >=  0  &&  ordinal  <  values . Length ) 
10481064                                    { 
1049-                                         dict [ field . Name ]  =  Convert . ToInt32 ( values [ ord ] ) . ToString ( ) ; 
1050-                                         anyChanged  =  true ; 
1065+                                         dict [ field . Name ]  =  Convert . ToInt32 ( values [ ordinal ] ) . ToString ( ) ; 
1066+                                         changedThisProcessor  =  true ; 
10511067                                    } 
10521068                                } 
10531069                            } 
10541070
1055-                             if  ( ! anyChanged ) 
1071+                             if  ( ! changedThisProcessor ) 
10561072                            { 
1057-                                 rebuilt . Add ( nap . ToString ( ) ) ; 
1058-                             } 
1073+                                 if  ( ! canPreservePerToken ) 
1074+                                     rebuiltTokens . Add ( nap . ToString ( ) ) ; 
1075+                             }    
10591076                            else 
10601077                            { 
1078+                                 // Rebuild only this processor’s text. 
10611079                                var  paramText  =  string . Join ( "," ,  dict . Select ( kv =>  $ "{ kv . Key } ={ kv . Value } ") ) ; 
1062-                                 rebuilt . Add ( $ "{ nap . name } ({ paramText } )") ; 
1080+                                 var  migrated  =  $ "{ nap . name } ({ paramText } )"; 
1081+ 
1082+                                 if  ( canPreservePerToken ) 
1083+                                     rebuiltTokens [ pi ]  =  migrated ; 
1084+                                 else 
1085+                                     rebuiltTokens . Add ( migrated ) ; 
1086+ 
1087+                                 anyProcessorChanged  =  true ; 
10631088                            } 
10641089                        } 
10651090
1066-                         actionJson . processors  =  string . Join ( ";" ,  rebuilt ) ; 
1091+                         // Only touch the processors string if something actually changed. 
1092+                         if  ( anyProcessorChanged ) 
1093+                             actionJson . processors  =  string . Join ( ";" ,  rebuiltTokens ) ; 
10671094                        mapJson . actions [ ai ]  =  actionJson ; 
10681095                    } 
10691096                    parsedJson . maps [ mi ]  =  mapJson ; 
0 commit comments