66 lines
1.5 KiB
C#
66 lines
1.5 KiB
C#
using System;
|
|
using System.Threading;
|
|
using Cysharp.Threading.Tasks;
|
|
using RebootKit.Engine.Foundation;
|
|
using UnityEngine;
|
|
|
|
namespace RebootKit.Engine.Services.Simulation {
|
|
public class Actor : MonoBehaviour {
|
|
[field: SerializeField]
|
|
public SerializableGuid ActorGuid { get; private set; } = SerializableGuid.New();
|
|
|
|
public bool IsInitialized { get; private set; }
|
|
|
|
bool m_Simulate;
|
|
public bool Simulate {
|
|
get => m_Simulate;
|
|
|
|
set {
|
|
if (m_Simulate == value) {
|
|
return;
|
|
}
|
|
|
|
m_Simulate = value;
|
|
|
|
if (!IsInitialized) {
|
|
return;
|
|
}
|
|
|
|
if (m_Simulate) {
|
|
OnBeginPlay();
|
|
} else {
|
|
OnEndPlay();
|
|
}
|
|
}
|
|
}
|
|
|
|
async void Start() {
|
|
IsInitialized = false;
|
|
await InitAsync(destroyCancellationToken);
|
|
IsInitialized = true;
|
|
|
|
if (Simulate) {
|
|
OnBeginPlay();
|
|
}
|
|
}
|
|
|
|
void Update() {
|
|
if (m_Simulate && IsInitialized) {
|
|
OnTick();
|
|
}
|
|
}
|
|
|
|
protected virtual async UniTask InitAsync(CancellationToken cancellationToken) {
|
|
await UniTask.Yield(cancellationToken);
|
|
}
|
|
|
|
public virtual void OnBeginPlay() {
|
|
}
|
|
|
|
public virtual void OnEndPlay() {
|
|
}
|
|
|
|
public virtual void OnTick() {
|
|
}
|
|
}
|
|
} |