Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ Draw()

void Terraria.Mount.Draw ( List< DrawData > playerDrawData,
int drawType,
Player drawPlayer,
Vector2 Position,
Color drawColor,
SpriteEffects playerEffect,
float shadow )
inline

Definition at line 4715 of file Mount.cs.

4716 {
4717 if (playerDrawData == null)
4718 {
4719 return;
4720 }
4723 switch (drawType)
4724 {
4725 case 0:
4728 break;
4729 case 1:
4732 break;
4733 case 2:
4734 if (_type == 0 && _idleTime >= _idleTimeNext)
4735 {
4736 return;
4737 }
4740 break;
4741 case 3:
4744 break;
4745 default:
4746 texture2D = null;
4747 texture2D2 = null;
4748 break;
4749 }
4750 int type = _type;
4751 if (type == 50 && texture2D != null)
4752 {
4754 queenSlimeMount.Request();
4755 if (queenSlimeMount.IsReady)
4756 {
4757 texture2D = queenSlimeMount.GetTarget();
4758 }
4759 }
4760 if (texture2D == null)
4761 {
4762 return;
4763 }
4764 type = _type;
4765 if ((type == 0 || type == 9) && drawType == 3 && shadow != 0f)
4766 {
4767 return;
4768 }
4769 int num = XOffset;
4770 int num2 = YOffset + PlayerOffset;
4771 if (drawPlayer.direction <= 0 && (!Cart || !Directional))
4772 {
4773 num *= -1;
4774 }
4775 Position.X = (int)(Position.X - Main.screenPosition.X + (float)(drawPlayer.width / 2) + (float)num);
4776 Position.Y = (int)(Position.Y - Main.screenPosition.Y + (float)(drawPlayer.height / 2) + (float)num2);
4777 int num3 = 0;
4778 bool flag = true;
4779 int num4 = _data.totalFrames;
4780 int num5 = _data.textureHeight;
4781 switch (_type)
4782 {
4783 case 23:
4784 num3 = _frame;
4785 break;
4786 case 9:
4787 num3 = drawType switch
4788 {
4789 0 => _frame,
4790 2 => _frameExtra,
4791 3 => _frameExtra,
4792 _ => 0,
4793 };
4794 break;
4795 case 46:
4796 num3 = drawType switch
4797 {
4798 2 => _frame,
4799 3 => _frameExtra,
4800 _ => 0,
4801 };
4802 break;
4803 case 5:
4804 num3 = drawType switch
4805 {
4806 0 => _frame,
4807 1 => _frameExtra,
4808 _ => 0,
4809 };
4810 break;
4811 case 17:
4812 num5 = texture2D.Height;
4813 switch (drawType)
4814 {
4815 case 0:
4816 num3 = _frame;
4817 num4 = 4;
4818 break;
4819 case 1:
4820 num3 = _frameExtra;
4821 num4 = 4;
4822 break;
4823 default:
4824 num3 = 0;
4825 break;
4826 }
4827 break;
4828 case 52:
4829 if (drawType == 3)
4830 {
4831 if (drawPlayer.itemAnimation > 0)
4832 {
4833 Rectangle bodyFrame = drawPlayer.bodyFrame;
4834 int num6 = bodyFrame.Y / bodyFrame.Height;
4835 int useStyle = drawPlayer.lastVisualizedSelectedItem.useStyle;
4836 num3 = Utils.Clamp(num6, 1, 4);
4837 if (num3 == 3 || num6 == 0 || useStyle == 13)
4838 {
4839 num3 = _frame;
4840 }
4841 if (useStyle == 12 && drawPlayer.itemAnimation > drawPlayer.itemAnimationMax / 2)
4842 {
4843 num3 = 3;
4844 }
4845 }
4846 else
4847 {
4848 _ = drawPlayer.lastVisualizedSelectedItem.holdStyle;
4849 num3 = _frame;
4850 }
4851 }
4852 else
4853 {
4854 num3 = _frame;
4855 }
4856 break;
4857 case 39:
4858 num5 = texture2D.Height;
4859 switch (drawType)
4860 {
4861 case 2:
4862 num3 = _frame;
4863 num4 = 3;
4864 break;
4865 case 3:
4866 num3 = _frameExtra;
4867 num4 = 6;
4868 break;
4869 default:
4870 num3 = 0;
4871 break;
4872 }
4873 break;
4874 default:
4875 num3 = _frame;
4876 break;
4877 }
4878 int num7 = num5 / num4;
4880 if (flag)
4881 {
4882 value.Height -= 2;
4883 }
4884 switch (_type)
4885 {
4886 case 0:
4887 if (drawType == 3)
4888 {
4890 }
4891 break;
4892 case 9:
4893 if (drawType == 3)
4894 {
4895 if (_abilityCharge == 0)
4896 {
4897 return;
4898 }
4900 drawColor.A = 0;
4901 }
4902 break;
4903 case 7:
4904 if (drawType == 3)
4905 {
4906 drawColor = new Color(250, 250, 250, 255) * drawPlayer.stealth * (1f - shadow);
4907 }
4908 break;
4909 }
4910 Color color = new Color(drawColor.ToVector4() * 0.25f + new Vector4(0.75f));
4911 switch (_type)
4912 {
4913 case 45:
4914 if (drawType == 2)
4915 {
4916 color = new Color(150, 110, 110, 100);
4917 }
4918 break;
4919 case 11:
4920 if (drawType == 2)
4921 {
4922 color = Color.White;
4923 color.A = 127;
4924 }
4925 break;
4926 case 12:
4927 if (drawType == 0)
4928 {
4929 float num8 = MathHelper.Clamp(drawPlayer.MountFishronSpecialCounter / 60f, 0f, 1f);
4930 color = Colors.CurrentLiquidColor;
4931 if (color == Color.Transparent)
4932 {
4933 color = Color.White;
4934 }
4935 color.A = 127;
4936 color *= num8;
4937 }
4938 break;
4939 case 24:
4940 if (drawType == 2)
4941 {
4942 color = Color.SkyBlue * 0.5f;
4943 color.A = 20;
4944 }
4945 break;
4946 }
4947 float num9 = 0f;
4948 switch (_type)
4949 {
4950 case 8:
4951 {
4952 DrillMountData drillMountData = (DrillMountData)_mountSpecificData;
4953 switch (drawType)
4954 {
4955 case 0:
4956 num9 = drillMountData.outerRingRotation - num9;
4957 break;
4958 case 3:
4959 num9 = drillMountData.diodeRotation - num9 - drawPlayer.fullRotation;
4960 break;
4961 }
4962 break;
4963 }
4964 case 7:
4965 num9 = drawPlayer.fullRotation;
4966 break;
4967 }
4968 Vector2 origin = Origin;
4969 type = _type;
4970 _ = 8;
4971 float scale = 1f;
4973 switch (_type)
4974 {
4975 case 7:
4977 break;
4978 case 8:
4979 spriteEffects = ((drawPlayer.direction == 1 && drawType == 2) ? SpriteEffects.FlipHorizontally : SpriteEffects.None);
4980 break;
4981 case 6:
4982 case 13:
4983 spriteEffects = (_flipDraw ? SpriteEffects.FlipHorizontally : SpriteEffects.None);
4984 break;
4985 default:
4986 spriteEffects = playerEffect;
4987 break;
4988 }
4990 {
4991 spriteEffects = ((Math.Sign(drawPlayer.velocity.X) == -drawPlayer.direction) ? (playerEffect ^ SpriteEffects.FlipHorizontally) : playerEffect);
4992 }
4993 bool flag2 = false;
4994 switch (_type)
4995 {
4996 case 50:
4997 if (drawType == 0)
4998 {
4999 Vector2 position = Position + new Vector2(0f, 8 - PlayerOffset + 20);
5001 if (flag)
5002 {
5003 value6.Height -= 2;
5004 }
5005 DrawData item = new DrawData(TextureAssets.Extra[207].Value, position, value6, drawColor, num9, origin, scale, spriteEffects);
5006 item.shader = currentShader;
5008 }
5009 break;
5010 case 35:
5011 {
5012 if (drawType != 2)
5013 {
5014 break;
5015 }
5016 ExtraFrameMountData extraFrameMountData = (ExtraFrameMountData)_mountSpecificData;
5017 int num11 = -36;
5018 if (spriteEffects.HasFlag(SpriteEffects.FlipHorizontally))
5019 {
5020 num11 *= -1;
5021 }
5022 Vector2 vector2 = new Vector2(num11, -26f);
5023 if (shadow == 0f)
5024 {
5025 if (Math.Abs(drawPlayer.velocity.X) > 1f)
5026 {
5027 extraFrameMountData.frameCounter += Math.Min(2f, Math.Abs(drawPlayer.velocity.X * 0.4f));
5028 while (extraFrameMountData.frameCounter > 6f)
5029 {
5030 extraFrameMountData.frameCounter -= 6f;
5031 extraFrameMountData.frame++;
5032 if ((extraFrameMountData.frame > 2 && extraFrameMountData.frame < 5) || extraFrameMountData.frame > 7)
5033 {
5034 extraFrameMountData.frame = 0;
5035 }
5036 }
5037 }
5038 else
5039 {
5040 extraFrameMountData.frameCounter += 1f;
5041 while (extraFrameMountData.frameCounter > 6f)
5042 {
5043 extraFrameMountData.frameCounter -= 6f;
5044 extraFrameMountData.frame++;
5045 if (extraFrameMountData.frame > 5)
5046 {
5047 extraFrameMountData.frame = 5;
5048 }
5049 }
5050 }
5051 }
5052 Texture2D value4 = TextureAssets.Extra[142].Value;
5053 Rectangle value5 = value4.Frame(1, 8, 0, extraFrameMountData.frame);
5054 if (flag)
5055 {
5056 value5.Height -= 2;
5057 }
5059 item.shader = currentShader;
5061 break;
5062 }
5063 case 38:
5064 if (drawType == 0)
5065 {
5066 int num10 = 0;
5067 if (spriteEffects.HasFlag(SpriteEffects.FlipHorizontally))
5068 {
5069 num10 = 22;
5070 }
5071 Vector2 vector = new Vector2(num10, -10f);
5072 Texture2D value2 = TextureAssets.Extra[151].Value;
5073 Rectangle value3 = value2.Frame();
5075 item.shader = currentShader;
5077 flag2 = true;
5078 }
5079 break;
5080 }
5081 if (!flag2)
5082 {
5084 item.shader = currentShader;
5086 if (texture2D2 != null)
5087 {
5088 item = new DrawData(texture2D2, Position, value, color * ((float)(int)drawColor.A / 255f), num9, origin, scale, spriteEffects);
5089 item.shader = currentShader;
5090 }
5092 }
5093 switch (_type)
5094 {
5095 case 50:
5096 if (drawType == 0)
5097 {
5098 texture2D = TextureAssets.Extra[205].Value;
5100 item.shader = currentShader;
5102 Vector2 position3 = Position + new Vector2(0f, 8 - PlayerOffset + 20);
5104 if (flag)
5105 {
5106 value8.Height -= 2;
5107 }
5108 texture2D = TextureAssets.Extra[206].Value;
5110 item.shader = currentShader;
5112 }
5113 break;
5114 case 45:
5115 {
5116 if (drawType != 0 || shadow != 0f)
5117 {
5118 break;
5119 }
5120 if (Math.Abs(drawPlayer.velocity.X) > DashSpeed * 0.9f)
5121 {
5122 color = new Color(255, 220, 220, 200);
5123 scale = 1.1f;
5124 }
5125 for (int k = 0; k < 2; k++)
5126 {
5127 Vector2 position2 = Position + new Vector2((float)Main.rand.Next(-10, 11) * 0.1f, (float)Main.rand.Next(-10, 11) * 0.1f);
5128 value = new Rectangle(0, num7 * 3, _data.textureWidth, num7);
5129 if (flag)
5130 {
5131 value.Height -= 2;
5132 }
5133 DrawData item = new DrawData(texture2D2, position2, value, color, num9, origin, scale, spriteEffects);
5134 item.shader = currentShader;
5136 }
5137 break;
5138 }
5139 case 17:
5140 if (drawType == 1 && ShouldGolfCartEmitLight())
5141 {
5142 value = new Rectangle(0, num7 * 3, _data.textureWidth, num7);
5143 if (flag)
5144 {
5145 value.Height -= 2;
5146 }
5147 drawColor = Color.White * 1f;
5148 drawColor.A = 0;
5150 item.shader = currentShader;
5152 }
5153 break;
5154 case 23:
5155 if (drawType == 0)
5156 {
5157 texture2D = TextureAssets.Extra[114].Value;
5158 value = texture2D.Frame(2);
5159 int width = value.Width;
5160 value.Width -= 2;
5164 origin = new Vector2(value.Width / 2, 0f);
5165 DrawData item = new DrawData(texture2D, vector7.Floor(), value, drawColor, num9, origin, scale, spriteEffects);
5166 item.shader = currentShader;
5168 Color color3 = new Color(new Vector3(0.9f, 0.85f, 0f));
5169 color3.A /= 2;
5170 float num13 = ((float)drawPlayer.miscCounter / 75f * ((float)Math.PI * 2f)).ToRotationVector2().X * 1f;
5171 Color color4 = new Color(80, 70, 40, 0) * (num13 / 8f + 0.5f) * 0.8f;
5172 value.X += width;
5173 for (int l = 0; l < 4; l++)
5174 {
5175 item = new DrawData(texture2D, (vector7 + ((float)l * ((float)Math.PI / 2f)).ToRotationVector2() * num13).Floor(), value, color4, num9, origin, scale, spriteEffects);
5176 item.shader = currentShader;
5178 }
5179 }
5180 break;
5181 case 8:
5182 {
5183 if (drawType != 3)
5184 {
5185 break;
5186 }
5187 DrillMountData drillMountData2 = (DrillMountData)_mountSpecificData;
5188 Rectangle value7 = new Rectangle(0, 0, 1, 1);
5189 Vector2 vector3 = drillDiodePoint1.RotatedBy(drillMountData2.diodeRotation);
5190 Vector2 vector4 = drillDiodePoint2.RotatedBy(drillMountData2.diodeRotation);
5191 for (int i = 0; i < drillMountData2.beams.Length; i++)
5192 {
5193 DrillBeam drillBeam = drillMountData2.beams[i];
5194 if (drillBeam.curTileTarget == Point16.NegativeOne)
5195 {
5196 continue;
5197 }
5198 for (int j = 0; j < 2; j++)
5199 {
5200 Vector2 vector5 = new Vector2(drillBeam.curTileTarget.X * 16 + 8, drillBeam.curTileTarget.Y * 16 + 8) - Main.screenPosition - Position;
5202 Color color2;
5203 if (j == 0)
5204 {
5205 vector6 = vector3;
5207 }
5208 else
5209 {
5210 vector6 = vector4;
5212 }
5213 color2.A = 128;
5214 color2 *= 0.5f;
5215 Vector2 v = vector5 - vector6;
5216 float num12 = v.ToRotation();
5217 float y = v.Length();
5218 DrawData item = new DrawData(scale: new Vector2(2f, y), texture: TextureAssets.MagicPixel.Value, position: vector6 + Position, sourceRect: value7, color: color2, rotation: num12 - (float)Math.PI / 2f, origin: Vector2.Zero, effect: SpriteEffects.None);
5219 item.ignorePlayerRotation = true;
5220 item.shader = currentShader;
5222 }
5223 }
5224 break;
5225 }
5226 }
5227 }
static float Clamp(float value, float min, float max)
Definition MathHelper.cs:46
void Add(TKey key, TValue value)
static byte Min(byte val1, byte val2)
Definition Math.cs:912
static double Abs(double value)
const double PI
Definition Math.cs:16
static int Sign(decimal value)
Definition Math.cs:1202
static PlayerQueenSlimeMountTextureContent QueenSlimeMount
static Asset< Texture2D >[] Extra
static Color CurrentLiquidColor
Definition Colors.cs:98
static bool[] FacePlayersVelocity
Definition MountID.cs:11
Asset< Texture2D > frontTextureGlow
Definition Mount.cs:118
Asset< Texture2D > frontTexture
Definition Mount.cs:116
Asset< Texture2D > frontTextureExtra
Definition Mount.cs:120
Asset< Texture2D > backTextureExtraGlow
Definition Mount.cs:114
Asset< Texture2D > backTextureGlow
Definition Mount.cs:110
Asset< Texture2D > backTextureExtra
Definition Mount.cs:112
Asset< Texture2D > backTexture
Definition Mount.cs:108
Asset< Texture2D > frontTextureExtraGlow
Definition Mount.cs:122
int _abilityCharge
Definition Mount.cs:315
bool _flipDraw
Definition Mount.cs:291
float GetWitchBroomTrinketRotation(Player player)
Definition Mount.cs:3003
MountData _data
Definition Mount.cs:287
bool Directional
Definition Mount.cs:495
static int currentShader
Definition Mount.cs:237
static Vector2 drillDiodePoint1
Definition Mount.cs:267
object _mountSpecificData
Definition Mount.cs:329
int _idleTimeNext
Definition Mount.cs:307
int _frameExtra
Definition Mount.cs:297
Vector2 Origin
Definition Mount.cs:518
Vector2 GetWitchBroomTrinketOriginOffset(Player player)
Definition Mount.cs:3018
static bool ShouldGolfCartEmitLight()
Definition Mount.cs:3914
static Vector2 drillDiodePoint2
Definition Mount.cs:269
int _idleTime
Definition Mount.cs:305
int PlayerOffset
Definition Mount.cs:362
float DashSpeed
Definition Mount.cs:441
static Color CornflowerBlue
Definition Color.cs:112
static Color Multiply(Color value, float scale)
Definition Color.cs:513
static Color Transparent
Definition Color.cs:76

References Terraria.Mount._abilityCharge, Terraria.Mount._data, Terraria.Mount._flipDraw, Terraria.Mount._frame, Terraria.Mount._frameExtra, Terraria.Mount._idleTime, Terraria.Mount._idleTimeNext, Terraria.Mount._mountSpecificData, Terraria.Mount._type, Terraria.Mount.MountData.abilityChargeMax, System.Math.Abs(), System.Collections.Generic.Dictionary< TKey, TValue >.Add(), Terraria.Mount.MountData.backTexture, Terraria.Mount.MountData.backTextureExtra, Terraria.Mount.MountData.backTextureExtraGlow, Terraria.Mount.MountData.backTextureGlow, Terraria.Player.bodyFrame, Terraria.Mount.Cart, Microsoft.Xna.Framework.MathHelper.Clamp(), Microsoft.Xna.Framework.Graphics.Color, Microsoft.Xna.Framework.Color.CornflowerBlue, Terraria.ID.Colors.CurrentLiquidColor, Terraria.Mount.currentShader, Terraria.Mount.DashSpeed, Terraria.Entity.direction, Terraria.Mount.Directional, Terraria.Mount.drillDiodePoint1, Terraria.Mount.drillDiodePoint2, Terraria.GameContent.TextureAssets.Extra, Terraria.ID.MountID.Sets.FacePlayersVelocity, Terraria.Mount.MountData.frontTexture, Terraria.Mount.MountData.frontTextureExtra, Terraria.Mount.MountData.frontTextureExtraGlow, Terraria.Mount.MountData.frontTextureGlow, Terraria.Player.fullRotation, Terraria.Mount.GetWitchBroomTrinketOriginOffset(), Terraria.Mount.GetWitchBroomTrinketRotation(), Microsoft.Xna.Framework.Rectangle.Height, Terraria.Item.holdStyle, System.item, Terraria.Player.itemAnimation, Terraria.Player.itemAnimationMax, Terraria.Player.lastVisualizedSelectedItem, Microsoft.Xna.Framework.Vector2.Length(), Microsoft.Xna.Framework.Color.LightGreen, Terraria.GameContent.TextureAssets.MagicPixel, System.Math.Min(), Terraria.Player.miscCounter, Terraria.Player.MountFishronSpecialCounter, Microsoft.Xna.Framework.Color.Multiply(), Terraria.DataStructures.Point16.NegativeOne, Terraria.Mount.Origin, System.Math.PI, Terraria.Mount.PlayerOffset, Terraria.GameContent.TextureAssets.RenderTargets.QueenSlimeMount, Terraria.Main.rand, Terraria.Main.screenPosition, Terraria.Mount.ShouldGolfCartEmitLight(), System.Math.Sign(), Terraria.Mount.MountData.textureHeight, Terraria.Mount.MountData.textureWidth, Terraria.Mount.MountData.totalFrames, Microsoft.Xna.Framework.Color.Transparent, System.type, Terraria.Item.useStyle, ReLogic.Content.Asset< T >.Value, System.value, Microsoft.Xna.Framework.Graphics.Vector2, Microsoft.Xna.Framework.Graphics.Vector3, Terraria.Entity.velocity, Microsoft.Xna.Framework.Color.White, Microsoft.Xna.Framework.Vector2.X, Terraria.Mount.XOffset, Terraria.Mount.YOffset, and Microsoft.Xna.Framework.Vector2.Zero.