private void SpawnMonster(Vector2Int position, Tile tile) { GameObject monsterObject = Instantiate(m_monsterPrefab, tile.Sprite.transform.position, Quaternion.identity); NetworkMonster monster = monsterObject.GetComponent <NetworkMonster>(); monster.MonsterIndex = m_monsters.GetRandomMonsterIndex(); NetworkServer.Spawn(monsterObject); m_map.AddMonsterAtPosition(monster, position); }
private void PerformMonsterAttack(NetworkMonster monster, Vector2Int targetPosition, List <NetworkPlayer> players) { foreach (NetworkPlayer player in players) { if (player.Position == targetPosition) { InflictDamageOnPlayer(Damage.GetDamage(monster.Damage), player); return; } } }
private void MoveMonsters() { Dictionary <Vector2Int, NetworkMonster> monsters = Map.I.Monsters; Dictionary <Vector2Int, NetworkMonster> newMonsterPositions = new Dictionary <Vector2Int, NetworkMonster>(monsters); List <NetworkPlayer> players = m_networkManager.ClientPlayers.Values.ToList(); foreach (KeyValuePair <Vector2Int, NetworkMonster> entry in monsters) { Vector2Int currentPosition = entry.Key; NetworkMonster monster = entry.Value; List <Vector2Int> targetTiles = new List <Vector2Int>(); MonsterAction action = MonsterAction.Wait; for (int i = 0; i < m_directions.Length; ++i) { Vector2Int targetTile = currentPosition + m_directions[i]; MonsterAction tempAction = GetMonsterAction(targetTile, newMonsterPositions, players); if (tempAction == MonsterAction.Move) { action = tempAction; targetTiles.Add(targetTile); } else if (tempAction == MonsterAction.Attack) { action = tempAction; targetTiles.Clear(); targetTiles.Add(targetTile); break; } } if (action == MonsterAction.Wait) { continue; } if (action == MonsterAction.Attack) { PerformMonsterAttack(monster, targetTiles[0], players); } else { Vector2Int targetTile = targetTiles[Random.Range(0, targetTiles.Count)]; newMonsterPositions.Add(targetTile, monster); monster.RpcMove(targetTile); newMonsterPositions.Remove(currentPosition); } } Map.I.Monsters = newMonsterPositions; }
private bool HandlePossibleMonsterAtTargetPosition(Vector2Int targetPosition) { NetworkMonster monster = m_map.GetMonsterAtPosition(targetPosition); if (monster == null) { return(false); } NetworkHealth monsterHealth = monster.Health; int damage = Damage.GetDamage(m_attack); monsterHealth.TakeDamage(damage); RpcDisplayDamage(damage, monster.transform.position); if (monsterHealth.IsDead()) { m_map.RemoveMonsterAtPosition(targetPosition); NetworkServer.Destroy(monster.gameObject); } return(true); }
public void AddMonsterAtPosition(NetworkMonster monster, Vector2Int position) { AddAtPosition(Monsters, monster, position); }