Skip to content

Commit

Permalink
Add gender sprites for main GUI
Browse files Browse the repository at this point in the history
Might trickle this out to the other editors that have gender toggles.
  • Loading branch information
kwsch committed Apr 25, 2022
1 parent 1f49574 commit c460f5b
Show file tree
Hide file tree
Showing 14 changed files with 399 additions and 263 deletions.
20 changes: 20 additions & 0 deletions PKHeX.Core/Legality/Structures/Shiny.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,24 @@ public static class ShinyExtensions
Shiny.AlwaysStar => true,
_ => false,
};

public static bool ShowSquareBeforeGen8 { get; set; }

public static Shiny GetType(PKM pk)
{
bool shiny = pk.IsShiny;
if (!shiny)
return Shiny.Never;

if (IsSquareShinyExist(pk))
return Shiny.AlwaysSquare;
return Shiny.AlwaysStar;
}

public static bool IsSquareShinyExist(PKM pk)
{
if (pk.Format < 8 && !ShowSquareBeforeGen8)
return false;
return pk.ShinyXor == 0 || pk.FatefulEncounter || pk.Version == (int)GameVersion.GO;
}
}
2 changes: 1 addition & 1 deletion PKHeX.Drawing.PokeSprite/Util/SpriteUtil.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public static Image GetSprite(int species, int form, int gender, uint formarg, i
private static Image GetSprite(PKM pk, bool isBoxBGRed = false)
{
var formarg = pk is IFormArgument f ? f.FormArgument : 0;
bool alt = pk.Format >= 8 && (pk.ShinyXor == 0 || pk.FatefulEncounter || pk.Version == (int)GameVersion.GO);
bool alt = ShinyExtensions.IsSquareShinyExist(pk);
var img = GetSprite(pk.Species, pk.Form, pk.Gender, formarg, pk.SpriteItem, pk.IsEgg, pk.IsShiny, pk.Format, isBoxBGRed, alt);
if (pk is IShadowPKM {IsShadow: true})
{
Expand Down
45 changes: 45 additions & 0 deletions PKHeX.WinForms/Controls/PKM Editor/GenderToggle.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

69 changes: 69 additions & 0 deletions PKHeX.WinForms/Controls/PKM Editor/GenderToggle.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
using System.Drawing;
using System.Windows.Forms;
using static PKHeX.WinForms.Properties.Resources;

namespace PKHeX.WinForms.Controls;

public partial class GenderToggle : UserControl, IGenderToggle
{
public bool AllowClick { get; set; } = true;

private int Value;

public int Gender
{
get => Value;
set => Value = SetGender(value);
}

public GenderToggle() => InitializeComponent();

private static readonly Image[] GenderImages =
{
gender_0,
gender_1,
gender_2,
};

private int SetGender(int value)
{
if ((uint)value > 2)
value = 2;
if (Value != value)
BackgroundImage = GenderImages[value];
return value;
}

private void GenderToggle_Click(object sender, System.EventArgs e)
{
if (!AllowClick)
return;
ToggleGender();
}

public (bool CanToggle, int Value) ToggleGender()
{
if ((uint)Gender < 2)
return (true, Gender ^= 1);
return (false, Gender);
}
}

public interface IGenderToggle
{
/// <summary>
/// Enables use of the built in click action.
/// </summary>
bool AllowClick { get; set; }

/// <summary>
/// Get or set the value the control displays.
/// </summary>
int Gender { get; set; }

/// <summary>
/// Manually flips the gender state if possible.
/// </summary>
/// <returns>True if can toggle, and the resulting value.</returns>
(bool CanToggle, int Value) ToggleGender();
}
22 changes: 10 additions & 12 deletions PKHeX.WinForms/Controls/PKM Editor/LoadSave.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,14 +45,13 @@ private void LoadOT(PKM pk)
{
GB_OT.BackgroundImage = null; // clear the Current Handler indicator just in case we switched formats.
TB_OT.Text = pk.OT_Name;
Label_OTGender.Text = gendersymbols[pk.OT_Gender];
Label_OTGender.ForeColor = Draw.GetGenderColor(pk.OT_Gender);
UC_OTGender.Gender = pk.OT_Gender & 1;
}

private void SaveOT(PKM pk)
{
pk.OT_Name = TB_OT.Text;
pk.OT_Gender = PKX.GetGenderFromString(Label_OTGender.Text);
pk.OT_Gender = UC_OTGender.Gender;
}

private void LoadPKRS(PKM pk)
Expand Down Expand Up @@ -216,8 +215,7 @@ private static void UpdateFromFriendshipTextBox(PKM pk, int friendship)
private void LoadMisc3(PKM pk)
{
TB_PID.Text = $"{pk.PID:X8}";
Label_Gender.Text = gendersymbols[Math.Min(2, pk.Gender)];
Label_Gender.ForeColor = Draw.GetGenderColor(pk.Gender);
UC_Gender.Gender = pk.Gender;
CB_Nature.SelectedValue = pk.Nature;
CB_Language.SelectedValue = pk.Language;
CB_GameOrigin.SelectedValue = pk.Version;
Expand All @@ -241,7 +239,7 @@ private void SaveMisc3(PKM pk)
{
pk.PID = Util.GetHexValue(TB_PID.Text);
pk.Nature = WinFormsUtil.GetIndex(CB_Nature);
pk.Gender = PKX.GetGenderFromString(Label_Gender.Text);
pk.Gender = UC_Gender.Gender;

if (pk is IContestStatsMutable s)
Contest.CopyContestStatsTo(s);
Expand Down Expand Up @@ -347,10 +345,10 @@ private void LoadHandlingTrainer(PKM pk)
var handler = pk.HT_Name;
int gender = pk.HT_Gender & 1;

TB_OTt2.Text = handler;
// Set CT Gender to None if no CT, else set to gender symbol.
Label_CTGender.Text = string.IsNullOrEmpty(handler) ? string.Empty : gendersymbols[gender];
Label_CTGender.ForeColor = Draw.GetGenderColor(gender);
TB_HT.Text = handler;
UC_HTGender.Gender = gender;
if (handler.Length == 0)
UC_HTGender.Visible = false;

// Indicate who is currently in possession of the PKM
UpadteHandlingTrainerBackground(pk.CurrentHandler);
Expand All @@ -373,8 +371,8 @@ private void UpadteHandlingTrainerBackground(int handler)

private void SaveHandlingTrainer(PKM pk)
{
pk.HT_Name = TB_OTt2.Text;
pk.HT_Gender = PKX.GetGenderFromString(Label_CTGender.Text) & 1;
pk.HT_Name = TB_HT.Text;
pk.HT_Gender = UC_HTGender.Gender;
}

private void LoadAbility4(PKM pk)
Expand Down
Loading

0 comments on commit c460f5b

Please sign in to comment.