private Color GetCellColor(RiverRegionFlags flags) { // compresses/condenses the bitfield to only consist of useable bits (all unobserved positions removed) int index = 0; if (CheckRiverRegionFlag(flags, RiverRegionFlags.JungleQuadrant) == true) { index |= 1; } if (CheckRiverRegionFlag(flags, RiverRegionFlags.BaronPit) == true) { index |= 2; } if (CheckRiverRegionFlag(flags, RiverRegionFlags.River) == true) { index |= 4; } if (CheckRiverRegionFlag(flags, RiverRegionFlags.RiverEntrance) == true) { index |= 8; } if (CheckRiverRegionFlag(flags, RiverRegionFlags.Unknown32) == true) { // this is at risk of running out of colors, but we clamp the color index to be in bounds later // in practice, this is the only case where you can actually run out of colors index |= 16; } return(GetCellColor(index)); }
private bool CheckRiverRegionFlag(RiverRegionFlags flags, RiverRegionFlags mask) { return((flags | mask) == flags); }
private void CheckForMissingFlags() { VisionPathingFlags mergedVisionPathingFlags = (VisionPathingFlags)0; RiverRegionFlags mergedRiverRegionFlags = (RiverRegionFlags)0; List <JungleQuadrantFlags> newJungleQuadrantFlags = new List <JungleQuadrantFlags>(); List <MainRegionFlags> newMainRegionFlags = new List <MainRegionFlags>(); List <NearestLaneFlags> newNearestLaneFlags = new List <NearestLaneFlags>(); List <POIFlags> newPOIFlags = new List <POIFlags>(); List <RingFlags> newRingFlags = new List <RingFlags>(); List <UnknownSRXFlags> newSRXFlags = new List <UnknownSRXFlags>(); for (int i = 0; i < cells.Count; i++) { NavGridCell cell = cells[i]; mergedVisionPathingFlags |= cell.visionPathingFlags; mergedRiverRegionFlags |= cell.riverRegionFlags; // these values are always read as a single byte, so no need to worry about signed comparisons if (cell.jungleQuadrantFlags > JungleQuadrantFlags.LastKnownFlag && newJungleQuadrantFlags.Contains(cell.jungleQuadrantFlags) == false) { newJungleQuadrantFlags.Add(cell.jungleQuadrantFlags); } if (cell.mainRegionFlags > MainRegionFlags.LastKnownFlag && newMainRegionFlags.Contains(cell.mainRegionFlags) == false) { newMainRegionFlags.Add(cell.mainRegionFlags); } if (cell.nearestLaneFlags > NearestLaneFlags.LastKnownFlag && newNearestLaneFlags.Contains(cell.nearestLaneFlags) == false) { newNearestLaneFlags.Add(cell.nearestLaneFlags); } if (cell.poiFlags > POIFlags.LastKnownFlag && newPOIFlags.Contains(cell.poiFlags) == false) { newPOIFlags.Add(cell.poiFlags); } if (cell.ringFlags > RingFlags.LastKnownFlag && newRingFlags.Contains(cell.ringFlags) == false) { newRingFlags.Add(cell.ringFlags); } if (cell.srxFlags > UnknownSRXFlags.LastKnownFlag && newSRXFlags.Contains(cell.srxFlags) == false) { newSRXFlags.Add(cell.srxFlags); } } newJungleQuadrantFlags.Sort(); newMainRegionFlags.Sort(); newNearestLaneFlags.Sort(); newPOIFlags.Sort(); newRingFlags.Sort(); newSRXFlags.Sort(); bool foundNewFlags = false; int newVisionPathingFlags = (int)(mergedVisionPathingFlags & ~VisionPathingFlags.KnownFlags); if (newVisionPathingFlags != 0) { foundNewFlags = true; Console.WriteLine("\nfound new VisionPathingFlags:"); for (int i = 0; i < 16; i++) { int newFlag = newVisionPathingFlags & (1 << i); if (newFlag != 0) { Console.WriteLine(" - " + newFlag); } } } int newRiverRegionFlags = (int)(mergedRiverRegionFlags & ~RiverRegionFlags.KnownFlags); if (newRiverRegionFlags != 0) { foundNewFlags = true; Console.WriteLine("\nfound new RiverRegionFlags:"); for (int i = 0; i < 16; i++) { int newFlag = newRiverRegionFlags & (1 << i); if (newFlag != 0) { Console.WriteLine(" - " + newFlag); } } } if (newJungleQuadrantFlags.Count > 0) { foundNewFlags = true; Console.WriteLine("\nfound new JungleQuadrantFlags:"); for (int i = 0; i < newJungleQuadrantFlags.Count; i++) { Console.WriteLine(" - " + (int)newJungleQuadrantFlags[i]); } } if (newMainRegionFlags.Count > 0) { foundNewFlags = true; Console.WriteLine("\nfound new MainRegionFlags:"); for (int i = 0; i < newMainRegionFlags.Count; i++) { Console.WriteLine(" - " + (int)newMainRegionFlags[i]); } } if (newNearestLaneFlags.Count > 0) { foundNewFlags = true; Console.WriteLine("\nfound new NearestLaneFlags:"); for (int i = 0; i < newNearestLaneFlags.Count; i++) { Console.WriteLine(" - " + (int)newNearestLaneFlags[i]); } } if (newPOIFlags.Count > 0) { foundNewFlags = true; Console.WriteLine("\nfound new POIFlags:"); for (int i = 0; i < newPOIFlags.Count; i++) { Console.WriteLine(" - " + (int)newPOIFlags[i]); } } if (newRingFlags.Count > 0) { foundNewFlags = true; Console.WriteLine("\nfound new RingFlags:"); for (int i = 0; i < newRingFlags.Count; i++) { Console.WriteLine(" - " + (int)newRingFlags[i]); } } if (newSRXFlags.Count > 0) { foundNewFlags = true; Console.WriteLine("\nfound new SRXFlags:"); for (int i = 0; i < newSRXFlags.Count; i++) { Console.WriteLine(" - " + (int)newSRXFlags[i]); } } if (foundNewFlags == true) { Console.WriteLine("\nreport any new flags found (except for on the very first Nexus Blitz layout)"); Program.Pause(); } else { Console.WriteLine("\nno unexpected flags found"); } }