BITFALL/Assets/Artists/Scripts/GameMode/PlayerAutoSpawnController.cs

60 lines
1.2 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
using BITKit;
using BITKit.Entities;
using UnityEngine;
namespace BITFALL.GameMode
{
public class PlayerAutoSpawnController : MonoBehaviour
{
[SerializeReference, SubclassSelector] private IEntitiesService entitiesService;
private void Start()
{
entitiesService.OnAdd += OnEntityAdded;
destroyCancellationToken.Register(() =>
{
entitiesService.OnAdd -= OnEntityAdded;
});
}
private void OnEntityAdded(IEntity obj)
{
if (obj.TryGetComponent<IHealth>(out var heal) is false) return;
var token = destroyCancellationToken;
if (obj is MonoBehaviour behaviour)
{
token = behaviour.destroyCancellationToken;
}
heal.OnSetAlive += async alive =>
{
if (alive) return;
var time = Data.Get<int>(BITConstant.Environment.mp_respawn_on_death);
switch (time)
{
case 0:
heal.HealthPoint = heal.MaxHealthPoint;
return;
case -1:
return;
default:
try
{
await Task.Delay(TimeSpan.FromSeconds(time), token);
}
catch (OperationCanceledException)
{
return;
}
heal.HealthPoint = heal.MaxHealthPoint;
break;
}
};
}
}
}