Files
FORT-BO/Assets/CONTENT/Game/Scripts/Player/PlayerSpawnController.cs
T

44 lines
1.3 KiB
C#

using Unity.Netcode;
using UnityEngine;
public sealed class PlayerSpawnController : NetworkBehaviour, IPlayerSystem
{
[Header("Random spawn area")]
[SerializeField] private Vector3 spawnCenter = new(0f, 1f, 0f);
[SerializeField, Min(0f)] private float spawnRadius = 8f;
private readonly NetworkVariable<Vector3> assignedSpawnPosition = new(
Vector3.zero,
NetworkVariableReadPermission.Everyone,
NetworkVariableWritePermission.Server);
public void Initialize(PlayerFacade facade) { }
public override void OnNetworkSpawn()
{
assignedSpawnPosition.OnValueChanged += HandleSpawnPositionChanged;
if (IsServer)
{
Vector2 randomOffset = Random.insideUnitCircle * spawnRadius;
assignedSpawnPosition.Value = spawnCenter + new Vector3(randomOffset.x, 0f, randomOffset.y);
}
ApplySpawnPosition(assignedSpawnPosition.Value);
}
public override void OnNetworkDespawn()
{
assignedSpawnPosition.OnValueChanged -= HandleSpawnPositionChanged;
}
private void HandleSpawnPositionChanged(Vector3 _, Vector3 position) =>
ApplySpawnPosition(position);
private void ApplySpawnPosition(Vector3 position)
{
if (IsOwner)
transform.position = position;
}
}