Terraria 1.4.0.5 Source Code
This commit is contained in:
commit
05205f009e
1059 changed files with 563450 additions and 0 deletions
156
GameContent/UI/Chat/RemadeChatMonitor.cs
Normal file
156
GameContent/UI/Chat/RemadeChatMonitor.cs
Normal file
|
@ -0,0 +1,156 @@
|
|||
// Decompiled with JetBrains decompiler
|
||||
// Type: Terraria.GameContent.UI.Chat.RemadeChatMonitor
|
||||
// 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 System;
|
||||
using System.Collections.Generic;
|
||||
using Terraria.UI.Chat;
|
||||
|
||||
namespace Terraria.GameContent.UI.Chat
|
||||
{
|
||||
public class RemadeChatMonitor : IChatMonitor
|
||||
{
|
||||
private const int MaxMessages = 500;
|
||||
private int _showCount;
|
||||
private int _startChatLine;
|
||||
private List<ChatMessageContainer> _messages;
|
||||
private bool _recalculateOnNextUpdate;
|
||||
|
||||
public RemadeChatMonitor()
|
||||
{
|
||||
this._showCount = 10;
|
||||
this._startChatLine = 0;
|
||||
this._messages = new List<ChatMessageContainer>();
|
||||
}
|
||||
|
||||
public void NewText(string newText, byte R = 255, byte G = 255, byte B = 255) => this.AddNewMessage(newText, new Color((int) R, (int) G, (int) B));
|
||||
|
||||
public void NewTextMultiline(string text, bool force = false, Color c = default (Color), int WidthLimit = -1) => this.AddNewMessage(text, c, WidthLimit);
|
||||
|
||||
public void AddNewMessage(string text, Color color, int widthLimitInPixels = -1)
|
||||
{
|
||||
ChatMessageContainer messageContainer = new ChatMessageContainer();
|
||||
messageContainer.SetContents(text, color, widthLimitInPixels);
|
||||
this._messages.Insert(0, messageContainer);
|
||||
while (this._messages.Count > 500)
|
||||
this._messages.RemoveAt(this._messages.Count - 1);
|
||||
}
|
||||
|
||||
public void DrawChat(bool drawingPlayerChat)
|
||||
{
|
||||
int startChatLine = this._startChatLine;
|
||||
int index = 0;
|
||||
int snippetIndex1 = 0;
|
||||
while (startChatLine > 0 && index < this._messages.Count)
|
||||
{
|
||||
int num = Math.Min(startChatLine, this._messages[index].LineCount);
|
||||
startChatLine -= num;
|
||||
snippetIndex1 += num;
|
||||
if (snippetIndex1 == this._messages[index].LineCount)
|
||||
{
|
||||
snippetIndex1 = 0;
|
||||
++index;
|
||||
}
|
||||
}
|
||||
int num1 = 0;
|
||||
int? nullable1 = new int?();
|
||||
int snippetIndex2 = -1;
|
||||
int? nullable2 = new int?();
|
||||
int hoveredSnippet = -1;
|
||||
while (num1 < this._showCount && index < this._messages.Count)
|
||||
{
|
||||
ChatMessageContainer message = this._messages[index];
|
||||
if (message.Prepared && drawingPlayerChat | message.CanBeShownWhenChatIsClosed)
|
||||
{
|
||||
TextSnippet[] withInversedIndex = message.GetSnippetWithInversedIndex(snippetIndex1);
|
||||
ChatManager.DrawColorCodedStringWithShadow(Main.spriteBatch, FontAssets.MouseText.Value, withInversedIndex, new Vector2(88f, (float) (Main.screenHeight - 30 - 28 - num1 * 21)), 0.0f, Vector2.Zero, Vector2.One, out hoveredSnippet);
|
||||
if (hoveredSnippet >= 0)
|
||||
{
|
||||
nullable2 = new int?(hoveredSnippet);
|
||||
nullable1 = new int?(index);
|
||||
snippetIndex2 = snippetIndex1;
|
||||
}
|
||||
++num1;
|
||||
++snippetIndex1;
|
||||
if (snippetIndex1 >= message.LineCount)
|
||||
{
|
||||
snippetIndex1 = 0;
|
||||
++index;
|
||||
}
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
if (!nullable1.HasValue || !nullable2.HasValue)
|
||||
return;
|
||||
TextSnippet[] withInversedIndex1 = this._messages[nullable1.Value].GetSnippetWithInversedIndex(snippetIndex2);
|
||||
withInversedIndex1[nullable2.Value].OnHover();
|
||||
if (!Main.mouseLeft || !Main.mouseLeftRelease)
|
||||
return;
|
||||
withInversedIndex1[nullable2.Value].OnClick();
|
||||
}
|
||||
|
||||
public void Clear() => this._messages.Clear();
|
||||
|
||||
public void Update()
|
||||
{
|
||||
if (this._recalculateOnNextUpdate)
|
||||
{
|
||||
this._recalculateOnNextUpdate = false;
|
||||
for (int index = 0; index < this._messages.Count; ++index)
|
||||
this._messages[index].MarkToNeedRefresh();
|
||||
}
|
||||
for (int index = 0; index < this._messages.Count; ++index)
|
||||
this._messages[index].Update();
|
||||
}
|
||||
|
||||
public void Offset(int linesOffset)
|
||||
{
|
||||
this._startChatLine += linesOffset;
|
||||
this.ClampMessageIndex();
|
||||
}
|
||||
|
||||
private void ClampMessageIndex()
|
||||
{
|
||||
int num1 = 0;
|
||||
int index = 0;
|
||||
int num2 = 0;
|
||||
int num3 = this._startChatLine + this._showCount;
|
||||
while (num1 < num3 && index < this._messages.Count)
|
||||
{
|
||||
int num4 = Math.Min(num3 - num1, this._messages[index].LineCount);
|
||||
num1 += num4;
|
||||
if (num1 < num3)
|
||||
{
|
||||
++index;
|
||||
num2 = 0;
|
||||
}
|
||||
else
|
||||
num2 = num4;
|
||||
}
|
||||
int showCount = this._showCount;
|
||||
while (showCount > 0 && num1 > 0)
|
||||
{
|
||||
--num2;
|
||||
--showCount;
|
||||
--num1;
|
||||
if (num2 < 0)
|
||||
{
|
||||
--index;
|
||||
if (index != -1)
|
||||
num2 = this._messages[index].LineCount - 1;
|
||||
else
|
||||
break;
|
||||
}
|
||||
}
|
||||
this._startChatLine = num1;
|
||||
}
|
||||
|
||||
public void ResetOffset() => this._startChatLine = 0;
|
||||
|
||||
public void OnResolutionChange() => this._recalculateOnNextUpdate = true;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue