public TrackObjectZones(byte[] data, TrackAI ai) { this.frontView = new TrackObjectZonesView(new[] { data[0], data[1], data[2], data[3] }, ai); this.rearView = new TrackObjectZonesView(new[] { data[5], data[6], data[7], data[8] }, ai); this.frontView.DataChanged += this.frontView_DataChanged; this.rearView.DataChanged += this.rearView_DataChanged; }
private static byte[][] GetGridFilledFromNearestTiles(sbyte[][] zones) { byte[][] newZones = new byte[zones.Length][]; for (int y = 0; y < zones.Length; y++) { newZones[y] = new byte[zones[y].Length]; for (int x = 0; x < zones[y].Length; x++) { if (zones[y][x] != -1) { newZones[y][x] = (byte)zones[y][x]; continue; } int depth = 1; sbyte zoneIndex = -1; while (zoneIndex == -1) { sbyte matchFound; matchFound = TrackObjectZonesView.GetTopRightNearestTile(zones, x, y, depth); if (matchFound > zoneIndex) { zoneIndex = matchFound; } matchFound = TrackObjectZonesView.GetBottomRightNearestTile(zones, x, y, depth); if (matchFound > zoneIndex) { zoneIndex = matchFound; } matchFound = TrackObjectZonesView.GetBottomLeftNearestTile(zones, x, y, depth); if (matchFound > zoneIndex) { zoneIndex = matchFound; } matchFound = TrackObjectZonesView.GetTopLeftNearestTile(zones, x, y, depth); if (matchFound > zoneIndex) { zoneIndex = matchFound; } depth++; } newZones[y][x] = (byte)zoneIndex; } } return(newZones); }
public byte[][] GetGrid() { byte[][] zones; if (this.ai.ElementCount == 0) { zones = new byte[GridSize][]; for (int y = 0; y < zones.Length; y++) { zones[y] = new byte[GridSize]; } return(zones); } sbyte[][] sZones = TrackObjectZonesView.InitZones(); this.FillGridFromAI(sZones); zones = TrackObjectZonesView.GetGridFilledFromNearestTiles(sZones); return(zones); }