alap
This commit is contained in:
88
Assets/Scripts/CharacterSkinHandler.cs
Normal file
88
Assets/Scripts/CharacterSkinHandler.cs
Normal file
@ -0,0 +1,88 @@
|
||||
using Mirror;
|
||||
using Steamworks;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
|
||||
public class CharacterSkinHandler : MonoBehaviour
|
||||
{
|
||||
public static CharacterSkinHandler instance;
|
||||
|
||||
[SerializeField] private GameObject characterSkinPrefab;
|
||||
[SerializeField] private Transform[] spawnPositions;
|
||||
public CharacterSkinElement[] clientsCharacters;
|
||||
private void Awake()
|
||||
{
|
||||
instance = this;
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
clientsCharacters = new CharacterSkinElement[NetworkManager.singleton.maxConnections];
|
||||
|
||||
StartCoroutine(WaitTillSteamInitialized());
|
||||
}
|
||||
|
||||
IEnumerator WaitTillSteamInitialized()
|
||||
{
|
||||
while (!SteamManager.Initialized)
|
||||
yield return new WaitForEndOfFrame();
|
||||
|
||||
SpawnCharacterMesh(null);
|
||||
}
|
||||
public void SpawnCharacterMesh(MyClient client)
|
||||
{
|
||||
int index = GetNextPlatformIndex(client);
|
||||
|
||||
if(client && client.isLocalPlayer)
|
||||
{
|
||||
client.characterInstance = clientsCharacters[0];
|
||||
client.characterInstance.Initialize(client, client.IsReady);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
clientsCharacters[index] = Instantiate(characterSkinPrefab, spawnPositions[index]).GetComponent<CharacterSkinElement>();
|
||||
clientsCharacters[index].Initialize(client, client ? client.IsReady : false);
|
||||
|
||||
|
||||
if (client)
|
||||
client.characterInstance = clientsCharacters[index];
|
||||
}
|
||||
|
||||
public int GetNextPlatformIndex(MyClient client)
|
||||
{
|
||||
if (client == null || client.isLocalPlayer)
|
||||
return 0;
|
||||
|
||||
for (int i = 0; i < clientsCharacters.Length; i++)
|
||||
{
|
||||
if(clientsCharacters[i] == null)
|
||||
return i;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public void DestroyCharacterMesh(MyClient client)
|
||||
{
|
||||
foreach (var character in clientsCharacters)
|
||||
{
|
||||
if(character == null)
|
||||
continue;
|
||||
|
||||
if (character.client == client)
|
||||
{
|
||||
if (character == clientsCharacters[0])
|
||||
{
|
||||
clientsCharacters[0].Initialize(client, false);
|
||||
MainMenu.instance.UpdateReadyButton(false);
|
||||
}
|
||||
else
|
||||
Destroy(character.gameObject);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user