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); } } }
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)); }
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++; }