Skip to content

Commit 474bb72

Browse files
committed
Implemented ending game and starting a new one after finish. Removed old client
1 parent a116867 commit 474bb72

File tree

87 files changed

+117
-3040
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

87 files changed

+117
-3040
lines changed

Client.Logic/Game.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using Arci.Networking.Security;
33
using Arci.Networking.Security.AesOptions;
44
using Client.Logic.Data;
5-
using Client.Logic.Data.Cards;
65
using Client.Logic.Enums;
76
using Client.Logic.Network;
87
using System;
@@ -27,6 +26,7 @@ public class Game : IDisposable
2726

2827
public event Action<MessageType, string> MessageReceived;
2928
public event Action<UInt16> PacketProcessed;
29+
public event Action<bool> GameEnded;
3030

3131
/// <summary>
3232
/// List of available servers
@@ -140,6 +140,12 @@ public void UnsubscribeAllHandlers()
140140
}
141141
}
142142

143+
internal void OnGameEnded(bool hasWon)
144+
{
145+
IsGameWaiting = false;
146+
GameEnded?.Invoke(hasWon);
147+
}
148+
143149
internal void OnErrorOccured(string error) => MessageReceived?.Invoke(MessageType.Error, error);
144150

145151
internal void OnInformationReceived(string msg) => MessageReceived?.Invoke(MessageType.Information, msg);

Client.Logic/Network/PacketHandlerGame.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ private static void HandlePlayerDisconnected(Packet packet, Game game)
4848
// Handle SMSG_END_GAME packet
4949
private static void HandleEndGame(Packet packet, Game game)
5050
{
51-
//var winnerId = packet.ReadUInt32();
52-
//game.EndGame(game.Player.Id == winnerId);
51+
var winnerId = packet.ReadUInt32();
52+
game.OnGameEnded(game.Player.Id == winnerId);
5353
}
5454
}
5555
}

Client.UI/Resources/Texts.Designer.cs

Lines changed: 18 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Client.UI/Resources/Texts.cs-CZ.resx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,4 +207,10 @@
207207
<data name="SettingsModified" xml:space="preserve">
208208
<value>Provedli jste změny v nastavení. Přejete si je uložit?</value>
209209
</data>
210+
<data name="WonGame" xml:space="preserve">
211+
<value>Vyhrál jste.</value>
212+
</data>
213+
<data name="LostGame" xml:space="preserve">
214+
<value>Prohrál jste.</value>
215+
</data>
210216
</root>

Client.UI/Resources/Texts.es-ES.resx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,4 +207,10 @@
207207
<data name="SettingsModified" xml:space="preserve">
208208
<value>Ha realizado cambios en la configuración. ¿Quieres salvarlos?</value>
209209
</data>
210+
<data name="WonGame" xml:space="preserve">
211+
<value>Usted ha ganado.</value>
212+
</data>
213+
<data name="LostGame" xml:space="preserve">
214+
<value>Usted ha perdido.</value>
215+
</data>
210216
</root>

Client.UI/Resources/Texts.resx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,4 +207,10 @@
207207
<data name="SettingsModified" xml:space="preserve">
208208
<value>You have made some changes to settings. Do you wish to save them?</value>
209209
</data>
210+
<data name="WonGame" xml:space="preserve">
211+
<value>You have won.</value>
212+
</data>
213+
<data name="LostGame" xml:space="preserve">
214+
<value>You have lost.</value>
215+
</data>
210216
</root>

Client.UI/Resources/Texts.sk-SK.resx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,4 +207,10 @@
207207
<data name="SettingsModified" xml:space="preserve">
208208
<value>Vykonali ste zmeny v nastaveniach. Prajete si ich uložiť?</value>
209209
</data>
210+
<data name="WonGame" xml:space="preserve">
211+
<value>Vyhrali ste.</value>
212+
</data>
213+
<data name="LostGame" xml:space="preserve">
214+
<value>Prehrali ste.</value>
215+
</data>
210216
</root>

Client.UI/ViewModels/Cards/PlayableCardViewModel.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
using System.Linq;
99
using System.Threading.Tasks;
1010
using System.Windows;
11-
using System.Windows.Threading;
1211

1312
namespace Client.UI.ViewModels.Cards
1413
{

Client.UI/ViewModels/MainGame/PlayingGameViewModel.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace Client.UI.ViewModels.MainGame
99
{
1010
public class PlayingGameViewModel : NotifyPropertyViewModel
1111
{
12-
private readonly Game game;
12+
public Game Game { get; }
1313

1414
public CardDeckViewModel Player { get; }
1515

@@ -23,26 +23,26 @@ public class PlayingGameViewModel : NotifyPropertyViewModel
2323

2424
public PlayingGameViewModel()
2525
{
26-
game = App.GetGame() ?? throw new InvalidOperationException("Game must exist at this point");
27-
if (game.Player == null || game.Opponent == null)
26+
Game = App.GetGame() ?? throw new InvalidOperationException("Game must exist at this point");
27+
if (Game.Player == null || Game.Opponent == null)
2828
throw new InvalidOperationException("Both players must exist at this point");
2929

30-
Player = new CardDeckViewModel(game.Player);
31-
Opponent = new CardDeckViewModel(game.Opponent);
30+
Player = new CardDeckViewModel(Game.Player);
31+
Opponent = new CardDeckViewModel(Game.Opponent);
3232

3333
AttackCmd = new CommandHandler(() => InvokeCardAction(CardAction.BasicAttack));
3434
SpellAttackCmd = new CommandHandler(() => InvokeCardAction(CardAction.SpellUse));
35-
DefendCmd = new AsyncCommandHandler(() => game.DefendSelfAsync());
35+
DefendCmd = new AsyncCommandHandler(() => Game.DefendSelfAsync());
3636

37-
game.PacketProcessed += OnPacketProcessed;
37+
Game.PacketProcessed += OnPacketProcessed;
3838
}
3939

4040
private void OnPacketProcessed(UInt16 packet)
4141
{
4242
if (packet == (UInt16)SMSGPackets.ActivePlayer)
4343
{
4444
foreach (var card in Player.Cards)
45-
card.SelectionType = !game.IsGameWaiting && game.Player.ActiveCard.Guid == card.Guid ? SelectionType.Selected : SelectionType.None;
45+
card.SelectionType = !Game.IsGameWaiting && Game.Player.ActiveCard.Guid == card.Guid ? SelectionType.Selected : SelectionType.None;
4646

4747
foreach (var card in Opponent.Cards)
4848
card.SelectionType = SelectionType.None;
@@ -53,15 +53,15 @@ private void InvokeCardAction(CardAction action)
5353
{
5454
if (action == CardAction.SpellUse)
5555
{
56-
var targets = game.Player.ActiveCard.Spell?.GetPossibleTargets(game.Player, game.Opponent);
56+
var targets = Game.Player.ActiveCard.Spell?.GetPossibleTargets(Game.Player, Game.Opponent);
5757
foreach (var playerCards in Player.Cards.Where(x => targets.Contains(x.Guid)).Concat(Opponent.Cards.Where(x => targets.Contains(x.Guid))))
5858
{
5959
playerCards.SelectionType = SelectionType.SpellUsable;
6060
}
6161
}
6262
else if (action == CardAction.BasicAttack)
6363
{
64-
var targets = game.Player.ActiveCard.GetPossibleTargets(game.Opponent.CardDeck, game.Player.ActiveCardPosition);
64+
var targets = Game.Player.ActiveCard.GetPossibleTargets(Game.Opponent.CardDeck, Game.Player.ActiveCardPosition);
6565
foreach (var playerCards in Opponent.Cards.Where(x => targets.Contains(x.Guid)))
6666
{
6767
playerCards.SelectionType = SelectionType.BasicDamageAttackable;
Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
using System.Windows.Controls;
1+
using Client.UI.Resources;
2+
using Client.UI.ViewModels.MainGame;
3+
using System.Windows;
4+
using System.Windows.Controls;
25

36
namespace Client.UI.Views.Game
47
{
@@ -7,9 +10,32 @@ namespace Client.UI.Views.Game
710
/// </summary>
811
public partial class PlayingGame : Page
912
{
13+
private bool loaded;
14+
1015
public PlayingGame()
1116
{
1217
InitializeComponent();
18+
19+
Loaded += PlayingGame_Loaded;
20+
}
21+
22+
private void PlayingGame_Loaded(object sender, RoutedEventArgs e)
23+
{
24+
if (loaded || !(DataContext is PlayingGameViewModel vm))
25+
return;
26+
27+
loaded = true;
28+
vm.Game.GameEnded += Game_GameEnded;
29+
}
30+
31+
private void Game_GameEnded(bool hasWon)
32+
{
33+
Application.Current.Dispatcher.Invoke(() =>
34+
{
35+
MessageBox.Show(hasWon ? Texts.WonGame : Texts.LostGame, string.Empty, MessageBoxButton.OK, MessageBoxImage.None);
36+
37+
NavigationService.Navigate(new MainMenu());
38+
});
1339
}
1440
}
1541
}

0 commit comments

Comments
 (0)