public override void SyncGameState(Dictionary <int, int> friendlyMonsterState, Dictionary <int, int> enemyMonsterState, IEnumerable <int> movementPathIds, IEnumerable <int> availablePushDestinationIds, int actionNumber, int subActionNumber, int selectedMonsterTypeId, int selectedAttackNodeId, int destinationNodeId) { //Need to wait for animations to finish or things start to look weird if (_isAnimationRunning) { return; } UpdateGameState(actionNumber, subActionNumber, friendlyMonsterState, enemyMonsterState, true); SelectedMonster = MonsterPrefabs.SingleOrDefault(m => m.MonsterTypeId == selectedMonsterTypeId); SelectedAttackNode = GameGraph.Nodes[selectedAttackNodeId]; SelectedMovementPath = movementPathIds == null ? null : new NodePath { DestinationNode = GameGraph.Nodes[destinationNodeId], PathToDestination = GameGraph.Nodes.Where(n => movementPathIds.Contains(n.Id)).ToList() }; AvailablePushDestinations = GameGraph.Nodes.Where(n => availablePushDestinationIds.Contains(n.Id)).ToList(); }
public override void UpdateGameState(int actionNumber, int subActionNumber, IDictionary <int, int> friendlyMonsterState, IDictionary <int, int> enemyMonsterState, bool isFullSync = false) { _actionNumber = actionNumber; _subActionNumber = subActionNumber; foreach (int monsterTypeId in friendlyMonsterState.Keys) { if (FriendlyMonsters.All(m => m.MonsterTypeId != monsterTypeId)) { Monster monster = MonsterPrefabs.SingleOrDefault(m => m.MonsterTypeId == monsterTypeId); monster.CurrentNode = GameGraph.Nodes[friendlyMonsterState[monsterTypeId]]; FriendlyMonsters.Add(monster); } } foreach (int monsterTypeId in enemyMonsterState.Keys) { if (EnemyMonsters.All(m => m.MonsterTypeId != monsterTypeId)) { Monster monster = MonsterPrefabs.SingleOrDefault(m => m.MonsterTypeId == monsterTypeId); monster.CurrentNode = GameGraph.Nodes[enemyMonsterState[monsterTypeId]]; EnemyMonsters.Add(monster); } } 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]]; } } DisplayMonsters(FriendlyMonsters, EnemyMonsters); if (!isFullSync) { if (_actionNumber == 1 || _actionNumber == 3) { SelectedMonster = null; } SelectedAttackNode = null; SelectedMovementPath = null; } }