public async Task <BattleData> JoinBattleAndObserve(string matchId, TeamData team) { currentBattle = await battleMapper.GetBattle(matchId); currentBattle.InitializeCharacters(ApplicationData.PlayerId, team); currentBattle.ChangePlayingSide(); await battleMapper.PutBattle(currentBattle); watchingBattle = battleMapper.ObserveBattle(matchId).Subscribe(OnDataUpdated); return(currentBattle); }
private async Task NextPlayerTurn() { if (lockedInCharacter == null) { statusPanel.Show("You must activate a character this turn."); return; } lockedInCharacter?.EndTurn(data.TurnNumber); lockedInCharacter = null; selectedCharacter = null; if (data.OtherSideHasNoRemainingCharactersAndIHaveSome) { statusPanel.Show("Opponent has no more characters to activate, go again!"); return; } data.LastPlayingPlayerId = ApplicationData.PlayerId; data.ChangePlayingSide(); data.TurnNumber++; data.Characters.ForEach(character => character.CurrentTurn = data.TurnNumber); if (!data.AnyCharacterUnactivated) { StartNextRound(); if (data.IsTestMode) { statusPanel.Show("NEW ROUND"); } } if (!data.IsTestMode) { await battleManager.SaveBattle(data); } else { playerSideText.Value = $"Your side: {data.Sides[data.GetPlayerId()]}"; } }