pkNX/pkNX.WinForms/Subforms/ShinyRate.cs
Kurt 76b0b62ca3 Refactoring
File scoped namespaces
NET6 for GUI
handle nullable references
add editorconfig (mostly for newline at end of file)
2022-10-01 12:44:47 -07:00

77 lines
2.0 KiB
C#

using System;
using System.Windows.Forms;
using pkNX.Game;
namespace pkNX.WinForms;
public sealed partial class ShinyRate : Form
{
private readonly ShinyRateInfo Data;
private readonly bool Loaded;
public ShinyRate(ShinyRateInfo info)
{
InitializeComponent();
Data = info;
// load initial state
RB_Always.Enabled = Data.AllowAlways;
if (Data.IsFixed)
{
RB_Fixed.Checked = true;
NUD_Rerolls.Value = Data.GetFixedRate();
}
if (Data.IsAlways)
RB_Always.Checked = true;
if (Data.IsDefault)
RB_Default.Checked = true;
// force update labels
ChangePercent(this, EventArgs.Empty);
ChangeRerollCount(this, EventArgs.Empty);
Loaded = true;
}
public bool Modified { get; set; }
private void B_Save_Click(object sender, EventArgs e)
{
Modified = true;
Close();
}
private void ChangeSelection(object sender, EventArgs e)
{
GB_Rerolls.Enabled = GB_RerollHelper.Enabled = sender == RB_Fixed;
if (!Loaded)
return;
if (sender == RB_Default)
Data.SetDefault();
else if (sender == RB_Always)
Data.SetAlwaysShiny();
else
Data.SetFixedRate((int)NUD_Rerolls.Value);
}
private void ChangeRerollCount(object sender, EventArgs e)
{
if (Loaded && RB_Fixed.Checked)
Data.SetFixedRate((int)NUD_Rerolls.Value);
int count = (int)NUD_Rerolls.Value;
const int bc = 4096;
var pct = 1 - Math.Pow((float)(bc - 1) / bc, count);
L_Overall.Text = $"~{pct:P}";
}
private void ChangePercent(object sender, EventArgs e)
{
var pct = NUD_Rate.Value;
const int bc = 4096;
var inv = (int)Math.Log(1 - ((float)pct / 100), (float)(bc - 1) / bc);
if (pct == 0)
pct = 0.00001m; // arbitrary nonzero
L_RerollCount.Text = $"Count: {inv:0} = 1:{(int)(1 / (pct / 100))}";
}
}