unsigned char PreviewMinimap::CalcShading(const MapPoint pt, const std::vector<unsigned char>& altitudes) const { int altitude = altitudes[GetMMIdx(pt)]; MapPoint tmp = MakeMapPoint(GetNeighbour(Point<int>(pt), Direction::NORTHEAST), map_width, map_height); int A = altitudes[GetMMIdx(tmp)] - altitude; tmp = MakeMapPoint(GetNeighbour2(Point<int>(pt), 0), map_width, map_height); int B = altitudes[GetMMIdx(tmp)] - altitude; tmp = MakeMapPoint(GetNeighbour(Point<int>(pt), Direction::WEST), map_width, map_height); int C = altitudes[GetMMIdx(tmp)] - altitude; tmp = MakeMapPoint(GetNeighbour2(Point<int>(pt), 7), map_width, map_height); int D = altitudes[GetMMIdx(tmp)] - altitude; int shadingS2 = 64 + 9 * A - 3 * B - 6 * C - 9 * D; if(shadingS2 > 128) shadingS2 = 128; else if(shadingS2 < 0) shadingS2 = 0; return shadingS2; }
/** * Zeichnet die MapPreview */ void ctrlIngameMinimap::Draw_() { DrawMap(minimap); // Mittleren Punkt berechnen und dort hinscrollen Position middlePt = (gwv.GetLastPt() + gwv.GetFirstPt()) / 2; // Koordinaten korrigieren DrawPoint middle_corrected(MakeMapPoint(middlePt, minimap.GetMapSize())); // Scroll-Auswahl-Bild holen glArchivItem_Bitmap* image = LOADER.GetMapImageN(23); // Position (relativ zum angezeigten Anfang der Karte) berechnen DrawPoint pos = middle_corrected * DrawPoint(GetCurMapSize()) / DrawPoint(minimap.GetMapSize()) + DrawPoint(2, 2); // Scroll-Auswahl-Bild an den Rändern verkleinern, damit es nicht über die Karte "überlappt" DrawPoint srcOffset(0, 0); Extent drawSize(image->getWidth(), image->getHeight()); DrawPoint originOffset = pos - image->GetOrigin(); // überlappung am linken Rand? if(originOffset.x < 0) { srcOffset.x = -originOffset.x; drawSize.x += originOffset.x; pos.x = image->getNx(); } // überlappung am oberen Rand? if(originOffset.y < 0) { srcOffset.y = -originOffset.y; drawSize.y += originOffset.y; pos.y = image->getNy(); } // überlappung am rechten Rand? DrawPoint overDrawSize = pos - image->GetOrigin() + DrawPoint(image->GetSize()) - DrawPoint(GetCurMapSize()); if(overDrawSize.x >= 0) drawSize.x -= overDrawSize.x; // überlappung am unteren Rand? if(overDrawSize.y >= 0) drawSize.y -= overDrawSize.y; // Zeichnen image->DrawPart(Rect(GetMapDrawArea().getOrigin() + pos, drawSize), srcOffset); }