Terraria 1.4.0.5 Source Code

This commit is contained in:
MikeyIsBaeYT 2021-10-26 12:45:26 -04:00
commit 05205f009e
1059 changed files with 563450 additions and 0 deletions

View file

@ -0,0 +1,160 @@
// Decompiled with JetBrains decompiler
// Type: Terraria.GameContent.RGB.EyeballShader
// Assembly: Terraria, Version=1.4.0.5, Culture=neutral, PublicKeyToken=null
// MVID: 67F9E73E-0A81-4937-A22C-5515CD405A83
// Assembly location: C:\Users\mikeyisbaeyt\Downloads\depotdownloader-2.4.5\depots\105601\6707058\Terraria.exe
using Microsoft.Xna.Framework;
using ReLogic.Peripherals.RGB;
using System;
using Terraria.Utilities;
namespace Terraria.GameContent.RGB
{
public class EyeballShader : ChromaShader
{
private static readonly EyeballShader.Ring[] Rings = new EyeballShader.Ring[5]
{
new EyeballShader.Ring(Color.Black.ToVector4(), 0.0f),
new EyeballShader.Ring(Color.Black.ToVector4(), 0.4f),
new EyeballShader.Ring(new Color(17, 220, 237).ToVector4(), 0.5f),
new EyeballShader.Ring(new Color(17, 120, 237).ToVector4(), 0.6f),
new EyeballShader.Ring(Vector4.One, 0.65f)
};
private readonly Vector4 _eyelidColor = new Color(108, 110, 75).ToVector4();
private float _eyelidProgress;
private Vector2 _pupilOffset = Vector2.Zero;
private Vector2 _targetOffset = Vector2.Zero;
private readonly UnifiedRandom _random = new UnifiedRandom();
private float _timeUntilPupilMove;
private float _eyelidStateTime;
private readonly bool _isSpawning;
private EyeballShader.EyelidState _eyelidState;
public EyeballShader(bool isSpawning) => this._isSpawning = isSpawning;
public virtual void Update(float elapsedTime)
{
this.UpdateEyelid(elapsedTime);
int num1 = (double) this._timeUntilPupilMove <= 0.0 ? 1 : 0;
this._pupilOffset = (this._targetOffset + this._pupilOffset) * 0.5f;
this._timeUntilPupilMove -= elapsedTime;
if (num1 == 0)
return;
float num2 = (float) this._random.NextDouble() * 6.283185f;
float num3;
if (this._isSpawning)
{
this._timeUntilPupilMove = (float) (this._random.NextDouble() * 0.400000005960464 + 0.300000011920929);
num3 = (float) this._random.NextDouble() * 0.7f;
}
else
{
this._timeUntilPupilMove = (float) (this._random.NextDouble() * 0.400000005960464 + 0.600000023841858);
num3 = (float) this._random.NextDouble() * 0.3f;
}
this._targetOffset = new Vector2((float) Math.Cos((double) num2), (float) Math.Sin((double) num2)) * num3;
}
private void UpdateEyelid(float elapsedTime)
{
float num1 = 0.5f;
float num2 = 6f;
if (this._isSpawning)
{
if (NPC.MoonLordCountdown >= 3590)
{
this._eyelidStateTime = 0.0f;
this._eyelidState = EyeballShader.EyelidState.Closed;
}
num1 = (float) ((double) NPC.MoonLordCountdown / 3600.0 * 10.0 + 0.5);
num2 = 2f;
}
this._eyelidStateTime += elapsedTime;
switch (this._eyelidState)
{
case EyeballShader.EyelidState.Closed:
this._eyelidProgress = 0.0f;
if ((double) this._eyelidStateTime <= (double) num1)
break;
this._eyelidStateTime = 0.0f;
this._eyelidState = EyeballShader.EyelidState.Opening;
break;
case EyeballShader.EyelidState.Opening:
this._eyelidProgress = this._eyelidStateTime / 0.4f;
if ((double) this._eyelidStateTime <= 0.400000005960464)
break;
this._eyelidStateTime = 0.0f;
this._eyelidState = EyeballShader.EyelidState.Open;
break;
case EyeballShader.EyelidState.Open:
this._eyelidProgress = 1f;
if ((double) this._eyelidStateTime <= (double) num2)
break;
this._eyelidStateTime = 0.0f;
this._eyelidState = EyeballShader.EyelidState.Closing;
break;
case EyeballShader.EyelidState.Closing:
this._eyelidProgress = (float) (1.0 - (double) this._eyelidStateTime / 0.400000005960464);
if ((double) this._eyelidStateTime <= 0.400000005960464)
break;
this._eyelidStateTime = 0.0f;
this._eyelidState = EyeballShader.EyelidState.Closed;
break;
}
}
[RgbProcessor]
private void ProcessHighDetail(
RgbDevice device,
Fragment fragment,
EffectDetailLevel quality,
float time)
{
Vector2 vector2_1 = new Vector2(1.5f, 0.5f);
Vector2 vector2_2 = vector2_1 + this._pupilOffset;
for (int index1 = 0; index1 < fragment.Count; ++index1)
{
Vector2 canvasPositionOfIndex = fragment.GetCanvasPositionOfIndex(index1);
Vector2 vector2_3 = canvasPositionOfIndex - vector2_1;
Vector4 vector4 = Vector4.One;
float num1 = (vector2_2 - canvasPositionOfIndex).Length();
for (int index2 = 1; index2 < EyeballShader.Rings.Length; ++index2)
{
EyeballShader.Ring ring1 = EyeballShader.Rings[index2];
EyeballShader.Ring ring2 = EyeballShader.Rings[index2 - 1];
if ((double) num1 < (double) ring1.Distance)
{
vector4 = Vector4.Lerp(ring2.Color, ring1.Color, (float) (((double) num1 - (double) ring2.Distance) / ((double) ring1.Distance - (double) ring2.Distance)));
break;
}
}
float num2 = (float) Math.Sqrt(1.0 - 0.400000005960464 * (double) vector2_3.Y * (double) vector2_3.Y) * 5f;
float num3 = Math.Abs(vector2_3.X) - num2 * (float) (1.10000002384186 * (double) this._eyelidProgress - 0.100000001490116);
if ((double) num3 > 0.0)
vector4 = Vector4.Lerp(vector4, this._eyelidColor, Math.Min(1f, num3 * 10f));
fragment.SetColor(index1, vector4);
}
}
private struct Ring
{
public readonly Vector4 Color;
public readonly float Distance;
public Ring(Vector4 color, float distance)
{
this.Color = color;
this.Distance = distance;
}
}
private enum EyelidState
{
Closed,
Opening,
Open,
Closing,
}
}
}