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());
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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));
        }