mirror of
https://github.com/kwsch/pkNX.git
synced 2026-03-31 22:54:44 -05:00
File scoped namespaces NET6 for GUI handle nullable references add editorconfig (mostly for newline at end of file)
171 lines
5.2 KiB
C#
171 lines
5.2 KiB
C#
using System;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Windows.Forms;
|
|
using pkNX.Structures;
|
|
using Util = pkNX.Randomization.Util;
|
|
|
|
namespace pkNX.WinForms.Controls;
|
|
|
|
public partial class StatEditor : UserControl
|
|
{
|
|
public StatEditor()
|
|
{
|
|
InitializeComponent();
|
|
tb_iv = new[] { TB_HPIV, TB_ATKIV, TB_DEFIV, TB_SPEIV, TB_SPAIV, TB_SPDIV };
|
|
tb_ev = new[] { TB_HPEV, TB_ATKEV, TB_DEFEV, TB_SPEEV, TB_SPAEV, TB_SPDEV };
|
|
tb_av = new[] { TB_HPAV, TB_ATKAV, TB_DEFAV, TB_SPEAV, TB_SPAAV, TB_SPDAV };
|
|
labarray = new[] { Label_ATK, Label_DEF, Label_SPE, Label_SPA, Label_SPD };
|
|
}
|
|
|
|
public void Initialize(string[] types)
|
|
{
|
|
UpdatingFields = true;
|
|
foreach (var t in types.Skip(1))
|
|
CB_HPType.Items.Add(t);
|
|
UpdatingFields = false;
|
|
}
|
|
|
|
public IPersonalTable? Personal { private get; set; }
|
|
public bool UpdatingFields;
|
|
public StatPKM PKM { get; set; } = new TrainerPoke7b();
|
|
|
|
private readonly MaskedTextBox[] tb_iv;
|
|
private readonly MaskedTextBox[] tb_ev;
|
|
private readonly MaskedTextBox[] tb_av;
|
|
private readonly Label[] labarray;
|
|
|
|
public void UpdateStats()
|
|
{
|
|
if (UpdatingFields)
|
|
return;
|
|
|
|
UpdatingFields = true;
|
|
for (int i = 0; i < 6; i++)
|
|
{
|
|
if (Util.ToInt32(tb_iv[i].Text) > 31)
|
|
tb_iv[i].Text = "31";
|
|
if (Util.ToInt32(tb_ev[i].Text) > 255)
|
|
tb_ev[i].Text = "255";
|
|
if (Util.ToInt32(tb_av[i].Text) > 200)
|
|
tb_av[i].Text = "200";
|
|
}
|
|
UpdatingFields = false;
|
|
|
|
var pt = Personal;
|
|
if (pt == null)
|
|
throw new NullReferenceException("Personal table hasn't been initialized.");
|
|
|
|
var pi = pt.GetFormEntry((ushort)PKM.Species, (byte)PKM.Form);
|
|
var stats = PKM.GetStats(pi);
|
|
|
|
Stat_HP.Text = stats[0].ToString();
|
|
Stat_ATK.Text = stats[1].ToString();
|
|
Stat_DEF.Text = stats[2].ToString();
|
|
Stat_SPA.Text = stats[4].ToString();
|
|
Stat_SPD.Text = stats[5].ToString();
|
|
Stat_SPE.Text = stats[3].ToString();
|
|
|
|
TB_IVTotal.Text = tb_iv.Select(z => Util.ToInt32(z.Text)).Sum().ToString();
|
|
TB_EVTotal.Text = tb_ev.Select(z => Util.ToInt32(z.Text)).Sum().ToString();
|
|
if (PKM is IAwakened s)
|
|
TB_AVTotal.Text = s.AwakeningSum().ToString();
|
|
|
|
var showAV = PKM is IAwakened;
|
|
Label_AVs.Visible = TB_AVTotal.Visible = FLP_HPType.Visible = showAV;
|
|
foreach (var mtb in tb_av)
|
|
mtb.Visible = showAV;
|
|
Label_EVs.Visible = TB_EVTotal.Visible = FLP_Dynamax.Visible = !showAV;
|
|
foreach (var mtb in tb_ev)
|
|
mtb.Visible = !showAV;
|
|
|
|
// Recolor the Stat Labels based on boosted stats.
|
|
RecolorStatLabels();
|
|
UpdatingFields = true;
|
|
CB_HPType.SelectedIndex = PKM.HiddenPowerType;
|
|
UpdatingFields = false;
|
|
}
|
|
|
|
private void RecolorStatLabels()
|
|
{
|
|
int incr = (PKM.Nature / 5);
|
|
int decr = (PKM.Nature % 5);
|
|
// Reset Label Colors
|
|
foreach (Label label in labarray)
|
|
label.ResetForeColor();
|
|
|
|
// Set Colored StatLabels only if Nature isn't Neutral
|
|
if (incr != decr)
|
|
{
|
|
labarray[incr].ForeColor = Color.Red;
|
|
labarray[decr].ForeColor = Color.Blue;
|
|
}
|
|
}
|
|
|
|
public void LoadStats(StatPKM pkm)
|
|
{
|
|
PKM = pkm;
|
|
|
|
UpdatingFields = true;
|
|
for (int i = 0; i < 6; i++)
|
|
tb_iv[i].Text = pkm.GetIV(i).ToString("00");
|
|
for (int i = 0; i < 6; i++)
|
|
tb_ev[i].Text = pkm.GetEV(i).ToString("00");
|
|
if (PKM is IAwakened a)
|
|
{
|
|
for (int i = 0; i < 6; i++)
|
|
tb_av[i].Text = a.GetAV(i).ToString("00");
|
|
}
|
|
CB_HPType.SelectedIndex = PKM.HiddenPowerType;
|
|
UpdatingFields = false;
|
|
UpdateStats();
|
|
}
|
|
|
|
private void UpdateIV(object sender, EventArgs e)
|
|
{
|
|
if (UpdatingFields || sender is not MaskedTextBox t)
|
|
return;
|
|
var index = Array.IndexOf(tb_iv, t);
|
|
if (index < 0)
|
|
return;
|
|
int value = Math.Min(31, Util.ToInt32(t.Text));
|
|
PKM.SetIV(index, value);
|
|
UpdatingFields = true;
|
|
CB_HPType.SelectedIndex = PKM.HiddenPowerType;
|
|
UpdatingFields = false;
|
|
UpdateStats();
|
|
}
|
|
|
|
private void UpdateEV(object sender, EventArgs e)
|
|
{
|
|
if (UpdatingFields || sender is not MaskedTextBox t)
|
|
return;
|
|
var index = Array.IndexOf(tb_ev, t);
|
|
if (index < 0)
|
|
return;
|
|
int value = Math.Min(252, Util.ToInt32(t.Text));
|
|
PKM.SetEV(index, value);
|
|
UpdateStats();
|
|
}
|
|
|
|
private void UpdateAV(object sender, EventArgs e)
|
|
{
|
|
if (UpdatingFields || sender is not MaskedTextBox t || PKM is not IAwakened a)
|
|
return;
|
|
var index = Array.IndexOf(tb_av, t);
|
|
if (index < 0)
|
|
return;
|
|
int value = Math.Min(200, Util.ToInt32(t.Text));
|
|
a.SetAV(index, value);
|
|
UpdateStats();
|
|
}
|
|
|
|
private void ChangeHPType(object sender, EventArgs e)
|
|
{
|
|
if (UpdatingFields)
|
|
return;
|
|
PKM.SetHPIVs(CB_HPType.SelectedIndex);
|
|
UpdateStats();
|
|
}
|
|
}
|