void CSpawnSelection::ProcessLocalPlayer(CLocalPlayer *pLocalPlayer) { //CCamera *pGameCamera; CPlayerPed *pGamePlayer; DWORD dwTicksSinceLastSelection; Vector3 vPlayerPos; float fDrawX = 25.0f; float fDrawY = 250.0f; char szMsg[256]; //Todo: fix all the commented stuff if (FALSE == pLocalPlayer->IsActive() && !pLocalPlayer->IsWasted() && m_bClearedToSpawn) { // DONT ALLOW ANY ACTIONS IF WE'RE STILL FADING OR WAITING. if ((GetTickCount() - m_dwInitialSelectionTick) < 2000) return; //pGame->ToggleKeyInputsDisabled(TRUE); if (GetKeyState(VK_SHIFT) & 0x8000) // SHIFT PRESSED SO SPAWN { //pGameCamera = pGame->GetCamera(); pGamePlayer = (CPlayerPed*)FindPlayerPed(); //pGameCamera->Restore(); pLocalPlayer->SpawnPlayer(); //pGame->DisplayHud(TRUE); //pGame->ToggleHud(TRUE); //pGame->HideRadar(FALSE); //pGameCamera->SetBehindPlayer(); pGamePlayer->GetPosition(&vPlayerPos); //pGame->PlaySound(10, vPlayerPos); //pGame->ToggleKeyInputsDisabled(FALSE); //pGamePlayer->TogglePlayerControllable(TRUE); //m_pGUIText->setVisible(false); return; } else if (m_bClearedToSpawn) // WE ARE CLEARED TO SPAWN OR SELECT ANOTHER CLASS { //pGame->ToggleHud(FALSE); //pGame->HideRadar(TRUE); // SHOW INFO ABOUT THE SELECTED CLASS.. szMsg[0] = '\0'; strcat(szMsg, "> Use Left and Right arrow keys to select a class.\n"); strcat(szMsg, "> Press Shift button when ready to spawn.\n"); //pGame->DisplayHud(FALSE); //pGamePlayer->ClearAllWeapons(); //pGamePlayer->TogglePlayerControllable(FALSE); dwTicksSinceLastSelection = GetTickCount() - m_dwLastSpawnSelectionTick; // used to delay reselection. // ALLOW ANOTHER SELECTION WITH LEFT KEY if ((GetKeyState(VK_LEFT) & 0x8000) && (dwTicksSinceLastSelection > 250)) { // LEFT ARROW m_bClearedToSpawn = FALSE; m_dwLastSpawnSelectionTick = GetTickCount(); m_iSelectedClass--; //pGame->PlaySound(14, vPlayerPos); pLocalPlayer->RequestClass(m_iSelectedClass); return; } // ALLOW ANOTHER SELECTION WITH RIGHT KEY if ((GetKeyState(VK_RIGHT) & 0x8000) && (dwTicksSinceLastSelection > 250)) { // RIGHT ARROW m_bClearedToSpawn = FALSE; m_dwLastSpawnSelectionTick = GetTickCount(); m_iSelectedClass++; //pGame->PlaySound(13, vPlayerPos); pLocalPlayer->RequestClass(m_iSelectedClass); return; } } } }
void CNameTags::Draw() { if(!bbfont) { bbfont = new CBBFont(m_pD3DDevice, "vcpfnt"); bbfont->Initialise(); } if(!BarOldStateBlock) { m_pD3DDevice->BeginStateBlock(); m_pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE); m_pD3DDevice->SetRenderState(D3DRS_FOGENABLE, FALSE); m_pD3DDevice->SetRenderState(D3DRS_ZENABLE, 1); m_pD3DDevice->SetRenderState(D3DRS_FILLMODE, 3); m_pD3DDevice->SetRenderState(D3DRS_CULLMODE, 1); m_pD3DDevice->SetRenderState(D3DRS_WRAP0, 0); m_pD3DDevice->SetRenderState(D3DRS_CLIPPING, 1); m_pD3DDevice->SetRenderState(D3DRS_VERTEXBLEND, 0); m_pD3DDevice->SetRenderState(D3DRS_CLIPPLANEENABLE, 1); m_pD3DDevice->SetRenderState(D3DRS_INDEXEDVERTEXBLENDENABLE, 0); m_pD3DDevice->SetRenderState(D3DRS_COLORWRITEENABLE, 15); m_pD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, 1); m_pD3DDevice->SetRenderState(D3DRS_SRCBLEND, 5); m_pD3DDevice->SetRenderState(D3DRS_DESTBLEND, 6); m_pD3DDevice->SetRenderState(D3DRS_BLENDOP, 1); m_pD3DDevice->SetTextureStageState(0, D3DTSS_COLOROP, 4); m_pD3DDevice->SetTextureStageState(0, D3DTSS_COLORARG1, 2); m_pD3DDevice->SetTextureStageState(0, D3DTSS_COLORARG2, 0); m_pD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, 4); m_pD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, 2); m_pD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAARG2, 0); m_pD3DDevice->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0); m_pD3DDevice->SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, 0); m_pD3DDevice->SetTextureStageState(1, D3DTSS_COLOROP, 1); m_pD3DDevice->SetTextureStageState(1, D3DTSS_ALPHAOP, 1); m_pD3DDevice->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD); m_pD3DDevice->SetVertexShader(D3DFVF_XYZ|D3DFVF_DIFFUSE); m_pD3DDevice->SetStreamSource(0, NULL, 0); m_pD3DDevice->EndStateBlock(&BarOldStateBlock); } if(!BarNewStateBlock) { m_pD3DDevice->BeginStateBlock(); m_pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE); m_pD3DDevice->SetRenderState(D3DRS_FOGENABLE, FALSE); m_pD3DDevice->SetRenderState(D3DRS_ZENABLE, 1); m_pD3DDevice->SetRenderState(D3DRS_FILLMODE, 3); m_pD3DDevice->SetRenderState(D3DRS_CULLMODE, 1); m_pD3DDevice->SetRenderState(D3DRS_WRAP0, 0); m_pD3DDevice->SetRenderState(D3DRS_CLIPPING, 1); m_pD3DDevice->SetRenderState(D3DRS_VERTEXBLEND, 0); m_pD3DDevice->SetRenderState(D3DRS_CLIPPLANEENABLE, 1); m_pD3DDevice->SetRenderState(D3DRS_INDEXEDVERTEXBLENDENABLE, 0); m_pD3DDevice->SetRenderState(D3DRS_COLORWRITEENABLE, 15); m_pD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, 1); m_pD3DDevice->SetRenderState(D3DRS_SRCBLEND, 5); m_pD3DDevice->SetRenderState(D3DRS_DESTBLEND, 6); m_pD3DDevice->SetRenderState(D3DRS_BLENDOP, 1); m_pD3DDevice->SetTextureStageState(0, D3DTSS_COLOROP, 4); m_pD3DDevice->SetTextureStageState(0, D3DTSS_COLORARG1, 2); m_pD3DDevice->SetTextureStageState(0, D3DTSS_COLORARG2, 0); m_pD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, 1); m_pD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, 2); m_pD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAARG2, 0); m_pD3DDevice->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0); m_pD3DDevice->SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, 0); m_pD3DDevice->SetTextureStageState(1, D3DTSS_COLOROP, 1); m_pD3DDevice->SetTextureStageState(1, D3DTSS_ALPHAOP, 1); m_pD3DDevice->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD); m_pD3DDevice->SetVertexShader(D3DFVF_XYZ|D3DFVF_DIFFUSE); m_pD3DDevice->EndStateBlock(&BarNewStateBlock); } m_pD3DDevice->CaptureStateBlock(BarOldStateBlock); m_pD3DDevice->ApplyStateBlock(BarNewStateBlock); D3DXMATRIX matTransposed; D3DXMatrixTranspose(&matTransposed, (D3DXMATRIX*)&matView); matTransposed._14 = matTransposed._24 = matTransposed._34 = 0.0f; if(pNetowkManager) { CPlayerManager* pPlayerManager = pNetowkManager->GetPlayerManager(); for(int x = 0; x < MAX_PLAYERS; x++) { if(pPlayerManager->GetSlotState(x) == TRUE) { // Player is in use CRemotePlayer* Player = pPlayerManager->GetAt(x); if(Player->IsActive() && (Player->GetDistanceFromLocalPlayer() <= 80.0f)) { // Active and within reasonable distance CPlayerPed* PlayerPed = Player->GetPlayerPed(); if(PlayerPed->IsOnScreen()) { // They're onscreen // Get their position Vector3 vPos; PlayerPed->GetPosition(&vPos); // Set the matrix position matTransposed._41 = vPos.X; matTransposed._42 = vPos.Y; matTransposed._43 = vPos.Z + 1.0f; // Set the world transformation m_pD3DDevice->SetTransform(D3DTS_WORLD, &matTransposed); // Get their health and armour // TODO: Use the player ped health/armour? float Health = Player->GetReportedHealth(); float Armour = Player->GetReportedArmour(); // Cap their health and armour if needed if(Health > 100.0f) Health = 100.0f; if(Armour > 100.0f) Armour = 100.0f; // Set the health bar offsets BarBGVertices[0].x = BarBGVertices[1].x = (0.0058f * Health) - 0.29f; // Set the health bar color BarVertices[0].c = BarVertices[1].c = BarVertices[2].c = BarVertices[3].c = HEALTH_BAR_COLOR; // Draw the health bar border m_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, BarBDRVertices, sizeof(BarVertices_s)); // Draw the health bar fill m_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, BarVertices, sizeof(BarVertices_s)); // Draw the health bar background m_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, BarBGVertices, sizeof(BarVertices_s)); if(Armour > 0.0f) { // They have armour // Add an offset to the z position matTransposed._43 += 0.1f; // Set the world transformation m_pD3DDevice->SetTransform(D3DTS_WORLD, &matTransposed); // Set the armour bar offsets BarBGVertices[0].x = BarBGVertices[1].x = (0.0058f * Armour) - 0.29f; // Set the armour bar color BarVertices[0].c = BarVertices[1].c = BarVertices[2].c = BarVertices[3].c = ARMOUR_BAR_COLOR; // Draw the armour bar border m_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, BarBDRVertices, sizeof(BarVertices_s)); // Draw the armour bar fill m_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, BarVertices, sizeof(BarVertices_s)); // Draw the armour bar background m_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, BarBGVertices, sizeof(BarVertices_s)); } // Draw the name tag if(bbfont) { bbfont->Begin(); //bbfont->Draw(pPlayerManager->GetPlayerName(x), 0.285f, 0xFF000000); bbfont->Draw(pPlayerManager->GetPlayerName(x), 0.300f, Player->GetTeamColorAsARGB()); bbfont->End(); } } } } } } m_pD3DDevice->ApplyStateBlock(BarOldStateBlock); }
void CSpawnSelection::ProcessLocalPlayer(CLocalPlayer *pLocalPlayer) { CCamera *pGameCamera; CPlayerPed *pGamePlayer; DWORD dwTicksSinceLastSelection; Vector3 vPlayerPos; float fDrawX=25.0f; float fDrawY=250.0f; char szMsg[256]; if(FALSE == pLocalPlayer->IsActive() && !pLocalPlayer->IsWasted() && m_bClearedToSpawn) { // DONT ALLOW ANY ACTIONS IF WE'RE STILL FADING OR WAITING. if((GetTickCount() - m_dwInitialSelectionTick) < 2000) return; pGame->ToggleKeyInputsDisabled(TRUE); if(GetKeyState(VK_SHIFT)&0x8000) // SHIFT PRESSED SO SPAWN { pGameCamera = pGame->GetCamera(); pGamePlayer = pGame->FindPlayerPed(); pGameCamera->Restore(); pLocalPlayer->SpawnPlayer(); pGame->DisplayHud(TRUE); pGame->ToggleHud(TRUE); pGame->HideRadar(FALSE); pGameCamera->SetBehindPlayer(); pGamePlayer->GetPosition(&vPlayerPos); pGame->PlaySound(10, vPlayerPos); pGame->ToggleKeyInputsDisabled(FALSE); pGamePlayer->TogglePlayerControllable(TRUE); m_pGUIText->setVisible(false); return; } else if(m_bClearedToSpawn) // WE ARE CLEARED TO SPAWN OR SELECT ANOTHER CLASS { pGame->ToggleHud(FALSE); pGame->HideRadar(TRUE); // SHOW INFO ABOUT THE SELECTED CLASS.. szMsg[0] = '\0'; strcat(szMsg, "> Use Left and Right arrow keys to select a class.\n"); strcat(szMsg, "> Press Shift button when ready to spawn.\n"); if(!m_pGUIText) { m_pGUIText = pGUI->CreateGUIStaticText(); m_pGUIText->setText(szMsg); CEGUI::Font * pFont = pGUI->GetTahomaBold10Font(); float fTextWidth = pFont->getTextExtent(szMsg); float fTextHeight = pFont->getFontHeight(); m_pGUIText->setSize(CEGUI::UVector2(CEGUI::UDim(0, fTextWidth*3), CEGUI::UDim(0, fTextHeight*3))); float fTextX = pFont->getTextExtent("_"); float fTextY = -(fTextX + fTextHeight); m_pGUIText->setPosition(CEGUI::UVector2(CEGUI::UDim(0, fTextX), CEGUI::UDim(0.8, fTextY))); m_pGUIText->setProperty("BackgroundEnabled", "false"); m_pGUIText->setProperty("FrameEnabled", "false"); m_pGUIText->setProperty("Font", "Tahoma-Bold-10"); m_pGUIText->setProperty("TextColours", "tl:FFFFFFFF tr:FFFFFFFF bl:FFFFFFFF br:FFFFFFFF"); m_pGUIText->setAlpha(155); m_pGUIText->setVisible(true); } CD3DFont *pD3DFont = pChatWindow->m_pD3DFont; //pD3DFont->DrawText(fDrawX,fDrawY,0xFFFFFFFF,szMsg); // GRAB PLAYER MATRIX FOR SOUND POSITION pGamePlayer = pGame->FindPlayerPed(); pGamePlayer->GetPosition(&vPlayerPos); pGame->DisplayHud(FALSE); pGamePlayer->ClearAllWeapons(); pGamePlayer->TogglePlayerControllable(FALSE); dwTicksSinceLastSelection = GetTickCount() - m_dwLastSpawnSelectionTick; // used to delay reselection. // ALLOW ANOTHER SELECTION WITH LEFT KEY if( (GetKeyState(VK_LEFT)&0x8000) && (dwTicksSinceLastSelection > 250)) { // LEFT ARROW m_bClearedToSpawn = FALSE; m_dwLastSpawnSelectionTick = GetTickCount(); m_iSelectedClass--; pGame->PlaySound(14, vPlayerPos); pLocalPlayer->RequestClass(m_iSelectedClass); return; } // ALLOW ANOTHER SELECTION WITH RIGHT KEY if( (GetKeyState(VK_RIGHT)&0x8000) && (dwTicksSinceLastSelection > 250)) { // RIGHT ARROW m_bClearedToSpawn = FALSE; m_dwLastSpawnSelectionTick = GetTickCount(); m_iSelectedClass++; pGame->PlaySound(13, vPlayerPos); pLocalPlayer->RequestClass(m_iSelectedClass); return; } } } }