Ejemplo n.º 1
0
/**
 *
 *  @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;
}
Ejemplo n.º 2
0
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;
}