mirror of
https://github.com/kwsch/NHSE.git
synced 2026-04-12 03:45:35 -05:00
167 lines
5.6 KiB
C#
167 lines
5.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Windows.Forms;
|
|
using NHSE.Core;
|
|
|
|
namespace NHSE.WinForms
|
|
{
|
|
public partial class VillagerMemoryEditor : Form
|
|
{
|
|
private readonly IVillager Villager;
|
|
private readonly GSaveMemory[] Memories;
|
|
|
|
private int PlayerIndex = -1;
|
|
private int FlagIndex = -1;
|
|
private byte[] Flags = Array.Empty<byte>();
|
|
|
|
private readonly TextBox[] Greetings;
|
|
|
|
public VillagerMemoryEditor(IVillager villager)
|
|
{
|
|
InitializeComponent();
|
|
this.TranslateInterface(GameInfo.CurrentLanguage);
|
|
|
|
Greetings = new[]
|
|
{
|
|
TB_Greeting,
|
|
TB_Greeting1, TB_Greeting2, TB_Greeting3, TB_Greeting4, TB_Greeting5,
|
|
TB_Greeting6, TB_Greeting7, TB_Greeting8, TB_Greeting9, TB_Greeting10
|
|
};
|
|
|
|
Villager = villager;
|
|
Memories = villager.GetMemories();
|
|
|
|
UpdatePlayerIslandStrings();
|
|
|
|
LB_Players.SelectedIndex = 0;
|
|
|
|
DialogResult = DialogResult.Cancel;
|
|
LB_Counts.SelectedIndex = 0;
|
|
}
|
|
|
|
private void UpdatePlayerIslandStrings()
|
|
{
|
|
if (LB_Players.Items.Count < 1)
|
|
for (int i = 0; i < Memories.Length; i++)
|
|
LB_Players.Items.Add($"{i} - {Memories[i].PlayerName} ({Memories[i].TownName})");
|
|
else
|
|
for (int i = 0; i < LB_Players.Items.Count; i++)
|
|
LB_Players.Items[i] = $"{i} - {Memories[i].PlayerName} ({Memories[i].TownName})";
|
|
|
|
}
|
|
|
|
private void B_Cancel_Click(object sender, EventArgs e) => Close();
|
|
|
|
private void B_Save_Click(object sender, EventArgs e)
|
|
{
|
|
SavePlayer(PlayerIndex);
|
|
Villager.SetMemories(Memories);
|
|
DialogResult = DialogResult.OK;
|
|
Close();
|
|
}
|
|
|
|
private static string GetFlagDescription(int index, IReadOnlyList<byte> flags, IReadOnlyDictionary<string, string> str)
|
|
{
|
|
return EventFlagVillagerMemoryPlayer.GetName((ushort)index, flags[index], str);
|
|
}
|
|
|
|
private void NUD_Count_ValueChanged(object sender, EventArgs e)
|
|
{
|
|
var flagIndex = FlagIndex;
|
|
if (flagIndex < 0)
|
|
return;
|
|
|
|
Flags[FlagIndex] = (byte) NUD_Count.Value;
|
|
LB_Counts.Items[FlagIndex] = GetFlagDescription(flagIndex, Flags, GameInfo.Strings.InternalNameTranslation);
|
|
}
|
|
|
|
private void LB_Counts_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
if (LB_Counts.SelectedIndex < 0)
|
|
return;
|
|
|
|
NUD_Count.Value = Flags[FlagIndex = LB_Counts.SelectedIndex];
|
|
}
|
|
|
|
private void LB_Players_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
SavePlayer(PlayerIndex);
|
|
PlayerIndex = LB_Players.SelectedIndex;
|
|
if (PlayerIndex >= 0)
|
|
LoadPlayer(PlayerIndex);
|
|
}
|
|
|
|
private void LoadPlayer(in int playerIndex)
|
|
{
|
|
FlagIndex = -1;
|
|
var index = LB_Counts.SelectedIndex;
|
|
var memory = Memories[playerIndex];
|
|
var flags = memory.GetEventFlags();
|
|
|
|
var str = GameInfo.Strings.InternalNameTranslation;
|
|
LB_Counts.Items.Clear();
|
|
for (int i = 0; i < flags.Length; i++)
|
|
LB_Counts.Items.Add(GetFlagDescription((byte)i, flags, str));
|
|
|
|
Flags = flags;
|
|
LB_Counts.SelectedIndex = FlagIndex = index;
|
|
|
|
TB_NickName.Text = memory.NickName;
|
|
for (int i = 0; i < Greetings.Length; i++)
|
|
Greetings[i].Text = memory.GetGreeting(i);
|
|
|
|
var date = memory.GreetingSetDate;
|
|
if (date < CAL_GreetDate.MinDate)
|
|
date = CAL_GreetDate.MinDate;
|
|
CAL_GreetDate.Value = date;
|
|
|
|
TB_NamePlayer.Text = memory.PlayerName;
|
|
TB_Island.Text = memory.TownName;
|
|
}
|
|
|
|
private void SavePlayer(in int playerIndex)
|
|
{
|
|
if (playerIndex < 0)
|
|
return;
|
|
|
|
var memory = Memories[playerIndex];
|
|
memory.SetEventFlags(Flags);
|
|
|
|
memory.NickName = TB_NickName.Text;
|
|
for (int i = 0; i < Greetings.Length; i++)
|
|
memory.SetGreeting(Greetings[i].Text, i);
|
|
memory.GreetingSetDate = CAL_GreetDate.Value == CAL_GreetDate.MinDate ? new GSaveDate() : (GSaveDate)CAL_GreetDate.Value;
|
|
}
|
|
|
|
private void B_Dump_Click(object sender, EventArgs e)
|
|
{
|
|
SavePlayer(PlayerIndex);
|
|
MiscDumpHelper.DumpVillagerMemoryPlayer(Villager, Memories[PlayerIndex]);
|
|
}
|
|
|
|
private void B_Load_Click(object sender, EventArgs e)
|
|
{
|
|
if (!MiscDumpHelper.LoadVillagerMemoryPlayer(Villager, Memories, PlayerIndex))
|
|
return;
|
|
LoadPlayer(PlayerIndex);
|
|
System.Media.SystemSounds.Asterisk.Play();
|
|
}
|
|
|
|
private void TB_NamePlayer_TextChanged(object sender, EventArgs e)
|
|
{
|
|
if (LB_Players.SelectedIndex < 0)
|
|
return;
|
|
Memories[LB_Players.SelectedIndex].PlayerName = TB_NamePlayer.Text; // this should be enough for player name changes within NHSE as identities are never changed by the end-user
|
|
UpdatePlayerIslandStrings();
|
|
}
|
|
|
|
private void TB_Island_TextChanged(object sender, EventArgs e)
|
|
{
|
|
if (LB_Players.SelectedIndex < 0)
|
|
return;
|
|
Memories[LB_Players.SelectedIndex].TownName = TB_Island.Text; // as above
|
|
UpdatePlayerIslandStrings();
|
|
}
|
|
}
|
|
}
|