🚀 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.
This commit is contained in:
@@ -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">
|
||||
|
||||
@@ -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
|
||||
|
||||
+13
-2
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user