Exemple #1
0
        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}";
        }
Exemple #2
0
        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}";
        }
Exemple #3
0
        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();
        }
Exemple #4
0
        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);
        }
Exemple #5
0
 public static void RemovePlayer(VRCPlayerApi player)
 {
     CyanEmuPlayerManager.RemovePlayer(player);
     Destroy(player.gameObject);
 }