Exemplo n.º 1
0
void PaletteWindow::HandleEvents(sf::RenderWindow& window)
{
    // Handle all events.
    sf::Event event;
    while (window.pollEvent(event))
    {
        if (event.type == sf::Event::Closed)
        {
            // Ignore -- we only close if the main map editor closes.
        }
        else if (event.type == sf::Event::MouseButtonPressed)
        {
            // Selecting something, figure out which.
            bool swappedTerrain = false;
            for (int i = 0; i < (int)TerrainType::COUNT; i++)
            {
                if (terrainRectangles[(TerrainType)i].getGlobalBounds().contains(sf::Vector2f((float)event.mouseButton.x, (float)event.mouseButton.y)))
                {
                    std::cout << "Switching to terrain type " << GetTerrainName((TerrainType)i) << std::endl;
                    terrainRectangles[selectedTerrain].setOutlineThickness(0);
                    terrainRectangles[(TerrainType)i].setOutlineThickness(1.0f);

                    selectedTerrain = (TerrainType)i;
                    swappedTerrain = true;
                    break;
                }
            }

            if (!swappedTerrain)
            {
                // Determine if we instead swapped tools.
                for (int i = 0; i < (int)Tool::COUNT_TOOL; i++)
                {
                    if (toolRectangles[(Tool)i].getGlobalBounds().contains(sf::Vector2f((float)event.mouseButton.x, (float)event.mouseButton.y)))
                    {
                        std::cout << "Switching to tool " << GetToolName((Tool)i) << std::endl;

                        toolRectangles[selectedTool].setOutlineThickness(0);
                        toolRectangles[(Tool)i].setOutlineThickness(1.0f);

                        selectedTool = (Tool)i;
                        break;
                    }
                }
            }
        }
        else if (event.type == sf::Event::KeyPressed)
        {
            HandleKeyEvent(event);
        }
    }
}
Exemplo n.º 2
0
void PaletteWindow::LoadGraphics()
{
    if (!typeFont.loadFromFile("../fonts/DejaVuSans.ttf"))
    {
        std::cout << "Font loading unsuccessful!" << std::endl;
    }

    for (int i = 0; i < (int)TerrainType::COUNT; i++)
    {
        terrainRectangles[(TerrainType)i] = sf::RectangleShape(sf::Vector2f(terrainSize, terrainSize));
        terrainRectangles[(TerrainType)i].setFillColor(GetTerrainColor((TerrainType)i));
        terrainRectangles[(TerrainType)i].setPosition(sf::Vector2f(terrainXOffset, terrainOffset + i * (terrainSize + terrainOffset)));
        terrainRectangles[(TerrainType)i].setOutlineColor(sf::Color::Cyan);

        terrainText[(TerrainType)i] = sf::Text(GetTerrainName((TerrainType)i), typeFont, 18);
        terrainText[(TerrainType)i].setColor(GetTerrainColor((TerrainType)i));
        terrainText[(TerrainType)i].setPosition(sf::Vector2f(terrainXOffset + terrainSize + terrainOffset, terrainOffset + i * (terrainSize + terrainOffset)));
    }

    terrainRectangles[selectedTerrain].setOutlineThickness(1.0f);

    for (int i = 0; i < (int)Tool::COUNT_TOOL; i++)
    {
        toolRectangles[(Tool)i] = sf::RectangleShape(sf::Vector2f(toolSize, toolSize));
        toolRectangles[(Tool)i].setFillColor(sf::Color::Yellow);
        toolRectangles[(Tool)i].setPosition(sf::Vector2f(toolXOffset,
            toolOffset + i * (toolOffset + toolSize) + (int)TerrainType::COUNT * (terrainSize + terrainOffset)));
        toolRectangles[(Tool)i].setOutlineColor(sf::Color::Cyan);

        toolText[(Tool)i] = sf::Text(GetToolName((Tool)i), typeFont, 15);
        toolText[(Tool)i].setColor(sf::Color::Green);
        toolText[(Tool)i].setPosition(toolRectangles[(Tool)i].getPosition() + sf::Vector2f(toolSize + toolOffset, 0.0f));
    }

    toolRectangles[selectedTool].setOutlineThickness(1.0f);

    toolSizeText = sf::Text(GetToolSizeText(), typeFont, 16);
    toolSizeText.setColor(sf::Color::White);
    toolSizeText.setPosition(toolRectangles[(Tool)(Tool::COUNT_TOOL - 1)].getPosition() + sf::Vector2f(0.0f, toolSize + toolOffset));
}
Exemplo n.º 3
0
void DisplayRangeToTarget( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo )
{
	UINT16 usRange=0;
	CHAR16	zOutputString[512];
	UINT8	title = (UsingNewCTHSystem() == true ? DC_MSG__NCTH_GUN_RANGE_INFORMATION : DC_MSG__GUN_RANGE_INFORMATION);

	if( sTargetGridNo == NOWHERE || sTargetGridNo == 0 )
	{
		return;
	}

	{
		UINT8 ubLightLevel = LightTrueLevel(sTargetGridNo, gsInterfaceLevel);
		UINT8 ubBrightness = 100 - 100 * (ubLightLevel-SHADE_MAX)/(SHADE_MIN-SHADE_MAX); // percentage
		
		UINT8 ubTerrainType = NO_TERRAIN; 

		// anv: additional tile properties
		ADDITIONAL_TILE_PROPERTIES_VALUES zGivenTileProperties;
		memset(&zGivenTileProperties,0,sizeof(zGivenTileProperties));
		if(gGameExternalOptions.fAdditionalTileProperties)
		{
			zGivenTileProperties = GetAllAdditonalTilePropertiesForGrid(sTargetGridNo, gsInterfaceLevel);
		}
		else
		{
			ubTerrainType = GetTerrainTypeForGrid(sTargetGridNo, gsInterfaceLevel);
		}

		INT8 ubCover = - GetSightAdjustment(pSoldier, sTargetGridNo, gsInterfaceLevel);

		//display a string with cover value of current selected merc and brightness
		//swprintf( zOutputString, gzDisplayCoverText[DC_MSG__COVER_INFORMATION], ubCover, GetTerrainName(ubTerrainType), ubBrightness );

		//Display the msg
		//ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, zOutputString );

		if(gGameExternalOptions.fAdditionalTileProperties)
		{
			if(!gGameExternalOptions.fCoverTooltipDetailedTileProperties)
			{
				ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE,
					gzDisplayCoverText[DC_MSG__COVER_INFORMATION],
					ubCover, GetDetailedTerrainName(zGivenTileProperties), ubBrightness );
			}
			else
			{
				ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE,
					gzDisplayCoverText[DC_MSG__COVER_INFORMATION_WITH_DETAILED_CAMO],
					ubCover, ubBrightness );

				UINT8 ubApplicableProperties = 0;
				swprintf( zOutputString, L"" );
				if(zGivenTileProperties.bWoodCamoAffinity > 0)
				{
					swprintf( zOutputString + wcslen(zOutputString), gzDisplayCoverText[DC_TTI__WOOD]);
					swprintf( zOutputString + wcslen(zOutputString), L": %d/100", zGivenTileProperties.bWoodCamoAffinity);
					ubApplicableProperties++;
				}
				if(zGivenTileProperties.bDesertCamoAffinity > 0)
				{
					if(ubApplicableProperties)
						swprintf( zOutputString + wcslen(zOutputString), L", ");
					swprintf( zOutputString + wcslen(zOutputString), gzDisplayCoverText[DC_TTI__DESERT]);
					swprintf( zOutputString + wcslen(zOutputString), L": %d/100", zGivenTileProperties.bDesertCamoAffinity);
					ubApplicableProperties++;
				}
				if(zGivenTileProperties.bUrbanCamoAffinity > 0)
				{
					if(ubApplicableProperties)
						swprintf( zOutputString + wcslen(zOutputString), L", ");
					swprintf( zOutputString + wcslen(zOutputString), gzDisplayCoverText[DC_TTI__URBAN]);
					swprintf( zOutputString + wcslen(zOutputString), L": %d/100", zGivenTileProperties.bUrbanCamoAffinity);
					ubApplicableProperties++;
				}
				if(zGivenTileProperties.bSnowCamoAffinity > 0)
				{
					if(ubApplicableProperties)
						swprintf( zOutputString + wcslen(zOutputString), L", ");
					swprintf( zOutputString + wcslen(zOutputString), gzDisplayCoverText[DC_TTI__SNOW]);
					swprintf( zOutputString + wcslen(zOutputString), L": %d/100", zGivenTileProperties.bSnowCamoAffinity);
					ubApplicableProperties++;
				}
				if(zGivenTileProperties.bSoundModifier != 0)
				{
					if(ubApplicableProperties)
						swprintf( zOutputString + wcslen(zOutputString), L", ");
					swprintf( zOutputString + wcslen(zOutputString), gzDisplayCoverText[DC_TTI__DETAILED_SOUND]);
					if(zGivenTileProperties.bSoundModifier > 0)
						swprintf( zOutputString + wcslen(zOutputString), L": +%d", zGivenTileProperties.bSoundModifier);
					else
						swprintf( zOutputString + wcslen(zOutputString), L": %d", zGivenTileProperties.bSoundModifier);
					ubApplicableProperties++;
				}
				if(zGivenTileProperties.bStealthDifficultyModifer != 0)
				{
					if(ubApplicableProperties)
						swprintf( zOutputString + wcslen(zOutputString), L", ");
					swprintf( zOutputString + wcslen(zOutputString), gzDisplayCoverText[DC_TTI__DETAILED_STEALTH]);
					if(zGivenTileProperties.bStealthDifficultyModifer > 0)
						swprintf( zOutputString + wcslen(zOutputString), L": +%d/100", zGivenTileProperties.bStealthDifficultyModifer);
					else
						swprintf( zOutputString + wcslen(zOutputString), L": %d/100", zGivenTileProperties.bStealthDifficultyModifer);
					ubApplicableProperties++;
				}
				if(zGivenTileProperties.bTrapBonus != 0)
				{
					if(ubApplicableProperties)
						swprintf( zOutputString + wcslen(zOutputString), L", ");
					swprintf( zOutputString + wcslen(zOutputString), gzDisplayCoverText[DC_TTI__DETAILED_TRAP_LEVEL]);
					if(zGivenTileProperties.bTrapBonus > 0)
						swprintf( zOutputString + wcslen(zOutputString), L": +%d", zGivenTileProperties.bTrapBonus);
					else
						swprintf( zOutputString + wcslen(zOutputString), L": %d", zGivenTileProperties.bTrapBonus);
					ubApplicableProperties++;
				}
				if( wcslen(zOutputString) > 0 )
					ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, zOutputString );
			}
		}
		else
		{
			ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE,
				gzDisplayCoverText[DC_MSG__COVER_INFORMATION],
				ubCover, GetTerrainName(ubTerrainType), ubBrightness );
		}
	}

	//Get the range to the target location
	usRange = GetRangeInCellCoordsFromGridNoDiff( pSoldier->sGridNo, sTargetGridNo );

	//if the soldier has a weapon in hand, display gun range and chance to hit
	if( WeaponInHand( pSoldier ) )
	{
		UINT32 uiHitChance;
		//AXP 30.03.2007: Fix CtH calculation for first shot after changing aim level (roof/ground)
		INT8 bTempTargetLevel = pSoldier->bTargetLevel;
		pSoldier->bTargetLevel = (INT8)gsInterfaceLevel;
		uiHitChance = CalcChanceToHitGun( pSoldier, sTargetGridNo, (INT8)(pSoldier->aiData.bShownAimTime ), pSoldier->bAimShotLocation );
		// HEADROCK HAM B2.7: CTH approximation?
		if (gGameExternalOptions.fApproximateCTH)
		{	
			uiHitChance = ChanceToHitApproximation( pSoldier, uiHitChance );
		}
		pSoldier->bTargetLevel = bTempTargetLevel;

		// HEADROCK HAM 3.6: Calculate Gun Range using formula.
		// Flugente: we might be equipped with an underbarrel gun....
		OBJECTTYPE* pObjhand = pSoldier->GetUsedWeapon(&pSoldier->inv[HANDPOS]);
		UINT16 usGunRange = GunRange(pObjhand, pSoldier ); // SANDRO - added argument

		swprintf( zOutputString, gzDisplayCoverText[title], usRange / 10, usGunRange / 10, uiHitChance );
		//Display the msg
		ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, zOutputString );
	}
	else
	{
		swprintf( zOutputString, gzDisplayCoverText[title], usRange / 10, 0, 0 );

		//Display the msg
		ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, zOutputString );
	}

	//increment the display gun range counter ( just seeing how many times people use it )
	//gJa25SaveStruct.uiDisplayGunRangeCounter++;
}