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)
77 lines
2.0 KiB
C#
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))}";
|
|
}
|
|
}
|