add seperate color mode toggle for body colors
This commit is contained in:
parent
8643ea14af
commit
ef2dce6872
|
@ -1,16 +1,22 @@
|
|||
AVALI_SKIN_TITLE= Avali Skin
|
||||
|
||||
modoptions_avaliskin_colormodeopt=Dash color mode
|
||||
modoptions_avaliskin_dashcolormodeopt=Dash color mode
|
||||
modoptions_avaliskin_bodycolormodeopt=Body color mode
|
||||
|
||||
modoptions_avaliskin_colormodeopt_ExternalDash=Use hair color
|
||||
modoptions_avaliskin_colormodeopt_ManualPreset=Select color preset
|
||||
modoptions_avaliskin_colormodeopt_ManualPreset_note=Selects hair color from color presets
|
||||
Make sure to disable other hair color mods.
|
||||
modoptions_avaliskin_colormodeopt_ManualRGB=Select RGB color
|
||||
modoptions_avaliskin_colormodeopt_ManualRGB_note=Selects hair color from RGB values.
|
||||
Make sure to disable other hair color mods.
|
||||
modoptions_avaliskin_colormodeopt_ExternalDash_note=Uses hair color from vanilla
|
||||
modoptions_avaliskin_dashcolormodeopt_ExternalDash_note=Uses hair color from vanilla
|
||||
or from other mods (e.g., Hyperline, Prideline)
|
||||
|
||||
modoptions_avaliskin_colormodeopt_ManualPreset=Select color preset
|
||||
modoptions_avaliskin_dashcolormodeopt_ManualPreset_note=Selects hair color from color presets
|
||||
Make sure to disable other hair color mods.
|
||||
modoptions_avaliskin_bodycolormodeopt_ManualPreset_note=Selects body color from color presets
|
||||
|
||||
modoptions_avaliskin_colormodeopt_ManualRGB=Select RGB color
|
||||
modoptions_avaliskin_dashcolormodeopt_ManualRGB_note=Selects hair color from RGB values.
|
||||
Make sure to disable other hair color mods.
|
||||
modoptions_avaliskin_bodycolormodeopt_ManualRGB_note=Selects body color from RGB values.
|
||||
|
||||
AVALI_SKIN_COLORS=Dash colors
|
||||
AVALI_SKIN_DASH0=Zero Dashes
|
||||
AVALI_SKIN_DASH1=One Dash
|
||||
|
|
|
@ -14,6 +14,7 @@ using Celeste.Mod.CelesteNet.Client.Entities;
|
|||
using Celeste.Mod.CelesteNet.DataTypes;
|
||||
|
||||
using ColorChoice = Celeste.Mod.AvaliSkin.AvaliSkinSettings.ColorChoice;
|
||||
using DashColorMode = Celeste.Mod.AvaliSkin.AvaliSkinSettings.DashColorMode;
|
||||
using ColorMode = Celeste.Mod.AvaliSkin.AvaliSkinSettings.ColorMode;
|
||||
|
||||
|
||||
|
@ -28,19 +29,19 @@ namespace Celeste.Mod.AvaliSkin {
|
|||
public static AvaliConfig PlayerConfig {
|
||||
get => new AvaliConfig {
|
||||
Enabled = Settings.Enabled,
|
||||
ColorMode = Settings.ColorModeOpt,
|
||||
DashColorMode = Settings.DashColorModeOpt,
|
||||
DashColors =
|
||||
Settings.ColorModeOpt == ColorMode.ManualPreset
|
||||
Settings.DashColorModeOpt == DashColorMode.ManualPreset
|
||||
? Settings.DashPreset.Select(preset => ColorUtil.SettingToColor(preset)).ToList()
|
||||
: Settings.DashRGBColor,
|
||||
LightBody = Settings.ColorModeOpt == ColorMode.ManualPreset ? ColorUtil.SettingToColor(Settings.LightBodyPreset) : Settings.LightBodyRGBColor,
|
||||
DarkBody = Settings.ColorModeOpt == ColorMode.ManualPreset ? ColorUtil.SettingToColor(Settings.DarkBodyPreset) : Settings.DarkBodyRGBColor,
|
||||
LightBody = Settings.BodyColorModeOpt == ColorMode.ManualPreset ? ColorUtil.SettingToColor(Settings.LightBodyPreset) : Settings.LightBodyRGBColor,
|
||||
DarkBody = Settings.BodyColorModeOpt == ColorMode.ManualPreset ? ColorUtil.SettingToColor(Settings.DarkBodyPreset) : Settings.DarkBodyRGBColor,
|
||||
};
|
||||
}
|
||||
public static AvaliConfig EveryoneHasSkinConfig {
|
||||
get => new AvaliConfig {
|
||||
Enabled = true,
|
||||
ColorMode = ColorMode.ExternalDash,
|
||||
DashColorMode = DashColorMode.ExternalDash,
|
||||
LightBody = PlayerConfig.LightBody,
|
||||
DarkBody = PlayerConfig.DarkBody,
|
||||
};
|
||||
|
@ -445,7 +446,7 @@ namespace Celeste.Mod.AvaliSkin {
|
|||
// The hair mod should do be doing that instead of us.
|
||||
// Furthermore: naively doing this will look strange because the white
|
||||
// hair flash right after dashing will be copied to the trail.
|
||||
if (PlayerConfig.ColorMode != ColorMode.ExternalDash) {
|
||||
if (PlayerConfig.DashColorMode != DashColorMode.ExternalDash) {
|
||||
// replace trail colors with marking colors
|
||||
return PlayerConfig.GetColor(self);
|
||||
}
|
||||
|
@ -460,7 +461,7 @@ namespace Celeste.Mod.AvaliSkin {
|
|||
orig(self, applyGravity);
|
||||
|
||||
// Don't change the hair color if another mod is in control of it!
|
||||
if (PlayerConfig.IsEnabled(self) && PlayerConfig.ColorMode != ColorMode.ExternalDash) {
|
||||
if (PlayerConfig.IsEnabled(self) && PlayerConfig.DashColorMode != DashColorMode.ExternalDash) {
|
||||
// change player hair color to match dash colors.
|
||||
// (hair is invisible, but that influences other things like the orbs when the Avali dies and respawns)
|
||||
self.Hair.Color = PlayerConfig.GetColor(self);
|
||||
|
@ -474,7 +475,7 @@ namespace Celeste.Mod.AvaliSkin {
|
|||
// We can't exfiltrate a dash color in this mode because we can't extract that
|
||||
// without integrating with the dash color mod, and besides, whatever mod that
|
||||
// changed the dash color should have also changed these particles regardless.
|
||||
&& PlayerConfig.ColorMode != ColorMode.ExternalDash
|
||||
&& PlayerConfig.DashColorMode != DashColorMode.ExternalDash
|
||||
)) {
|
||||
// disabled, just run vanilla code
|
||||
return orig(self);
|
||||
|
|
|
@ -17,40 +17,52 @@ namespace Celeste.Mod.AvaliSkin {
|
|||
if (loadedCelestenet) { updateSkinCelestenet(); }
|
||||
|
||||
// menu is not loaded; don't bother
|
||||
if (ColorModeOptItem == null) { return; }
|
||||
if (DashColorModeOptItem == null) { return; }
|
||||
|
||||
// disable all the normal options if the main toggle is disabled
|
||||
ColorModeOptItem.Disabled = !Enabled;
|
||||
ColorSubmenuItem.Disabled = !Enabled;
|
||||
DashColorModeOptItem.Disabled = !Enabled;
|
||||
DashColorSubmenuItem.Disabled = !Enabled;
|
||||
BodyColorModeOptItem.Disabled = !Enabled;
|
||||
BodyColorSubmenuItem.Disabled = !Enabled;
|
||||
|
||||
// change up the colormode note based on the selection
|
||||
string colorModeNote = "";
|
||||
switch (ColorModeOpt) {
|
||||
case ColorMode.ExternalDash: colorModeNote = "modoptions_avaliskin_colormodeopt_ExternalDash_note"; break;
|
||||
case ColorMode.ManualPreset: colorModeNote = "modoptions_avaliskin_colormodeopt_ManualPreset_note"; break;
|
||||
case ColorMode.ManualRGB: colorModeNote = "modoptions_avaliskin_colormodeopt_ManualRGB_note"; break;
|
||||
switch (DashColorModeOpt) {
|
||||
case DashColorMode.ExternalDash: colorModeNote = "modoptions_avaliskin_dashcolormodeopt_ExternalDash_note"; break;
|
||||
case DashColorMode.ManualPreset: colorModeNote = "modoptions_avaliskin_dashcolormodeopt_ManualPreset_note"; break;
|
||||
case DashColorMode.ManualRGB: colorModeNote = "modoptions_avaliskin_dashcolormodeopt_ManualRGB_note"; break;
|
||||
}
|
||||
ColorModeOptNote.Title = colorModeNote.DialogOrKey();
|
||||
DashColorModeOptNote.Title = colorModeNote.DialogOrKey();
|
||||
|
||||
switch (BodyColorModeOpt) {
|
||||
case ColorMode.ManualPreset: colorModeNote = "modoptions_avaliskin_bodycolormodeopt_ManualPreset_note"; break;
|
||||
case ColorMode.ManualRGB: colorModeNote = "modoptions_avaliskin_bodycolormodeopt_ManualRGB_note"; break;
|
||||
}
|
||||
BodyColorModeOptNote.Title = colorModeNote.DialogOrKey();
|
||||
|
||||
// no point in showing the submenu at all for externaldash; there's
|
||||
// nothing to configure!
|
||||
ColorSubmenuItem.Visible = ColorModeOpt != ColorMode.ExternalDash;
|
||||
DashColorSubmenuItem.Visible = DashColorModeOpt != DashColorMode.ExternalDash;
|
||||
|
||||
// disable and change item visibility based on main toggle or colormode
|
||||
foreach (var item in RGBItems) {
|
||||
foreach (var item in RGBDashColorItems) {
|
||||
item.Disabled = !Enabled;
|
||||
item.Visible = ColorModeOpt == ColorMode.ManualRGB
|
||||
|| ColorModeOpt == ColorMode.ExternalDash;
|
||||
item.Visible = DashColorModeOpt == DashColorMode.ManualRGB;
|
||||
}
|
||||
|
||||
foreach (var item in PresetItems) {
|
||||
foreach (var item in PresetDashColorItems) {
|
||||
item.Disabled = !Enabled;
|
||||
item.Visible = ColorModeOpt == ColorMode.ManualPreset
|
||||
|| ColorModeOpt == ColorMode.ExternalDash;
|
||||
item.Visible = DashColorModeOpt == DashColorMode.ManualPreset;
|
||||
}
|
||||
|
||||
foreach (var item in DashColorItems) {
|
||||
item.Visible = ColorModeOpt != ColorMode.ExternalDash;
|
||||
foreach (var item in RGBBodyColorItems) {
|
||||
item.Disabled = !Enabled;
|
||||
item.Visible = BodyColorModeOpt == ColorMode.ManualRGB;
|
||||
}
|
||||
|
||||
foreach (var item in PresetBodyColorItems) {
|
||||
item.Disabled = !Enabled;
|
||||
item.Visible = BodyColorModeOpt == ColorMode.ManualPreset;
|
||||
}
|
||||
|
||||
|
||||
|
@ -99,18 +111,110 @@ namespace Celeste.Mod.AvaliSkin {
|
|||
}
|
||||
|
||||
|
||||
public enum ColorMode {
|
||||
public enum DashColorMode {
|
||||
ExternalDash,
|
||||
ManualPreset,
|
||||
ManualRGB
|
||||
}
|
||||
|
||||
public ColorMode ColorModeOpt { get; set; } = ColorMode.ExternalDash;
|
||||
private TextMenu.Item ColorModeOptItem;
|
||||
private TextMenu.SubHeader ColorModeOptNote;
|
||||
public void CreateColorModeOptEntry(TextMenu menu, bool inGame) {
|
||||
ColorModeOptItem = new TextMenuExt.EnumerableSlider<ColorMode>(
|
||||
"modoptions_avaliskin_colormodeopt".DialogOrKey(),
|
||||
public DashColorMode DashColorModeOpt { get; set; } = DashColorMode.ExternalDash;
|
||||
private TextMenu.Item DashColorModeOptItem;
|
||||
private TextMenu.SubHeader DashColorModeOptNote;
|
||||
public void CreateDashColorModeOptEntry(TextMenu menu, bool inGame) {
|
||||
DashColorModeOptItem = new TextMenuExt.EnumerableSlider<DashColorMode>(
|
||||
"modoptions_avaliskin_dashcolormodeopt".DialogOrKey(),
|
||||
// Enum.GetValues returns an Array, which is not enumerable.
|
||||
// However, normal object vectors are. So...
|
||||
((DashColorMode[]) Enum.GetValues(typeof(DashColorMode))).Select(
|
||||
variant => new KeyValuePair<DashColorMode, string>(
|
||||
variant,
|
||||
$"modoptions_avaliskin_colormodeopt_{variant.ToString()}".DialogOrKey()
|
||||
)
|
||||
),
|
||||
DashColorModeOpt
|
||||
).Change(opt => {
|
||||
DashColorModeOpt = opt;
|
||||
updateOptions();
|
||||
});
|
||||
menu.Add(DashColorModeOptItem);
|
||||
DashColorModeOptItem.AddDescription(menu, "modoptions_avaliskin_dashcolormodeopt_note".DialogOrKey());
|
||||
|
||||
List<TextMenu.Item> items = menu.GetItems();
|
||||
DashColorModeOptNote = (TextMenu.SubHeader) items[items.IndexOf(DashColorModeOptItem) + 1];
|
||||
}
|
||||
|
||||
|
||||
// DashColorSubmenu is a dummy setting that is only used to position the
|
||||
// Submenu. This setting is never used, hence why it is Void!
|
||||
[YamlIgnore]
|
||||
public Void DashColorSubmenu { get; set; }
|
||||
private TextMenuExt.OptionSubMenu DashColorSubmenuItem;
|
||||
public void CreateDashColorSubmenuEntry(TextMenu menu, bool inGame) {
|
||||
RGBDashColorItems.Clear();
|
||||
PresetDashColorItems.Clear();
|
||||
|
||||
DashColorSubmenuItem = new TextMenuExt.OptionSubMenu(
|
||||
"AVALI_SKIN_COLORS".DialogOrKey()
|
||||
);
|
||||
|
||||
// This generates n submenus, one for each dash
|
||||
for (int i = 0; i < DashRGBColor.Count; i++) {
|
||||
TextMenuExt.IntSlider RItem, GItem, BItem;
|
||||
TextMenu.Option<ColorChoice> ColorItem;
|
||||
|
||||
int j = i; // C# lambda are wierd: capturing i directly mutates the captured variable
|
||||
|
||||
DashColorSubmenuItem.Add(
|
||||
$"AVALI_SKIN_DASH{i}".DialogOrKey(),
|
||||
new List<TextMenu.Item> {
|
||||
(RItem = new TextMenuExt.IntSlider(
|
||||
"AVALI_SKIN_RED".DialogOrKey(),
|
||||
0, 255, DashRGBColor[j].R
|
||||
).Change(
|
||||
// C# is stupidly pendatic and doesn't support property assignment in List elements
|
||||
// so we have to do this ugly shit to avoid breaking up this expression into two
|
||||
c => DashRGBColor[j] = new Color((byte) c, DashRGBColor[j].G, DashRGBColor[j].B)
|
||||
)),
|
||||
(GItem = new TextMenuExt.IntSlider(
|
||||
"AVALI_SKIN_GREEN".DialogOrKey(),
|
||||
0, 255, DashRGBColor[j].G
|
||||
).Change(
|
||||
c => DashRGBColor[j] = new Color(DashRGBColor[j].R, (byte) c, DashRGBColor[j].B)
|
||||
)),
|
||||
(BItem = new TextMenuExt.IntSlider(
|
||||
"AVALI_SKIN_BLUE".DialogOrKey(),
|
||||
0, 255, DashRGBColor[j].B
|
||||
).Change(
|
||||
c => DashRGBColor[j] = new Color(DashRGBColor[j].R, DashRGBColor[j].G, (byte) c)
|
||||
)),
|
||||
(ColorItem = new TextMenuExt.EnumSlider<ColorChoice>(
|
||||
"AVALI_SKIN_COLOR".DialogOrKey(),
|
||||
DashPreset[j]
|
||||
).Change(c => DashPreset[j] = c)),
|
||||
}
|
||||
);
|
||||
|
||||
RGBDashColorItems.Add(RItem);
|
||||
RGBDashColorItems.Add(GItem);
|
||||
RGBDashColorItems.Add(BItem);
|
||||
PresetDashColorItems.Add(ColorItem);
|
||||
}
|
||||
|
||||
menu.Add(DashColorSubmenuItem);
|
||||
}
|
||||
|
||||
|
||||
public enum ColorMode {
|
||||
ManualPreset,
|
||||
ManualRGB
|
||||
}
|
||||
|
||||
public ColorMode BodyColorModeOpt { get; set; } = ColorMode.ManualPreset;
|
||||
private TextMenu.Item BodyColorModeOptItem;
|
||||
private TextMenu.SubHeader BodyColorModeOptNote;
|
||||
public void CreateBodyColorModeOptEntry(TextMenu menu, bool inGame) {
|
||||
BodyColorModeOptItem = new TextMenuExt.EnumerableSlider<ColorMode>(
|
||||
"modoptions_avaliskin_bodycolormodeopt".DialogOrKey(),
|
||||
// Enum.GetValues returns an Array, which is not enumerable.
|
||||
// However, normal object vectors are. So...
|
||||
((ColorMode[]) Enum.GetValues(typeof(ColorMode))).Select(
|
||||
|
@ -119,149 +223,96 @@ namespace Celeste.Mod.AvaliSkin {
|
|||
$"modoptions_avaliskin_colormodeopt_{variant.ToString()}".DialogOrKey()
|
||||
)
|
||||
),
|
||||
ColorModeOpt
|
||||
BodyColorModeOpt
|
||||
).Change(opt => {
|
||||
ColorModeOpt = opt;
|
||||
BodyColorModeOpt = opt;
|
||||
updateOptions();
|
||||
});
|
||||
menu.Add(ColorModeOptItem);
|
||||
ColorModeOptItem.AddDescription(menu, "modoptions_avaliskin_colormodeopt_note".DialogOrKey());
|
||||
menu.Add(BodyColorModeOptItem);
|
||||
BodyColorModeOptItem.AddDescription(menu, "modoptions_avaliskin_bodycolormodeopt_note".DialogOrKey());
|
||||
|
||||
List<TextMenu.Item> items = menu.GetItems();
|
||||
ColorModeOptNote = (TextMenu.SubHeader) items[items.IndexOf(ColorModeOptItem) + 1];
|
||||
BodyColorModeOptNote = (TextMenu.SubHeader) items[items.IndexOf(BodyColorModeOptItem) + 1];
|
||||
}
|
||||
|
||||
|
||||
// ColorSubmenu is a dummy setting that is only used to position the
|
||||
// Submenu. This setting is never used, hence why it is Void!
|
||||
[YamlIgnore]
|
||||
public Void ColorSubmenu { get; set; }
|
||||
private TextMenuExt.OptionSubMenu ColorSubmenuItem, BodyColorSubmenuItem;
|
||||
public void CreateColorSubmenuEntry(TextMenu menu, bool inGame) {
|
||||
RGBItems.Clear();
|
||||
PresetItems.Clear();
|
||||
DashColorItems.Clear();
|
||||
|
||||
ColorSubmenuItem = new TextMenuExt.OptionSubMenu(
|
||||
"AVALI_SKIN_COLORS".DialogOrKey()
|
||||
);
|
||||
|
||||
// This generates n submenus, one for each dash
|
||||
TextMenuExt.IntSlider DashRItem, DashGItem, DashBItem;
|
||||
TextMenu.Option<ColorChoice> DashColorItem;
|
||||
for (int i = 0; i < DashRGBColor.Count; i++) {
|
||||
|
||||
int j = i; // C# lambda are wierd: capturing i directly mutates the captured variable
|
||||
|
||||
ColorSubmenuItem.Add(
|
||||
$"AVALI_SKIN_DASH{i}".DialogOrKey(),
|
||||
new List<TextMenu.Item> {
|
||||
(DashRItem = new TextMenuExt.IntSlider(
|
||||
"AVALI_SKIN_RED".DialogOrKey(),
|
||||
0, 255, DashRGBColor[j].R
|
||||
).Change(
|
||||
// C# is stupidly pendatic and doesn't support property assignment in List elements
|
||||
// so we have to do this ugly shit to avoid breaking up this expression into two
|
||||
c => DashRGBColor[j] = new Color((byte) c, DashRGBColor[j].G, DashRGBColor[j].B)
|
||||
)),
|
||||
(DashGItem = new TextMenuExt.IntSlider(
|
||||
"AVALI_SKIN_GREEN".DialogOrKey(),
|
||||
0, 255, DashRGBColor[j].G
|
||||
).Change(
|
||||
c => DashRGBColor[j] = new Color(DashRGBColor[j].R, (byte) c, DashRGBColor[j].B)
|
||||
)),
|
||||
(DashBItem = new TextMenuExt.IntSlider(
|
||||
"AVALI_SKIN_BLUE".DialogOrKey(),
|
||||
0, 255, DashRGBColor[j].B
|
||||
).Change(
|
||||
c => DashRGBColor[j] = new Color(DashRGBColor[j].R, DashRGBColor[j].G, (byte) c)
|
||||
)),
|
||||
(DashColorItem = new TextMenuExt.EnumSlider<ColorChoice>(
|
||||
"AVALI_SKIN_COLOR".DialogOrKey(),
|
||||
DashPreset[j]
|
||||
).Change(c => DashPreset[j] = c)),
|
||||
}
|
||||
);
|
||||
|
||||
RGBItems.Add(DashRItem);
|
||||
RGBItems.Add(DashGItem);
|
||||
RGBItems.Add(DashBItem);
|
||||
PresetItems.Add(DashColorItem);
|
||||
}
|
||||
|
||||
DashColorItems.AddRange(RGBItems);
|
||||
DashColorItems.AddRange(PresetItems);
|
||||
|
||||
menu.Add(ColorSubmenuItem);
|
||||
public Void BodyColorSubmenu { get; set; }
|
||||
private TextMenuExt.OptionSubMenu BodyColorSubmenuItem;
|
||||
public void CreateBodyColorSubmenuEntry(TextMenu menu, bool inGame) {
|
||||
RGBBodyColorItems.Clear();
|
||||
PresetBodyColorItems.Clear();
|
||||
|
||||
|
||||
BodyColorSubmenuItem = new TextMenuExt.OptionSubMenu(
|
||||
"AVALI_SKIN_BODY".DialogOrKey()
|
||||
);
|
||||
|
||||
TextMenuExt.IntSlider RItem, GItem, BItem;
|
||||
TextMenu.Option<ColorChoice> ColorItem;
|
||||
BodyColorSubmenuItem.Add(
|
||||
"AVALI_SKIN_LIGHTBODY".DialogOrKey(),
|
||||
new List<TextMenu.Item> {
|
||||
(DashRItem = new TextMenuExt.IntSlider(
|
||||
(RItem = new TextMenuExt.IntSlider(
|
||||
"AVALI_SKIN_RED".DialogOrKey(),
|
||||
0, 255, LightBodyRGBColor.R
|
||||
).Change(
|
||||
c => LightBodyRGBColor = new Color((byte) c, LightBodyRGBColor.G, LightBodyRGBColor.B)
|
||||
)),
|
||||
(DashGItem = new TextMenuExt.IntSlider(
|
||||
(GItem = new TextMenuExt.IntSlider(
|
||||
"AVALI_SKIN_GREEN".DialogOrKey(),
|
||||
0, 255, LightBodyRGBColor.G
|
||||
).Change(
|
||||
c => LightBodyRGBColor = new Color(LightBodyRGBColor.R, (byte) c, LightBodyRGBColor.B)
|
||||
)),
|
||||
(DashBItem = new TextMenuExt.IntSlider(
|
||||
(BItem = new TextMenuExt.IntSlider(
|
||||
"AVALI_SKIN_BLUE".DialogOrKey(),
|
||||
0, 255, LightBodyRGBColor.B
|
||||
).Change(
|
||||
c => LightBodyRGBColor = new Color(LightBodyRGBColor.R, LightBodyRGBColor.G, (byte) c)
|
||||
)),
|
||||
(DashColorItem = new TextMenuExt.EnumSlider<ColorChoice>(
|
||||
(ColorItem = new TextMenuExt.EnumSlider<ColorChoice>(
|
||||
"AVALI_SKIN_COLOR".DialogOrKey(),
|
||||
LightBodyPreset
|
||||
).Change(c => LightBodyPreset = c)),
|
||||
}
|
||||
);
|
||||
RGBItems.Add(DashRItem);
|
||||
RGBItems.Add(DashGItem);
|
||||
RGBItems.Add(DashBItem);
|
||||
PresetItems.Add(DashColorItem);
|
||||
RGBBodyColorItems.Add(RItem);
|
||||
RGBBodyColorItems.Add(GItem);
|
||||
RGBBodyColorItems.Add(BItem);
|
||||
PresetBodyColorItems.Add(ColorItem);
|
||||
|
||||
BodyColorSubmenuItem.Add(
|
||||
"AVALI_SKIN_DARKBODY".DialogOrKey(),
|
||||
new List<TextMenu.Item> {
|
||||
(DashRItem = new TextMenuExt.IntSlider(
|
||||
(RItem = new TextMenuExt.IntSlider(
|
||||
"AVALI_SKIN_RED".DialogOrKey(),
|
||||
0, 255, DarkBodyRGBColor.R
|
||||
).Change(
|
||||
c => DarkBodyRGBColor = new Color((byte) c, DarkBodyRGBColor.G, DarkBodyRGBColor.B)
|
||||
)),
|
||||
(DashGItem = new TextMenuExt.IntSlider(
|
||||
(GItem = new TextMenuExt.IntSlider(
|
||||
"AVALI_SKIN_GREEN".DialogOrKey(),
|
||||
0, 255, DarkBodyRGBColor.G
|
||||
).Change(
|
||||
c => DarkBodyRGBColor = new Color(DarkBodyRGBColor.R, (byte) c, DarkBodyRGBColor.B)
|
||||
)),
|
||||
(DashBItem = new TextMenuExt.IntSlider(
|
||||
(BItem = new TextMenuExt.IntSlider(
|
||||
"AVALI_SKIN_BLUE".DialogOrKey(),
|
||||
0, 255, DarkBodyRGBColor.B
|
||||
).Change(
|
||||
c => DarkBodyRGBColor = new Color(DarkBodyRGBColor.R, DarkBodyRGBColor.G, (byte) c)
|
||||
)),
|
||||
(DashColorItem = new TextMenuExt.EnumSlider<ColorChoice>(
|
||||
(ColorItem = new TextMenuExt.EnumSlider<ColorChoice>(
|
||||
"AVALI_SKIN_COLOR".DialogOrKey(),
|
||||
DarkBodyPreset
|
||||
).Change(c => DarkBodyPreset = c)),
|
||||
}
|
||||
);
|
||||
RGBItems.Add(DashRItem);
|
||||
RGBItems.Add(DashGItem);
|
||||
RGBItems.Add(DashBItem);
|
||||
PresetItems.Add(DashColorItem);
|
||||
RGBBodyColorItems.Add(RItem);
|
||||
RGBBodyColorItems.Add(GItem);
|
||||
RGBBodyColorItems.Add(BItem);
|
||||
PresetBodyColorItems.Add(ColorItem);
|
||||
|
||||
menu.Add(BodyColorSubmenuItem);
|
||||
}
|
||||
|
@ -326,12 +377,15 @@ namespace Celeste.Mod.AvaliSkin {
|
|||
[SettingIgnore]
|
||||
public ColorChoice DarkBodyPreset { get; set; } = ColorChoice.GreyDark;
|
||||
|
||||
// Stores submenu items that are enabled/disabled when colormode is RGB
|
||||
private List<TextMenuExt.IntSlider> RGBItems = new List<TextMenuExt.IntSlider>();
|
||||
// Stores submenu items that are enabled/disabled when colormode is preset
|
||||
private List<TextMenu.Option<ColorChoice>> PresetItems = new List<TextMenu.Option<ColorChoice>>();
|
||||
// Stores submenu items that are hidden when colormode is external
|
||||
private List<TextMenu.Item> DashColorItems = new List<TextMenu.Item>();
|
||||
// Stores submenu dash items that are enabled/disabled when dashcolormode is RGB
|
||||
private List<TextMenuExt.IntSlider> RGBDashColorItems = new List<TextMenuExt.IntSlider>();
|
||||
// Stores submenu dash items that are enabled/disabled when dashcolormode is preset
|
||||
private List<TextMenu.Option<ColorChoice>> PresetDashColorItems = new List<TextMenu.Option<ColorChoice>>();
|
||||
|
||||
// Stores submenu body items that are enabled/disabled when bodycolormode is RGB
|
||||
private List<TextMenuExt.IntSlider> RGBBodyColorItems = new List<TextMenuExt.IntSlider>();
|
||||
// Stores submenu body items that are enabled/disabled when bodycolormode is preset
|
||||
private List<TextMenu.Option<ColorChoice>> PresetBodyColorItems = new List<TextMenu.Option<ColorChoice>>();
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -5,8 +5,7 @@ using Celeste.Mod.CelesteNet.Client;
|
|||
using Celeste.Mod.CelesteNet.Client.Entities;
|
||||
using Celeste.Mod.CelesteNet.DataTypes;
|
||||
|
||||
using ColorChoice = Celeste.Mod.AvaliSkin.AvaliSkinSettings.ColorChoice;
|
||||
using ColorMode = Celeste.Mod.AvaliSkin.AvaliSkinSettings.ColorMode;
|
||||
using DashColorMode = Celeste.Mod.AvaliSkin.AvaliSkinSettings.DashColorMode;
|
||||
using SendReceive = Celeste.Mod.AvaliSkin.AvaliSkinSettings.SendReceive;
|
||||
|
||||
|
||||
|
@ -65,7 +64,7 @@ namespace Celeste.Mod.AvaliSkin {
|
|||
protected override void Read(CelesteNetBinaryReader reader) {
|
||||
Config = new AvaliConfig {
|
||||
Enabled = reader.ReadBoolean(),
|
||||
ColorMode = ColorMode.ExternalDash,
|
||||
DashColorMode = DashColorMode.ExternalDash,
|
||||
LightBody = reader.ReadColorNoA(),
|
||||
DarkBody = reader.ReadColorNoA(),
|
||||
};
|
||||
|
|
|
@ -7,7 +7,7 @@ using Celeste.Mod.CelesteNet.Client.Entities;
|
|||
using Celeste.Mod.CelesteNet.DataTypes;
|
||||
|
||||
using ColorChoice = Celeste.Mod.AvaliSkin.AvaliSkinSettings.ColorChoice;
|
||||
using ColorMode = Celeste.Mod.AvaliSkin.AvaliSkinSettings.ColorMode;
|
||||
using DashColorMode = Celeste.Mod.AvaliSkin.AvaliSkinSettings.DashColorMode;
|
||||
using SendReceive = Celeste.Mod.AvaliSkin.AvaliSkinSettings.SendReceive;
|
||||
|
||||
|
||||
|
@ -16,7 +16,7 @@ namespace Celeste.Mod.AvaliSkin {
|
|||
private static AvaliSkinSettings Settings => AvaliSkinModule.Settings;
|
||||
|
||||
public bool Enabled;
|
||||
public ColorMode ColorMode;
|
||||
public DashColorMode DashColorMode;
|
||||
public List<Color> DashColors = new List<Color>();
|
||||
public Color LightBody;
|
||||
public Color DarkBody;
|
||||
|
@ -41,8 +41,8 @@ namespace Celeste.Mod.AvaliSkin {
|
|||
// before calling this
|
||||
public Color GetColor(Player player) {
|
||||
int dashes = player.Dashes;
|
||||
switch (this.ColorMode) {
|
||||
case ColorMode.ExternalDash:
|
||||
switch (this.DashColorMode) {
|
||||
case DashColorMode.ExternalDash:
|
||||
// Infrequently, it's possible for the player to momentarily have no hair.
|
||||
if (player.Hair != null && player.Sprite.HairCount > 0) {
|
||||
return player.Hair.GetHairColor(0);
|
||||
|
@ -54,7 +54,7 @@ namespace Celeste.Mod.AvaliSkin {
|
|||
return this.DashColors[Math.Min(dashes, this.DashColors.Count - 1)];
|
||||
}
|
||||
|
||||
case ColorMode.ManualRGB: default:
|
||||
case DashColorMode.ManualRGB: default:
|
||||
return this.DashColors[Math.Min(dashes, this.DashColors.Count - 1)];
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue