Terraria 1.4.0.5 Source Code
This commit is contained in:
commit
05205f009e
1059 changed files with 563450 additions and 0 deletions
256
GameContent/Skies/CreditsRoll/Segments.cs
Normal file
256
GameContent/Skies/CreditsRoll/Segments.cs
Normal file
|
@ -0,0 +1,256 @@
|
|||
// Decompiled with JetBrains decompiler
|
||||
// Type: Terraria.GameContent.Skies.CreditsRoll.Segments
|
||||
// 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 Microsoft.Xna.Framework.Graphics;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Terraria.DataStructures;
|
||||
using Terraria.Localization;
|
||||
using Terraria.UI.Chat;
|
||||
|
||||
namespace Terraria.GameContent.Skies.CreditsRoll
|
||||
{
|
||||
public class Segments
|
||||
{
|
||||
private const float PixelsToRollUpPerFrame = 0.5f;
|
||||
|
||||
public class LocalizedTextSegment : ICreditsRollSegment
|
||||
{
|
||||
private const int PixelsForALine = 120;
|
||||
private LocalizedText _text;
|
||||
private float _timeToShowPeak;
|
||||
|
||||
public float DedicatedTimeNeeded => 240f;
|
||||
|
||||
public LocalizedTextSegment(float timeInAnimation, string textKey)
|
||||
{
|
||||
this._text = Language.GetText(textKey);
|
||||
this._timeToShowPeak = timeInAnimation;
|
||||
}
|
||||
|
||||
public void Draw(ref CreditsRollInfo info)
|
||||
{
|
||||
float num1 = 400f;
|
||||
float num2 = 400f;
|
||||
int timeInAnimation = info.TimeInAnimation;
|
||||
float num3 = Utils.GetLerpValue(this._timeToShowPeak - num1, this._timeToShowPeak, (float) timeInAnimation, true) * Utils.GetLerpValue(this._timeToShowPeak + num2, this._timeToShowPeak, (float) timeInAnimation, true);
|
||||
if ((double) num3 <= 0.0)
|
||||
return;
|
||||
float num4 = this._timeToShowPeak - (float) timeInAnimation;
|
||||
Vector2 position = info.AnchorPositionOnScreen + new Vector2(0.0f, num4 * 0.5f);
|
||||
float Hue = (float) ((double) this._timeToShowPeak / 100.0 % 1.0);
|
||||
if ((double) Hue < 0.0)
|
||||
++Hue;
|
||||
Color rgb = Main.hslToRgb(Hue, 1f, 0.5f);
|
||||
string text = this._text.Value;
|
||||
Vector2 origin = FontAssets.DeathText.Value.MeasureString(text) * 0.5f;
|
||||
float num5 = (float) (1.0 - (1.0 - (double) num3) * (1.0 - (double) num3));
|
||||
ChatManager.DrawColorCodedStringShadow(info.SpriteBatch, FontAssets.DeathText.Value, text, position, rgb * num5 * num5 * 0.25f, 0.0f, origin, Vector2.One);
|
||||
ChatManager.DrawColorCodedString(info.SpriteBatch, FontAssets.DeathText.Value, text, position, Color.White * num5, 0.0f, origin, Vector2.One);
|
||||
}
|
||||
}
|
||||
|
||||
public abstract class ACreditsRollSegmentWithActions<T> : ICreditsRollSegment
|
||||
{
|
||||
private int _dedicatedTimeNeeded;
|
||||
private int _lastDedicatedTimeNeeded;
|
||||
protected int _targetTime;
|
||||
private List<ICreditsRollSegmentAction<T>> _actions = new List<ICreditsRollSegmentAction<T>>();
|
||||
|
||||
public float DedicatedTimeNeeded => (float) this._dedicatedTimeNeeded;
|
||||
|
||||
public ACreditsRollSegmentWithActions(int targetTime)
|
||||
{
|
||||
this._targetTime = targetTime;
|
||||
this._dedicatedTimeNeeded = 0;
|
||||
}
|
||||
|
||||
protected void ProcessActions(T obj, float localTimeForObject)
|
||||
{
|
||||
for (int index = 0; index < this._actions.Count; ++index)
|
||||
this._actions[index].ApplyTo(obj, localTimeForObject);
|
||||
}
|
||||
|
||||
public Segments.ACreditsRollSegmentWithActions<T> Then(
|
||||
ICreditsRollSegmentAction<T> act)
|
||||
{
|
||||
this.Bind(act);
|
||||
act.SetDelay((float) this._dedicatedTimeNeeded);
|
||||
this._actions.Add(act);
|
||||
this._lastDedicatedTimeNeeded = this._dedicatedTimeNeeded;
|
||||
this._dedicatedTimeNeeded += act.ExpectedLengthOfActionInFrames;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Segments.ACreditsRollSegmentWithActions<T> With(
|
||||
ICreditsRollSegmentAction<T> act)
|
||||
{
|
||||
this.Bind(act);
|
||||
act.SetDelay((float) this._lastDedicatedTimeNeeded);
|
||||
this._actions.Add(act);
|
||||
return this;
|
||||
}
|
||||
|
||||
protected abstract void Bind(ICreditsRollSegmentAction<T> act);
|
||||
|
||||
public abstract void Draw(ref CreditsRollInfo info);
|
||||
}
|
||||
|
||||
public class NPCSegment : Segments.ACreditsRollSegmentWithActions<NPC>
|
||||
{
|
||||
private NPC _npc;
|
||||
private Vector2 _anchorOffset;
|
||||
private Vector2 _normalizedOriginForHitbox;
|
||||
|
||||
public NPCSegment(
|
||||
int targetTime,
|
||||
int npcId,
|
||||
Vector2 anchorOffset,
|
||||
Vector2 normalizedNPCHitboxOrigin)
|
||||
: base(targetTime)
|
||||
{
|
||||
this._npc = new NPC();
|
||||
this._npc.SetDefaults(npcId);
|
||||
this._npc.IsABestiaryIconDummy = true;
|
||||
this._anchorOffset = anchorOffset;
|
||||
this._normalizedOriginForHitbox = normalizedNPCHitboxOrigin;
|
||||
}
|
||||
|
||||
protected override void Bind(ICreditsRollSegmentAction<NPC> act) => act.BindTo(this._npc);
|
||||
|
||||
public override void Draw(ref CreditsRollInfo info)
|
||||
{
|
||||
if ((double) info.TimeInAnimation > (double) this._targetTime + (double) this.DedicatedTimeNeeded)
|
||||
return;
|
||||
this.ResetNPCAnimation(ref info);
|
||||
this.ProcessActions(this._npc, (float) (info.TimeInAnimation - this._targetTime));
|
||||
if (this._npc.alpha >= (int) byte.MaxValue)
|
||||
return;
|
||||
this._npc.FindFrame();
|
||||
Main.instance.DrawNPCDirect(info.SpriteBatch, this._npc, this._npc.behindTiles, Vector2.Zero);
|
||||
}
|
||||
|
||||
private void ResetNPCAnimation(ref CreditsRollInfo info)
|
||||
{
|
||||
this._npc.position = info.AnchorPositionOnScreen + this._anchorOffset - this._npc.Size * this._normalizedOriginForHitbox;
|
||||
this._npc.alpha = 0;
|
||||
this._npc.velocity = Vector2.Zero;
|
||||
}
|
||||
}
|
||||
|
||||
public class LooseSprite
|
||||
{
|
||||
private DrawData _originalDrawData;
|
||||
public DrawData CurrentDrawData;
|
||||
public float CurrentOpacity;
|
||||
|
||||
public LooseSprite(DrawData data)
|
||||
{
|
||||
this._originalDrawData = data;
|
||||
this.Reset();
|
||||
}
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
this.CurrentDrawData = this._originalDrawData;
|
||||
this.CurrentOpacity = 1f;
|
||||
}
|
||||
}
|
||||
|
||||
public class SpriteSegment : Segments.ACreditsRollSegmentWithActions<Segments.LooseSprite>
|
||||
{
|
||||
private Segments.LooseSprite _sprite;
|
||||
private Vector2 _anchorOffset;
|
||||
|
||||
public SpriteSegment(int targetTime, DrawData data, Vector2 anchorOffset)
|
||||
: base(targetTime)
|
||||
{
|
||||
this._sprite = new Segments.LooseSprite(data);
|
||||
this._anchorOffset = anchorOffset;
|
||||
}
|
||||
|
||||
protected override void Bind(
|
||||
ICreditsRollSegmentAction<Segments.LooseSprite> act)
|
||||
{
|
||||
act.BindTo(this._sprite);
|
||||
}
|
||||
|
||||
public override void Draw(ref CreditsRollInfo info)
|
||||
{
|
||||
if ((double) info.TimeInAnimation > (double) this._targetTime + (double) this.DedicatedTimeNeeded)
|
||||
return;
|
||||
this.ResetSpriteAnimation(ref info);
|
||||
this.ProcessActions(this._sprite, (float) (info.TimeInAnimation - this._targetTime));
|
||||
DrawData currentDrawData = this._sprite.CurrentDrawData;
|
||||
currentDrawData.position += info.AnchorPositionOnScreen;
|
||||
currentDrawData.color *= this._sprite.CurrentOpacity;
|
||||
currentDrawData.Draw(info.SpriteBatch);
|
||||
}
|
||||
|
||||
private void ResetSpriteAnimation(ref CreditsRollInfo info) => this._sprite.Reset();
|
||||
}
|
||||
|
||||
public class EmoteSegment : ICreditsRollSegment
|
||||
{
|
||||
private int _targetTime;
|
||||
private Vector2 _offset;
|
||||
private SpriteEffects _effect;
|
||||
private int _emoteId;
|
||||
|
||||
public float DedicatedTimeNeeded { get; private set; }
|
||||
|
||||
public EmoteSegment(
|
||||
int emoteId,
|
||||
int targetTime,
|
||||
int timeToPlay,
|
||||
Vector2 position,
|
||||
SpriteEffects drawEffect)
|
||||
{
|
||||
this._emoteId = emoteId;
|
||||
this._targetTime = targetTime;
|
||||
this._effect = drawEffect;
|
||||
this._offset = position;
|
||||
this.DedicatedTimeNeeded = (float) timeToPlay;
|
||||
}
|
||||
|
||||
public void Draw(ref CreditsRollInfo info)
|
||||
{
|
||||
int num = info.TimeInAnimation - this._targetTime;
|
||||
if (num < 0 || (double) num >= (double) this.DedicatedTimeNeeded)
|
||||
return;
|
||||
Vector2 position = (info.AnchorPositionOnScreen + this._offset).Floor();
|
||||
bool flag = num < 6 || (double) num >= (double) this.DedicatedTimeNeeded - 6.0;
|
||||
Texture2D texture2D = TextureAssets.Extra[48].Value;
|
||||
Rectangle rectangle = texture2D.Frame(8, 38, flag ? 0 : 1);
|
||||
Vector2 origin = new Vector2((float) (rectangle.Width / 2), (float) rectangle.Height);
|
||||
SpriteEffects effect = this._effect;
|
||||
info.SpriteBatch.Draw(texture2D, position, new Rectangle?(rectangle), Color.White, 0.0f, origin, 1f, effect, 0.0f);
|
||||
if (flag)
|
||||
return;
|
||||
switch (this._emoteId)
|
||||
{
|
||||
case 87:
|
||||
case 89:
|
||||
if (effect.HasFlag((Enum) SpriteEffects.FlipHorizontally))
|
||||
{
|
||||
effect &= ~SpriteEffects.FlipHorizontally;
|
||||
position.X += 4f;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
info.SpriteBatch.Draw(texture2D, position, new Rectangle?(this.GetFrame(num % 20)), Color.White, 0.0f, origin, 1f, effect, 0.0f);
|
||||
}
|
||||
|
||||
private Rectangle GetFrame(int wrappedTime)
|
||||
{
|
||||
int num = wrappedTime >= 10 ? 1 : 0;
|
||||
return TextureAssets.Extra[48].Value.Frame(8, 38, this._emoteId % 4 * 2 + num, this._emoteId / 4 + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue