Files
RebootKit/Runtime/Engine/Code/Services/Simulation/Actor.cs
2025-04-14 23:22:38 +02:00

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() {
}
}
}