@@ -68,40 +68,93 @@ public static IEnumerable<string> GetEpochEntryIds()
6868 public static IEnumerable < ( string EntryId , LocString Title ) > EnumerateLocalizedModelTitles ( )
6969 {
7070 foreach ( var card in ModelDb . AllCards )
71- yield return ( card . Id . Entry , card . TitleLocString ) ;
71+ yield return GetTitleCandidate ( card ) ;
7272
7373 foreach ( var potion in ModelDb . AllPotions )
74- yield return ( potion . Id . Entry , potion . Title ) ;
74+ yield return GetTitleCandidate ( potion ) ;
7575
7676 foreach ( var relic in ModelDb . AllRelics )
77- yield return ( relic . Id . Entry , relic . Title ) ;
77+ yield return GetTitleCandidate ( relic ) ;
7878
7979 foreach ( var encounter in ModelDb . AllEncounters )
80- yield return ( encounter . Id . Entry , encounter . Title ) ;
80+ yield return GetTitleCandidate ( encounter ) ;
8181
8282 foreach ( var affliction in ModelDb . DebugAfflictions )
83- yield return ( affliction . Id . Entry , affliction . Title ) ;
83+ yield return GetTitleCandidate ( affliction ) ;
8484
8585 foreach ( var enchantment in ModelDb . DebugEnchantments )
86- yield return ( enchantment . Id . Entry , enchantment . Title ) ;
86+ yield return GetTitleCandidate ( enchantment ) ;
8787
8888 foreach ( var ancient in ModelDb . AllAncients )
89- yield return ( ancient . Id . Entry , ancient . Title ) ;
89+ yield return GetTitleCandidate ( ancient ) ;
9090
9191 foreach ( var evt in ModelDb . AllEvents )
92- yield return ( evt . Id . Entry , evt . Title ) ;
92+ yield return GetTitleCandidate ( evt ) ;
9393
9494 foreach ( var act in ModelDb . Acts )
95- yield return ( act . Id . Entry , act . Title ) ;
95+ yield return GetTitleCandidate ( act ) ;
9696
97- foreach ( var power in ModelDb . AllAbstractModelSubtypes . Where ( t => t . IsSubclassOf ( typeof ( PowerModel ) ) ) )
98- yield return ( ModelDb . DebugPower ( power ) . Id . Entry , ModelDb . DebugPower ( power ) . Title ) ;
97+ foreach ( var powerType in ModelDb . AllAbstractModelSubtypes . Where ( t => t . IsSubclassOf ( typeof ( PowerModel ) ) ) )
98+ {
99+ var power = ModelDb . DebugPower ( powerType ) ;
100+ yield return GetTitleCandidate ( power ) ;
101+ }
99102
100103 foreach ( var monster in ModelDb . Monsters )
101- yield return ( monster . Id . Entry , monster . Title ) ;
104+ yield return GetTitleCandidate ( monster ) ;
102105
103106 foreach ( var epochId in EpochModel . AllEpochIds )
104107 yield return ( epochId , new ( "epochs" , epochId + ".title" ) ) ;
105108 }
109+
110+ private static ( string EntryId , LocString Title ) GetTitleCandidate ( AbstractModel model )
111+ {
112+ return ( model . Id . Entry , ResolveTitleForAutocomplete ( model ) ) ;
113+ }
114+
115+ private static LocString ResolveTitleForAutocomplete (
116+ AbstractModel model ,
117+ HashSet < Type > ? visitedModelTypes = null )
118+ {
119+ if ( model is not ITemporaryPower temporaryPower )
120+ return DefaultTitleForAutocomplete ( model ) ;
121+
122+ visitedModelTypes ??= [ ] ;
123+ if ( ! visitedModelTypes . Add ( model . GetType ( ) ) )
124+ return DefaultTitleForAutocomplete ( model ) ;
125+
126+ try
127+ {
128+ var origin = temporaryPower . OriginModel ;
129+ return ReferenceEquals ( origin , model )
130+ ? DefaultTitleForAutocomplete ( model )
131+ : ResolveTitleForAutocomplete ( origin , visitedModelTypes ) ;
132+ }
133+ catch
134+ {
135+ return DefaultTitleForAutocomplete ( model ) ;
136+ }
137+ }
138+
139+ private static LocString DefaultTitleForAutocomplete ( AbstractModel model )
140+ {
141+ return model switch
142+ {
143+ CardModel => new ( "cards" , model . Id . Entry + ".title" ) ,
144+ PotionModel => new ( "potions" , model . Id . Entry + ".title" ) ,
145+ RelicModel => new ( "relics" , model . Id . Entry + ".title" ) ,
146+ EncounterModel => new ( "encounters" , model . Id . Entry + ".title" ) ,
147+ AfflictionModel => new ( "afflictions" , model . Id . Entry + ".title" ) ,
148+ EnchantmentModel => new ( "enchantments" , model . Id . Entry + ".title" ) ,
149+ EventModel => new ( "events" , model . Id . Entry + ".title" ) ,
150+ ActModel => new ( "acts" , model . Id . Entry + ".title" ) ,
151+ PowerModel => new ( "powers" , model . Id . Entry + ".title" ) ,
152+ MonsterModel => new ( "monsters" , model . Id . Entry + ".name" ) ,
153+ OrbModel => new ( "orbs" , model . Id . Entry + ".title" ) ,
154+ CharacterModel => new ( "characters" , model . Id . Entry + ".title" ) ,
155+ ModifierModel => new ( "modifiers" , model . Id . Entry + ".title" ) ,
156+ _ => new ( model . Id . Category . ToLowerInvariant ( ) , model . Id . Entry + ".title" ) ,
157+ } ;
158+ }
106159 }
107160}
0 commit comments