Skip to content

Commit

Permalink
feat: recover Battlegrounds overlay after Hearthstone restart
Browse files Browse the repository at this point in the history
  • Loading branch information
beheh committed Dec 14, 2023
1 parent 7ab593d commit a162f38
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ private void UpdateBannedTribes()
.OrderBy(t => HearthDbConverter.GetLocalizedRace(t) ?? "")
.ToList();

var bannedTribesUpdated = unavailableRaces.Count() >= 5;
var bannedTribesUpdated = unavailableRaces.Count() >= 5 && unavailableRaces.Count() != allRaces.Count();
if(bannedTribesUpdated)
{
BannedTribe1 = unavailableRaces[0];
Expand Down
27 changes: 27 additions & 0 deletions Hearthstone Deck Tracker/GameEventHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
using Hearthstone_Deck_Tracker.BobsBuddy;
using Hearthstone_Deck_Tracker.Utility.Battlegrounds;
using ControlzEx.Standard;
using Hearthstone_Deck_Tracker.Enums.Hearthstone;
using Hearthstone_Deck_Tracker.Utility.ValueMoments.Enums;


Expand Down Expand Up @@ -537,6 +538,32 @@ public void HandleGameStart(DateTime timestamp)
}
}

private DateTime _lastReconnectStartTimestamp = DateTime.MinValue;
public async void HandleGameReconnect(DateTime timestamp)
{
Log.Info("Joined after mulligan, assuming reconnect.");

if(DateTime.Now - _lastReconnectStartTimestamp < new TimeSpan(0, 0, 0, 5)) // game already started
return;
_lastReconnectStartTimestamp = timestamp;

for(var i = 0; i < 20 && (_game.GameEntity is null || _game.CurrentMode != Mode.GAMEPLAY); i++)
await Task.Delay(500);

if(_game.GameEntity is null || _game.CurrentMode != Mode.GAMEPLAY)
return;

if(_game.IsBattlegroundsMatch)
{
if(_game.GameEntity?.GetTag(STEP) > (int)Step.BEGIN_MULLIGAN)
{
Core.Overlay.ShowBgsTopBarAndBobsBuddyPanel();
Core.Overlay.BattlegroundsSessionViewModelVM.Update();
Core.Overlay.ShowBattlegroundsSession(true);
}
}
}

private void HandleAdventureRestart()
{
//The game end is not logged in PowerTaskList
Expand Down
1 change: 1 addition & 0 deletions Hearthstone Deck Tracker/IGameHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ public interface IGameHandler
void HandlePlayerGetToDeck(Entity entity, string cardId, int turn);
void TurnStart(ActivePlayer player, int turnNumber);
void HandleGameStart(DateTime startTime);
void HandleGameReconnect(DateTime reconnectTime);
void HandleGameEnd(bool stateComplete);
void HandleLoss();
void HandleWin();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,10 @@ public void Handle(LogLine logLine, IHsGameState gameState, IGame game)
gameState.Reset();
gameState.GameHandler?.HandleGameStart(logLine.Time);
}
else if(logLine.Line.Contains("MulliganManager.HandleGameStart") && logLine.Line.Contains("IsPastBeginPhase()=True"))
{
gameState.GameHandler?.HandleGameReconnect(logLine.Time);
}
}

private async void CheckMirrorStatus()
Expand Down
2 changes: 1 addition & 1 deletion Hearthstone Deck Tracker/LogReader/LogWatcherManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public class LogWatcherManager
};

public static LogWatcherInfo ArenaLogWatcherInfo => new LogWatcherInfo {Name = "Arena" };
public static LogWatcherInfo LoadingScreenLogWatcherInfo => new LogWatcherInfo {Name = "LoadingScreen", StartsWithFilters = new[] {"LoadingScreen.OnSceneLoaded", "Gameplay", "LoadingScreen.OnScenePreUnload" } };
public static LogWatcherInfo LoadingScreenLogWatcherInfo => new LogWatcherInfo {Name = "LoadingScreen", StartsWithFilters = new[] {"LoadingScreen.OnSceneLoaded", "Gameplay", "LoadingScreen.OnScenePreUnload", "MulliganManager.HandleGameStart" } };

public LogWatcherManager()
{
Expand Down
2 changes: 2 additions & 0 deletions Hearthstone Deck Tracker/Windows/OverlayWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -459,6 +459,8 @@ internal void ShowBgsTopBar()
BattlegroundsMinionsPanel.SetAvailableTiers(BattlegroundsUtils.GetAvailableTiers(anomalyCardId));
BattlegroundsMinionsPanel.SetBannedMinions(BattlegroundsUtils.GetMinionsBannedByAnomaly(anomalyDbfId) ?? new List<string>());

if(_game.GameEntity?.GetTag(GameTag.TURN) is int turn)
Core.Overlay.TurnCounter.UpdateTurn(turn);
BattlegroundsMinionsPanel.Visibility = Config.Instance.ShowBattlegroundsTiers ? Visible : Collapsed;

_bgsTopBarBehavior.Show();
Expand Down

0 comments on commit a162f38

Please sign in to comment.