60 lines
2.1 KiB
C#
60 lines
2.1 KiB
C#
using RebootKit.Engine.Main;
|
|
using RebootKit.Engine.Simulation;
|
|
using TriInspector;
|
|
using UnityEngine;
|
|
using UnityEngine.AddressableAssets;
|
|
using Logger = RebootKit.Engine.Foundation.Logger;
|
|
|
|
namespace RebootReality.jelycho.Actors {
|
|
public class ActorSpawner : Actor {
|
|
static readonly Logger s_Logger = new Logger(nameof(ActorSpawner));
|
|
|
|
[SerializeField] AssetReferenceGameObject m_ActorPrefabReference;
|
|
[SerializeField, Range(1, 256)] int m_Count = 1;
|
|
|
|
[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(ulong senderID, ActorCommand actorCommand) {
|
|
base.OnActorCommandServer(senderID, actorCommand);
|
|
|
|
s_Logger.Info("Received actor command: " + actorCommand.CommandID);
|
|
|
|
ActorSpawnerCommands spawnerCommand = (ActorSpawnerCommands) actorCommand.CommandID;
|
|
if (spawnerCommand == ActorSpawnerCommands.SpawnActor) {
|
|
for (int i = 0; i < m_Count; ++i) {
|
|
(Vector3 spawnPoint, Quaternion spawnRotation) = GetSpawnPoint();
|
|
RR.SpawnActor(m_ActorPrefabReference, spawnPoint, spawnRotation);
|
|
}
|
|
}
|
|
}
|
|
|
|
[Button]
|
|
public void SpawnActor() {
|
|
if (m_ActorPrefabReference == null) {
|
|
s_Logger.Error("ActorPrefabReference is not set. Cannot spawn actor.");
|
|
return;
|
|
}
|
|
|
|
SendActorCommand((byte) 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 : byte {
|
|
None = 0x00,
|
|
SpawnActor = 0x01,
|
|
}
|
|
} |