private void OnRequestRespawn(HealthComponent.RequestRespawn.RequestResponder request) { // Reset the player's health. var healthUpdate = new HealthComponent.Update { Health = health.Data.MaxHealth }; health.Send(healthUpdate); // Move to a spawn point (position and rotation) var(spawnPosition, spawnYaw, spawnPitch) = SpawnPoints.GetRandomSpawnPoint(); var newLatest = new ServerResponse { Position = spawnPosition.ToIntAbsolute(), IncludesJump = false, Timestamp = serverMovement.Data.Latest.Timestamp, TimeDelta = 0 }; var serverMovementUpdate = new ServerMovement.Update { Latest = newLatest }; serverMovement.Send(serverMovementUpdate); // Update the spatial position on respawn. var spatialPositionUpdate = new Position.Update { Coords = spawnPosition.ToSpatialCoordinates() }; spatialPosition.Send(spatialPositionUpdate); transform.position = spawnPosition + spatial.Worker.Origin; var forceRotationRequest = new RotationUpdate { Yaw = spawnYaw.ToInt1k(), Pitch = spawnPitch.ToInt1k(), TimeDelta = 0 }; serverMovement.SendForcedRotation(forceRotationRequest); // Trigger the respawn event. health.SendRespawn(new Empty()); }
public void SendUpdate(HealthComponent.Update update) { var component = EntityManager.GetComponentData <HealthComponent.Component>(Entity); if (update.Health.HasValue) { component.Health = update.Health.Value; } if (update.MaxHealth.HasValue) { component.MaxHealth = update.MaxHealth.Value; } EntityManager.SetComponentData(Entity, component); }
private void OnRequestRespawn(HealthComponent.RequestRespawn.ReceivedRequest request) { // Reset the player's health. var healthUpdate = new HealthComponent.Update { Health = health.Data.MaxHealth }; health.SendUpdate(healthUpdate); // Move to a spawn point (position and rotation) var(spawnPosition, spawnYaw, spawnPitch) = Respawning.SpawnPoints.GetRandomSpawnPoint(); var newLatest = new ServerResponse { Position = spawnPosition.ToVector3Int(), IncludesJump = false, Timestamp = serverMovement.Data.Latest.Timestamp, TimeDelta = 0 }; var serverMovementUpdate = new ServerMovement.Update { Latest = newLatest }; serverMovement.SendUpdate(serverMovementUpdate); transform.position = spawnPosition + spatial.Worker.Origin; var forceRotationRequest = new RotationUpdate { Yaw = spawnYaw.ToInt1k(), Pitch = spawnPitch.ToInt1k(), TimeDelta = 0 }; serverMovement.SendForcedRotationEvent(forceRotationRequest); // Trigger the respawn event. health.SendRespawnEvent(new Empty()); // Update spatial position in the next frame. StartCoroutine(SetSpatialPosition(spawnPosition)); }