49 lines
1.9 KiB
C#
49 lines
1.9 KiB
C#
using ProjectM.Simulation;
|
|
using Unity.Entities;
|
|
using UnityEngine;
|
|
|
|
namespace ProjectM.Authoring
|
|
{
|
|
/// <summary>
|
|
/// Authoring for the baked <see cref="UpgradePickupSpawner"/> singleton (mirrors
|
|
/// TrainingDummySpawnerAuthoring). Place on a single GameObject in the gameplay subscene; the
|
|
/// server-only <c>UpgradePickupSpawnSystem</c> reads it, spawns <see cref="Count"/> pickups along +X
|
|
/// from <see cref="Origin"/> at <see cref="Spacing"/> intervals, then destroys the singleton so it
|
|
/// fires exactly once. The entity carries no transform; only the prefab needs a runtime transform.
|
|
/// </summary>
|
|
public class UpgradePickupSpawnerAuthoring : MonoBehaviour
|
|
{
|
|
[Tooltip("Upgrade pickup prefab to instantiate. Must carry UpgradePickupAuthoring.")]
|
|
public GameObject PickupPrefab;
|
|
|
|
[Min(0)]
|
|
[Tooltip("How many pickups to spawn.")]
|
|
public int Count = 2;
|
|
|
|
[Min(0f)]
|
|
[Tooltip("World-unit spacing between consecutive pickups along +X.")]
|
|
public float Spacing = 3f;
|
|
|
|
[Tooltip("World-space position of the first pickup.")]
|
|
public Vector3 Origin = new Vector3(-4f, 0f, 6f);
|
|
|
|
private class UpgradePickupSpawnerBaker : Baker<UpgradePickupSpawnerAuthoring>
|
|
{
|
|
public override void Bake(UpgradePickupSpawnerAuthoring authoring)
|
|
{
|
|
var entity = GetEntity(authoring, TransformUsageFlags.None);
|
|
|
|
AddComponent(entity, new UpgradePickupSpawner
|
|
{
|
|
Prefab = authoring.PickupPrefab != null
|
|
? GetEntity(authoring.PickupPrefab, TransformUsageFlags.Dynamic)
|
|
: Entity.Null,
|
|
Count = authoring.Count,
|
|
Spacing = authoring.Spacing,
|
|
Origin = authoring.Origin,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|