private bool createRemotePlayer(DataEntityHandle remotePlayerHandle, bool attemptSpawn = true) { if (!dataEntityCollection.HasComponent <GameObjectReferenceData>(remotePlayerHandle)) { dataEntityCollection.AddComponent <GameObjectReferenceData>(remotePlayerHandle); } if (!dataEntityCollection.HasComponent <AirBubbleData>(remotePlayerHandle)) { dataEntityCollection.AddComponent <AirBubbleData>(remotePlayerHandle); } PositionData component = dataEntityCollection.GetComponent <PositionData>(remotePlayerHandle); RemotePlayerData component2 = dataEntityCollection.GetComponent <RemotePlayerData>(remotePlayerHandle); component2.PlayerRemoved += onPlayerRemoved; playerRemovedListeners.Add(component2); PresenceData component3 = dataEntityCollection.GetComponent <PresenceData>(remotePlayerHandle); if (component3 != null) { component3.PresenceDataUpdated += onPresenceDataUpdated; } if (!dataEntityCollection.HasComponent <LODRequestReference>(remotePlayerHandle)) { LODRequestData requestData = new LODRequestData(LODSystem.REMOTE_PLAYER, remotePlayerHandle, component); requestData.OnGameObjectGeneratedEvent += onLODGameObjectGenerated; requestData.OnGameObjectRevokedEvent += onLODGameObjectRevoked; LODRequest request = Service.Get <LODService>().Request(requestData, attemptSpawn); dataEntityCollection.AddComponent <LODRequestReference>(remotePlayerHandle).Request = request; } return(false); }
private bool deleteRemotePlayer(DataEntityHandle remotePlayerHandle) { RemotePlayerData component = dataEntityCollection.GetComponent <RemotePlayerData>(remotePlayerHandle); component.PlayerRemoved -= onPlayerDisconnect; return(playerRemovedListeners.Remove(component)); }
private void onPlayerRemoved(RemotePlayerData remotePlayerData) { if (deleteRemotePlayer(remotePlayerData)) { updateTeamworkLevel(0f - teamworkDelta); } }
private bool addRemotePlayer(DataEntityHandle remotePlayerHandle) { RemotePlayerData component = dataEntityCollection.GetComponent <RemotePlayerData>(remotePlayerHandle); component.PlayerRemoved += onPlayerRemoved; return(playerRemovedListeners.Add(component)); }
// applies remote player data public void ApplyData(RemotePlayerData rpd) { // player number should not be overriddden idNumber = rpd.idNumber; player.transform.position = rpd.position; player.transform.localScale = rpd.scale; player.transform.rotation = rpd.rotation; player.playerScore = rpd.playerScore; }
private string getPlayerName(RemotePlayerData remotePlayerData) { DataEntityHandle entityByComponent = dataEntityCollection.GetEntityByComponent(remotePlayerData); if (dataEntityCollection.TryGetComponent <DisplayNameData>(entityByComponent, out var component)) { return(component.DisplayName); } return("Error: name not found"); }
private void onPlayerRemoved(RemotePlayerData remotePlayerData) { remotePlayerData.PlayerRemoved -= onPlayerRemoved; DataEntityHandle entityByComponent = dataEntityCollection.GetEntityByComponent(remotePlayerData); long sessionId = dataEntityCollection.GetComponent <SessionIdData>(entityByComponent).SessionId; if (activePlayerIndicator.ContainsKey(sessionId)) { removePlayerIndicator(sessionId, isStored: false); } }
private void onPlayerRemoved(RemotePlayerData remotePlayerData) { if (dataEntityCollection != null && userIdToPropUser != null) { DataEntityHandle entityByComponent = dataEntityCollection.GetEntityByComponent(remotePlayerData); if (!entityByComponent.IsNull) { long sessionId = dataEntityCollection.GetComponent <SessionIdData>(entityByComponent).SessionId; userIdToPropUser.Remove(sessionId); } remotePlayerData.PlayerRemoved -= onPlayerRemoved; } }
private void onPlayerDisconnect(RemotePlayerData remotePlayerData) { if (deleteRemotePlayer(remotePlayerData)) { DataEntityHandle entityByComponent = dataEntityCollection.GetEntityByComponent(remotePlayerData); DisplayNameData component2; if (Service.Get <CPDataEntityCollection>().TryGetComponent <GameObjectReferenceData>(entityByComponent, out var component)) { decreasePlayers(component.GameObject); } else if (dataEntityCollection.TryGetComponent <DisplayNameData>(entityByComponent, out component2) && dispatcher != null && !string.IsNullOrEmpty(VolumeId)) { dispatcher.DispatchEvent(new TiltATubesEvents.DisconnectPlayer(VolumeId, component2.DisplayName)); } } }
private void onPlayerRemoved(RemotePlayerData component) { component.PlayerRemoved -= onPlayerRemoved; playerRemovedListeners.Remove(component); DataEntityHandle entityByComponent = dataEntityCollection.GetEntityByComponent(component); if (entityByComponent.IsNull) { Log.LogError(this, "RemotePlayerData removed, but the handle could not be found for the component"); } if (dataEntityCollection.TryGetComponent(entityByComponent, out LODRequestReference component2)) { Service.Get <LODService>().RemoveRequest(component2.Request); } avatarViewReady.Remove(entityByComponent); hasBeenPlaced.Remove(entityByComponent); dataEntityCollection.RemoveComponent <GameObjectReferenceData>(entityByComponent); }
private void onPlayerRemoved(RemotePlayerData remotePlayerData) { remotePlayerData.PlayerRemoved -= onPlayerRemoved; DataEntityHandle entityByComponent = dataEntityCollection.GetEntityByComponent(remotePlayerData); long sessionId = dataEntityCollection.GetComponent <SessionIdData>(entityByComponent).SessionId; if (!playerScoresDictionary.ContainsKey(sessionId)) { return; } if (playerScoresDictionary.TryGetValue(sessionId, out var value)) { for (int i = 0; i < value.Count; i++) { removePlayerScore(sessionId, value[i]); } } playerScoresDictionary.Remove(sessionId); }
private bool onRemotePlayerSpawned(PlayerSpawnedEvents.RemotePlayerSpawned evt) { if (!evt.Handle.IsNull) { PropUser value = evt.RemotePlayerGameObject.AddComponent <PropUser>(); userIdToPropUser[dataEntityCollection.GetComponent <SessionIdData>(evt.Handle).SessionId] = value; RemotePlayerData component = dataEntityCollection.GetComponent <RemotePlayerData>(evt.Handle); if (component != null) { loadExistingPlayerHeldExperiences(dataEntityCollection.GetComponent <SessionIdData>(evt.Handle).SessionId); component.PlayerRemoved += onPlayerRemoved; } else { Log.LogError(this, "Failed to get the remote player data once it was spawned"); } } return(false); }
// converts byte data to remote player data public static RemotePlayerData BytesToRemotePlayerData(byte[] data) { // remote player data RemotePlayerData rpd = new RemotePlayerData(); // index int index = 0; // no data sent. // TODO: should check for enough data being available. if (data == null || data.Length == 0) { return(rpd); } // ID Number { rpd.idNumber = BitConverter.ToInt32(data, index); index += sizeof(int); } // Player Position { // getting position values // x value rpd.position.x = BitConverter.ToSingle(data, index); index += sizeof(float); // y value rpd.position.y = BitConverter.ToSingle(data, index); index += sizeof(float); // z value rpd.position.z = BitConverter.ToSingle(data, index); index += sizeof(float); } // Player Scale { // getting position values // x value rpd.scale.x = BitConverter.ToSingle(data, index); index += sizeof(float); // y value rpd.scale.y = BitConverter.ToSingle(data, index); index += sizeof(float); // z value rpd.scale.z = BitConverter.ToSingle(data, index); index += sizeof(float); } // Player Rotation { // getting position values // x value rpd.rotation.x = BitConverter.ToSingle(data, index); index += sizeof(float); // y value rpd.rotation.y = BitConverter.ToSingle(data, index); index += sizeof(float); // z value rpd.rotation.z = BitConverter.ToSingle(data, index); index += sizeof(float); // w value rpd.rotation.w = BitConverter.ToSingle(data, index); index += sizeof(float); } // Player Score { rpd.playerScore = BitConverter.ToSingle(data, index); index += sizeof(float); } return(rpd); }
// converts remote player data to bytes public static byte[] RemotePlayerDataToBytes(RemotePlayerData rpd) { // size of content byte[] sendData = new byte[DATA_SIZE]; // index of content int index = 0; // Identification Number { byte[] data = BitConverter.GetBytes(rpd.idNumber); Buffer.BlockCopy(data, 0, sendData, index, data.Length); index += data.Length; } // Player Position { byte[] data; // x position data = BitConverter.GetBytes(rpd.position.x); Buffer.BlockCopy(data, 0, sendData, index, data.Length); index += data.Length; // y position data = BitConverter.GetBytes(rpd.position.y); Buffer.BlockCopy(data, 0, sendData, index, data.Length); index += data.Length; // z position data = BitConverter.GetBytes(rpd.position.z); Buffer.BlockCopy(data, 0, sendData, index, data.Length); index += data.Length; } // Player Scale { byte[] data; // x scale data = BitConverter.GetBytes(rpd.scale.x); Buffer.BlockCopy(data, 0, sendData, index, data.Length); index += data.Length; // y scale data = BitConverter.GetBytes(rpd.scale.y); Buffer.BlockCopy(data, 0, sendData, index, data.Length); index += data.Length; // z scale data = BitConverter.GetBytes(rpd.scale.z); Buffer.BlockCopy(data, 0, sendData, index, data.Length); index += data.Length; } // Player Rotation { byte[] data; // x rotation data = BitConverter.GetBytes(rpd.rotation.x); Buffer.BlockCopy(data, 0, sendData, index, data.Length); index += data.Length; // y rotation data = BitConverter.GetBytes(rpd.rotation.y); Buffer.BlockCopy(data, 0, sendData, index, data.Length); index += data.Length; // z rotation data = BitConverter.GetBytes(rpd.rotation.z); Buffer.BlockCopy(data, 0, sendData, index, data.Length); index += data.Length; // w value data = BitConverter.GetBytes(rpd.rotation.w); Buffer.BlockCopy(data, 0, sendData, index, data.Length); index += data.Length; } // Player Score { byte[] data; // player score data = BitConverter.GetBytes(rpd.playerScore); Buffer.BlockCopy(data, 0, sendData, index, data.Length); index += data.Length; } return(sendData); }
private bool deleteRemotePlayer(RemotePlayerData remotePlayerData) { remotePlayerData.PlayerRemoved -= onPlayerDisconnect; return(playerRemovedListeners.Remove(remotePlayerData)); }
private bool addRemotePlayer(RemotePlayerData remotePlayerData) { remotePlayerData.PlayerRemoved += onPlayerDisconnect; return(playerRemovedListeners.Add(remotePlayerData)); }