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); this.AddPlacedStructure(entity, authoring.Kind); // 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). this.AddDamageable(entity, authoring.MaxHp); } } } }