fgm24/Assets/Scripts/Multiplayer/NetworkedGameSetup.cs

71 lines
2.0 KiB
C#
Raw Normal View History

using System;
using System.Collections;
using System.Collections.Generic;
2024-02-14 05:37:52 +01:00
using System.Linq;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.SceneManagement;
2024-02-09 04:09:08 +01:00
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)
{
2024-02-14 05:37:52 +01:00
NetworkManager.Singleton.SceneManager.OnLoadEventCompleted -= SceneLoaded; // Only run once
StartSetupProcedure(clientsCompleted);
}
private void StartSetupProcedure(List<ulong> playerIds)
{
2024-02-14 05:37:52 +01:00
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;
}
2024-02-14 05:37:52 +01:00
private GameObject[] SpawnPlayers(List<ulong> playerIds)
{
2024-02-14 05:37:52 +01:00
GameObject[] players = new GameObject[playerIds.Count];
2024-02-14 05:37:52 +01:00
for (int i = 0; i < playerIds.Count; i++)
{
2024-02-14 05:37:52 +01:00
GameObject player = Instantiate(PlayerPrefab, Vector2.up * 3, Quaternion.identity);
player.GetComponent<NetworkObject>().SpawnAsPlayerObject(playerIds[i], true);
players[i] = player;
}
2024-02-14 05:37:52 +01:00
return players;
}
2024-02-14 05:37:52 +01:00
private void InitRope(GameObject[] players)
{
RopeSimulator ropeSim = GetComponentInChildren<RopeSimulator>();
//// Assuming 2 players
ropeSim.BuildRope(players[0].GetComponent<RopeJoint>(), players[1].GetComponent<RopeJoint>());
2024-02-14 05:37:52 +01:00
}
}