Files
LuaCsForBarotraumaEP/Barotrauma/BarotraumaClient/ClientSource/Screens/CreditsPlayer.cs
Markus Isberg 9470edead3 Build 1.1.4.0
2023-03-31 18:40:44 +03:00

101 lines
2.8 KiB
C#

using Microsoft.Xna.Framework;
namespace Barotrauma
{
class CreditsPlayer : GUIComponent
{
private GUIListBox listBox;
private readonly ContentXElement configElement;
private float scrollSpeed;
public bool AutoRestart = true;
public bool Finished
{
get { return listBox.BarScroll >= 1.0f; }
}
public bool ScrollBarEnabled
{
get { return listBox.ScrollBarEnabled; }
set { listBox.ScrollBarEnabled = value; }
}
public bool AllowMouseWheelScroll
{
get { return listBox.AllowMouseWheelScroll; }
set { listBox.AllowMouseWheelScroll = value; }
}
public float Scroll
{
get { return listBox.BarScroll; }
set { listBox.BarScroll = value; }
}
public readonly GUIButton CloseButton;
public CreditsPlayer(RectTransform rectT, string configFile) : base(null, rectT)
{
GameMain.Instance.ResolutionChanged += () =>
{
ClearChildren();
Load();
};
var doc = XMLExtensions.TryLoadXml(configFile);
if (doc == null) { return; }
configElement = doc.Root.FromPackage(ContentPackageManager.VanillaCorePackage);
Load();
CloseButton = new GUIButton(new RectTransform(new Vector2(0.1f), RectTransform, Anchor.BottomRight, maxSize: new Point(GUI.IntScale(300), GUI.IntScale(50)))
{ AbsoluteOffset = new Point(GUI.IntScale(20), GUI.IntScale(20) + (Rect.Bottom - GameMain.GraphicsHeight)) },
TextManager.Get("close"));
}
private void Load()
{
scrollSpeed = configElement.GetAttributeFloat("scrollspeed", 100.0f);
int spacing = configElement.GetAttributeInt("spacing", 0);
listBox = new GUIListBox(new RectTransform(Vector2.One, RectTransform), style: null)
{
Spacing = spacing
};
foreach (var subElement in configElement.Elements())
{
FromXML(subElement, listBox.Content.RectTransform);
}
foreach (GUIComponent child in listBox.Content.Children)
{
child.CanBeFocused = false;
}
listBox.RecalculateChildren();
listBox.UpdateScrollBarSize();
}
public void Restart()
{
listBox.BarScroll = 0.0f;
}
protected override void Update(float deltaTime)
{
if (!Visible) { return; }
listBox.BarScroll += scrollSpeed / listBox.TotalSize * deltaTime;
if (AutoRestart && listBox.BarScroll >= 1.0f)
{
listBox.BarScroll = 0.0f;
}
}
}
}