mirror of
https://github.com/BubbaGumpShrump/AutoTrackR2.git
synced 2025-06-18 04:39:08 +00:00
326 lines
11 KiB
C#
326 lines
11 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.Windows.Media.Imaging;
|
|
using AutoTrackR2.LogEventHandlers;
|
|
|
|
namespace AutoTrackR2;
|
|
|
|
public struct PlayerData
|
|
{
|
|
public string? PFPURL;
|
|
public string? UEERecord;
|
|
public string? OrgURL;
|
|
public string? OrgName;
|
|
public string? JoinDate;
|
|
}
|
|
|
|
public partial class HomePage : UserControl
|
|
{
|
|
public HomePage()
|
|
{
|
|
InitializeComponent();
|
|
|
|
// Get the current month
|
|
string currentMonth = DateTime.Now.ToString("MMMM", CultureInfo.InvariantCulture);
|
|
|
|
// Set the TextBlock text
|
|
KillTallyTitle.Text = $"Kill Tally - {currentMonth}";
|
|
}
|
|
|
|
private Process runningProcess; // Field to store the running process
|
|
private LogHandler _logHandler;
|
|
private bool _UIEventsRegistered = false;
|
|
|
|
|
|
// 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 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 (data) => {
|
|
if (data.VictimPilot != LocalPlayerData.Username)
|
|
{
|
|
var playerData = await WebHandler.GetPlayerData(data.VictimPilot);
|
|
|
|
if (playerData != null)
|
|
{
|
|
Dispatcher.Invoke(() => { AddKillToScreen(data, playerData); });
|
|
await WebHandler.SubmitKill(data, playerData);
|
|
}
|
|
}
|
|
};
|
|
|
|
_UIEventsRegistered = true;
|
|
}
|
|
|
|
private void AddKillToScreen(ActorDeathData deathData, PlayerData? playerData)
|
|
{
|
|
// 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($"{deathData.VictimPilot}\n"));
|
|
|
|
// Repeat for other lines
|
|
killTextBlock.Inlines.Add(new Run("Victim Ship: ")
|
|
{
|
|
Foreground = altTextColorBrush,
|
|
FontFamily = orbitronFontFamily,
|
|
});
|
|
killTextBlock.Inlines.Add(new Run($"{deathData.VictimShip}\n"));
|
|
|
|
killTextBlock.Inlines.Add(new Run("Victim Org: ")
|
|
{
|
|
Foreground = altTextColorBrush,
|
|
FontFamily = orbitronFontFamily,
|
|
});
|
|
killTextBlock.Inlines.Add(new Run($"{playerData?.OrgName}\n"));
|
|
|
|
killTextBlock.Inlines.Add(new Run("Join Date: ")
|
|
{
|
|
Foreground = altTextColorBrush,
|
|
FontFamily = orbitronFontFamily,
|
|
});
|
|
killTextBlock.Inlines.Add(new Run($"{playerData?.JoinDate}\n"));
|
|
|
|
killTextBlock.Inlines.Add(new Run("UEE Record: ")
|
|
{
|
|
Foreground = altTextColorBrush,
|
|
FontFamily = orbitronFontFamily,
|
|
});
|
|
|
|
|
|
const string dateFormatString = "dd MMM yyyy HH:mm";
|
|
var currentTime = DateTime.UtcNow.ToString(dateFormatString);
|
|
|
|
killTextBlock.Inlines.Add(new Run("Kill Time: ")
|
|
{
|
|
Foreground = altTextColorBrush,
|
|
FontFamily = orbitronFontFamily,
|
|
});
|
|
killTextBlock.Inlines.Add(new Run($"{currentTime}"));
|
|
|
|
// 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(playerData?.PFPURL)), // 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;
|
|
}
|
|
}
|