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 (); } }
float CUIPdaKillMessage::InitText(CUIStatic& refStatic, float x, PlayerInfo& info){ if ( 0 == xr_strlen(info.m_name)) return 0; float y = 0; float selfHeight = GetHeight(); CGameFont* pFont = GetFont(); float width = pFont->SizeOf_(*info.m_name); UI()->ClientToScreenScaledWidth (width); float height = pFont->CurrentHeight_(); y = (selfHeight - height)/2; float __eps = pFont->SizeOf_('o');//hack -( UI()->ClientToScreenScaledWidth (__eps); clamp (width, 0.0f, 120.0f); refStatic.Init (x, 0/*y*/, width + __eps, height); //. refStatic.SetElipsis (CUIStatic::eepEnd, 0); refStatic.SetText (*info.m_name); refStatic.SetTextColor (info.m_color); return width; }
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 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 = 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 ("delta values dP=%f dR=%f", _delta_pos, _delta_rot); F->OutNext ("[Z]-x axis [X]-y axis [C]-z axis"); } }
void operator()(IClient* C) { m_server->UpdateClientStatistic(C); F->OutNext("%10s: P(%d), BPS(%2.1fK), MRR(%2d), MSR(%2d), Retried(%2d), Blocked(%2d)", //Server->game->get_option_s(*C->Name,"name",*C->Name), C->name.c_str(), C->stats.getPing(), float(C->stats.getBPS()),// /1024, C->stats.getMPS_Receive (), C->stats.getMPS_Send (), C->stats.getRetriedCount(), C->stats.dwTimesBlocked ); }
float CUIPdaKillMessage::InitText(CUIStatic& refStatic, float x, PlayerInfo& info) { if ( 0 == xr_strlen(info.m_name)) return 0.0f; CGameFont* pFont = GetFont(); float _eps = pFont->SizeOf_(' '); UI()->ClientToScreenScaledWidth (_eps); //add one letter float height = pFont->CurrentHeight_(); float y = (GetHeight() - height)/2; refStatic.SetWndPos (Fvector2().set(x, y)); refStatic.SetHeight (GetHeight()); refStatic.SetEllipsis (1, 0); refStatic.SetText (info.m_name.c_str()); refStatic.AdjustWidthToText (); refStatic.SetWidth (refStatic.GetWidth()+_eps); refStatic.SetTextColor (info.m_color); return refStatic.GetWidth (); }
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 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 CLevel::OnFrame () { #ifdef DEBUG_MEMORY_MANAGER debug_memory_guard __guard__; #endif // DEBUG_MEMORY_MANAGER #ifdef DEBUG DBG_RenderUpdate( ); #endif // #ifdef DEBUG Fvector temp_vector; m_feel_deny.feel_touch_update (temp_vector, 0.f); if (GameID()!=eGameIDSingle) psDeviceFlags.set(rsDisableObjectsAsCrows,true); else psDeviceFlags.set(rsDisableObjectsAsCrows,false); // commit events from bullet manager from prev-frame Device.Statistic->TEST0.Begin (); BulletManager().CommitEvents (); Device.Statistic->TEST0.End (); // Client receive if (net_isDisconnected()) { if (OnClient() && GameID() != eGameIDSingle) { #ifdef DEBUG Msg("* I'm disconnected, so clear all objects..."); #endif // #ifdef DEBUG ClearAllObjects(); } Engine.Event.Defer ("kernel:disconnect"); return; } else { Device.Statistic->netClient1.Begin(); ClientReceive (); Device.Statistic->netClient1.End (); } ProcessGameEvents (); if (m_bNeed_CrPr) make_NetCorrectionPrediction(); if(!g_dedicated_server ) { if (g_mt_config.test(mtMap)) Device.seqParallel.push_back (fastdelegate::FastDelegate0<>(m_map_manager,&CMapManager::Update)); else MapManager().Update (); if( IsGameTypeSingle() && Device.dwPrecacheFrame==0 ) { if (g_mt_config.test(mtMap)) Device.seqParallel.push_back (fastdelegate::FastDelegate0<>(m_game_task_manager,&CGameTaskManager::UpdateTasks)); else GameTaskManager().UpdateTasks(); } } // Inherited update inherited::OnFrame (); // Draw client/server stats if ( !g_dedicated_server && psDeviceFlags.test(rsStatistic)) { CGameFont* F = HUD().Font().pFontDI; if (!psNET_direct_connect) { if ( IsServer() ) { const IServerStatistic* S = Server->GetStatistic(); F->SetHeightI (0.015f); F->OutSetI (0.0f,0.5f); F->SetColor (D3DCOLOR_XRGB(0,255,0)); F->OutNext ("IN: %4d/%4d (%2.1f%%)", S->bytes_in_real, S->bytes_in, 100.f*float(S->bytes_in_real)/float(S->bytes_in)); F->OutNext ("OUT: %4d/%4d (%2.1f%%)", S->bytes_out_real, S->bytes_out, 100.f*float(S->bytes_out_real)/float(S->bytes_out)); F->OutNext ("client_2_sever ping: %d", net_Statistic.getPing()); F->OutNext ("SPS/Sended : %4d/%4d", S->dwBytesPerSec, S->dwBytesSended); F->OutNext ("sv_urate/cl_urate : %4d/%4d", psNET_ServerUpdate, psNET_ClientUpdate); F->SetColor (D3DCOLOR_XRGB(255,255,255)); struct net_stats_functor { xrServer* m_server; CGameFont* F; void operator()(IClient* C) { m_server->UpdateClientStatistic(C); F->OutNext("%10s: P(%d), BPS(%2.1fK), MRR(%2d), MSR(%2d), Retried(%2d), Blocked(%2d)", //Server->game->get_option_s(*C->Name,"name",*C->Name), C->name.c_str(), C->stats.getPing(), float(C->stats.getBPS()),// /1024, C->stats.getMPS_Receive (), C->stats.getMPS_Send (), C->stats.getRetriedCount(), C->stats.dwTimesBlocked ); } }; net_stats_functor tmp_functor; tmp_functor.m_server = Server; tmp_functor.F = F; Server->ForEachClientDo(tmp_functor); } if (IsClient()) { IPureClient::UpdateStatistic(); F->SetHeightI(0.015f); F->OutSetI (0.0f,0.5f); F->SetColor (D3DCOLOR_XRGB(0,255,0)); F->OutNext ("client_2_sever ping: %d", net_Statistic.getPing()); F->OutNext ("sv_urate/cl_urate : %4d/%4d", psNET_ServerUpdate, psNET_ClientUpdate); F->SetColor (D3DCOLOR_XRGB(255,255,255)); F->OutNext("P(%d), BPS(%2.1fK), MRR(%2d), MSR(%2d), Retried(%2d), Blocked(%2d), Sended(%2d), SPS(%2d)", //Server->game->get_option_s(C->Name,"name",C->Name), // C->Name, net_Statistic.getPing(), float(net_Statistic.getBPS()),// /1024, net_Statistic.getMPS_Receive (), net_Statistic.getMPS_Send (), net_Statistic.getRetriedCount(), net_Statistic.dwTimesBlocked, net_Statistic.dwBytesSended, net_Statistic.dwBytesPerSec ); #ifdef DEBUG if (!pStatGraphR) { pStatGraphR = new CStatGraph(); pStatGraphR->SetRect(50, 700, 300, 68, 0xff000000, 0xff000000); //m_stat_graph->SetGrid(0, 0.0f, 10, 1.0f, 0xff808080, 0xffffffff); pStatGraphR->SetMinMax(0.0f, 65536.0f, 1000); pStatGraphR->SetStyle(CStatGraph::stBarLine); pStatGraphR->AppendSubGraph(CStatGraph::stBarLine); } pStatGraphR->AppendItem(float(net_Statistic.getBPS()), 0xff00ff00, 0); F->OutSet(20.f, 700.f); F->OutNext("64 KBS"); #endif } } } else { #ifdef DEBUG if (pStatGraphR) xr_delete(pStatGraphR); #endif } // g_pGamePersistent->Environment().SetGameTime (GetGameDayTimeSec(),GetGameTimeFactor()); g_pGamePersistent->Environment().SetGameTime (GetEnvironmentGameDayTimeSec(),game->GetEnvironmentGameTimeFactor()); //Device.Statistic->cripting.Begin (); if (!g_dedicated_server) ai().script_engine().script_process (ScriptEngine::eScriptProcessorLevel)->update(); //Device.Statistic->Scripting.End (); m_ph_commander->update (); m_ph_commander_scripts->update (); // autosave_manager().update (); //просчитать полет пуль Device.Statistic->TEST0.Begin (); BulletManager().CommitRenderSet (); Device.Statistic->TEST0.End (); // update static sounds if(!g_dedicated_server) { if (g_mt_config.test(mtLevelSounds)) Device.seqParallel.push_back (fastdelegate::FastDelegate0<>(m_level_sound_manager,&CLevelSoundManager::Update)); else m_level_sound_manager->Update (); } // deffer LUA-GC-STEP if (!g_dedicated_server) { if (g_mt_config.test(mtLUA_GC)) Device.seqParallel.push_back (fastdelegate::FastDelegate0<>(this,&CLevel::script_gc)); else script_gc () ; } //----------------------------------------------------- if (pStatGraphR) { static float fRPC_Mult = 10.0f; static float fRPS_Mult = 1.0f; pStatGraphR->AppendItem(float(m_dwRPC)*fRPC_Mult, 0xffff0000, 1); pStatGraphR->AppendItem(float(m_dwRPS)*fRPS_Mult, 0xff00ff00, 0); }; }
void CLevelGraph::draw_nodes () { CGameObject* O = smart_cast<CGameObject*> (Level().CurrentEntity()); Fvector POSITION = O->Position(); POSITION.y += 0.5f; // display Fvector P = POSITION; // CPosition Local; // vertex_position (Local,P); u32 ID = O->ai_location().level_vertex_id(); CGameFont* F = UI().Font().pFontDI; F->SetHeightI (.02f); F->OutI (0.f,0.5f,"%f,%f,%f",VPUSH(P)); // float x,z; // unpack_xz (Local,x,z); // F->Out (0.f,0.55f,"%3d,%4d,%3d -> %d", iFloor(x),iFloor(Local.y()),iFloor(z),u32(ID)); svector<u32,128> linked; { const_iterator i,e; begin (ID,i,e); for(; i != e; ++i) linked.push_back(value(ID,i)); } // render float sc = header().cell_size()/16; float st = 0.98f*header().cell_size()/2; float tt = 0.01f; Fvector DUP; DUP.set(0,1,0); //RCache.set_Shader (sh_debug); DRender->SetShader(sh_debug); F->SetColor (color_rgba(255,255,255,255)); ////////////////////////////////////////////////////////////////////////// Fvector min_position,max_position; max_position = min_position = Device.vCameraPosition; min_position.sub(30.f); max_position.add(30.f); CLevelGraph::const_vertex_iterator I, E; if (valid_vertex_position(min_position)) I = std::lower_bound(begin(),end(),vertex_position(min_position).xz(),&vertex::predicate2); else I = begin(); if (valid_vertex_position(max_position)) { E = std::upper_bound(begin(),end(),vertex_position(max_position).xz(),&vertex::predicate); if (E != end()) ++E; } else E = end(); ////////////////////////////////////////////////////////////////////////// for ( ; I != E; ++I) { const CLevelGraph::CVertex& N = *I; Fvector PC; PC = vertex_position(N); u32 Nid = vertex_id(I); if (Device.vCameraPosition.distance_to(PC)>30) continue; float sr = header().cell_size(); if (::Render->ViewBase.testSphere_dirty(PC,sr)) { u32 LL = 255; u32 CC = D3DCOLOR_XRGB(0,0,255); u32 CT = D3DCOLOR_XRGB(LL,LL,LL); u32 CH = D3DCOLOR_XRGB(0,128,0); BOOL bHL = FALSE; if (Nid==u32(ID)) { bHL = TRUE; CT = D3DCOLOR_XRGB(0,255,0); } else { for (u32 t=0; t<linked.size(); ++t) { if (linked[t]==Nid) { bHL = TRUE; CT = CH; break; } } } // unpack plane Fplane PL; Fvector vNorm; pvDecompress(vNorm,N.plane()); PL.build (PC,vNorm); // create vertices Fvector v,v1,v2,v3,v4; v.set(PC.x-st,PC.y,PC.z-st); PL.intersectRayPoint(v,DUP,v1); v1.mad(v1,PL.n,tt); // minX,minZ v.set(PC.x+st,PC.y,PC.z-st); PL.intersectRayPoint(v,DUP,v2); v2.mad(v2,PL.n,tt); // maxX,minZ v.set(PC.x+st,PC.y,PC.z+st); PL.intersectRayPoint(v,DUP,v3); v3.mad(v3,PL.n,tt); // maxX,maxZ v.set(PC.x-st,PC.y,PC.z+st); PL.intersectRayPoint(v,DUP,v4); v4.mad(v4,PL.n,tt); // minX,maxZ // render quad DRender->dbg_DrawTRI(Fidentity,v3,v2,v1,CT); DRender->dbg_DrawTRI(Fidentity,v1,v4,v3,CT); //RCache.dbg_DrawTRI (Fidentity,v3,v2,v1,CT); //RCache.dbg_DrawTRI (Fidentity,v1,v4,v3,CT); // render center Level().debug_renderer().draw_aabb (PC,sc,sc,sc,CC); // render id if (bHL) { Fvector T; Fvector4 S; T.set (PC); T.y+=0.3f; Device.mFullTransform.transform (S,T); if (S.z < 0 || S.z < 0) continue; if (S.x < -1.f || S.x > 1.f || S.y<-1.f || S.x>1.f) continue; F->SetHeightI (0.05f/_sqrt(_abs(S.w))); F->SetColor (0xffffffff); F->OutI (S.x,-S.y,"~%d",Nid); } } } }
void CUICustomEdit::Draw() { Fvector2 pos, out; GetAbsolutePos (pos); CGameFont* font = TextItemControl()->m_pFont; if ( ec().need_update() || m_force_update ) { float ui_width = GetWidth(); LPCSTR cursor_str = ec().str_before_cursor(); u32 cursor_str_size = xr_strlen( cursor_str ); LPCSTR istr = cursor_str; float str_length = font->SizeOf_( istr ); UI().ClientToScreenScaledWidth( str_length ); u32 ix = 0; while ( (str_length > ui_width) && (ix < cursor_str_size) ) { istr = cursor_str + ix; str_length = font->SizeOf_( istr ); UI().ClientToScreenScaledWidth( str_length ); ++ix; } istr = cursor_str + ix; LPCSTR astr = ec().str_edit() + ix; u32 str_size = xr_strlen( ec().str_edit() ); u32 jx = 1; strncpy_s (m_out_str, sizeof(m_out_str), astr, jx); str_length = font->SizeOf_(m_out_str); UI().ClientToScreenScaledWidth(str_length); while((str_length < ui_width) && (jx < str_size-ix)) { strncpy_s (m_out_str, sizeof(m_out_str), astr, jx); str_length = font->SizeOf_(m_out_str); UI().ClientToScreenScaledWidth(str_length); ++jx; } strncpy_s (m_out_str, sizeof(m_out_str), astr, jx); TextItemControl()->SetText(m_out_str); if(TextItemControl()->IsPasswordMode()) { string256 passText; shared_str str(istr); int sz = (int)str.size(); for (int i = 0; i < sz; i++) passText[i] = '*'; passText[sz] = 0; m_dx_cur = font->SizeOf_(passText); // cursor_str } else m_dx_cur = font->SizeOf_(istr); // cursor_str m_force_update = false; } inherited::Draw(); if (m_bInputFocus) //draw cursor here { out.x = pos.x + 0.0f + TextItemControl()->m_TextOffset.x + TextItemControl()->GetIndentByAlign(); out.y = pos.y + 2.0f + TextItemControl()->m_TextOffset.y + TextItemControl()->GetVIndentByAlign(); UI().ClientToScreenScaled( out ); out.x += m_dx_cur; // cursor_str font->Out (out.x, out.y, "_"); } font->OnRender (); }
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 CUICustomEdit::Draw() { VERIFY( m_pLines ); Fvector2 pos, out; GetAbsolutePos( pos ); CGameFont* font = m_pLines->m_pFont; if ( ec().need_update() || m_force_update ) { float ui_width = GetWidth(); LPCSTR cursor_str = ec().str_before_cursor(); u32 cursor_str_size = xr_strlen( cursor_str ); LPCSTR istr = cursor_str; float str_length = font->SizeOf_( istr ); UI()->ClientToScreenScaledWidth( str_length ); u32 ix = 0; while ( (str_length > ui_width) && (ix < cursor_str_size) ) { istr = cursor_str + ix; str_length = font->SizeOf_( istr ); UI()->ClientToScreenScaledWidth( str_length ); ++ix; } istr = cursor_str + ix; LPCSTR astr = ec().str_edit() + ix; u32 str_size = xr_strlen( ec().str_edit() ); u32 jx = 1; strncpy_s( m_out_str, sizeof(m_out_str), astr, jx ); str_length = font->SizeOf_( m_out_str ); UI()->ClientToScreenScaledWidth( str_length ); while ( (str_length < ui_width) && (jx < str_size-ix) ) { strncpy_s( m_out_str, sizeof(m_out_str), astr, jx ); str_length = font->SizeOf_( m_out_str ); UI()->ClientToScreenScaledWidth( str_length ); ++jx; } strncpy_s( m_out_str, sizeof(m_out_str), astr, jx ); inherited::SetText( m_out_str ); m_dx_cur = font->SizeOf_( istr ); // cursor_str m_force_update = false; } inherited::Draw(); if ( m_bInputFocus ) //draw cursor here { out.x = pos.x + 0.0f + GetTextX() + m_pLines->GetIndentByAlign(); out.y = pos.y + 2.0f + GetTextY() + m_pLines->GetVIndentByAlign(); UI()->ClientToScreenScaled( out ); out.x += m_dx_cur; // cursor_str font->Out( out.x, out.y, "_" ); } font->OnRender(); }
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 CLevel::OnFrame () { #ifdef DEBUG_MEMORY_MANAGER debug_memory_guard __guard__; #endif // DEBUG_MEMORY_MANAGER m_feel_deny.update (); if (GameID()!=GAME_SINGLE) psDeviceFlags.set(rsDisableObjectsAsCrows,true); else psDeviceFlags.set(rsDisableObjectsAsCrows,false); // commit events from bullet manager from prev-frame Device.Statistic->TEST0.Begin (); BulletManager().CommitEvents (); Device.Statistic->TEST0.End (); // Client receive if (net_isDisconnected()) { if (OnClient() && GameID() != GAME_SINGLE) ClearAllObjects(); Engine.Event.Defer ("kernel:disconnect"); return; } else { Device.Statistic->netClient1.Begin(); ClientReceive (); Device.Statistic->netClient1.End (); } ProcessGameEvents (); if (m_bNeed_CrPr) make_NetCorrectionPrediction(); if(!g_dedicated_server) MapManager().Update (); // Inherited update inherited::OnFrame (); // Draw client/server stats if ( !g_dedicated_server && psDeviceFlags.test(rsStatistic)) { CGameFont* F = HUD().Font().pFontDI; if (!psNET_direct_connect) { if ( IsServer() ) { const IServerStatistic* S = Server->GetStatistic(); F->SetHeightI (0.015f); F->OutSetI (0.0f,0.5f); F->SetColor (D3DCOLOR_XRGB(0,255,0)); F->OutNext ("IN: %4d/%4d (%2.1f%%)", S->bytes_in_real, S->bytes_in, 100.f*float(S->bytes_in_real)/float(S->bytes_in)); F->OutNext ("OUT: %4d/%4d (%2.1f%%)", S->bytes_out_real, S->bytes_out, 100.f*float(S->bytes_out_real)/float(S->bytes_out)); F->OutNext ("client_2_sever ping: %d", net_Statistic.getPing()); F->OutNext ("SPS/Sended : %4d/%4d", S->dwBytesPerSec, S->dwBytesSended); F->OutNext ("sv_urate/cl_urate : %4d/%4d", psNET_ServerUpdate, psNET_ClientUpdate); F->SetColor (D3DCOLOR_XRGB(255,255,255)); for (u32 I=0; I<Server->client_Count(); ++I) { IClient* C = Server->client_Get(I); Server->UpdateClientStatistic(C); F->OutNext("P(%d), BPS(%2.1fK), MRR(%2d), MSR(%2d), Retried(%2d), Blocked(%2d)", //Server->game->get_option_s(*C->Name,"name",*C->Name), // C->Name, C->stats.getPing(), float(C->stats.getBPS()),// /1024, C->stats.getMPS_Receive (), C->stats.getMPS_Send (), C->stats.getRetriedCount(), C->stats.dwTimesBlocked ); } } if (IsClient()) { IPureClient::UpdateStatistic(); F->SetHeightI(0.015f); F->OutSetI (0.0f,0.5f); F->SetColor (D3DCOLOR_XRGB(0,255,0)); F->OutNext ("client_2_sever ping: %d", net_Statistic.getPing()); F->OutNext ("sv_urate/cl_urate : %4d/%4d", psNET_ServerUpdate, psNET_ClientUpdate); F->SetColor (D3DCOLOR_XRGB(255,255,255)); F->OutNext("P(%d), BPS(%2.1fK), MRR(%2d), MSR(%2d), Retried(%2d), Blocked(%2d), Sended(%2d), SPS(%2d)", //Server->game->get_option_s(C->Name,"name",C->Name), // C->Name, net_Statistic.getPing(), float(net_Statistic.getBPS()),// /1024, net_Statistic.getMPS_Receive (), net_Statistic.getMPS_Send (), net_Statistic.getRetriedCount(), net_Statistic.dwTimesBlocked, net_Statistic.dwBytesSended, net_Statistic.dwBytesPerSec ); } } } // g_pGamePersistent->Environment().SetGameTime (GetGameDayTimeSec(),GetGameTimeFactor()); g_pGamePersistent->Environment().SetGameTime (GetEnvironmentGameDayTimeSec(),GetGameTimeFactor()); //Device.Statistic->cripting.Begin (); if (!g_dedicated_server) ai().script_engine().script_process (ScriptEngine::eScriptProcessorLevel)->update(); //Device.Statistic->Scripting.End (); m_ph_commander->update (); m_ph_commander_scripts->update (); // autosave_manager().update (); //просчитать полет пуль Device.Statistic->TEST0.Begin (); BulletManager().CommitRenderSet (); Device.Statistic->TEST0.End (); // update static sounds if(!g_dedicated_server) { if (g_mt_config.test(mtLevelSounds)) Device.seqParallel.push_back (fastdelegate::FastDelegate0<>(m_level_sound_manager,&CLevelSoundManager::Update)); else m_level_sound_manager->Update (); } // deffer LUA-GC-STEP if (!g_dedicated_server) { if (g_mt_config.test(mtLUA_GC)) Device.seqParallel.push_back (fastdelegate::FastDelegate0<>(this,&CLevel::script_gc)); else script_gc () ; } //----------------------------------------------------- if (pStatGraphR) { static float fRPC_Mult = 10.0f; static float fRPS_Mult = 1.0f; pStatGraphR->AppendItem(float(m_dwRPC)*fRPC_Mult, 0xffff0000, 1); pStatGraphR->AppendItem(float(m_dwRPS)*fRPS_Mult, 0xff00ff00, 0); }; }
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)); } } }