2 Commits

Author SHA1 Message Date
Trenten Pettry b6037e0c91 🚀 Added (New Features)
• Custom Set Builder Testing Mode: The Custom Set Builder tab now functions as a live recoil testing tool. When toggled ON while the tab is active, the custom X/Y recoil values are applied instead of the selected operator's recoil, allowing real-time dial-in of recoil sets. Switching to any other tab automatically restores normal operator recoil.

📂 File-Level Changes Summary
• MainWindow.xaml: Named TabControl and added SelectionChanged handler for tab tracking.
• MainWindow.xaml.cs: Added UpdateCustomSetState() to sync custom recoil mode with RecoilEngine based on tab focus and toggle state.
• RecoilEngine.cs: Added CustomModeActive, CustomRecoilX, CustomRecoilY fields; HandleRecoilTick() checks custom mode first before falling back to mergedSets lookup.
2026-06-22 11:48:10 -04:00
Trenten Pettry 60b519335f 🛠️ Fixed (Bugs resolved)
- Quick Swap Side Restoration: Fixed a bug where quickswap would fail to switch sides when toggling back to the original operator. The issue occurred because the baseline set was captured after the side had already switched, so the revert logic couldn't determine it needed to switch sides again. Now the baseline is captured before any side change, ensuring correct toggle behavior.
📂 File-Level Changes Summary
- OperatorSets.cs: Captured preSwitchSet before the SwitchSide() call in QuickSwapTo() and used it when storing originalSetBeforeQuickSwap.
2026-06-22 11:33:26 -04:00
5 changed files with 51 additions and 5 deletions
+1 -1
View File
@@ -116,7 +116,7 @@
<!-- Main Content -->
<Grid Margin="0,35,0,0">
<TabControl Background="#1E1E1E" Foreground="White">
<TabControl x:Name="MainTabControl" Background="#1E1E1E" Foreground="White" SelectionChanged="MainTabControl_SelectionChanged">
<!-- Console Tab -->
<TabItem Header="Console">
<Grid Background="#252525" Margin="10">
+34 -1
View File
@@ -451,7 +451,40 @@ namespace Lithium
private void ToggleCustomSet_Click(object sender, RoutedEventArgs e)
{
customSetEnabled = !customSetEnabled;
UpdateCustomSetConsole(customSetEnabled ? "Set is ON" : "Set is OFF");
UpdateCustomSetState();
}
private void MainTabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
UpdateCustomSetState();
}
private void UpdateCustomSetState()
{
var selectedTab = MainTabControl.SelectedItem as TabItem;
bool onCustomTab = selectedTab != null &&
string.Equals(selectedTab.Header?.ToString(), "Custom Set Builder", StringComparison.OrdinalIgnoreCase);
if (customSetEnabled && onCustomTab)
{
if (double.TryParse(RecoilXTextBox.Text, System.Globalization.NumberStyles.Float,
System.Globalization.CultureInfo.InvariantCulture, out double x) &&
double.TryParse(RecoilYTextBox.Text, System.Globalization.NumberStyles.Float,
System.Globalization.CultureInfo.InvariantCulture, out double y))
{
RecoilEngine.CustomModeActive = true;
RecoilEngine.CustomRecoilX = x;
RecoilEngine.CustomRecoilY = y;
UpdateCustomSetConsole($"Custom Set ACTIVE | X:{x} Y:{y}");
return;
}
UpdateCustomSetConsole("Error: Invalid recoil values");
}
else
{
RecoilEngine.CustomModeActive = false;
UpdateCustomSetConsole(customSetEnabled ? "Set is ON (switch to tab to activate)" : "Set is OFF");
}
}
// AA0145
+3 -1
View File
@@ -405,6 +405,8 @@ namespace Lua
isQuickSwapping = true;
try
{
string preSwitchSet = CurrentSet;
if (!ConfigLoader.betaTest)
{
if (inAttackers && !onAttackers)
@@ -444,7 +446,7 @@ namespace Lua
{
if (string.IsNullOrEmpty(originalSetBeforeQuickSwap))
{
originalSetBeforeQuickSwap = CurrentSet;
originalSetBeforeQuickSwap = preSwitchSet;
}
SetCurrentSet(targetOp);
}
+13 -2
View File
@@ -20,6 +20,10 @@ namespace Lua
private static double _remainderX, _remainderY;
private static double _jitterMultiplierX, _jitterMultiplierY;
public static bool CustomModeActive = false;
public static double CustomRecoilX = 0;
public static double CustomRecoilY = 0;
private static bool IsDown(int key)
{
return (GetAsyncKeyState(key) & 0x8000) != 0;
@@ -61,12 +65,19 @@ namespace Lua
{
try
{
int now = Environment.TickCount;
if (CustomModeActive)
{
HandleJitter(now);
ApplyRecoil((CustomRecoilX, CustomRecoilY));
return;
}
string setName = OperatorSets.CurrentSet;
if (!OperatorSets.mergedSets.TryGetValue(setName, out var recoil)) return;
int now = Environment.TickCount;
HandleJitter(now);
ApplyRecoil(recoil);
}