/** * * @author OLiver */ unsigned IngameMinimap::CalcPixelColor(const void * param, const MapCoord x, const MapCoord y, const unsigned t) { const GameWorldViewer& gwv = *static_cast<const GameWorldViewer*>(param); unsigned color = 0; // Beobeachtender Spieler unsigned char viewing_player = GameClient::inst().GetPlayerID(); Visibility visibility = gwv.GetVisibility(x,y); if(visibility == VIS_INVISIBLE) { dos[y*map_width+x] = DO_INVISIBLE; // Man sieht nichts --> schwarz return 0xFF000000; } else { DrawnObject drawn_object = DO_INVALID; bool fow = (visibility == VIS_FOW); unsigned char owner; if(!fow) owner = gwv.GetNode(x,y).owner; else owner = gwv.GetNode(x,y).fow[GameClient::inst().GetPlayerID()].owner; // Baum an dieser Stelle? if((!fow && gwv.GetNO(x,y)->GetGOT() == GOT_TREE) || (fow && gwv.GetFOWObject(x,y,viewing_player)->GetType() == FOW_TREE)) { color = VaryBrightness(TREE_COLOR,VARY_TREE_COLOR); drawn_object = DO_TERRAIN; // Ggf. mit Spielerfarbe if(owner) { drawn_object = DO_PLAYER; if(territory) color = CombineWithPlayerColor(color,owner); } } // Granit an dieser Stelle? else if((!fow && gwv.GetNO(x,y)->GetGOT() == GOT_GRANITE) || (fow && gwv.GetFOWObject(x,y,viewing_player)->GetType() == FOW_GRANITE)) { color = VaryBrightness(GRANITE_COLOR,VARY_GRANITE_COLOR); drawn_object = DO_TERRAIN; // Ggf. mit Spielerfarbe if(owner) { drawn_object = DO_PLAYER; if(territory) color = CombineWithPlayerColor(color,owner); } } // Ansonsten die jeweilige Terrainfarbe nehmen else { // Ggf. Spielerfarbe mit einberechnen, falls das von einem Spieler ein Territorium ist if(owner) { // Gebäude? GO_Type got = gwv.GetNO(x,y)->GetGOT(); FOW_Type fot = gwv.GetFOWObject(x,y,viewing_player)->GetType(); if(((!fow && (got == GOT_NOB_USUAL || got == GOT_NOB_MILITARY || got == GOT_NOB_STOREHOUSE || got == GOT_NOB_USUAL || got == GOT_NOB_HQ || got == GOT_BUILDINGSITE)) || (fow && (fot == FOW_BUILDING || fot == FOW_BUILDINGSITE)))) drawn_object = DO_BUILDING; /// Straßen? else if(IsRoad(x,y,visibility)) drawn_object = DO_ROAD; // ansonsten normales Territorium? else drawn_object = DO_PLAYER; if(drawn_object == DO_BUILDING && houses) color = BUILDING_COLOR; /// Straßen? else if(drawn_object == DO_ROAD && roads) color = ROAD_COLOR; // ansonsten normales Territorium? else if(territory) // Normales Terrain und Spielerfarbe berechnen color = CombineWithPlayerColor(CalcTerrainColor(x,y,t),owner); else // Normales Terrain berechnen color = CalcTerrainColor(x,y,t); } else { // Normales Terrain berechnen color = CalcTerrainColor(x,y,t); drawn_object = DO_TERRAIN; } } // Bei FOW die Farben abdunkeln if(fow) color = MakeColor(0xFF,GetRed(color)/2,GetGreen(color)/2,GetBlue(color)/2); dos[y*map_width+x] = drawn_object; } return color; }
unsigned IngameMinimap::CalcPixelColor(const MapPoint pt, const unsigned t) { unsigned color = 0; Visibility visibility = gwv.GetVisibility(pt); if(visibility == VIS_INVISIBLE) { dos[GetMMIdx(pt)] = DO_INVISIBLE; // Man sieht nichts --> schwarz return 0xFF000000; } else { DrawnObject drawn_object = DO_INVALID; const bool fow = (visibility == VIS_FOW); unsigned char owner; NodalObjectType noType = NOP_NOTHING; FOW_Type fot = FOW_NOTHING; if(!fow) { const MapNode& node = gwv.GetNode(pt); owner = node.owner; if(node.obj) noType = node.obj->GetType(); } else { const FoWNode& node = gwv.GetYoungestFOWNode(pt); owner = node.owner; if(node.object) fot = node.object->GetType(); } // Baum an dieser Stelle? if((!fow && noType == NOP_TREE) || (fow && fot == FOW_TREE)) //-V807 { color = VaryBrightness(TREE_COLOR, VARY_TREE_COLOR); drawn_object = DO_TERRAIN; // Ggf. mit Spielerfarbe if(owner) { drawn_object = DO_PLAYER; if(territory) color = CombineWithPlayerColor(color, owner); } } // Granit an dieser Stelle? else if((!fow && noType == NOP_GRANITE) || (fow && fot == FOW_GRANITE)) { color = VaryBrightness(GRANITE_COLOR, VARY_GRANITE_COLOR); drawn_object = DO_TERRAIN; // Ggf. mit Spielerfarbe if(owner) { drawn_object = DO_PLAYER; if(territory) color = CombineWithPlayerColor(color, owner); } } // Ansonsten die jeweilige Terrainfarbe nehmen else { // Ggf. Spielerfarbe mit einberechnen, falls das von einem Spieler ein Territorium ist if(owner) { // Building? if(((!fow && (noType == NOP_BUILDING || noType == NOP_BUILDINGSITE)) || (fow && (fot == FOW_BUILDING || fot == FOW_BUILDINGSITE)))) drawn_object = DO_BUILDING; /// Roads? else if(IsRoad(pt, visibility)) drawn_object = DO_ROAD; // ansonsten normales Territorium? else drawn_object = DO_PLAYER; if(drawn_object == DO_BUILDING && houses) color = BUILDING_COLOR; /// Roads? else if(drawn_object == DO_ROAD && roads) color = ROAD_COLOR; // ansonsten normales Territorium? else if(territory) // Normales Terrain und Spielerfarbe berechnen color = CombineWithPlayerColor(CalcTerrainColor(pt, t), owner); else // Normales Terrain berechnen color = CalcTerrainColor(pt, t); } else { // Normales Terrain berechnen color = CalcTerrainColor(pt, t); drawn_object = DO_TERRAIN; } } // Bei FOW die Farben abdunkeln if(fow) color = MakeColor(0xFF, GetRed(color) / 2, GetGreen(color) / 2, GetBlue(color) / 2); dos[GetMMIdx(pt)] = drawn_object; } return color; }