194 lines
5.0 KiB
C#
194 lines
5.0 KiB
C#
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Linq;
|
|
using Godot;
|
|
using Godot.Bridge;
|
|
using Godot.NativeInterop;
|
|
|
|
[ScriptPath("res://Scripts/UI/PartyHUD.cs")]
|
|
public partial class PartyHUD : NinePatchRect
|
|
{
|
|
[Export(PropertyHint.None, "")]
|
|
private int id;
|
|
|
|
[Export(PropertyHint.None, "")]
|
|
public RichTextLabel name;
|
|
|
|
[Export(PropertyHint.None, "")]
|
|
public RichTextLabel hp;
|
|
|
|
[Export(PropertyHint.None, "")]
|
|
public RichTextLabel diag;
|
|
|
|
[Export(PropertyHint.None, "")]
|
|
public RichTextLabel smallHP;
|
|
|
|
[Export(PropertyHint.None, "")]
|
|
public Sprite2D hpBar;
|
|
|
|
[Export(PropertyHint.None, "")]
|
|
public Sprite2D icon;
|
|
|
|
[Export(PropertyHint.None, "")]
|
|
public Sprite2D smallHpBar;
|
|
|
|
[Export(PropertyHint.None, "")]
|
|
public Node2D battleStuff;
|
|
|
|
[Export(PropertyHint.None, "")]
|
|
public Node2D big;
|
|
|
|
[Export(PropertyHint.None, "")]
|
|
public Node2D small;
|
|
|
|
[Export(PropertyHint.None, "")]
|
|
private Sprite2D[] battleButtons;
|
|
|
|
public static readonly int[][] pPos = new int[3][]
|
|
{
|
|
new int[5] { 110, 0, 0, 0, 0 },
|
|
new int[5] { 35, 179, 0, 0, 0 },
|
|
new int[5] { 1, 110, 219, 0, 0 }
|
|
};
|
|
|
|
private const int sizeBig = 103;
|
|
|
|
private const int sizeSmall = 54;
|
|
|
|
private static readonly Texture2D[] actButtons = new Texture2D[2]
|
|
{
|
|
GD.Load<Texture2D>("res://Sprites/Menus/Menu Sprites/DWAct.tres"),
|
|
GD.Load<Texture2D>("res://Sprites/Menus/Menu Sprites/DWMagic.tres")
|
|
};
|
|
|
|
public float mesTime;
|
|
|
|
public override void _Ready()
|
|
{
|
|
big.Visible = true;
|
|
small.Visible = false;
|
|
}
|
|
|
|
public void Update()
|
|
{
|
|
if (id < SaveFile.current.activeParty.Count)
|
|
{
|
|
battleButtons[1].Texture = actButtons[Party.party[SaveFile.current.activeParty[id]].doMagicMenu ? 1u : 0u];
|
|
icon.Texture = GD.Load<Texture2D>("res://Sprites/Menus/Menu Sprites/" + Party.party[SaveFile.current.activeParty[id]].id.ToString() + "Icon.tres");
|
|
name.Text = Party.party[SaveFile.current.activeParty[id]].name;
|
|
base.SelfModulate = Main.instance.partyColors[SaveFile.current.activeParty[id]];
|
|
hpBar.SelfModulate = base.SelfModulate;
|
|
battleStuff.GetChild<Control>(0).Modulate = base.SelfModulate;
|
|
hpBar.Scale = new Vector2(Mathf.Clamp((float)Party.party[SaveFile.current.activeParty[id]].HP / (float)Party.party[SaveFile.current.activeParty[id]].MAXHP, 0f, 1f), 1f);
|
|
hp.Text = "[center]" + ((Party.party[SaveFile.current.activeParty[id]].HP <= 0) ? "[color=red]" : "") + Party.party[SaveFile.current.activeParty[id]].HP + "/" + Party.party[SaveFile.current.activeParty[id]].MAXHP;
|
|
smallHP.Text = hp.Text;
|
|
smallHpBar.Scale = hpBar.Scale;
|
|
smallHpBar.SelfModulate = hpBar.SelfModulate;
|
|
bool flag = SaveFile.current.activeParty.Count > 3;
|
|
diag.Size = new Vector2(flag ? 60 : 110, flag ? 16 : 8);
|
|
diag.AutowrapMode = (TextServer.AutowrapMode)(flag ? 3 : 0);
|
|
}
|
|
}
|
|
|
|
public override void _Process(double delta)
|
|
{
|
|
if (mesTime > 0f)
|
|
{
|
|
diag.Visible = true;
|
|
mesTime -= Main.deltaTime;
|
|
if (mesTime < 100f)
|
|
{
|
|
diag.SelfModulate = Main.colorClear.Lerp(Main.colorWhite, mesTime / 100f);
|
|
}
|
|
else
|
|
{
|
|
diag.SelfModulate = Main.colorWhite;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
diag.Visible = false;
|
|
}
|
|
if (SaveFile.current.activeParty.Count > 3)
|
|
{
|
|
UpdatePos();
|
|
}
|
|
if (BattleDR.current != null && BattleDR.current.spareAble && (BattleDR.current.blockedCommands == null || !BattleDR.current.blockedCommands.Contains(3)))
|
|
{
|
|
battleButtons[3].SelfModulate = Main.colorWhite.Lerp(DWMenu.instance.buttonColors[2], Mathf.Abs(Mathf.Sin(Mathf.DegToRad((float)Time.GetTicksMsec() * 0.2f))));
|
|
}
|
|
icon.Visible = DWMenu.instance.selectedParty != id;
|
|
}
|
|
|
|
private void UpdatePos()
|
|
{
|
|
if (BattleDR.current?.currentActor == id)
|
|
{
|
|
if (!big.Visible)
|
|
{
|
|
big.Visible = true;
|
|
}
|
|
if (small.Visible)
|
|
{
|
|
small.Visible = false;
|
|
}
|
|
base.Size = new Vector2(103f, base.Size.Y);
|
|
}
|
|
else
|
|
{
|
|
if (big.Visible)
|
|
{
|
|
big.Visible = false;
|
|
}
|
|
if (!small.Visible)
|
|
{
|
|
small.Visible = true;
|
|
}
|
|
base.Size = new Vector2(54f, base.Size.Y);
|
|
}
|
|
if (id > 0)
|
|
{
|
|
base.Position = new Vector2(GetPreviousSize(), base.Position.Y);
|
|
}
|
|
else if (SaveFile.current.activeParty.Count >= 4 && (BattleDR.current == null || BattleDR.DoingAction()))
|
|
{
|
|
base.Position = new Vector2((SaveFile.current.activeParty.Count == 5) ? 24 : 18, base.Position.Y);
|
|
}
|
|
else
|
|
{
|
|
base.Position = new Vector2(1f, base.Position.Y);
|
|
}
|
|
}
|
|
|
|
private float GetPreviousSize()
|
|
{
|
|
float num = (DWMenu.instance.partyHUDs[id - 1].big.Visible ? 103 : 54);
|
|
if (SaveFile.current.activeParty.Count == 4)
|
|
{
|
|
num += (float)((BattleDR.current == null || BattleDR.DoingAction()) ? 18 : 16);
|
|
if (id >= 2)
|
|
{
|
|
num += 1f;
|
|
}
|
|
}
|
|
return DWMenu.instance.partyHUDs[id - 1].Position.X + num;
|
|
}
|
|
|
|
public void UpdateOpt(int id)
|
|
{
|
|
for (int i = 0; i < battleButtons.Length; i++)
|
|
{
|
|
BattleDR current = BattleDR.current;
|
|
if (current != null && current.blockedCommands?.Contains(i) == true)
|
|
{
|
|
battleButtons[i].SelfModulate = ((id == i) ? Main.colorGray : Main.colorDark);
|
|
}
|
|
else
|
|
{
|
|
battleButtons[i].SelfModulate = DWMenu.instance.buttonColors[(id == i) ? 1 : 2];
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|