11using Microsoft . Xna . Framework . Graphics ;
2+ using ModReloader . Core . Features ;
23using System ;
34using System . Linq ;
45using Terraria . GameContent . UI . Elements ;
56using Terraria . ID ;
67using Terraria . IO ;
78using Terraria . ModLoader . Config . UI ;
89using Terraria . UI ;
10+ using static System . Net . Mime . MediaTypeNames ;
911
1012namespace ModReloader . Common . Configs . ConfigElements . PlayerPicker ;
1113
12- internal sealed class PlayerDefinitionOptionElement : DefinitionOptionElement < PlayerDefinition >
14+ internal sealed class PlayerDefinitionOptionElement : DefinitionOptionElement < PlayerDefinition >
1315{
1416 private UICharacter _preview ;
1517 private bool isActiveSelection ;
1618
17- public PlayerDefinitionOptionElement ( PlayerDefinition definition , float scale = 0.75f , bool isActiveSelection = false ) : base ( definition , scale )
19+ public PlayerDefinitionOptionElement ( PlayerDefinition definition , float scale = 0.75f , bool isActiveSelection = false ) : base ( definition , scale )
1820 {
1921 this . isActiveSelection = isActiveSelection ;
2022 OverflowHidden = true ;
23+ NullID = - 1 ;
2124 }
2225
2326 public override void SetItem ( PlayerDefinition definition )
@@ -27,21 +30,27 @@ public override void SetItem(PlayerDefinition definition)
2730 RemoveAllChildren ( ) ;
2831 _preview = null ;
2932
30- string path = definition ? . Name ;
31- if ( string . IsNullOrEmpty ( path ) ) { Tooltip = "UnknownPlayer" ; return ; }
32-
3333 Main . LoadPlayers ( ) ;
34- PlayerFileData file = Main . PlayerList . FirstOrDefault ( p => string . Equals ( p . Path , path , StringComparison . OrdinalIgnoreCase ) ) ;
35- if ( file ? . Player == null ) { Tooltip = definition ? . ToString ( ) ?? "UnknownPlayer" ; return ; }
34+ if ( definition == null || definition . IsUnloaded )
35+ {
36+ Tooltip = "No Player Selected" ;
37+ Recalculate ( ) ;
38+ return ;
39+ }
40+
41+ PlayerFileData file = Utilities . FindPlayer ( definition . Type ) ;
3642
37- Tooltip = definition ? . ToString ( ) ?? "UnknownPlayer" ;
38- if ( file . Player . difficulty == PlayerDifficultyID . Creative ) { Color c = Main . creativeModeColor ; Tooltip += $ " [c/ { c . R : X2 } { c . G : X2 } { c . B : X2 } :(Journey)]" ; }
43+ Player player = file . Player ;
44+ player . dead = false ;
3945
40- Player p = file . Player ;
41- p . dead = false ;
46+ Tooltip = player . name ;
47+ if ( player . difficulty == PlayerDifficultyID . Creative )
48+ {
49+ Tooltip += Utilities . ColorToTerrariaString ( Main . creativeModeColor , " (Journey)" ) ;
50+ }
4251
4352 float charScale = isActiveSelection ? 0.6f : 0.8f ;
44- _preview = new UICharacter ( p , animated : false , hasBackPanel : false , characterScale : charScale , useAClone : true ) ;
53+ _preview = new UICharacter ( player , animated : false , hasBackPanel : false , characterScale : charScale , useAClone : true ) ;
4554 _preview . Top . Set ( - 6f , 0f ) ;
4655
4756 Append ( _preview ) ;
@@ -55,22 +64,18 @@ public override void Update(GameTime gameTime)
5564 // Animate when hovering
5665 if ( _preview != null )
5766 {
58- // HOT RELOAD TESTING
59- //_preview.Top.Set(-6, 0);
60- //_preview._characterScale = 0.5f;
61-
6267 _preview . SetAnimated ( IsMouseHovering ) ;
6368 }
64-
69+
6570 }
6671
6772 protected override void DrawSelf ( SpriteBatch spriteBatch )
6873 {
6974 base . DrawSelf ( spriteBatch ) ;
7075
7176 // Position
72- CalculatedStyle dimensions = GetInnerDimensions ( ) ;
73- Vector2 position = dimensions . Position ( ) ;
77+ CalculatedStyle dimensions = GetInnerDimensions ( ) ;
78+ Vector2 position = dimensions . Position ( ) ;
7479 Vector2 size = BackgroundTexture . Size ( ) * Scale ;
7580 Rectangle destination = new ( ( int ) position . X , ( int ) position . Y , ( int ) size . X , ( int ) size . Y ) ;
7681
0 commit comments