mirror of
https://github.com/kwsch/PKHeX
synced 2024-11-27 14:30:56 +00:00
98f21a12dd
use trainerstat editor control in gen6 editor fill in some details from the disassembly via setrecord usages still slightly fuzzy on some: fureai (based on usum idb name, similar logic) soaring sky counts looks like there's some other usages of the fields which were outside the stat range, throwing an exception when loading to NumericUpDown, added bypass logic Thanks Holla!
85 lines
2.6 KiB
C#
85 lines
2.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Windows.Forms;
|
|
using PKHeX.Core;
|
|
|
|
namespace PKHeX.WinForms.Subforms.Save_Editors
|
|
{
|
|
public partial class TrainerStat : UserControl
|
|
{
|
|
public TrainerStat() => InitializeComponent();
|
|
private readonly ToolTip Tip = new ToolTip();
|
|
private bool Editing;
|
|
private ITrainerStatRecord SAV;
|
|
private Dictionary<int, string> RecordList; // index, description
|
|
public Func<int, string> GetToolTipText { private get; set; }
|
|
|
|
public void LoadRecords(ITrainerStatRecord sav, Dictionary<int, string> records)
|
|
{
|
|
SAV = sav;
|
|
RecordList = records;
|
|
CB_Stats.Items.Clear();
|
|
for (int i = 0; i < sav.RecordCount; i++)
|
|
{
|
|
if (!RecordList.TryGetValue(i, out string name))
|
|
name = $"{i:D3}";
|
|
|
|
CB_Stats.Items.Add(name);
|
|
}
|
|
CB_Stats.SelectedIndex = RecordList.First().Key;
|
|
}
|
|
|
|
private void ChangeStat(object sender, EventArgs e)
|
|
{
|
|
Editing = true;
|
|
int index = CB_Stats.SelectedIndex;
|
|
int val = SAV.GetRecord(index);
|
|
NUD_Stat.Maximum = Math.Max(val, SAV.GetRecordMax(index));
|
|
NUD_Stat.Value = val;
|
|
|
|
int offset = SAV.GetRecordOffset(index);
|
|
L_Offset.Text = $"Offset: 0x{offset:X3}";
|
|
UpdateTip(index, true);
|
|
Editing = false;
|
|
}
|
|
|
|
private void ChangeStatVal(object sender, EventArgs e)
|
|
{
|
|
if (Editing)
|
|
return;
|
|
int index = CB_Stats.SelectedIndex;
|
|
SAV.SetRecord(index, (int)NUD_Stat.Value);
|
|
UpdateTip(index, false);
|
|
}
|
|
|
|
private void UpdateTip(int index, bool updateStats)
|
|
{
|
|
if (GetToolTipText != null)
|
|
UpdateToolTipSpecial(index, updateStats);
|
|
else
|
|
UpdateToolTipDefault(index, updateStats);
|
|
}
|
|
|
|
private void UpdateToolTipSpecial(int index, bool updateStats)
|
|
{
|
|
var str = GetToolTipText(index);
|
|
if (str != null)
|
|
{
|
|
Tip.SetToolTip(NUD_Stat, str);
|
|
return;
|
|
}
|
|
UpdateToolTipDefault(index, updateStats); // fallback
|
|
}
|
|
|
|
private void UpdateToolTipDefault(int index, bool updateStats)
|
|
{
|
|
if (!updateStats || !RecordList.TryGetValue(index, out string tip))
|
|
{
|
|
Tip.RemoveAll();
|
|
return;
|
|
}
|
|
Tip.SetToolTip(CB_Stats, tip);
|
|
}
|
|
}
|
|
}
|