private void SpawnLocalPlayer() { if (descriptor_ == null) { Debug.LogError("Cannot spawn player if there is no world descriptor!"); return; } GameObject player = new GameObject("Local Player"); player.transform.parent = transform; // Force move the player initially to the spawn point to prevent enter triggers at the origin Transform spawn = GetSpawnPoint(); player.transform.position = spawn.position; player.transform.rotation = Quaternion.Euler(0, spawn.rotation.eulerAngles.y, 0); playerController_ = player.AddComponent <CyanEmuPlayerController>(); playerController_.Teleport(spawn, false); CyanEmuPlayer playerObj = player.AddComponent <CyanEmuPlayer>(); VRCPlayerApi playerAPI = CyanEmuPlayerManager.CreateNewPlayer(true, player, settings_.customLocalPlayerName); playerObj.SetPlayer(playerAPI); player.name = $"[{playerAPI.playerId}] {player.name}"; }
private void SpawnRemotePlayer(string name = null) { if (descriptor_ == null) { Debug.LogError("Cannot spawn player if there is no world descriptor!"); return; } GameObject player = new GameObject("Remote Player"); player.transform.parent = transform; player.layer = LayerMask.NameToLayer("Player"); // TODO do this better Transform spawn = GetSpawnPoint(); player.transform.position = spawn.position; player.transform.rotation = Quaternion.Euler(0, spawn.rotation.eulerAngles.y, 0); GameObject playerVis = GameObject.CreatePrimitive(PrimitiveType.Sphere); playerVis.layer = player.layer; playerVis.transform.SetParent(player.transform, false); CyanEmuPlayer playerObj = player.AddComponent <CyanEmuPlayer>(); VRCPlayerApi playerAPI = CyanEmuPlayerManager.CreateNewPlayer(false, player, name); playerObj.SetPlayer(playerAPI); player.name = $"[{playerAPI.playerId}] {player.name}"; }
private IEnumerator OnNetworkReady() { yield return(new WaitForSeconds(0.5f)); this.Log("Sending OnNetworkReady"); sdkManager_.OnNetworkReady(); if (settings_.spawnPlayer) { // TODO add option to allow for spawning remote players first to have data on not being master /* * for (int i = 0; i < x; ++i) * { * SpawnRemotePlayer(); * } */ SpawnLocalPlayer(); } yield return(new WaitForSeconds(0.1f)); networkReady_ = true; CyanEmuPlayerManager.OnNetworkReady(); }
private void OnPlayerLeft(VRCPlayerApi player) { int masterID = CyanEmuPlayerManager.GetMasterID(); VRCPlayerApi masterPlayer = VRCPlayerApi.GetPlayerById(masterID); foreach (CyanEmuSyncedObjectHelper sync in allSyncedObjects_) { GameObject syncObj = sync.gameObject; if (Networking.GetOwner(syncObj)?.playerId == player.playerId) { Networking.SetOwner(masterPlayer, syncObj); } } sdkManager_.OnPlayerLeft(player); }
public static void RemovePlayer(VRCPlayerApi player) { CyanEmuPlayerManager.RemovePlayer(player); Destroy(player.gameObject); }