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

◆ FillWhipControlPoints()

static void Terraria.Projectile.FillWhipControlPoints ( Projectile proj,
List< Vector2 > controlPoints )
inlinestatic

Definition at line 39698 of file Projectile.cs.

39699 {
39701 float num = proj.ai[0] / timeToFlyOut;
39702 float num2 = 0.5f;
39703 float num3 = 1f + num2;
39704 float num4 = (float)Math.PI * 10f * (1f - num * num3) * (float)(-proj.spriteDirection) / (float)segments;
39705 float num5 = num * num3;
39706 float num6 = 0f;
39707 if (num5 > 1f)
39708 {
39709 num6 = (num5 - 1f) / num2;
39710 num5 = MathHelper.Lerp(1f, 0f, num6);
39711 }
39712 float num7 = proj.ai[0] - 1f;
39713 Player player = Main.player[proj.owner];
39714 Item heldItem = Main.player[proj.owner].HeldItem;
39715 num7 = (float)(ContentSamples.ItemsByType[heldItem.type].useAnimation * 2) * num * player.whipRangeMultiplier;
39716 float num8 = proj.velocity.Length() * num7 * num5 * rangeMultiplier / (float)segments;
39717 float num9 = 1f;
39718 Vector2 playerArmPosition = Main.GetPlayerArmPosition(proj);
39720 float num10 = 0f - (float)Math.PI / 2f;
39722 float num11 = 0f + (float)Math.PI / 2f + (float)Math.PI / 2f * (float)proj.spriteDirection;
39724 float num12 = 0f + (float)Math.PI / 2f;
39726 for (int i = 0; i < segments; i++)
39727 {
39728 float num13 = (float)i / (float)segments;
39729 float num14 = num4 * num13 * num9;
39730 Vector2 vector4 = vector + num10.ToRotationVector2() * num8;
39731 Vector2 vector5 = vector3 + num12.ToRotationVector2() * (num8 * 2f);
39732 Vector2 vector6 = vector2 + num11.ToRotationVector2() * (num8 * 2f);
39733 float num15 = 1f - num5;
39734 float num16 = 1f - num15 * num15;
39735 Vector2 value = Vector2.Lerp(vector5, vector4, num16 * 0.9f + 0.1f);
39736 Vector2 vector7 = Vector2.Lerp(vector6, value, num16 * 0.7f + 0.3f);
39738 float num17 = num6;
39739 num17 *= num17;
39740 Vector2 item = spinningpoint.RotatedBy(proj.rotation + 4.712389f * num17 * (float)proj.spriteDirection, playerArmPosition);
39742 num10 += num14;
39743 num12 += num14;
39744 num11 += num14;
39745 vector = vector4;
39746 vector3 = vector5;
39747 vector2 = vector6;
39748 }
39749 }
static float Lerp(float value1, float value2, float amount)
Definition MathHelper.cs:53
void Add(TKey key, TValue value)
const double PI
Definition Math.cs:16
static Dictionary< int, Item > ItemsByType
static void GetWhipSettings(Projectile proj, out float timeToFlyOut, out int segments, out float rangeMultiplier)
static Vector2 Lerp(Vector2 value1, Vector2 value2, float amount)
Definition Vector2.cs:227

References System.Collections.Generic.Dictionary< TKey, TValue >.Add(), Terraria.Main.GetPlayerArmPosition(), System.item, Terraria.ID.ContentSamples.ItemsByType, Microsoft.Xna.Framework.MathHelper.Lerp(), Microsoft.Xna.Framework.Vector2.Lerp(), System.Math.PI, Terraria.Main.player, Terraria.Item.type, System.value, and Terraria.Player.whipRangeMultiplier.

Referenced by Terraria.Projectile.Colliding(), Terraria.Projectile.CutTiles(), Terraria.Main.DrawWhip(), and Terraria.Projectile.UpdateEnchantmentVisuals().