void Update() { if (!GameManager.Instance.gameObject.activeSelf) { //Something has killed the game loop. DontDestroyOnLoad doesn't protect from deactivation GameManager.Instance.gameObject.SetActive(true); } if (Client == null || _actionNumber < 1) { return; } if (_isAnimationRunning) { if (_subActionNumber == 5 && SelectedMonster != null && FriendlyMonsters.Contains(SelectedMonster)) { IEnumerable <BoardSpace> availableSpaces = BoardSpaces.Values.Where(b => FriendlyMonsters.Select(f => f.CurrentNode.Id).Contains(b.Node.Id)); foreach (BoardSpace space in availableSpaces) { space.SendMessage("OnAvailableMonsters", availableSpaces.Select(s => s.Node.Id)); } BoardSpaces[SelectedMonster.CurrentNode.Id].SendMessage("OnClearHighlightingWithSelection", SelectedMonster.CurrentNode); } } }
public virtual void UpdateGameState(int actionNumber, int subActionNumber, IDictionary <int, int> friendlyMonsterState, IDictionary <int, int> enemyMonsterState, bool isFullSync = false) { _actionNumber = actionNumber; _subActionNumber = subActionNumber; foreach (Monster monster in FriendlyMonsters) { if (!friendlyMonsterState.ContainsKey(monster.MonsterTypeId)) { FriendlyMonsters.Remove(monster); MonsterPrefabs.Remove(monster); } else if (monster.CurrentNode.Id != friendlyMonsterState[monster.MonsterTypeId]) { monster.CurrentNode = GameGraph.Nodes[friendlyMonsterState[monster.MonsterTypeId]]; } } foreach (Monster monster in EnemyMonsters) { if (!enemyMonsterState.ContainsKey(monster.MonsterTypeId)) { EnemyMonsters.Remove(monster); MonsterPrefabs.Remove(monster); } else if (monster.CurrentNode.Id != enemyMonsterState[monster.MonsterTypeId]) { monster.CurrentNode = GameGraph.Nodes[enemyMonsterState[monster.MonsterTypeId]]; } } if (_actionNumber == 2 && !isFullSync) { foreach (BoardSpace space in BoardSpaces.Values) { Node selectedNode = null; if (SelectedMonster != null) { selectedNode = SelectedMonster.CurrentNode; IEnumerable <BoardSpace> availableSpaces = BoardSpaces.Values.Where( s => FriendlyMonsters.Select(m => m.CurrentNode.Id).Contains(s.Node.Id)).ToList(); space.SendMessage("OnAvailableMonsters", availableSpaces.Select(s => s.Node.Id)); } else { ClearSelectionMenu(); space.SendMessage("OnClearHighlighting"); } space.SendMessage("OnClearHighlightingWithSelection", selectedNode); } } else if (!isFullSync) { foreach (BoardSpace space in BoardSpaces.Values) { space.SendMessage("OnClearHighlighting"); } if (_actionNumber == 1 || _actionNumber == 3) { SelectedMonster = null; } SelectedAttackNode = null; SelectedMovementPath = null; } if (_actionNumber == 3 || _actionNumber == 4) { ClearSelectionMenu(); } Client.SendStateAck(GetAdjustedActionNumber(), _subActionNumber); }