using ProjectM.Simulation; using Unity.Entities; using UnityEngine; namespace ProjectM.Authoring { /// /// Generic authoring for a non-functional build-structure ghost prefab (Wall / Pylon) — duplicate /// Turret.prefab so the ownerless interpolated GhostAuthoringComponent on PlacedStructure.Type comes free, /// then swap TurretAuthoring for this. Bakes ONLY {Type=} /// (no stats, so TurretFireSystem ignores it). BuildPlaceSystem overrides Cell + /// LastProcessedTick and adds RegionTag{Base} at placement. is a byte (StructureType.*) to /// dodge the cross-assembly enum-in-Burst hazard and the MCP enum-drop gotcha. /// public class StructureAuthoring : MonoBehaviour { [Tooltip("StructureType byte: 5 = Wall, 6 = Pylon (do NOT use 1-4: Turret + reserved M7 automation).")] public byte Kind = StructureType.Wall; [Min(1f)] public float MaxHp = 150f; private class StructureBaker : Baker { public override void Bake(StructureAuthoring authoring) { var entity = GetEntity(authoring, TransformUsageFlags.Dynamic); AddComponent(entity, new PlacedStructure { Type = authoring.Kind, Cell = default, NextTick = 0u, LastProcessedTick = 0u, }); // EB-1: Wall/Pylon are damageable + destructible AI targets (a wall soaks Husk strikes that would // otherwise hit a turret). DamageEvent buffer MUST exist or an AI strike crashes at ECB playback. // No HitRadius -> ProjectileDamageSystem ignores them (no friendly projectile fire). AddComponent(entity, new Health { Current = authoring.MaxHp, Max = authoring.MaxHp }); AddBuffer(entity); AddComponent(entity); } } } }