HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Нубские вопросы от <censored> и других нубов (https://hlfx.ru/forum/showthread.php?threadid=4535)
Отправлено Ku2zoff сегодня в 17:56:
Кстати говоря, можно вообще не использовать лазерную точку как источник координат. Достаточно сделать трейс из глаз игрока в направлении прицела. Прямо на клиенте. Будет конечная точка, которая упирается в мир или энтитю. А дальше играться с diff, last, и расстоянием от игрока до этой точки. Из плюсов - рисовать спрайт прямо на клиенте через Triapi с нужными рендермодами, ничего не будет проваливаться в геометрию, можно добавить анимации, например смену со стрелки на руку, или текстовый курсор, или добавление песочных часов. В общем, как и есть в винде.
Добавлено завтра в 00:56:
C++ Source Code:
4 | extern vec3_t v_origin, v_angles; |
6 | void HUD_DrawCursor(void) |
8 | if (!(gHUD.m_iWeaponBits & (1 << (WEAPON_SUIT)))) return; |
9 | if (gHUD.m_iHideHUDDisplay & HIDEHUD_ALL) return; |
12 | vec3_t start, end, forward, world, screen; |
14 | VectorCopy(v_origin, start); |
15 | AngleVectors(v_angles, forward, NULL, NULL); |
16 | VectorMA(start, 8192, forward, end); |
18 | pmtrace_t *trace = gEngfuncs.PM_TraceLine(start, end, PM_TRACELINE_ANYVISIBLE, 2, -1); |
19 | VectorCopy(trace->endpos, world); |
22 | static vec3_t origin_last; |
24 | origin_diff = world - origin_last; |
25 | origin_last = origin_last + origin_diff * (25.0 * gHUD.m_flTimeDelta); |
26 | origin_last.Normalize(); |
28 | gEngfuncs.pTriAPI->WorldToScreen(world - origin_diff, screen); |
30 | screen[0] = XPROJECT(screen[0]); |
31 | screen[1] = YPROJECT(screen[1]); |
33 | gEngfuncs.pTriAPI->RenderMode(kRenderTransTexture); |
34 | gEngfuncs.pTriAPI->CullFace(TRI_NONE); |
35 | gEngfuncs.pTriAPI->Color4f(1.0, 1.0, 1.0, 1.0); |
37 | gEngfuncs.pTriAPI->SpriteTexture((struct model_s*)gEngfuncs.GetSpritePointer(SPR_Load("sprites/dot.spr")), 0); |
39 | gEngfuncs.pTriAPI->Begin(TRI_QUADS); |
40 | gEngfuncs.pTriAPI->TexCoord2f(0, 0); |
41 | gEngfuncs.pTriAPI->Vertex3f(screen[0], screen[1], 0); |
43 | gEngfuncs.pTriAPI->TexCoord2f(1, 0); |
44 | gEngfuncs.pTriAPI->Vertex3f(screen[0] + XRES(5), screen[1], 0); |
46 | gEngfuncs.pTriAPI->TexCoord2f(1, 1); |
47 | gEngfuncs.pTriAPI->Vertex3f(screen[0] + XRES(5), screen[1] + YRES(5), 0); |
49 | gEngfuncs.pTriAPI->TexCoord2f(0, 1); |
50 | gEngfuncs.pTriAPI->Vertex3f(screen[0], screen[1] + YRES(5), 0); |
51 | gEngfuncs.pTriAPI->End(); |
Чисто клиентское решение.