Add CHARACTER console command alongside the F9 keybind

This commit is contained in:
Justin Oros
2026-09-15 09:14:02 -07:00
parent 7fa11aafe8
commit d8b9995924
+55 -7
View File
@@ -1,9 +1,11 @@
using System; using System;
using System.IO; using System.IO;
using System.Text;
using RedLoader; using RedLoader;
using RedLoader.Utils; using RedLoader.Utils;
using Sons.Wearable.Race; using Sons.Wearable.Race;
using SonsSdk; using SonsSdk;
using SonsSdk.Attributes;
using TheForest.Utils; using TheForest.Utils;
using UnityEngine; using UnityEngine;
@@ -27,7 +29,7 @@ public class CharacterSelect : SonsMod
_configPath = Path.Combine(LoaderEnvironment.UserDataDirectory, "CharacterSelect.txt"); _configPath = Path.Combine(LoaderEnvironment.UserDataDirectory, "CharacterSelect.txt");
Load(); Load();
SdkEvents.OnAfterSpawn.Subscribe(OnSpawned); SdkEvents.OnAfterSpawn.Subscribe(OnSpawned);
RLog.Msg($"CharacterSelect loaded. Saved race: {_index} ({(PlayerRace.Race)_index}). F9 cycles."); RLog.Msg($"CharacterSelect loaded. Saved character: {_index} ({(PlayerRace.Race)_index}). Press F9 or type: character");
} }
private void OnSpawned() private void OnSpawned()
@@ -37,32 +39,78 @@ public class CharacterSelect : SonsMod
private void OnUpdate() private void OnUpdate()
{ {
var system = LocalPlayer.RaceSystem; if (!LocalPlayer.RaceSystem)
if (!system)
return; return;
if (!_applied) if (!_applied)
{ {
_applied = true; _applied = true;
Apply(system, false); ApplyIndex(false);
return; return;
} }
if (Input.GetKeyDown(KeyCode.F9)) if (Input.GetKeyDown(KeyCode.F9))
{ {
_index = (_index + 1) % RaceCount; _index = (_index + 1) % RaceCount;
Apply(system, true); ApplyIndex(true);
Save(); Save();
} }
} }
private void Apply(PlayerRaceSystem system, bool announce) [DebugCommand("character")]
private static void CharacterCommand(string args)
{ {
args = (args ?? string.Empty).Trim();
if (args.Length == 0)
{
ShowList();
return;
}
if (args.Equals("next", StringComparison.OrdinalIgnoreCase))
{
_index = (_index + 1) % RaceCount;
ApplyIndex(true);
Save();
return;
}
if (int.TryParse(args, out var value) && value >= 0 && value < RaceCount)
{
_index = value;
ApplyIndex(true);
Save();
return;
}
SonsTools.ShowMessage("Usage: character [0-7] or character next", 5f);
RLog.Msg("Usage: character [0-7] or character next");
}
private static void ShowList()
{
var sb = new StringBuilder();
sb.AppendLine($"Current: {_index} ({(PlayerRace.Race)_index})");
for (int i = 0; i < RaceCount; i++)
sb.AppendLine($"{i}: {(PlayerRace.Race)i}");
var text = sb.ToString().TrimEnd();
SonsTools.ShowMessage(text, 8f);
RLog.Msg(text);
}
private static void ApplyIndex(bool announce)
{
var system = LocalPlayer.RaceSystem;
if (!system)
return;
var race = (PlayerRace.Race)_index; var race = (PlayerRace.Race)_index;
system.ApplyRace(race); system.ApplyRace(race);
if (announce) if (announce)
SonsTools.ShowMessage($"{_index}: {race}"); SonsTools.ShowMessage($"{_index}: {race}");
RLog.Msg($"Applied race {_index} ({race})"); RLog.Msg($"Applied character {_index} ({race})");
} }
private static void Load() private static void Load()