using RebootKit.Engine.Main; using RebootKit.Engine.Simulation; using UnityEngine; using UnityEngine.AddressableAssets; using Logger = RebootKit.Engine.Foundation.Logger; namespace RebootReality.jelycho { public class ActorSpawner : Actor { static readonly Logger s_Logger = new Logger(nameof(ActorSpawner)); [SerializeField] AssetReferenceGameObject m_ActorPrefabReference; [TriInspector.InfoBox("If empty will use this object transform as spawn point.")] [SerializeField] Transform[] m_SpawnPoints; protected override IActorData CreateActorData() { return new NoActorData(); } protected override void OnActorCommandServer(ActorCommand actorCommand) { base.OnActorCommandServer(actorCommand); if (actorCommand.CommandID == (ushort) ActorSpawnerCommands.SpawnActor) { (Vector3 spawnPoint, Quaternion spawnRotation) = GetSpawnPoint(); RR.SpawnActor(m_ActorPrefabReference, spawnPoint, spawnRotation); } } public void SpawnActor() { if (m_ActorPrefabReference == null) { s_Logger.Error("ActorPrefabReference is not set. Cannot spawn actor."); return; } SendActorCommand((ushort) ActorSpawnerCommands.SpawnActor); } (Vector3, Quaternion) GetSpawnPoint() { if (m_SpawnPoints.Length == 0) { return (transform.position, transform.rotation); } int index = Random.Range(0, m_SpawnPoints.Length); return (m_SpawnPoints[index].position, m_SpawnPoints[index].rotation); } } public enum ActorSpawnerCommands : ushort { None = 0x0000, SpawnActor = 0x0001, } }