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

◆ DrawProj_Spear()

static void Terraria.Main.DrawProj_Spear ( Projectile proj,
ref Microsoft::Xna::Framework::Color projectileColor,
ref SpriteEffects dir )
inlinestaticprivate

Definition at line 32404 of file Main.cs.

32405 {
32406 dir = SpriteEffects.None;
32407 float num = (float)Math.Atan2(proj.velocity.Y, proj.velocity.X) + 2.355f;
32409 Player player = Main.player[proj.owner];
32413 if (player.direction > 0)
32414 {
32415 dir = SpriteEffects.FlipHorizontally;
32416 vector.X = val.Width();
32417 num -= (float)Math.PI / 2f;
32418 }
32419 if (player.gravDir == -1f)
32420 {
32421 if (proj.direction == 1)
32422 {
32423 dir = SpriteEffects.FlipHorizontally | SpriteEffects.FlipVertically;
32424 vector = new Vector2(val.Width(), val.Height());
32425 num -= (float)Math.PI / 2f;
32426 }
32427 else if (proj.direction == -1)
32428 {
32429 dir = SpriteEffects.FlipVertically;
32430 vector = new Vector2(0f, val.Height());
32431 num += (float)Math.PI / 2f;
32432 }
32433 }
32434 Vector2.Lerp(vector, value.Center.ToVector2(), 0.25f);
32435 float num2 = 0f;
32436 Vector2 vector2 = proj.Center + new Vector2(0f, proj.gfxOffY);
32437 if (proj.AI_019_Spears_GetExtensionHitbox(out var extensionBox))
32438 {
32439 Vector2 value2 = player.RotatedRelativePoint(player.MountedCenter, reverseRotation: false, addGfxOffY: false);
32440 float num3 = extensionBox.Size().Length() / proj.Hitbox.Size().Length();
32441 _ = new Microsoft.Xna.Framework.Color(255, 255, 255, 0) * 1f;
32442 float num4 = Utils.Remap(player.itemAnimation, player.itemAnimationMax, (float)player.itemAnimationMax / 3f, 0f, 1f);
32443 float num5 = Utils.Remap(num4, 0f, 0.3f, 0f, 1f) * Utils.Remap(num4, 0.3f, 1f, 1f, 0f);
32444 num5 = 1f - (1f - num5) * (1f - num5);
32445 Vector2 vector3 = extensionBox.Center.ToVector2() + new Vector2(0f, proj.gfxOffY);
32446 Vector2.Lerp(value2, vector3, 1.1f);
32447 Texture2D value3 = TextureAssets.Extra[98].Value;
32448 Vector2 origin = value3.Size() / 2f;
32449 Microsoft.Xna.Framework.Color color = new Microsoft.Xna.Framework.Color(255, 255, 255, 0) * 0.5f;
32450 switch (proj.type)
32451 {
32452 case 105:
32453 color = new Microsoft.Xna.Framework.Color(255, 220, 80, 0);
32454 break;
32455 case 46:
32456 color = new Microsoft.Xna.Framework.Color(180, 80, 255, 0);
32457 break;
32458 case 342:
32459 color = new Microsoft.Xna.Framework.Color(80, 140, 255, 0);
32460 break;
32461 case 153:
32462 color = new Microsoft.Xna.Framework.Color(255, 50, 30, 15);
32463 break;
32464 }
32465 float num6 = num - (float)Math.PI / 4f * (float)proj.spriteDirection;
32466 if (player.gravDir < 0f)
32467 {
32468 num6 -= (float)Math.PI / 2f * (float)proj.spriteDirection;
32469 }
32470 EntitySpriteDraw(value3, Vector2.Lerp(vector3, vector2, 0.5f) - screenPosition, null, color * num5, num6, origin, new Vector2(num5 * num3, num3) * proj.scale * num3, dir);
32471 EntitySpriteDraw(value3, Vector2.Lerp(vector3, vector2, 1f) - screenPosition, null, color * num5, num6, origin, new Vector2(num5 * num3, num3 * 1.5f) * proj.scale * num3, dir);
32472 EntitySpriteDraw(value3, Vector2.Lerp(value2, vector2, num4 * 1.5f - 0.5f) - screenPosition + new Vector2(0f, 2f), null, color * num5, num6, origin, new Vector2(num5 * num3 * 1f * num5, num3 * 2f * num5) * proj.scale * num3, dir);
32473 for (float num7 = 0.4f; num7 <= 1f; num7 += 0.1f)
32474 {
32476 EntitySpriteDraw(value3, vector4 - screenPosition + new Vector2(0f, 2f), null, color * num5 * 0.75f * num7, num6, origin, new Vector2(num5 * num3 * 1f * num5, num3 * 2f * num5) * proj.scale * num3, dir);
32477 }
32478 extensionBox.Offset((int)(0f - screenPosition.X), (int)(0f - screenPosition.Y));
32479 }
32480 EntitySpriteDraw(val.Value, vector2 - screenPosition, value, proj.GetAlpha(projectileColor), num, vector, proj.scale, dir);
32481 rect.Offset((int)(0f - screenPosition.X), (int)(0f - screenPosition.Y));
32483 }
static double Atan2(double y, double x)
const double PI
Definition Math.cs:16
static Asset< Texture2D >[] Projectile
static Asset< Texture2D >[] Extra
static Asset< Texture2D > MagicPixel
static SpriteBatch spriteBatch
Definition Main.cs:974
static Vector2 screenPosition
Definition Main.cs:1715
static Player[] player
Definition Main.cs:1803
static void EntitySpriteDraw(Texture2D texture, Vector2 position, Microsoft.Xna.Framework.Rectangle? sourceRectangle, Microsoft.Xna.Framework.Color color, float rotation, Vector2 origin, float scale, SpriteEffects effects, float worthless=0f)
Definition Main.cs:34658
static Vector2 Lerp(Vector2 value1, Vector2 value2, float amount)
Definition Vector2.cs:227

References System.Math.Atan2(), Terraria.Main.EntitySpriteDraw(), Terraria.GameContent.TextureAssets.Extra, Microsoft.Xna.Framework.Vector2.Lerp(), Terraria.GameContent.TextureAssets.MagicPixel, System.Math.PI, Terraria.Main.player, Terraria.GameContent.TextureAssets.Projectile, Terraria.Utils.Remap(), Terraria.Main.screenPosition, Terraria.Main.spriteBatch, System.value, Microsoft.Xna.Framework.Graphics.Vector2, Microsoft.Xna.Framework.Color.White, and Microsoft.Xna.Framework.Vector2.Zero.

Referenced by Terraria.Main.DrawProjDirect().