fgm24/Assets/Scripts/Multiplayer/NetworkedGameSetup.cs

72 lines
2.0 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.SceneManagement;
public class NetworkedGameSetup : NetworkBehaviour
{
[SerializeField] private GameObject PlayerPrefab;
private void Start()
{
DontDestroyOnLoad(this);
NetworkManager.Singleton.SceneManager.OnLoadEventCompleted += SceneLoaded;
}
private void SceneLoaded(string sceneName, LoadSceneMode loadSceneMode, List<ulong> clientsCompleted, List<ulong> clientsTimedOut)
{
NetworkManager.Singleton.SceneManager.OnLoadEventCompleted -= SceneLoaded; // Only run once
StartSetupProcedure(clientsCompleted);
}
private void StartSetupProcedure(List<ulong> playerIds)
{
GameObject[] players;
if (IsHost || IsServer)
players = SpawnPlayers(playerIds);
else
players = GetPlayers(playerIds);
InitRope(players);
}
private GameObject[] GetPlayers(List<ulong> playerIds)
{
GameObject[] players = new GameObject[playerIds.Count];
for (int i = 0; i < playerIds.Count; i++)
{
ulong playerId = playerIds[i];
players[i] = NetworkManager.SpawnManager.SpawnedObjects[playerId].gameObject;
}
return players;
}
private GameObject[] SpawnPlayers(List<ulong> playerIds)
{
GameObject[] players = new GameObject[playerIds.Count];
for (int i = 0; i < playerIds.Count; i++)
{
GameObject player = Instantiate(PlayerPrefab, Vector2.up * 3, Quaternion.identity);
player.GetComponent<NetworkObject>().SpawnAsPlayerObject(playerIds[i], true);
players[i] = player;
}
return players;
}
private void InitRope(GameObject[] players)
{
RopeSimulator ropeSim = GetComponentInChildren<RopeSimulator>();
//// Assuming 2 players
//ropeSim.start = new RopeJoint(players[0].transform.position, true);
//ropeSim.start = players[1];
}
}