From 6e6fc8273f2e7e0ab337cf8fd721370b9d776f41 Mon Sep 17 00:00:00 2001 From: epix37 Date: Fri, 30 May 2014 13:36:31 +0200 Subject: [PATCH] v0.1.1 +option to search class+neutral cards +option to highlight cards currently in hand +removed included playerdecks.xml to avoid overwriting peoples decks *end of game detection fixed (=> hiding overlay in menu option reenabled) --- Hearthstone Deck Tracker/Card.cs | 5 +- Hearthstone Deck Tracker/Config.cs | 1 + .../Hearthstone Deck Tracker.csproj | 3 - Hearthstone Deck Tracker/Hearthstone.cs | 52 +++- Hearthstone Deck Tracker/HsLogReader.cs | 241 +++++++++--------- Hearthstone Deck Tracker/MainWindow.xaml | 12 +- Hearthstone Deck Tracker/MainWindow.xaml.cs | 97 ++++++- Hearthstone Deck Tracker/PlayerDecks.xml | 5 - Hearthstone Deck Tracker/Version.xml | 2 +- Hearthstone Deck Tracker/log.config | 5 + 10 files changed, 274 insertions(+), 149 deletions(-) delete mode 100644 Hearthstone Deck Tracker/PlayerDecks.xml diff --git a/Hearthstone Deck Tracker/Card.cs b/Hearthstone Deck Tracker/Card.cs index e3bad401ab..e6dab5c137 100644 --- a/Hearthstone Deck Tracker/Card.cs +++ b/Hearthstone Deck Tracker/Card.cs @@ -15,6 +15,8 @@ public struct Card private int? _count; public string Name { get; set; } public int Cost { get; set; } + public int InHandCount; + public string GetPlayerClass { @@ -32,11 +34,12 @@ public SolidColorBrush ColorPlayer get { return Hearthstone.IsUsingPremade - ? new SolidColorBrush((_count != 0) ? Colors.White : Colors.Gray) + ?new SolidColorBrush((InHandCount > 0 && Hearthstone.HighlightCardsInHand) ? Colors.GreenYellow : (_count != 0) ? Colors.White : Colors.Gray) : ColorEnemy; } } + public SolidColorBrush ColorEnemy { get { return new SolidColorBrush(Colors.White); } diff --git a/Hearthstone Deck Tracker/Config.cs b/Hearthstone Deck Tracker/Config.cs index a25ef5aabb..aefcfa34b8 100644 --- a/Hearthstone Deck Tracker/Config.cs +++ b/Hearthstone Deck Tracker/Config.cs @@ -12,5 +12,6 @@ public class Config public int WindowHeight; public string HearthstoneDirectory; public bool ShowInTaskbar; + public bool HighlightCardsInHand; } } \ No newline at end of file diff --git a/Hearthstone Deck Tracker/Hearthstone Deck Tracker.csproj b/Hearthstone Deck Tracker/Hearthstone Deck Tracker.csproj index a51e8f82a8..8968225d7c 100644 --- a/Hearthstone Deck Tracker/Hearthstone Deck Tracker.csproj +++ b/Hearthstone Deck Tracker/Hearthstone Deck Tracker.csproj @@ -1281,9 +1281,6 @@ PreserveNewest - - PreserveNewest - PreserveNewest diff --git a/Hearthstone Deck Tracker/Hearthstone.cs b/Hearthstone Deck Tracker/Hearthstone.cs index e1ae8ff081..df8eab36e3 100644 --- a/Hearthstone Deck Tracker/Hearthstone.cs +++ b/Hearthstone Deck Tracker/Hearthstone.cs @@ -13,6 +13,11 @@ public class Hearthstone //public bool UsingPremadeDeck; //public ObservableCollection PremadePlayerDeck; public static bool IsUsingPremade; + + //dont like this solution, cant think of better atm + public static bool HighlightCardsInHand; + + private readonly Dictionary _cardDb; public ObservableCollection EnemyCards; public int EnemyHandCount; @@ -105,7 +110,6 @@ public void PlayerDraw(string cardId) return; } var card = GetCardFromDb(cardId); - //sorta need to chance this to get the full deck and remove then if (!IsUsingPremade) { @@ -122,22 +126,41 @@ public void PlayerDraw(string cardId) PlayerDeck.Remove(deckCard); deckCard.Count--; + deckCard.InHandCount++; PlayerDeck.Add(deckCard); - //if (deckCard.Count == 2) - // { - // deckCard.Count = 1; - // } } PlayerHandCount++; } - public void PlayerGet() + + //cards from board(?), thoughtsteal etc + public void PlayerGet(string cardId) { - PlayerHandCount++; + PlayerHandCount++; + if (IsUsingPremade) + { + if (PlayerDeck.Any(c => c.Id == cardId)) + { + var card = PlayerDeck.First(c => c.Id == cardId); + PlayerDeck.Remove(card); + card.InHandCount++; + PlayerDeck.Add(card); + } + } } - + public void PlayerPlayed(string cardId) { PlayerHandCount--; + if (IsUsingPremade) + { + if (PlayerDeck.Any(c => c.Id == cardId)) + { + var card = PlayerDeck.First(c => c.Id == cardId); + PlayerDeck.Remove(card); + card.InHandCount--; + PlayerDeck.Add(card); + } + } } public void EnemyDraw() @@ -180,6 +203,7 @@ public void Mulligan(string cardId) Card deckCard = PlayerDeck.FirstOrDefault(c => c.Name != null && c.Name == card.Name); PlayerDeck.Remove(deckCard); deckCard.Count++; + deckCard.InHandCount--; PlayerDeck.Add(deckCard); } @@ -193,7 +217,17 @@ public void EnemyMulligan() internal void PlayerHandDiscard(string cardId) { - PlayerHandCount--; + PlayerHandCount--; + if (IsUsingPremade) + { + if (PlayerDeck.Any(c => c.Id == cardId)) + { + var card = PlayerDeck.First(c => c.Id == cardId); + PlayerDeck.Remove(card); + card.InHandCount--; + PlayerDeck.Add(card); + } + } } internal void PlayerDeckDiscard(string cardId) diff --git a/Hearthstone Deck Tracker/HsLogReader.cs b/Hearthstone Deck Tracker/HsLogReader.cs index 9f2b1b096b..f938944214 100644 --- a/Hearthstone Deck Tracker/HsLogReader.cs +++ b/Hearthstone Deck Tracker/HsLogReader.cs @@ -116,142 +116,151 @@ private void ReadFile() private void Analyze(string log) { var logLines = log.Split('\n'); - foreach (var logLine in logLines.Where(logLine => logLine.StartsWith("[Zone]"))) + foreach (var logLine in logLines) { - if (!_cardMovementRegex.IsMatch(logLine)) continue; - - var id = _cardMovementRegex.Match(logLine).Groups["Id"].Value.Trim(); - var player = int.Parse(_cardMovementRegex.Match(logLine).Groups["player"].Value); - var from = _cardMovementRegex.Match(logLine).Groups["from"].Value.Trim(); - var to = _cardMovementRegex.Match(logLine).Groups["to"].Value.Trim(); - - //coin - if (id == "GAME_005") - { - if (from == "FRIENDLY HAND") - { - CardMovement(this, new CardMovementArgs(CardMovementType.PlayerHandDiscard, id)); - } - else if (to == "FRIENDLY HAND") - { - CardMovement(this, new CardMovementArgs(CardMovementType.PlayerDraw, id)); - } - else if (from.Contains("OPPOSING")) - { - CardMovement(this, new CardMovementArgs(CardMovementType.OpponentPlay, id)); - } - continue; - } - - //game start/end - if (id.Contains("HERO")) + if (logLine.StartsWith("[Bob] legend rank")) { //game ended - if (from == "OPPOSING PLAY" || from == "FRIENDLY PLAY") - { - GameStateChange(this, new GameStateArgs(GameState.GameEnd)); - } - //game started, no idea if i have to split it up, need to check - else if (player == 1) - { - GameStateChange(this, new GameStateArgs(GameState.GameBegin)); - } - continue; + GameStateChange(this, new GameStateArgs(GameState.GameEnd)); } - - switch (from) + else if (logLine.StartsWith("[Zone]")) { - case "FRIENDLY DECK": - if (to == "FRIENDLY HAND") - { - //player draw - CardMovement(this, new CardMovementArgs(CardMovementType.PlayerDraw, id)); - } - else - { - //player discard from deck - CardMovement(this, new CardMovementArgs(CardMovementType.PlayerDeckDiscard, id)); - } - break; - case "FRIENDLY HAND": - if (to == "FRIENDLY DECK") - { - //player mulligan - CardMovement(this, new CardMovementArgs(CardMovementType.PlayerMulligan, id)); - } - else if (to == "FRIENDLY PLAY") - { - //player played - CardMovement(this, new CardMovementArgs(CardMovementType.PlayerPlay, id)); - } - else + if (!_cardMovementRegex.IsMatch(logLine)) continue; + + var id = _cardMovementRegex.Match(logLine).Groups["Id"].Value.Trim(); + var player = int.Parse(_cardMovementRegex.Match(logLine).Groups["player"].Value); + var from = _cardMovementRegex.Match(logLine).Groups["from"].Value.Trim(); + var to = _cardMovementRegex.Match(logLine).Groups["to"].Value.Trim(); + + //coin + if (id == "GAME_005") + { + if (from == "FRIENDLY HAND") { - //player discard from hand and spells CardMovement(this, new CardMovementArgs(CardMovementType.PlayerHandDiscard, id)); } - break; - case "OPPOSING HAND": - if (to == "OPPOSING DECK") + else if (to == "FRIENDLY HAND") { - //opponent mulligan - CardMovement(this, new CardMovementArgs(CardMovementType.OpponentMulligan, id)); + CardMovement(this, new CardMovementArgs(CardMovementType.PlayerDraw, id)); } - else if (to == "OPPOSING PLAY") + else if (from.Contains("OPPOSING")) { - //opponent played CardMovement(this, new CardMovementArgs(CardMovementType.OpponentPlay, id)); } - else + continue; + } + + //game start/end + if (id.Contains("HERO")) + { + if (player == 1 && !from.Contains("PLAY")) { - //spell - if (id != "") + GameStateChange(this, new GameStateArgs(GameState.GameBegin)); + } + continue; + } + + switch (from) + { + case "FRIENDLY DECK": + if (to == "FRIENDLY HAND") + { + //player draw + CardMovement(this, new CardMovementArgs(CardMovementType.PlayerDraw, id)); + } + else + { + //player discard from deck + CardMovement(this, new CardMovementArgs(CardMovementType.PlayerDeckDiscard, id)); + } + break; + case "FRIENDLY HAND": + if (to == "FRIENDLY DECK") + { + //player mulligan + CardMovement(this, new CardMovementArgs(CardMovementType.PlayerMulligan, id)); + } + else if (to == "FRIENDLY PLAY") + { + //player played + CardMovement(this, new CardMovementArgs(CardMovementType.PlayerPlay, id)); + } + else + { + //player discard from hand and spells + CardMovement(this, new CardMovementArgs(CardMovementType.PlayerHandDiscard, id)); + } + break; + case "OPPOSING HAND": + if (to == "OPPOSING DECK") + { + //opponent mulligan + CardMovement(this, new CardMovementArgs(CardMovementType.OpponentMulligan, id)); + } + else if (to == "OPPOSING PLAY") { + //opponent played CardMovement(this, new CardMovementArgs(CardMovementType.OpponentPlay, id)); } else { - //opponent discard from hand - CardMovement(this, new CardMovementArgs(CardMovementType.OpponentHandDiscard, id)); + //spell + if (id != "") + { + CardMovement(this, new CardMovementArgs(CardMovementType.OpponentPlay, id)); + } + else + { + //opponent discard from hand + CardMovement(this, new CardMovementArgs(CardMovementType.OpponentHandDiscard, id)); + } } - } - break; - case "OPPOSING DECK": - if (to == "OPPOSING HAND") - { - //opponent draw - CardMovement(this, new CardMovementArgs(CardMovementType.OpponentDraw, string.Empty)); - } - else - { - //opponent discard from deck - CardMovement(this, new CardMovementArgs(CardMovementType.OpponentDeckDiscard, string.Empty)); - } - break; - case "OPPOSING SECRET": - //opponent secret triggered - CardMovement(this, new CardMovementArgs(CardMovementType.OpponentSecretTrigger, id)); - break; - default: - if (to == "OPPOSING HAND") - { - //coin, thoughtsteal etc - CardMovement(this, new CardMovementArgs(CardMovementType.OpponentDraw, id)); - } - else if (to == "OPPOSING GRAVEYARD" && from == "" && id != "") - { - //CardMovement(this, new CardMovementArgs(CardMovementType.OpponentPlay, id)); - } - else if (to == "FRIENDLY HAND") - { - //thoughtsteal etc - CardMovement(this, new CardMovementArgs(CardMovementType.PlayerGet, id)); - Console.WriteLine("Draw " + id); - } - else if (to == "FRIENDLY GRAVEYARD" && from == "") - { - // CardMovement(this, new CardMovementArgs(CardMovementType.PlayerPlay, id)); - } - break; + break; + case "OPPOSING DECK": + if (to == "OPPOSING HAND") + { + //opponent draw + CardMovement(this, new CardMovementArgs(CardMovementType.OpponentDraw, string.Empty)); + } + else + { + //opponent discard from deck + CardMovement(this, + new CardMovementArgs(CardMovementType.OpponentDeckDiscard, string.Empty)); + } + break; + case "OPPOSING SECRET": + //opponent secret triggered + CardMovement(this, new CardMovementArgs(CardMovementType.OpponentSecretTrigger, id)); + break; + default: + if (to == "OPPOSING HAND") + { + //coin, thoughtsteal etc + CardMovement(this, new CardMovementArgs(CardMovementType.OpponentDraw, id)); + } + else if (to == "OPPOSING GRAVEYARD" && from == "" && id != "") + { + //CardMovement(this, new CardMovementArgs(CardMovementType.OpponentPlay, id)); + } + else if (to == "FRIENDLY HAND") + { + //thoughtsteal etc + CardMovement(this, new CardMovementArgs(CardMovementType.PlayerGet, id)); + } + else if (to == "FRIENDLY GRAVEYARD" && from == "") + { + // CardMovement(this, new CardMovementArgs(CardMovementType.PlayerPlay, id)); + } + break; + } + } + else if (logLine.StartsWith("[Asset]")) + { + Regex assetReget = new Regex(@"\w*(name=(?(\w*)))(\s)+\.*"); + if (!assetReget.IsMatch(logLine)) return; + var id = assetReget.Match(logLine).Groups["id"].Value.Trim(); + Console.WriteLine(id); } } } diff --git a/Hearthstone Deck Tracker/MainWindow.xaml b/Hearthstone Deck Tracker/MainWindow.xaml index a192565bb5..3d7b923e9c 100644 --- a/Hearthstone Deck Tracker/MainWindow.xaml +++ b/Hearthstone Deck Tracker/MainWindow.xaml @@ -1,7 +1,7 @@  + Title="Hearthstone Deck Tracker" Height="714" Width="512" Closing="Window_Closing_1" Background="DarkGray" SizeChanged="Window_SizeChanged_1" >