/// <summary> /// Sorts any array /// </summary> public void Sort(MapSectionSortType sortType) { int sortValue = (int)sortType; if ((sortValue & 0x0001) == 0x0001) { Array.Sort(StillUnits, 0, stillCount, RadiusComparer.Default); for (int i = 0; i < StillUnits.Length; i++) { //if (i == 0) // Debug.Assert(AgingUnits[i] != null); if (StillUnits[i] == null) { stillCount = i; break; } } } if ((sortValue & 0x0010) == 0x0010) { Array.Sort(AgingUnits, 0, agingCount, AgeComparer.Default); for (int i = 0; i < AgingUnits.Length; i++) { //if (i == 0) // Debug.Assert(AgingUnits[i] != null); if (AgingUnits[i] == null) { agingCount = i; break; } } } if ((sortValue & 0x0100) == 0x0100) { Array.Sort(PlayerUnits, 0, playerCount, AgeComparer.Default); for (int i = 0; i < PlayerUnits.Length; i++) { //if (i == 0) // Debug.Assert(AgingUnits[i] != null); if (PlayerUnits[i] == null) { playerCount = i; break; } } } }
/// <summary> /// /// </summary> /// <param name="mapUnit"></param> internal bool Remove(MapUnit mapUnit) { MapSectionSortType sortType = MapSectionSortType.None; if (mapUnit.Mobility == Mobility.Still && mapUnit.Kind != UnitKind.Explosion) { int index; if (arrayContains(StillUnits, mapUnit, out index)) { StillUnits[index] = null; sortType |= MapSectionSortType.StillUnits; } } if (mapUnit.IsAging) { int index; if (arrayContains(AgingUnits, mapUnit, out index)) { AgingUnits[index] = null; sortType |= MapSectionSortType.AgingUnits; } } if (mapUnit.Kind == UnitKind.PlayerShip || // Check first cause most used mapUnit.Kind == UnitKind.PlayerBase || mapUnit.Kind == UnitKind.PlayerDrone || mapUnit.Kind == UnitKind.PlayerPlatform || mapUnit.Kind == UnitKind.PlayerProbe) { int index; if (arrayContains(PlayerUnits, mapUnit, out index)) { PlayerUnits[index] = null; sortType |= MapSectionSortType.PlayerUnits; } } if (sortType != MapSectionSortType.None) { Sort(sortType); return(true); } return(false); }