BITKit/Src/Unity/Scripts/Entity/Player/LocalPlayerComponent.cs

68 lines
1.8 KiB
C#
Raw Normal View History

2023-08-23 01:59:26 +08:00
using System;
using System.Collections;
using System.Collections.Generic;
2024-03-31 23:31:00 +08:00
using System.IO;
2023-08-23 01:59:26 +08:00
using System.Threading;
using UnityEngine;
2023-09-01 14:35:05 +08:00
namespace BITKit.Entities.Player
2023-08-23 01:59:26 +08:00
{
2024-03-31 23:31:00 +08:00
public class LocalPlayerBehavior : EntityBehavior,IEntityBinaryComponent
2023-08-23 01:59:26 +08:00
{
2024-03-31 23:31:00 +08:00
public int Id { get; }= new ConstantHash(nameof(LocalPlayerBehavior));
2023-08-23 01:59:26 +08:00
private IEntityPlayerComponent[] playerComponents;
private CancellationTokenSource initializeCancellationTokenSource;
private CancellationTokenSource disposeCancellationTokenSource;
2024-03-31 23:31:00 +08:00
2023-08-23 01:59:26 +08:00
public override async void OnStart()
{
initializeCancellationTokenSource = new CancellationTokenSource();
disposeCancellationTokenSource = new CancellationTokenSource();
playerComponents = GetComponentsInChildren<IEntityPlayerComponent>(true);
foreach (var x in playerComponents)
{
x.OnPlayerInitialize();
}
foreach (var x in playerComponents)
{
initializeCancellationTokenSource.Token.ThrowIfCancellationRequested();
await x.OnPlayerInitializedAsync(initializeCancellationTokenSource.Token);
}
foreach (var x in playerComponents)
{
x.OnPlayerInitialized();
}
2023-11-06 01:17:23 +08:00
UnityPlayerServiceService.Register((Entity)UnityEntity);
2023-08-23 01:59:26 +08:00
}
public override async void OnDestroyComponent()
{
initializeCancellationTokenSource?.Cancel();
foreach (var x in playerComponents)
{
x.OnPlayerDispose();
}
foreach (var x in playerComponents)
{
disposeCancellationTokenSource.Token.ThrowIfCancellationRequested();
await x.OnPlayerDisposeAsync(disposeCancellationTokenSource.Token);
}
foreach (var x in playerComponents)
{
x.OnPlayerDisposed();
}
disposeCancellationTokenSource.Dispose();
2023-11-06 01:17:23 +08:00
UnityPlayerServiceService.UnRegister((Entity)UnityEntity);
2023-08-23 01:59:26 +08:00
}
2024-03-31 23:31:00 +08:00
public void Serialize(BinaryWriter writer)
{
writer.Write(0);
}
public void Deserialize(BinaryReader reader)
{
}
2023-08-23 01:59:26 +08:00
}
}