mirror of
https://github.com/BubbaGumpShrump/AutoTrackR2.git
synced 2025-06-18 12:49:06 +00:00
345 lines
12 KiB
C#
345 lines
12 KiB
C#
using System.Diagnostics;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Media;
|
|
using System.Windows.Media.Effects;
|
|
using System.Windows.Documents;
|
|
using System.Globalization;
|
|
using System.IO;
|
|
using System.Text;
|
|
using System.Windows.Media.Imaging;
|
|
using AutoTrackR2.LogEventHandlers;
|
|
|
|
namespace AutoTrackR2;
|
|
|
|
public partial class HomePage : UserControl
|
|
{
|
|
private Process runningProcess; // Field to store the running process
|
|
private LogHandler? _logHandler;
|
|
private KillHistoryManager _killHistoryManager;
|
|
private bool _UIEventsRegistered = false;
|
|
|
|
public HomePage()
|
|
{
|
|
InitializeComponent();
|
|
|
|
_killHistoryManager = new KillHistoryManager(ConfigManager.KillHistoryFile);
|
|
|
|
// Set the TextBlock text
|
|
KillTallyTitle.Text = $"Kill Tally - {_killHistoryManager.GetKillsInCurrentMonth().Count}";
|
|
AddKillHistoryKillsToUI();
|
|
}
|
|
|
|
// Update Start/Stop button states based on the isRunning flag
|
|
public void UpdateButtonState(bool isRunning)
|
|
{
|
|
var accentColor = (Color)Application.Current.Resources["AccentColor"];
|
|
|
|
if (isRunning)
|
|
{
|
|
// Set Start button to "Running..." and apply glow effect
|
|
StartButton.Content = "Running...";
|
|
StartButton.IsEnabled = false; // Disable Start button
|
|
StartButton.Style = (Style)FindResource("DisabledButtonStyle");
|
|
|
|
// Add glow effect to the Start button
|
|
StartButton.Effect = new DropShadowEffect
|
|
{
|
|
Color = accentColor,
|
|
BlurRadius = 30, // Adjust blur radius for desired glow intensity
|
|
ShadowDepth = 0, // Set shadow depth to 0 for a pure glow effect
|
|
Opacity = 1, // Set opacity for glow visibility
|
|
Direction = 0 // Direction doesn't matter for glow
|
|
};
|
|
|
|
StopButton.Style = (Style)FindResource("ButtonStyle");
|
|
StopButton.IsEnabled = true; // Enable Stop button
|
|
}
|
|
else
|
|
{
|
|
// Reset Start button back to its original state
|
|
StartButton.Content = "Start";
|
|
StartButton.IsEnabled = true; // Enable Start button
|
|
|
|
// Remove the glow effect from Start button
|
|
StartButton.Effect = null;
|
|
|
|
StopButton.Style = (Style)FindResource("DisabledButtonStyle");
|
|
StartButton.Style = (Style)FindResource("ButtonStyle");
|
|
StopButton.IsEnabled = false; // Disable Stop button
|
|
}
|
|
|
|
RegisterUIEventHandlers();
|
|
}
|
|
|
|
public void StartButton_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
UpdateButtonState(true);
|
|
//string scriptPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "KillTrackR_MainScript.ps1");
|
|
// TailFileAsync(scriptPath);
|
|
|
|
// _logHandler = new LogHandler(@"U:\\StarCitizen\\StarCitizen\\LIVE\\Game.log");
|
|
_logHandler = new LogHandler(ConfigManager.LogFile);
|
|
_logHandler.Initialize();
|
|
}
|
|
|
|
private void AddKillHistoryKillsToUI()
|
|
{
|
|
var kills = _killHistoryManager.GetKills();
|
|
foreach (var kill in kills)
|
|
{
|
|
Dispatcher.Invoke(() => { AddKillToScreen(kill); });
|
|
}
|
|
}
|
|
|
|
private void RegisterUIEventHandlers()
|
|
{
|
|
if (_UIEventsRegistered)
|
|
return;
|
|
|
|
// Username
|
|
TrackREventDispatcher.PlayerLoginEvent += (username) => {
|
|
Dispatcher.Invoke(() =>
|
|
{
|
|
PilotNameTextBox.Text = username;
|
|
AdjustFontSize(PilotNameTextBox);
|
|
LocalPlayerData.Username = username;
|
|
});
|
|
};
|
|
|
|
// Ship
|
|
TrackREventDispatcher.InstancedInteriorEvent += (data) => {
|
|
if (data.OwnerGEID == LocalPlayerData.Username && data.Ship != null)
|
|
{
|
|
Dispatcher.Invoke(() =>
|
|
{
|
|
PlayerShipTextBox.Text = data.Ship;
|
|
AdjustFontSize(PlayerShipTextBox);
|
|
LocalPlayerData.PlayerShip = data.Ship;
|
|
});
|
|
}
|
|
};
|
|
|
|
// Game Mode
|
|
TrackREventDispatcher.PlayerChangedGameModeEvent += (mode) => {
|
|
Dispatcher.Invoke(() =>
|
|
{
|
|
GameModeTextBox.Text = mode.ToString();
|
|
AdjustFontSize(GameModeTextBox);
|
|
LocalPlayerData.CurrentGameMode = mode;
|
|
});
|
|
};
|
|
|
|
// Game Version
|
|
TrackREventDispatcher.GameVersionEvent += (version) => {
|
|
LocalPlayerData.GameVersion = version;
|
|
};
|
|
|
|
// Actor Death
|
|
TrackREventDispatcher.ActorDeathEvent += async (actorDeathData) => {
|
|
if (actorDeathData.VictimPilot != LocalPlayerData.Username)
|
|
{
|
|
var playerData = await WebHandler.GetPlayerData(actorDeathData.VictimPilot);
|
|
|
|
if (playerData != null)
|
|
{
|
|
var killData = new KillData
|
|
{
|
|
EnemyPilot = actorDeathData.VictimPilot,
|
|
EnemyShip = actorDeathData.VictimShip,
|
|
OrgAffiliation = playerData?.OrgName,
|
|
Enlisted = playerData?.JoinDate,
|
|
KillTime = DateTime.UtcNow.ToString("dd MMM yyyy HH:mm"),
|
|
PFP = playerData?.PFPURL
|
|
};
|
|
|
|
// Add kill to UI
|
|
Dispatcher.Invoke(() =>
|
|
{
|
|
AddKillToScreen(killData);
|
|
});
|
|
|
|
await WebHandler.SubmitKill(actorDeathData, playerData);
|
|
_killHistoryManager.AddKill(killData);
|
|
}
|
|
}
|
|
};
|
|
|
|
// Vehicle Destruction
|
|
TrackREventDispatcher.VehicleDestructionEvent += (data) => {
|
|
LocalPlayerData.LastSeenVehicleLocation = data.VehicleZone;
|
|
};
|
|
|
|
_UIEventsRegistered = true;
|
|
}
|
|
|
|
private void AddKillToScreen(KillData killData)
|
|
{
|
|
// Fetch the dynamic resource for AltTextColor
|
|
var altTextColorBrush = new SolidColorBrush((Color)Application.Current.Resources["AltTextColor"]);
|
|
var accentColorBrush = new SolidColorBrush((Color)Application.Current.Resources["AccentColor"]);
|
|
|
|
// Fetch the Orbitron FontFamily from resources
|
|
var orbitronFontFamily = (FontFamily)Application.Current.Resources["Orbitron"];
|
|
var gemunuFontFamily = (FontFamily)Application.Current.Resources["Gemunu"];
|
|
|
|
// Create a new TextBlock for each kill
|
|
var killTextBlock = new TextBlock
|
|
{
|
|
Margin = new Thickness(0, 10, 0, 10),
|
|
Style = (Style)Application.Current.Resources["RoundedTextBlock"], // Apply style for text
|
|
FontSize = 14,
|
|
FontWeight = FontWeights.Bold,
|
|
FontFamily = gemunuFontFamily,
|
|
};
|
|
|
|
// Add styled content using Run elements
|
|
killTextBlock.Inlines.Add(new Run("Victim Name: ")
|
|
{
|
|
Foreground = altTextColorBrush,
|
|
FontFamily = orbitronFontFamily,
|
|
});
|
|
killTextBlock.Inlines.Add(new Run($"{killData.EnemyPilot}\n"));
|
|
|
|
// Repeat for other lines
|
|
killTextBlock.Inlines.Add(new Run("Victim Ship: ")
|
|
{
|
|
Foreground = altTextColorBrush,
|
|
FontFamily = orbitronFontFamily,
|
|
});
|
|
killTextBlock.Inlines.Add(new Run($"{killData.EnemyShip}\n"));
|
|
|
|
killTextBlock.Inlines.Add(new Run("Victim Org: ")
|
|
{
|
|
Foreground = altTextColorBrush,
|
|
FontFamily = orbitronFontFamily,
|
|
});
|
|
killTextBlock.Inlines.Add(new Run($"{killData.OrgAffiliation}\n"));
|
|
|
|
killTextBlock.Inlines.Add(new Run("Join Date: ")
|
|
{
|
|
Foreground = altTextColorBrush,
|
|
FontFamily = orbitronFontFamily,
|
|
});
|
|
killTextBlock.Inlines.Add(new Run($"{killData.Enlisted}\n"));
|
|
|
|
killTextBlock.Inlines.Add(new Run("UEE Record: ")
|
|
{
|
|
Foreground = altTextColorBrush,
|
|
FontFamily = orbitronFontFamily,
|
|
});
|
|
|
|
killTextBlock.Inlines.Add(new Run("Kill Time: ")
|
|
{
|
|
Foreground = altTextColorBrush,
|
|
FontFamily = orbitronFontFamily,
|
|
});
|
|
killTextBlock.Inlines.Add(new Run($"{killData.KillTime}"));
|
|
|
|
// Create a Border and apply the RoundedTextBlockWithBorder style
|
|
var killBorder = new Border
|
|
{
|
|
Style = (Style)Application.Current.Resources["RoundedTextBlockWithBorder"], // Apply border style
|
|
};
|
|
|
|
// Create a Grid to hold the TextBlock and the Image
|
|
var killGrid = new Grid
|
|
{
|
|
Width = 400, // Adjust the width of the Grid
|
|
Height = 130, // Adjust the height as needed
|
|
};
|
|
|
|
// Define two columns in the Grid: one for the text and one for the image
|
|
killGrid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(3, GridUnitType.Star) }); // Text column
|
|
killGrid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Auto) }); // Image column
|
|
|
|
// Add the TextBlock to the first column of the Grid
|
|
Grid.SetColumn(killTextBlock, 0);
|
|
killGrid.Children.Add(killTextBlock);
|
|
|
|
// Create the Image for the profile
|
|
var profileImage = new Image
|
|
{
|
|
Source = new BitmapImage(new Uri(killData.PFP)), // Assuming the 8th part contains the profile image URL
|
|
Width = 90,
|
|
Height = 90,
|
|
Stretch = Stretch.Fill, // Adjust how the image fits
|
|
};
|
|
|
|
// Create a Border around the Image
|
|
var imageBorder = new Border
|
|
{
|
|
BorderBrush = accentColorBrush, // Set the border color
|
|
BorderThickness = new Thickness(2), // Set the border thickness
|
|
Padding = new Thickness(0), // Optional padding inside the border
|
|
CornerRadius = new CornerRadius(5),
|
|
Margin = new Thickness(10,18,15,18),
|
|
Child = profileImage // Set the Image as the content of the Border
|
|
};
|
|
|
|
// Add the Border (with the image inside) to the Grid
|
|
Grid.SetColumn(imageBorder, 1);
|
|
killGrid.Children.Add(imageBorder);
|
|
|
|
// Set the Grid as the child of the Border
|
|
killBorder.Child = killGrid;
|
|
|
|
// Add the new Border to the StackPanel inside the Border
|
|
Dispatcher.Invoke(() =>
|
|
{
|
|
KillFeedStackPanel.Children.Insert(0, killBorder);
|
|
});
|
|
}
|
|
|
|
public void StopButton_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
_logHandler?.Stop();
|
|
|
|
// Clear the text boxes
|
|
// System.Threading.Thread.Sleep(200);
|
|
// PilotNameTextBox.Text = string.Empty;
|
|
// PlayerShipTextBox.Text = string.Empty;
|
|
// GameModeTextBox.Text = string.Empty;
|
|
// KillTallyTextBox.Text = string.Empty;
|
|
// KillFeedStackPanel.Children.Clear();
|
|
}
|
|
|
|
private void AdjustFontSize(TextBlock textBlock)
|
|
{
|
|
// Set a starting font size
|
|
double fontSize = 14;
|
|
double maxWidth = textBlock.Width;
|
|
|
|
if (string.IsNullOrEmpty(textBlock.Text) || double.IsNaN(maxWidth))
|
|
return;
|
|
|
|
// Measure the rendered width of the text
|
|
FormattedText formattedText = new FormattedText(
|
|
textBlock.Text,
|
|
CultureInfo.CurrentCulture,
|
|
FlowDirection.LeftToRight,
|
|
new Typeface(textBlock.FontFamily, textBlock.FontStyle, textBlock.FontWeight, textBlock.FontStretch),
|
|
fontSize,
|
|
textBlock.Foreground,
|
|
VisualTreeHelper.GetDpi(this).PixelsPerDip
|
|
);
|
|
|
|
// Reduce font size until text fits within the width
|
|
while (formattedText.Width > maxWidth && fontSize > 6)
|
|
{
|
|
fontSize -= 0.5;
|
|
formattedText = new FormattedText(
|
|
textBlock.Text,
|
|
CultureInfo.CurrentCulture,
|
|
FlowDirection.LeftToRight,
|
|
new Typeface(textBlock.FontFamily, textBlock.FontStyle, textBlock.FontWeight, textBlock.FontStretch),
|
|
fontSize,
|
|
textBlock.Foreground,
|
|
VisualTreeHelper.GetDpi(this).PixelsPerDip
|
|
);
|
|
}
|
|
|
|
// Apply the adjusted font size
|
|
textBlock.FontSize = fontSize;
|
|
}
|
|
}
|