NHSE/NHSE.WinForms/Subforms/Player/AchievementEditor.cs
2026-01-13 16:02:58 -06:00

135 lines
3.4 KiB
C#

using System;
using System.Windows.Forms;
using NHSE.Core;
namespace NHSE.WinForms;
public partial class AchievementEditor : Form
{
private readonly Personal Personal;
private readonly AchievementList List;
private readonly AchievementRow[] Rows;
private int Index = -1;
public AchievementEditor(Personal personal)
{
InitializeComponent();
this.TranslateInterface(GameInfo.CurrentLanguage);
Personal = personal;
var list = List = personal.Achievements;
var str = GameInfo.Strings.InternalNameTranslation;
for (int i = 0; i < list.Counts.Length; i++)
LB_Counts.Items.Add(LifeSupportAchievement.GetName(i, list.Counts[i], str));
Rows = [AR_1, AR_2, AR_3, AR_4, AR_5, AR_6];
LB_Counts.SelectedIndex = 0;
}
private void B_Cancel_Click(object sender, EventArgs e) => Close();
private void B_Save_Click(object sender, EventArgs e)
{
SaveIndex(Index);
Personal.Achievements = List;
Close();
}
private void NUD_Count_ValueChanged(object sender, EventArgs e)
{
if (Index < 0)
return;
List.Counts[Index] = (uint) NUD_Count.Value;
for (int i = 0; i < Rows.Length; i++)
Rows[i].ChangeCount(Index, i, List.Counts[Index]);
SetEntryDescription(Index);
}
private void SetEntryDescription(int index)
{
LB_Counts.Items[index] = LifeSupportAchievement.GetName(index, List.Counts[index], GameInfo.Strings.InternalNameTranslation);
}
private void LB_Counts_SelectedIndexChanged(object sender, EventArgs e)
{
if (LB_Counts.SelectedIndex < 0)
return;
SaveIndex(Index);
LoadIndex(Index = LB_Counts.SelectedIndex);
}
private void LoadIndex(int index)
{
if (index < 0)
return;
for (int i = 0; i < Rows.Length; i++)
Rows[i].LoadRow(List, Index, i);
NUD_Unk.Value = List.Flags[index];
var val = List.Counts[index];
NUD_Count.Value = (int)val;
}
private void SaveIndex(in int index)
{
if (index < 0)
return;
for (int i = 0; i < Rows.Length; i++)
Rows[i].SaveRow(List, index, i);
List.Flags[index] = (byte)NUD_Unk.Value;
// count updated on value changed
}
private void B_Clear_Click(object sender, EventArgs e)
{
List.ClearAll(Index);
LoadIndex(Index);
System.Media.SystemSounds.Asterisk.Play();
}
private void B_Max_Click(object sender, EventArgs e)
{
List.GiveAll(Index, DateTime.Now);
LoadIndex(Index);
System.Media.SystemSounds.Asterisk.Play();
}
private void B_GiveAll_Click(object sender, EventArgs e)
{
SaveIndex(Index);
var index = Index;
Index = -1;
List.GiveAll(DateTime.Now);
for (int i = 0; i < List.Counts.Length; i++)
SetEntryDescription(i);
LoadIndex(Index = index);
System.Media.SystemSounds.Asterisk.Play();
}
private void B_ClearAll_Click(object sender, EventArgs e)
{
SaveIndex(Index);
var index = Index;
Index = -1;
List.ClearAll();
for (int i = 0; i < List.Counts.Length; i++)
SetEntryDescription(i);
LoadIndex(Index = index);
System.Media.SystemSounds.Asterisk.Play();
}
}