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); }