1+ using Microsoft . Xna . Framework . Graphics ;
2+ using ModReloader . Core . Features . Reload ;
3+ using Terraria . ModLoader . Config . UI ;
4+ using Terraria . UI ;
5+
6+ namespace ModReloader . Common . Configs . ConfigElements . PlayerAndWorldNew ;
7+
8+ public class PlayerDefinitionOptionElement : DefinitionOptionElement < PlayerDefinition >
9+ {
10+ public PlayerDefinitionOptionElement ( PlayerDefinition definition , float scale = 0.5f ) : base ( definition , scale )
11+ {
12+ OverflowHidden = true ;
13+ }
14+
15+ public override void SetItem ( PlayerDefinition definition )
16+ {
17+ base . SetItem ( definition ) ;
18+ Tooltip = definition ? . ToString ( ) ;
19+ }
20+
21+ private bool _animated ;
22+ private int _animationCounter ;
23+
24+ public override void Update ( GameTime gameTime )
25+ {
26+ OverflowHidden = true ;
27+ base . Update ( gameTime ) ;
28+
29+ if ( Definition ? . Name is string name && Utilities . FindPlayer ( name ) ? . Player is Player player )
30+ {
31+ using ( new Main . CurrentPlayerOverride ( player ) )
32+ {
33+ _animated = IsMouseHovering ;
34+
35+ if ( _animated )
36+ {
37+ _animationCounter ++ ;
38+ int frame = ( int ) ( Main . GlobalTimeWrappedHourly / 0.07f ) % 14 + 6 ;
39+ int y = frame * 56 ;
40+ player . bodyFrame . Y = player . legFrame . Y = player . headFrame . Y = y ;
41+ player . WingFrame ( wingFlap : false ) ;
42+ }
43+ else
44+ {
45+ player . bodyFrame . Y = player . legFrame . Y = player . headFrame . Y = 0 ;
46+ }
47+
48+ player . PlayerFrame ( ) ;
49+ }
50+ }
51+ }
52+
53+ protected override void DrawSelf ( SpriteBatch spriteBatch )
54+ {
55+ // Positions
56+ CalculatedStyle dimensions = GetInnerDimensions ( ) ;
57+ Vector2 position = dimensions . Position ( ) ;
58+ Vector2 size = BackgroundTexture . Size ( ) * Scale ;
59+ Rectangle destination = new Rectangle ( ( int ) position . X , ( int ) position . Y , ( int ) size . X , ( int ) size . Y ) ;
60+
61+ // Draw background
62+ spriteBatch . End ( ) ;
63+ spriteBatch . Begin ( SpriteSortMode . Immediate , BlendState . AlphaBlend , SamplerState . PointClamp ,
64+ DepthStencilState . Default , RasterizerState . CullNone , null , Main . UIScaleMatrix ) ;
65+ spriteBatch . Draw ( BackgroundTexture . Value , destination , Color . White ) ;
66+ spriteBatch . End ( ) ;
67+
68+ // Restart spritebatch
69+ spriteBatch . Begin ( SpriteSortMode . Deferred , BlendState . AlphaBlend , SamplerState . PointClamp ,
70+ DepthStencilState . Default , RasterizerState . CullNone , null , Main . UIScaleMatrix ) ;
71+
72+ // Draw player
73+ if ( Definition ? . Name is string name && Utilities . FindPlayer ( name ) ? . Player is Player player )
74+ {
75+ player . direction = 1 ; // facing right
76+ //player.mount.SetMount(0, player);
77+ //player.heldProj = -1;
78+
79+ using ( new Main . CurrentPlayerOverride ( player ) )
80+ {
81+ Vector2 drawPos = position + size / 2f + Main . screenPosition ;
82+ Main . PlayerRenderer . DrawPlayer ( Main . Camera , player , drawPos , 0f , Vector2 . Zero ) ;
83+ }
84+ }
85+
86+ // Restart spritebatch
87+ spriteBatch . End ( ) ;
88+ spriteBatch . Begin ( SpriteSortMode . Deferred , BlendState . AlphaBlend , SamplerState . PointClamp ,
89+ DepthStencilState . Default , RasterizerState . CullNone , null , Main . UIScaleMatrix ) ;
90+
91+ if ( IsMouseHovering )
92+ UIModConfig . Tooltip = Tooltip ;
93+ }
94+ }
0 commit comments