void FERealPlayer::Draw() { D_Color bodyColor = m_Color; if(HasFlags(EFEFlag_Selected)) bodyColor = bodyColor / 1.5f; Vec2 playerPos(m_vPos.x - m_fPlayerRadius, m_vPos.y + m_fPlayerRadius); Vec2 playerScreenPos = CoordinateInfo::WorldToScreen(playerPos); g_poSROU->DrawFillRectangle( (f32)playerScreenPos.x, (f32)playerScreenPos.y, 2 * m_fPlayerRadius * CoordinateInfo::GetPixelPerMeter(), 2 * m_fPlayerRadius * CoordinateInfo::GetPixelPerMeter(), bodyColor, D_Color(255, 255, 255)); Vec2 indicatorPos(m_vPos.x - m_fPlayerRadius, m_vPos.y + m_fPlayerRadius); Vec2 indicatorScreenPos = CoordinateInfo::WorldToScreen(indicatorPos); Char indicator[4]; if(m_bIsGK) strcpy(indicator, "G"); else _itoa(m_Team == kHOME_TEAM ? (m_id) : (m_id - FESimulatedPlayer::sHomePlayerCount), indicator, 10); g_poSROU->DrawStringEx( indicatorScreenPos.x, indicatorScreenPos.y, 2 * m_fPlayerRadius * CoordinateInfo::GetPixelPerMeter(), 2 * m_fPlayerRadius * CoordinateInfo::GetPixelPerMeter(), kPLAYER_NUMSIZE * CoordinateInfo::GetPixelPerMeter(), indicator, NULL, D_Color(0,0,0)); }
int getRank(HunterView h, int player, int round) { int rank = 0; if (round == 0) { if(player == PLAYER_LORD_GODALMING) {rank = -1;} else if(player == PLAYER_DR_SEWARD) {rank = 0;} else if(player == PLAYER_VAN_HELSING) {rank = 1;} else if(player == PLAYER_MINA_HARKER) {rank = 2;} else printf("I am noone..\n"); } else if (round == 1 && player == PLAYER_LORD_GODALMING) { rank = 3; } else { int turn = giveMeTurnNum(h); IntList l = newIntList(); int foundDrac = FALSE; LocationID dracTrail[TRAIL_SIZE]; giveMeTheTrail(h,PLAYER_DRACULA,dracTrail); int currLoc; if (player == PLAYER_LORD_GODALMING) currLoc = whereIs(h,PLAYER_MINA_HARKER); else currLoc = whereIs(h,player-1); int j; for(j=0;j<TRAIL_SIZE;j++) { if (currLoc == dracTrail[j]) { foundDrac = TRUE; break; } } int score; int ignore1; char ignore2; int playertmp = 2; int insertPlayer; int i; for (i=1;i<6;i++) { if (i != player+1) { //skips drac //printf("scanning message %s\n",messages[turn-i]); //printf("inserting into list player: %d score: %d\n",(player+5-playertmp)%5,tmp); if (playertmp==4 && foundDrac) score = j; else sscanf(messages[turn-i],"%d %c %d",&ignore1,&ignore2,&score); insertPlayer = (player+4-playertmp)%4; IntListInsertInOrder(l,score,insertPlayer); playertmp++; } } //showList(l); current_leader = getFirstPlayer(l); rank = playerPos(l,player); } return rank; }
void MiniMap::showBookMiniMap(int showLevel) { // First Load Minimap TC & DATA if needed if(m_levels[showLevel].m_texContainer == NULL) { getData(showLevel); } if(m_levels[showLevel].m_texContainer) { GRenderer->SetRenderState(Renderer::DepthTest, false); float zoom = 900.f; Vec2f start = Vec2f_ZERO; Vec2f playerPos(0.f, 0.f); if(showLevel == ARX_LEVELS_GetRealNum(m_currentLevel)) { playerPos = computePlayerPos(zoom, showLevel); start = Vec2f(490.f, 220.f) - playerPos; playerPos += start; } drawBackground(showLevel, Rect(360, 85, 555, 355), start.x, start.y, zoom, 20.f); GRenderer->GetTextureStage(0)->setWrapMode(TextureStage::WrapRepeat); if(showLevel == ARX_LEVELS_GetRealNum(m_currentLevel)) { drawPlayer(6.f, playerPos); drawDetectedEntities(showLevel, start, zoom); } } }
void FEPlayer::DrawWithColor(const D_Color& clr) { D_Color bodyColor = clr; Vec3 realPos = m_vPos; if(CoordinateInfo::sAwayView) realPos = -realPos; Vec2 playerPos(realPos.x - m_fPlayerRadius, realPos.y + m_fPlayerRadius); Vec2 playerScreenPos = CoordinateInfo::WorldToScreen(playerPos); g_poSROU->DrawFillRectangle( (f32)playerScreenPos.x, (f32)playerScreenPos.y, 2 * m_fPlayerRadius * CoordinateInfo::GetPixelPerMeter(), 2 * m_fPlayerRadius * CoordinateInfo::GetPixelPerMeter(), bodyColor, D_Color(255, 255, 255)); Vec2 indicatorPos(realPos.x - m_fPlayerRadius, realPos.y + m_fPlayerRadius); Vec2 indicatorScreenPos = CoordinateInfo::WorldToScreen(indicatorPos); Char indicator[4]; _itoa(m_id, indicator, 10); g_poSROU->DrawStringEx( indicatorScreenPos.x, indicatorScreenPos.y, 2 * m_fPlayerRadius * CoordinateInfo::GetPixelPerMeter(), 2 * m_fPlayerRadius * CoordinateInfo::GetPixelPerMeter(), kPLAYER_NUMSIZE * CoordinateInfo::GetPixelPerMeter(), indicator, NULL, D_Color(0,0,0)); }
void Sun::finalAttack() { Vector2 playerPos(world_->getPlayer().x(), world_->getPlayer().y()); Vector2 dir = playerPos - position_; dir.Normalize(); dir *= 760.0f; velocity_ = dir; phase_time_ = 6000000; }
void DrawMinimap() { D3DCOLOR MapColor = D3DCOLOR_ARGB(255, 0, 0, 0); D3DCOLOR TrashColor = D3DCOLOR_ARGB(255, 255, 0, 0); D3DCOLOR PlayerColor = D3DCOLOR_ARGB(255, 0, 0, 255); RECT mapRect; mapRect.left=0; mapRect.right=100; mapRect.top=0; mapRect.bottom=100; D3DXVECTOR3 mapPos(25, 25, 0); spriteMap->Begin(NULL); spriteMap->Draw(texMap, &mapRect, NULL, &mapPos, MapColor); spriteMap->End(); mapRect.left=0; mapRect.right=10; mapRect.top=0; mapRect.bottom=10; D3DXVECTOR3 playerPos(TheCamera.GetPosition().x / 4 + 75,TheCamera.GetPosition().z / 4 + 75, 0 ); D3DXVECTOR3 pcenter(5, 5, 0); spritePlayer->Begin(NULL); spritePlayer->Draw(texMap, &mapRect, &pcenter, &playerPos, PlayerColor); spritePlayer->End(); mapRect.left=0; mapRect.right=5; mapRect.top=0; mapRect.bottom=5; D3DXVECTOR3 trashPos; D3DXVECTOR3 tcenter(2.5, 2.5, 0); for(int i = 0; i < 10; i++) { if(BoolTrash[i]) { trashPos.x = TrashPositions[i].x / 4 + 75; trashPos.y = TrashPositions[i].z / 4 + 75; trashPos.z = 0; spriteTrash[i]->Begin(NULL); spriteTrash[i]->Draw(texMap, &mapRect, &tcenter, &trashPos, TrashColor); spriteTrash[i]->End(); } } }
void ObjectStaticWeaponCloseState::onUpdate() { ObjectState::onUpdate(); if (currentFramecount >= frameDelay) { D3DXVECTOR2 playerPos(pData->playerX, pData->playerY); D3DXVECTOR2 selfPos(pData->x + 16, pData->y + 16); D3DXVECTOR2 directVector = playerPos - selfPos; float length1 = D3DXVec2Length(&directVector); float length = length1; if (UIComponents::getInstance()-> getNumberPlayer() == 2) { playerPos = D3DXVECTOR2(pData->player2X, pData->player2Y); directVector = playerPos - selfPos; float length2 = D3DXVec2Length(&directVector); length = length1 > length2 ? length1 : length2; } if (length <= OBJECT_STATIC_WEAPON_RANGE_OPEN) { transition(new ObjectStaticWeaponPreparingState(this->pData, true)); return; } /*if (((ObjectStaticWeaponData*)pData)->isUp) { if (this->pData->playerX - this->pData->x >= -OBJECT_STATIC_WEAPON_RANGE_OPEN) { this->pData->pState = new ObjectStaticWeaponPreparingState(this->pData, true); } } else { if (this->pData->playerX - this->pData->x >= -OBJECT_STATIC_WEAPON_RANGE_OPEN) { this->pData->pState = new ObjectStaticWeaponPreparingState(this->pData, true); } }*/ } else { currentFramecount++; } }
void MiniMap::showPlayerMiniMap(int showLevel) { const float miniMapZoom = 300.f; // zoom of the minimap const Rect miniMapRect(390, 135, 590, 295); // minimap rect on a 640*480 screen const float playerSize = 4.f; // red arrow size const float decalY = -150; const float decalX = +40; // First Load Minimap TC & DATA if needed if(m_levels[showLevel].m_texContainer == NULL) { getData(showLevel); } if(m_levels[showLevel].m_texContainer) { GRenderer->SetRenderState(Renderer::DepthTest, false); float startX = 0.f; float startY = 0.f; Vec2f playerPos(0.f, 0.f); if(showLevel == ARX_LEVELS_GetRealNum(m_currentLevel)) { playerPos = computePlayerPos(miniMapZoom, showLevel); startX = 490.f - playerPos.x; startY = 220.f - playerPos.y; playerPos.x += startX; playerPos.y += startY; } // Draw the background drawBackground(showLevel, Rect(390, 135, 590, 295), startX, startY, miniMapZoom, 20.f, decalX, decalY, true, 0.5f); GRenderer->GetTextureStage(0)->setWrapMode(TextureStage::WrapRepeat); // Draw the player (red arrow) if(showLevel == ARX_LEVELS_GetRealNum(m_currentLevel)) { drawPlayer(playerSize, playerPos.x + decalX, playerPos.y + decalY, true); drawDetectedEntities(showLevel, startX + decalX, startY + decalY, miniMapZoom); } } }
/** \fn bool QuizParticipant::checkCollision( Vect3D objPos, int radius ) \brief Sphere collision detection between a player and an object \param objPos The position of the object \param radius The size of the object \return Whether the player collided with the object When a player is within the radius of the object, detect as collided. */ bool QuizParticipant::checkCollision( Vect3D objPos, int radius ) { //get this player's position if ( int rc = aw_avatar_location (NULL, sessionID, NULL) ) { return false; } Vect3D playerPos( (float)aw_int(AW_AVATAR_X), (float)aw_int(AW_AVATAR_Y), (float)aw_int(AW_AVATAR_Z) ); //check collision with the object pos float dist = Vect3D::Distance( playerPos, objPos ); if ( dist <= radius ) { return true; } return false; }
void MiniMap::showPlayerMiniMap(int showLevel) { ARX_PROFILE_FUNC(); const float miniMapZoom = 300.f; // zoom of the minimap const Rect miniMapRect(390, 135, 590, 295); // minimap rect on a 640*480 screen const float playerSize = 4.f; // red arrow size static const Vec2f decal = Vec2f(40.f, -150.f); // First Load Minimap TC & DATA if needed if(m_levels[showLevel].m_texContainer == NULL) { getData(showLevel); } if(m_levels[showLevel].m_texContainer) { GRenderer->SetRenderState(Renderer::DepthTest, false); Vec2f start = Vec2f_ZERO; Vec2f playerPos(0.f, 0.f); if(showLevel == ARX_LEVELS_GetRealNum(m_currentLevel)) { playerPos = computePlayerPos(miniMapZoom, showLevel); start = Vec2f(490.f, 220.f) - playerPos; playerPos += start; } // Draw the background drawBackground(showLevel, Rect(390, 135, 590, 295), start, miniMapZoom, 20.f, decal, true, 0.5f); GRenderer->GetTextureStage(0)->setWrapMode(TextureStage::WrapRepeat); // Draw the player (red arrow) if(showLevel == ARX_LEVELS_GetRealNum(m_currentLevel)) { drawPlayer(playerSize, playerPos + decal, true); drawDetectedEntities(showLevel, start + decal, miniMapZoom); } } }
//-------------------------------------------------------------------------------------------------- // Name: DebugOnInputEvent // Desc: Called when input events happen in debug builds //-------------------------------------------------------------------------------------------------- void CExplosionGameEffect::DebugOnInputEvent(int keyId) { // Initialise static version of effect static CExplosionGameEffect explosionGameEffect; if(!explosionGameEffect.IsFlagSet(GAME_EFFECT_INITIALISED)) { explosionGameEffect.Initialise(); explosionGameEffect.SetFlag(GAME_EFFECT_DEBUG_EFFECT,true); explosionGameEffect.SetFlag(GAME_EFFECT_AUTO_RELEASE,true); explosionGameEffect.SetActive(true); } // Get player pos Vec3 playerDir(0.0f,0.0f,0.0f); Vec3 playerPos(0.0f,0.0f,0.0f); EntityId localClientId = gEnv->pGame->GetIGameFramework()->GetClientActorId(); if(localClientId != 0) { IEntity* playerEntity = g_pGame->GetIGameFramework()->GetIActorSystem()->GetActor(localClientId)->GetEntity(); playerDir = playerEntity->GetForwardDir(); playerPos = playerEntity->GetPos(); } // Distance from player controlled by keyboard static float distFromPlayer = 0.0f; static float distStep = 1.0f; switch(keyId) { case eKI_NP_Multiply: { distFromPlayer += distStep; break; } case eKI_NP_Divide: { distFromPlayer -= distStep; break; } case eKI_NP_0: { distFromPlayer = 0.0f; break; } case eKI_NP_1: { // Frag SExplosionContainer explosionContainer; ExplosionInfo& explosionInfo = explosionContainer.m_explosionInfo; explosionInfo.pParticleEffect = gEnv->pParticleManager->FindEffect("Crysis2_weapon_explosives.frag.concrete"); explosionInfo.pos = playerPos + (playerDir * distFromPlayer); explosionInfo.dir.Set(0.0f,-1.0f,0.0f); explosionInfo.effect_scale = 1.0f; explosionInfo.pressure = 1000.0f; explosionInfo.maxblurdistance = 10.0; explosionInfo.radius = 15.0; explosionInfo.blindAmount = 0.0f; explosionInfo.flashbangScale = 8.0f; explosionInfo.damage = 5.0f; explosionInfo.hole_size = 0.0f; explosionGameEffect.Explode(explosionContainer); break; } case eKI_NP_2: { // Flashbang SExplosionContainer explosionContainer; ExplosionInfo& explosionInfo = explosionContainer.m_explosionInfo; explosionInfo.pParticleEffect = gEnv->pParticleManager->FindEffect("Crysis2_weapon_explosives.grenades.flash_explosion"); explosionInfo.pos = playerPos + (playerDir * distFromPlayer); explosionInfo.dir.Set(0.0f,-1.0f,0.0f); explosionInfo.effect_scale = 1.0f; explosionInfo.pressure = 1000.0f; explosionInfo.maxblurdistance = 10.0; explosionInfo.radius = 15.0; explosionInfo.blindAmount = 0.66f; explosionInfo.flashbangScale = 8.0f; explosionInfo.damage = 5.0f; explosionInfo.hole_size = 0.0f; explosionGameEffect.Explode(explosionContainer); break; } case eKI_NP_3: { // L-Tag SExplosionContainer explosionContainer; ExplosionInfo& explosionInfo = explosionContainer.m_explosionInfo; explosionInfo.pParticleEffect = gEnv->pParticleManager->FindEffect("Crysis2_weapon_fx.l-tag.rico_explosion"); explosionInfo.pos = playerPos + (playerDir * distFromPlayer); explosionInfo.dir.Set(0.0f,-1.0f,0.0f); explosionInfo.effect_scale = 1.0f; explosionInfo.pressure = 1000.0f; explosionInfo.maxblurdistance = 10.0; explosionInfo.radius = 15.0; explosionInfo.blindAmount = 0.0f; explosionInfo.flashbangScale = 8.0f; explosionInfo.damage = 5.0f; explosionInfo.hole_size = 0.0f; explosionGameEffect.Explode(explosionContainer); break; } case GAME_FX_INPUT_ReleaseDebugEffect: { explosionGameEffect.Release(); break; } } }//-------------------------------------------------------------------------------------------------
void MiniMap::showBookEntireMap(int showLevel) { // First Load Minimap TC & DATA if needed if(m_levels[showLevel].m_texContainer == NULL) { getData(showLevel); } if(!m_levels[showLevel].m_texContainer) { return; } GRenderer->SetRenderState(Renderer::DepthTest, false); float zoom = 250.f; float startX = 140.f; float startY = 120.f; Vec2f playerPos(0.f, 0.f); if(showLevel == ARX_LEVELS_GetRealNum(m_currentLevel)) { playerPos = computePlayerPos(zoom, showLevel); playerPos.x += startX; playerPos.y += startY; } drawBackground(showLevel, Rect(0, 0, 345, 290), startX, startY, zoom); GRenderer->GetTextureStage(0)->setWrapMode(TextureStage::WrapRepeat); if(showLevel == ARX_LEVELS_GetRealNum(m_currentLevel)) { drawPlayer(3.f, playerPos.x, playerPos.y); drawDetectedEntities(showLevel, startX, startY, zoom); } TexturedVertex verts[4]; for(int k = 0; k < 4; k++) { verts[k].color = 0xFFFFFFFF; verts[k].rhw = 1; verts[k].p.z = 0.00001f; } float caseX = zoom / ((float)MINIMAP_MAX_X); float caseY = zoom / ((float)MINIMAP_MAX_Z); float ratio = 1.f; for(size_t i = 0; i < m_mapMarkers.size(); i++) { if(m_mapMarkers[i].m_lvl != showLevel + 1) { continue; } float pos_x = m_mapMarkers[i].m_x * 8 * ratio * m_activeBkg->Xmul * caseX + startX; float pos_y = m_mapMarkers[i].m_y * 8 * ratio * m_activeBkg->Zmul * caseY + startY; float size = 5.f * ratio; verts[0].color = 0xFFFF0000; verts[1].color = 0xFFFF0000; verts[2].color = 0xFFFF0000; verts[3].color = 0xFFFF0000; verts[0].p.x = (pos_x - size) * Xratio; verts[0].p.y = (pos_y - size) * Yratio; verts[1].p.x = (pos_x + size) * Xratio; verts[1].p.y = (pos_y - size) * Yratio; verts[2].p.x = (pos_x + size) * Xratio; verts[2].p.y = (pos_y + size) * Yratio; verts[3].p.x = (pos_x - size) * Xratio; verts[3].p.y = (pos_y + size) * Yratio; verts[0].uv = Vec2f::ZERO; verts[1].uv = Vec2f::X_AXIS; verts[2].uv = Vec2f::ONE; verts[3].uv = Vec2f::Y_AXIS; if(MouseInRect(verts[0].p.x, verts[0].p.y, verts[2].p.x, verts[2].p.y)) { if(!m_mapMarkers[i].m_text.empty()) { Rect bRect(140, 290, 140 + 205, 358); Rect::Num left = checked_range_cast<Rect::Num>((bRect.left) * Xratio); Rect::Num right = checked_range_cast<Rect::Num>((bRect.right) * Xratio); Rect::Num top = checked_range_cast<Rect::Num>((bRect.top) * Yratio); Rect::Num bottom = checked_range_cast<Rect::Num>((bRect.bottom) * Yratio); Rect rRect = Rect(left, top, right, bottom); long lLengthDraw = ARX_UNICODE_ForceFormattingInRect(hFontInGameNote, m_mapMarkers[i].m_text, rRect); DrawBookTextInRect(hFontInGameNote, float(bRect.left), float(bRect.top), float(bRect.right), m_mapMarkers[i].m_text.substr(0, lLengthDraw), Color::none); } } if(m_mapMarkerTexCont == NULL) { m_mapMarkerTexCont = TextureContainer::Load("graph/interface/icons/mapmarker"); } GRenderer->SetTexture(0, m_mapMarkerTexCont); EERIEDRAWPRIM(Renderer::TriangleFan, verts, 4); } }
TEST(ChunkTests, WorldToChunkCoordsTest1) { glm::vec3 playerPos(1.0, 1.0, -1.0); EXPECT_EQ(glm::ivec3(0, 0, 0), Chunk::worldToChunkSpace(playerPos)); }
void EnemyList::checkCollisions(PlayerProjectiles& playerProjectiles) { for (unsigned int i = 0; i < enemyList.size(); i++) { Point enemy(enemyList[i].getCompX(), enemyList[i].getCompY()); for (unsigned int j = 0; j < playerProjectiles.getSize(); j++) { Bullet* b = playerProjectiles.getBullet(j); Point bulPoint(b->getX(), b->getY()); if (enemyList[i].enemyType == 0 && Collision().checkCollision(playerProjectiles.getVector()[j].box, enemy, 0.97)) { b->destroy(); enemyList[i].enemyHP--; Explosion explosion; if (enemyList[i].enemyHP <= 0) { enemyList[i].destroyed = true; if (enemyList[i].enemyType == 0) { explosion = Explosion(enemyList[i].compX, enemyList[i].compY, 1, explosionTextureID); } else { explosion = Explosion(enemyList[i].compX, enemyList[i].compY, 2, explosionTextureID); } explosionList.addExplosion(explosion); } } else if (enemyList[i].enemyType == 1 && Collision().isIntersect(enemyList[i].box, enemy, b->box, bulPoint, 28, minTransDist)) { b->destroy(); enemyList[i].enemyHP--; if (enemyList[i].enemyHP <= 0) { enemyList[i].destroyed = true; Explosion explosion(enemyList[i].compX, enemyList[i].compY, 1, explosionTextureID); explosionList.addExplosion(explosion); } } } for (unsigned int j = 0; j < enemyList.size(); j++) { Point p2(enemyList[j].getCompX(), enemyList[j].getCompY()); if (i != j && Collision().isIntersect(enemyList[i].box, enemy, enemyList[j].box, p2, 28, minTransDist)) { if (enemyList[i].enemyType == 1) { enemyList[j].setMinTransDist(minTransDist.pointX, minTransDist.pointY); } else if (enemyList[j].enemyType == 1) { enemyList[i].setMinTransDist(minTransDist.pointX, minTransDist.pointY); } else { enemyList[i].setMinTransDist(minTransDist.pointX * 0.5, minTransDist.pointY * 0.5); enemyList[j].setMinTransDist(-minTransDist.pointX * 0.5, -minTransDist.pointY * 0.5); } } } Point playerPos(playerShipX, playerShipY); //std::cout << playerPos.pointX << "\t" << playerPos.pointY << "\t" << enemy.pointX << "\t" << enemy.pointY << std::endl; BoundingQuad lineBox(playerPos, playerPos, enemy, enemy); bool result = true; for (unsigned int j = 0; j < asteroidMapListRef->asteroidField.size(); j++) { Point p2(asteroidMapListRef->asteroidField[j].getRoidX(), asteroidMapListRef->asteroidField[j].getRoidY()); if (Collision().isIntersect(enemyList[i].box, enemy, asteroidMapListRef->asteroidField[j].box, p2, 28, minTransDist)) { enemyList[i].setMinTransDist(minTransDist.pointX * 2, minTransDist.pointY * 2); enemyList[i].turnAround(); } if (!Collision().hasLineOfSight(enemy, playerPos, lineBox, asteroidMapListRef->asteroidField[j].box, p2, 28)) { result = false; } } enemyList[i].setLOS(result); } for (unsigned int i = 0; i < playerProjectiles.getSize(); i++) { Bullet* b = playerProjectiles.getBullet(i); Point p1(b->getX(), b->getY()); for (unsigned int j = 0; j < asteroidMapListRef->asteroidField.size(); j++) { Point p2(asteroidMapListRef->asteroidField[j].getRoidX(), asteroidMapListRef->asteroidField[j].getRoidY()); if (Collision().isIntersect(b->box, p1, asteroidMapListRef->asteroidField[j].box, p2, 40, minTransDist)) { Explosion explosion(b->box.pointsN[2].pointX, b->box.pointsN[2].pointY, 0.3, explosionTextureID); explosionList.addExplosion(explosion); b->destroyed = true; } } } }
void MiniMap::showBookEntireMap(int showLevel) { // First Load Minimap TC & DATA if needed if(m_levels[showLevel].m_texContainer == NULL) { getData(showLevel); } if(!m_levels[showLevel].m_texContainer) { return; } GRenderer->SetRenderState(Renderer::DepthTest, false); float zoom = 250.f; Vec2f start(140.f, 120.f); Vec2f playerPos(0.f, 0.f); if(showLevel == ARX_LEVELS_GetRealNum(m_currentLevel)) { playerPos = computePlayerPos(zoom, showLevel); playerPos += start; } drawBackground(showLevel, Rect(0, 0, 345, 290), start, zoom); GRenderer->GetTextureStage(0)->setWrapMode(TextureStage::WrapRepeat); if(showLevel == ARX_LEVELS_GetRealNum(m_currentLevel)) { drawPlayer(3.f, playerPos, false); drawDetectedEntities(showLevel, start, zoom); } TexturedVertex verts[4]; for(int k = 0; k < 4; k++) { verts[k].color = Color(255, 255, 255, 255).toRGBA(); verts[k].rhw = 1; verts[k].p.z = 0.00001f; } Vec2f casePos(zoom / MINIMAP_MAX_X, zoom / MINIMAP_MAX_Z); float ratio = 1.f; for(size_t i = 0; i < m_mapMarkers.size(); i++) { if(m_mapMarkers[i].m_lvl != showLevel + 1) { continue; } Vec2f pos; pos.x = m_mapMarkers[i].m_pos.x * 8 * ratio * m_activeBkg->Xmul * casePos.x + start.x; pos.y = m_mapMarkers[i].m_pos.y * 8 * ratio * m_activeBkg->Zmul * casePos.y + start.y; float size = 5.f * ratio; verts[0].color = Color(255, 0, 0, 255).toRGBA(); verts[1].color = Color(255, 0, 0, 255).toRGBA(); verts[2].color = Color(255, 0, 0, 255).toRGBA(); verts[3].color = Color(255, 0, 0, 255).toRGBA(); verts[0].p.x = (pos.x - size) * g_sizeRatio.x; verts[0].p.y = (pos.y - size) * g_sizeRatio.y; verts[1].p.x = (pos.x + size) * g_sizeRatio.x; verts[1].p.y = (pos.y - size) * g_sizeRatio.y; verts[2].p.x = (pos.x + size) * g_sizeRatio.x; verts[2].p.y = (pos.y + size) * g_sizeRatio.y; verts[3].p.x = (pos.x - size) * g_sizeRatio.x; verts[3].p.y = (pos.y + size) * g_sizeRatio.y; verts[0].uv = Vec2f_ZERO; verts[1].uv = Vec2f_X_AXIS; verts[2].uv = Vec2f_ONE; verts[3].uv = Vec2f_Y_AXIS; const Rect mouseTestRect( verts[0].p.x, verts[0].p.y, verts[2].p.x, verts[2].p.y ); if(mouseTestRect.contains(Vec2i(DANAEMouse))) { if(!m_mapMarkers[i].m_text.empty()) { Rect bRect(140, 295, 140 + 205, 358); Rect::Num left = checked_range_cast<Rect::Num>((bRect.left) * g_sizeRatio.x); Rect::Num right = checked_range_cast<Rect::Num>((bRect.right) * g_sizeRatio.x); Rect::Num top = checked_range_cast<Rect::Num>((bRect.top) * g_sizeRatio.y); Rect::Num bottom = checked_range_cast<Rect::Num>((bRect.bottom) * g_sizeRatio.y); Rect rRect = Rect(left, top, right, bottom); long lLengthDraw = ARX_UNICODE_ForceFormattingInRect(hFontInGameNote, m_mapMarkers[i].m_text, rRect); ARX_UNICODE_DrawTextInRect(hFontInGameNote, (BOOKDEC + Vec2f(bRect.topLeft())) * g_sizeRatio, (BOOKDEC.x + float(bRect.right)) * g_sizeRatio.x, m_mapMarkers[i].m_text.substr(0, lLengthDraw), Color::none); } } if(m_mapMarkerTexCont == NULL) { m_mapMarkerTexCont = TextureContainer::Load("graph/interface/icons/mapmarker"); } GRenderer->SetTexture(0, m_mapMarkerTexCont); EERIEDRAWPRIM(Renderer::TriangleFan, verts, 4); } }