public void Reset(MyPirateAntennaDefinition antennaDef)
 {
     AntennaDefinition      = antennaDef;
     LastGenerationGameTime = MySandboxGame.TotalGamePlayTimeInMilliseconds + (int)antennaDef.FirstSpawnTimeMs - (int)antennaDef.SpawnTimeMs;
     SpawnedDrones          = 0;
     IsActive = false;
 }
        public static void UpdatePirateAntenna(long antennaEntityId, bool remove, bool activeState, StringBuilder antennaName)
        {
            Debug.Assert(Sync.IsServer, "Pirate antennas can only be registered on the server");

            // This can happen while unloading the game, because this component unloads before entities.
            if (m_pirateAntennas == null)
            {
                return;
            }

            if (remove == true)
            {
                m_pirateAntennas.Remove(antennaEntityId, immediate: !m_iteratingAntennas);
                return;
            }

            string antennaNameStr = antennaName.ToString();

            PirateAntennaInfo antennaInfo = null;

            if (!m_pirateAntennas.TryGetValue(antennaEntityId, out antennaInfo))
            {
                MyPirateAntennaDefinition antennaDef = null;
                if (m_definitionsByAntennaName.TryGetValue(antennaNameStr, out antennaDef))
                {
                    antennaInfo          = PirateAntennaInfo.Allocate(antennaDef);
                    antennaInfo.IsActive = activeState;
                    m_pirateAntennas.Add(antennaEntityId, antennaInfo, immediate: !m_iteratingAntennas);
                }
            }
            else
            {
                if (antennaInfo.AntennaDefinition.Name != antennaNameStr)
                {
                    MyPirateAntennaDefinition antennaDef = null;
                    if (!m_definitionsByAntennaName.TryGetValue(antennaNameStr, out antennaDef))
                    {
                        PirateAntennaInfo.Deallocate(antennaInfo);
                        m_pirateAntennas.Remove(antennaEntityId, immediate: !m_iteratingAntennas);
                    }
                    else
                    {
                        antennaInfo.Reset(antennaDef);
                        antennaInfo.IsActive = activeState;
                    }
                }
                else
                {
                    antennaInfo.IsActive = activeState;
                }
            }
        }
            public static PirateAntennaInfo Allocate(MyPirateAntennaDefinition antennaDef)
            {
                PirateAntennaInfo info = null;

                if (m_pool.Count == 0)
                {
                    info = new PirateAntennaInfo();
                }
                else
                {
                    info = m_pool[m_pool.Count - 1];
                    m_pool.RemoveAt(m_pool.Count - 1);
                }

                info.Reset(antennaDef);
                return(info);
            }