void CHUDManager::RenderUI() { if(!b_online) return; BOOL bAlready = FALSE; if (true || psHUD_Flags.is(HUD_DRAW | HUD_DRAW_RT)) { HitMarker.Render (); bAlready = ! (pUI && !pUI->Render()); Font().Render(); } if (psHUD_Flags.is(HUD_CROSSHAIR|HUD_CROSSHAIR_RT|HUD_CROSSHAIR_RT2) && !bAlready) m_pHUDTarget->Render(); draw_wnds_rects (); if( Device.Paused() && bShowPauseString){ CGameFont* pFont = Font().pFontGraffiti50Russian; pFont->SetColor (0x80FF0000 ); LPCSTR _str = CStringTable().translate("st_game_paused").c_str(); Fvector2 _pos; _pos.set (UI_BASE_WIDTH/2.0f, UI_BASE_HEIGHT/2.0f); UI()->ClientToScreenScaled(_pos); pFont->SetAligment (CGameFont::alCenter); pFont->Out (_pos.x, _pos.y, _str); pFont->OnRender (); } }
void CUICursor::OnRender () { if( !IsVisible() ) return; #ifdef DEBUG VERIFY(last_render_frame != Device.dwFrame); last_render_frame = Device.dwFrame; if(bDebug){ CGameFont* F = UI()->Font()->pFontDI; F->SetAligment (CGameFont::alCenter); F->SetHeightI (0.02f); F->OutSetI (0.f,-0.9f); F->SetColor (0xffffffff); Fvector2 pt = GetPos(); F->OutNext ("%f-%f",pt.x, pt.y); if(bHoldMode) F->OutNext ("Hold Mode"); }; #endif if(bHoldMode) return; // Convert to screen coords float cx = (vPos.x+1)/2.0f*UI_BASE_WIDTH; float cy = (vPos.y+1)/2.0f*UI_BASE_HEIGHT; m_si.SetPos(cx, cy); m_si.Render(); }
void hud_draw_adjust_mode() { if(!hud_adj_mode) return; LPCSTR _text = NULL; //if(pInput->iGetAsyncKeyState(DIK_LSHIFT) && hud_adj_mode) //_text = "press SHIFT+NUM 0-return 1-hud_pos 2-hud_rot 3-itm_pos 4-itm_rot 5-fire_point 6-fire_2_point 7-shell_point 8-pos_step 9-rot_step"; switch (hud_adj_mode) { case 1: _text = "adjusting HUD POSITION"; break; case 2: _text = "adjusting HUD ROTATION"; break; case 3: _text = "adjusting ITEM POSITION"; break; case 4: _text = "adjusting ITEM ROTATION"; break; case 5: _text = "adjusting FIRE POINT"; break; case 6: _text = "adjusting FIRE 2 POINT"; break; case 7: _text = "adjusting SHELL POINT"; break; case 8: _text = "adjusting pos STEP"; break; case 9: _text = "adjusting rot STEP"; break; }; if(_text) { CGameFont* F = UI()->Font()->pFontDI; F->SetAligment (CGameFont::alCenter); F->OutSetI (0.f,-0.8f); F->SetColor (0xffffffff); F->OutNext (_text); F->OutNext ("for item [%d]", hud_adj_item_idx); F->OutNext("press LSHIFT+ NUM 0 -> exit, NUM 1 -> hud_pos, NUM 2 -> hud_rot"); F->OutNext("NUM 3 -> itm_pos, NUM 4 -> itm_rot, NUM5 -> fire_point, NUM 6 -> fire_2_point"); F->OutNext("NUM 7 -> shell_point, NUM 8 -> pos_step, NUM 9 -> rot_step"); F->OutNext ("[Z] - X axis, [X] - Y axis, [C] - Z"); F->OutNext ("delta_position = %f, delta_rotation = %f", _delta_pos, _delta_rot); for (int i = 0; i < 4; i++) F->OutNext(vText[i]); } }
void CHelicopter::UpdateCL() { inherited::UpdateCL (); CExplosive::UpdateCL(); if(PPhysicsShell() && (state() == CHelicopter::eDead) ) { PPhysicsShell()->InterpolateGlobalTransform(&XFORM()); IKinematics* K = smart_cast<IKinematics*>(Visual()); K->CalculateBones (); //smoke UpdateHeliParticles(); if(m_brokenSound._feedback()) m_brokenSound.set_position(XFORM().c); return; } else PPhysicsShell()->SetTransform(XFORM(), mh_unspecified ); m_movement.Update(); m_stepRemains+=Device.fTimeDelta; while(m_stepRemains>STEP) { MoveStep(); m_stepRemains-=STEP; } #ifdef DEBUG if(bDebug) { CGameFont* F = UI().Font().pFontDI; F->SetAligment (CGameFont::alCenter); // F->SetSizeI (0.02f); F->OutSetI (0.f,-0.8f); F->SetColor (0xffffffff); F->OutNext ("Heli: speed=%4.4f acc=%4.4f dist=%4.4f",m_movement.curLinearSpeed, m_movement.curLinearAcc, m_movement.GetDistanceToDestPosition()); } #endif if(m_engineSound._feedback()) m_engineSound.set_position(XFORM().c); m_enemy.Update(); //weapon UpdateWeapons(); UpdateHeliParticles(); IKinematics* K = smart_cast<IKinematics*>(Visual()); K->CalculateBones (); }
void hud_draw_adjust_mode() { if(!hud_adj_mode) return; LPCSTR _text = NULL; if(pInput->iGetAsyncKeyState(DIK_LSHIFT) && hud_adj_mode) _text = "press SHIFT+NUM 0-return 1-hud_pos 2-hud_rot 3-itm_pos 4-itm_rot 5-fire_point 6-fire_2_point 7-shell_point 8-pos_step 9-rot_step"; switch (hud_adj_mode) { case 1: _text = "adjusting HUD POSITION"; break; case 2: _text = "adjusting HUD ROTATION"; break; case 3: _text = "adjusting ITEM POSITION"; break; case 4: _text = "adjusting ITEM ROTATION"; break; case 5: _text = "adjusting FIRE POINT"; break; case 6: _text = "adjusting FIRE 2 POINT"; break; case 7: _text = "adjusting SHELL POINT"; break; case 8: _text = "adjusting pos STEP"; break; case 9: _text = "adjusting rot STEP"; break; }; if(_text) { CGameFont* F = UI().Font().pFontDI; F->SetAligment (CGameFont::alCenter); F->OutSetI (0.f,-0.8f); F->SetColor (0xffffffff); F->OutNext (_text); F->OutNext ("for item [%d]", hud_adj_item_idx); F->OutNext ("delta values dP=%f dR=%f", _delta_pos, _delta_rot); F->OutNext ("[Z]-x axis [X]-y axis [C]-z axis"); } }
void CActor::RenderText (LPCSTR Text, Fvector dpos, float* pdup, u32 color) { if (!g_Alive()) return; CBoneInstance& BI = smart_cast<CKinematics*>(Visual())->LL_GetBoneInstance(u16(m_head)); Fmatrix M; smart_cast<CKinematics*>(Visual())->CalculateBones (); M.mul (XFORM(),BI.mTransform); //------------------------------------------------ Fvector v0, v1; v0.set(M.c); v1.set(M.c); Fvector T = Device.vCameraTop; v1.add(T); Fvector v0r, v1r; Device.mFullTransform.transform(v0r,v0); Device.mFullTransform.transform(v1r,v1); float size = v1r.distance_to(v0r); CGameFont* pFont = HUD().Font().pFontArial14; if (!pFont) return; // float OldFontSize = pFont->GetHeight (); float delta_up = 0.0f; if (size < mid_size) delta_up = upsize; else delta_up = upsize*(mid_size/size); dpos.y += delta_up; if (size > mid_size) size = mid_size; // float NewFontSize = size/mid_size * fontsize; //------------------------------------------------ M.c.y += dpos.y; Fvector4 v_res; Device.mFullTransform.transform(v_res,M.c); if (v_res.z < 0 || v_res.w < 0) return; if (v_res.x < -1.f || v_res.x > 1.f || v_res.y<-1.f || v_res.y>1.f) return; float x = (1.f + v_res.x)/2.f * (Device.dwWidth); float y = (1.f - v_res.y)/2.f * (Device.dwHeight); pFont->SetAligment (CGameFont::alCenter); pFont->SetColor (color); // pFont->SetHeight (NewFontSize); pFont->Out (x,y,Text); //------------------------------------------------- // pFont->SetHeight(OldFontSize); *pdup = delta_up; };
void CUICursor::OnRender () { if( !IsVisible() ) return; #ifdef DEBUG VERIFY(last_render_frame != Device.dwFrame); last_render_frame = Device.dwFrame; if(bDebug) { CGameFont* F = UI()->Font()->pFontDI; F->SetAligment (CGameFont::alCenter); F->SetHeightI (0.02f); F->OutSetI (0.f,-0.9f); F->SetColor (0xffffffff); Fvector2 pt = GetCursorPosition(); F->OutNext ("%f-%f",pt.x, pt.y); } #endif m_static->SetWndPos (vPos); m_static->Update (); m_static->Draw (); }
void CUICellItemTradeMenuDraw::OnDraw(CUICellItem* cell) { Fvector2 pos; cell->GetAbsolutePos (pos); UI().ClientToScreenScaled (pos, pos.x, pos.y); int acc = cell->GetAccelerator(); if(acc!=0) { if(acc==11) acc = 1; string64 buff; xr_sprintf (buff," %d", acc - DIK_ESCAPE); CGameFont* pFont = UI().Font().pFontLetterica16Russian; pFont->SetAligment (CGameFont::alCenter); pFont->SetColor (color_rgba(135,123,116,255)); pFont->Out (pos.x, pos.y, buff); pFont->OnRender (); } bool b_can_buy_rank = m_trade_wnd->CheckBuyPossibility(m_info_item->m_name_sect, CUIMpTradeWnd::bf_check_rank_restr, true); if(!b_can_buy_rank) { cell->SetTextureColor (m_trade_wnd->m_item_color_restr_rank); return; } bool b_can_buy_money = m_trade_wnd->CheckBuyPossibility(m_info_item->m_name_sect, CUIMpTradeWnd::bf_check_money, true); if(!b_can_buy_money) { cell->SetTextureColor (m_trade_wnd->m_item_color_restr_money); return; } cell->SetTextureColor (m_trade_wnd->m_item_color_normal); }
void CHUDTarget::Render() { VERIFY (g_bRendering); CObject* O = Level().CurrentEntity(); if (0==O) return; CEntity* E = smart_cast<CEntity*>(O); if (0==E) return; Fvector p1 = Device.vCameraPosition; Fvector dir = Device.vCameraDirection; // Render cursor u32 C = C_DEFAULT; FVF::TL PT; Fvector p2; p2.mad (p1,dir,RQ.range); PT.transform (p2,Device.mFullTransform); float di_size = C_SIZE/powf(PT.p.w,.2f); CGameFont* F = HUD().Font().pFontGraffiti19Russian; F->SetAligment (CGameFont::alCenter); F->OutSetI (0.f,0.05f); if (psHUD_Flags.test(HUD_CROSSHAIR_DIST)){ F->SetColor (C); F->OutNext ("%4.1f",RQ.range); } if (psHUD_Flags.test(HUD_INFO)){ if (RQ.O){ CEntityAlive* E = smart_cast<CEntityAlive*> (RQ.O); CEntityAlive* pCurEnt = smart_cast<CEntityAlive*> (Level().CurrentEntity()); PIItem l_pI = smart_cast<PIItem> (RQ.O); if (IsGameTypeSingle()) { CInventoryOwner* our_inv_owner = smart_cast<CInventoryOwner*>(pCurEnt); if (E && E->g_Alive() && !E->cast_base_monster()) { //. CInventoryOwner* our_inv_owner = smart_cast<CInventoryOwner*>(pCurEnt); CInventoryOwner* others_inv_owner = smart_cast<CInventoryOwner*>(E); if(our_inv_owner && others_inv_owner){ switch(RELATION_REGISTRY().GetRelationType(others_inv_owner, our_inv_owner)) { case ALife::eRelationTypeEnemy: C = C_ON_ENEMY; break; case ALife::eRelationTypeNeutral: C = C_ON_NEUTRAL; break; case ALife::eRelationTypeFriend: C = C_ON_FRIEND; break; } if (fuzzyShowInfo>0.5f){ CStringTable strtbl ; F->SetColor (subst_alpha(C,u8(iFloor(255.f*(fuzzyShowInfo-0.5f)*2.f)))); F->OutNext ("%s", *strtbl.translate(others_inv_owner->Name()) ); F->OutNext ("%s", *strtbl.translate(others_inv_owner->CharacterInfo().Community().id()) ); } } fuzzyShowInfo += SHOW_INFO_SPEED*Device.fTimeDelta; } else if (l_pI && our_inv_owner && RQ.range < 2.0f*our_inv_owner->inventory().GetTakeDist()) { if (fuzzyShowInfo>0.5f){ F->SetColor (subst_alpha(C,u8(iFloor(255.f*(fuzzyShowInfo-0.5f)*2.f)))); F->OutNext ("%s",l_pI->Name/*Complex*/()); } fuzzyShowInfo += SHOW_INFO_SPEED*Device.fTimeDelta; } } else { if (E && (E->GetfHealth()>0)) { if (pCurEnt && GameID() == GAME_SINGLE){ if (GameID() == GAME_DEATHMATCH) C = C_ON_ENEMY; else{ if (E->g_Team() != pCurEnt->g_Team()) C = C_ON_ENEMY; else C = C_ON_FRIEND; }; if (RQ.range >= recon_mindist() && RQ.range <= recon_maxdist()){ float ddist = (RQ.range - recon_mindist())/(recon_maxdist() - recon_mindist()); float dspeed = recon_minspeed() + (recon_maxspeed() - recon_minspeed())*ddist; fuzzyShowInfo += Device.fTimeDelta/dspeed; }else{ if (RQ.range < recon_mindist()) fuzzyShowInfo += recon_minspeed()*Device.fTimeDelta; else fuzzyShowInfo = 0; }; if (fuzzyShowInfo>0.5f){ clamp(fuzzyShowInfo,0.f,1.f); int alpha_C = iFloor(255.f*(fuzzyShowInfo-0.5f)*2.f); u8 alpha_b = u8(alpha_C & 0x00ff); F->SetColor (subst_alpha(C,alpha_b)); F->OutNext ("%s",*RQ.O->cName()); } } }; }; }else{ fuzzyShowInfo -= HIDE_INFO_SPEED*Device.fTimeDelta; } clamp(fuzzyShowInfo,0.f,1.f); } //отрендерить кружочек или крестик if(!m_bShowCrosshair){ // actual rendering u32 vOffset; FVF::TL* pv = (FVF::TL*)RCache.Vertex.Lock(4,hGeom.stride(),vOffset); float size_x = float(Device.dwWidth) * di_size; float size_y = float(Device.dwHeight) * di_size; size_y = size_x; float w_2 = Device.fWidth_2; float h_2 = Device.fHeight_2; // Convert to screen coords float cx = (PT.p.x+1)*w_2; float cy = (PT.p.y+1)*h_2; pv->set (cx - size_x, cy + size_y, C, 0, 1); ++pv; pv->set (cx - size_x, cy - size_y, C, 0, 0); ++pv; pv->set (cx + size_x, cy + size_y, C, 1, 1); ++pv; pv->set (cx + size_x, cy - size_y, C, 1, 0); ++pv; // unlock VB and Render it as triangle LIST RCache.Vertex.Unlock(4,hGeom.stride()); RCache.set_Shader (hShader); RCache.set_Geometry (hGeom); RCache.Render (D3DPT_TRIANGLELIST,vOffset,0,4,0,2); }else{ //отрендерить прицел HUDCrosshair.cross_color = C; HUDCrosshair.OnRender (); } }
void CUIMainIngameWnd::draw_adjust_mode() { if (g_bHudAdjustMode&&m_pWeapon) //draw firePoint,ShellPoint etc { CActor* pActor = smart_cast<CActor*>(Level().CurrentEntity()); if(!pActor) return; bool bCamFirstEye = !!m_pWeapon->GetHUDmode(); string32 hud_view="HUD view"; string32 _3rd_person_view="3-rd person view"; CGameFont* F = UI()->Font()->pFontDI; F->SetAligment (CGameFont::alCenter); //. F->SetSizeI (0.02f); F->OutSetI (0.f,-0.8f); F->SetColor (0xffffffff); F->OutNext ("Hud_adjust_mode=%d",g_bHudAdjustMode); if(g_bHudAdjustMode==1) F->OutNext ("adjusting zoom offset"); else if(g_bHudAdjustMode==2) F->OutNext ("adjusting fire point for %s",bCamFirstEye?hud_view:_3rd_person_view); else if(g_bHudAdjustMode==3) F->OutNext ("adjusting missile offset"); else if(g_bHudAdjustMode==4) F->OutNext ("adjusting shell point for %s",bCamFirstEye?hud_view:_3rd_person_view); else if(g_bHudAdjustMode == 5) F->OutNext ("adjusting fire point 2 for %s",bCamFirstEye?hud_view:_3rd_person_view); if(bCamFirstEye) { CWeaponHUD *pWpnHud = NULL; pWpnHud = m_pWeapon->GetHUD(); Fvector FP,SP,FP2; CKinematics* V = smart_cast<CKinematics*>(pWpnHud->Visual()); VERIFY (V); V->CalculateBones (); // fire point&direction Fmatrix& fire_mat = V->LL_GetTransform(u16(pWpnHud->FireBone())); Fmatrix& parent = pWpnHud->Transform (); const Fvector& fp = pWpnHud->FirePoint(); const Fvector& fp2 = pWpnHud->FirePoint2(); const Fvector& sp = pWpnHud->ShellPoint(); fire_mat.transform_tiny (FP,fp); parent.transform_tiny (FP); fire_mat.transform_tiny (FP2,fp2); parent.transform_tiny (FP2); fire_mat.transform_tiny (SP,sp); parent.transform_tiny (SP); RCache.dbg_DrawAABB(FP,0.01f,0.01f,0.01f,D3DCOLOR_XRGB(255,0,0)); RCache.dbg_DrawAABB(FP2,0.02f,0.02f,0.02f,D3DCOLOR_XRGB(0,0,255)); RCache.dbg_DrawAABB(SP,0.01f,0.01f,0.01f,D3DCOLOR_XRGB(0,255,0)); }else{ Fvector FP = m_pWeapon->get_CurrentFirePoint(); Fvector FP2 = m_pWeapon->get_CurrentFirePoint2(); Fvector SP = m_pWeapon->get_LastSP(); RCache.dbg_DrawAABB(FP,0.01f,0.01f,0.01f,D3DCOLOR_XRGB(255,0,0)); RCache.dbg_DrawAABB(FP2,0.02f,0.02f,0.02f,D3DCOLOR_XRGB(0,0,255)); RCache.dbg_DrawAABB(SP,0.02f,0.02f,0.02f,D3DCOLOR_XRGB(0,255,0)); } } }