Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
UICharacter.cs
Go to the documentation of this file.
4using Terraria.ID;
5using Terraria.UI;
6
8
9public class UICharacter : UIElement
10{
11 private Player _player;
12
14
16
17 private static Item _blankItem = new Item();
18
19 private bool _animated;
20
21 private bool _drawsBackPanel;
22
23 private float _characterScale = 1f;
24
25 private int _animationCounter;
26
27 private static readonly Projectile[] NoPets = new Projectile[0];
28
29 public bool IsAnimated => _animated;
30
31 public UICharacter(Player player, bool animated = false, bool hasBackPanel = true, float characterScale = 1f, bool useAClone = false)
32 {
33 _player = player;
34 if (useAClone)
35 {
36 _player = player.SerializedClone();
37 _player.dead = false;
39 }
40 Width.Set(59f, 0f);
41 Height.Set(58f, 0f);
42 _texture = Main.Assets.Request<Texture2D>("Images/UI/PlayerBackground", (AssetRequestMode)1);
43 UseImmediateMode = true;
44 _animated = animated;
45 _drawsBackPanel = hasBackPanel;
46 _characterScale = characterScale;
50 }
51
52 private void PreparePetProjectiles()
53 {
54 if (!_player.hideMisc[0])
55 {
56 Item item = _player.miscEquips[0];
57 if (!item.IsAir)
58 {
59 int shoot = item.shoot;
61 }
62 }
63 }
64
66 {
67 Projectile projectile = new Projectile();
68 projectile.SetDefaults(projectileId);
69 projectile.isAPreviewDummy = true;
70 return projectile;
71 }
72
73 public override void Update(GameTime gameTime)
74 {
80 if (_animated)
81 {
83 }
84 base.Update(gameTime);
85 }
86
87 private void UpdateAnim()
88 {
89 if (!_animated)
90 {
91 _player.bodyFrame.Y = (_player.legFrame.Y = (_player.headFrame.Y = 0));
92 return;
93 }
94 int num = (int)(Main.GlobalTimeWrappedHourly / 0.07f) % 14 + 6;
95 _player.bodyFrame.Y = (_player.legFrame.Y = (_player.headFrame.Y = num * 56));
96 _player.WingFrame(wingFlap: false);
97 }
98
99 protected override void DrawSelf(SpriteBatch spriteBatch)
100 {
101 CalculatedStyle dimensions = GetDimensions();
102 if (_drawsBackPanel)
103 {
104 spriteBatch.Draw(_texture.Value, dimensions.Position(), Color.White);
105 }
106 UpdateAnim();
107 DrawPets(spriteBatch);
108 Vector2 playerPosition = GetPlayerPosition(ref dimensions);
111 Main.PlayerRenderer.DrawPlayer(Main.Camera, _player, playerPosition + Main.screenPosition, 0f, Vector2.Zero, 0f, _characterScale);
113 }
114
116 {
117 Vector2 result = dimensions.Position() + new Vector2(dimensions.Width * 0.5f - (float)(_player.width >> 1), dimensions.Height * 0.5f - (float)(_player.height >> 1));
118 if (_petProjectiles.Length != 0)
119 {
120 result.X -= 10f;
121 }
122 return result;
123 }
124
125 public void DrawPets(SpriteBatch spriteBatch)
126 {
127 CalculatedStyle dimensions = GetDimensions();
128 Vector2 playerPosition = GetPlayerPosition(ref dimensions);
129 for (int i = 0; i < _petProjectiles.Length; i++)
130 {
131 Projectile projectile = _petProjectiles[i];
132 Vector2 vector = playerPosition + new Vector2(0f, _player.height) + new Vector2(20f, 0f) + new Vector2(0f, -projectile.height);
133 projectile.position = vector + Main.screenPosition;
134 projectile.velocity = new Vector2(0.1f, 0f);
135 projectile.direction = 1;
136 projectile.owner = Main.myPlayer;
137 ProjectileID.Sets.CharacterPreviewAnimations[projectile.type].ApplyTo(projectile, _animated);
138 Player player = Main.player[Main.myPlayer];
140 Main.instance.DrawProjDirect(projectile);
141 Main.player[Main.myPlayer] = player;
142 }
143 spriteBatch.End();
144 spriteBatch.Begin(SpriteSortMode.Immediate, spriteBatch.GraphicsDevice.BlendState, spriteBatch.GraphicsDevice.SamplerStates[0], spriteBatch.GraphicsDevice.DepthStencilState, spriteBatch.GraphicsDevice.RasterizerState, null, Main.UIScaleMatrix);
145 }
146
147 public void SetAnimated(bool animated)
148 {
149 _animated = animated;
150 }
151}
static readonly SamplerState PointClamp
void Draw(Texture2D texture, Vector2 position, Color color)
UICharacter(Player player, bool animated=false, bool hasBackPanel=true, float characterScale=1f, bool useAClone=false)
override void DrawSelf(SpriteBatch spriteBatch)
static readonly Projectile[] NoPets
void DrawPets(SpriteBatch spriteBatch)
override void Update(GameTime gameTime)
Vector2 GetPlayerPosition(ref CalculatedStyle dimensions)
Projectile PreparePetProjectiles_CreatePetProjectileDummy(int projectileId)
static SettingsForCharacterPreview[] CharacterPreviewAnimations
static int myPlayer
Definition Main.cs:1801
static IPlayerRenderer PlayerRenderer
Definition Main.cs:291
static Main instance
Definition Main.cs:283
static Vector2 screenPosition
Definition Main.cs:1715
static Camera Camera
Definition Main.cs:289
static Matrix UIScaleMatrix
Definition Main.cs:2619
static IAssetRepository Assets
Definition Main.cs:209
static Player[] player
Definition Main.cs:1803
static float GlobalTimeWrappedHourly
Definition Main.cs:405
Player SerializedClone()
Definition Player.cs:51577
void ResetEffects()
Definition Player.cs:17886
BitsByte hideMisc
Definition Player.cs:1369
void ResetVisibleAccessories()
Definition Player.cs:28887
Item[] miscEquips
Definition Player.cs:1171
void UpdateDyes()
Definition Player.cs:9096
void UpdateMiscCounter()
Definition Player.cs:27566
Item[] inventory
Definition Player.cs:1257
void PlayerFrame()
Definition Player.cs:33978
void WingFrame(bool wingFlap)
Definition Player.cs:27719
void SetDefaults(int Type)
StyleDimension Height
Definition UIElement.cs:29
StyleDimension Width
Definition UIElement.cs:27
CalculatedStyle GetDimensions()
Definition UIElement.cs:382
SamplerState OverrideSamplerState
Definition UIElement.cs:45
void Set(float pixels, float precent)