HLFX.Ru Forum Страницы (2): « 1 [2]
Показать все 4062 сообщений этой темы на одной странице

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:
1
#include "pmtrace.h"
2
#include "pm_defs.h"
3
 
4
extern vec3_t v_origin, v_angles;
5
 
6
void HUD_DrawCursor(void)
7
{
8
  if (!(gHUD.m_iWeaponBits & (1 << (WEAPON_SUIT)))) return;
9
  if (gHUD.m_iHideHUDDisplay & HIDEHUD_ALL) return;
10
  if (g_iUser1) return;
11
 
12
  vec3_t start, end, forward, world, screen;
13
 
14
  VectorCopy(v_origin, start);
15
  AngleVectors(v_angles, forward, NULL, NULL);
16
  VectorMA(start, 8192, forward, end);
17
 
18
  pmtrace_t *trace = gEngfuncs.PM_TraceLine(start, end, PM_TRACELINE_ANYVISIBLE, 2, -1);
19
  VectorCopy(trace->endpos, world);
20
 
21
  vec3_t origin_diff;
22
  static vec3_t origin_last;
23
 
24
  origin_diff = world - origin_last;
25
  origin_last = origin_last + origin_diff * (25.0 * gHUD.m_flTimeDelta);
26
  origin_last.Normalize();
27
 
28
  gEngfuncs.pTriAPI->WorldToScreen(world - origin_diff, screen);
29
 
30
  screen[0] = XPROJECT(screen[0]);
31
  screen[1] = YPROJECT(screen[1]);
32
 
33
  gEngfuncs.pTriAPI->RenderMode(kRenderTransTexture);
34
  gEngfuncs.pTriAPI->CullFace(TRI_NONE);
35
  gEngfuncs.pTriAPI->Color4f(1.0, 1.0, 1.0, 1.0);
36
 
37
  gEngfuncs.pTriAPI->SpriteTexture((struct model_s*)gEngfuncs.GetSpritePointer(SPR_Load("sprites/dot.spr")), 0);
38
 
39
  gEngfuncs.pTriAPI->Begin(TRI_QUADS);
40
  gEngfuncs.pTriAPI->TexCoord2f(0, 0);
41
  gEngfuncs.pTriAPI->Vertex3f(screen[0], screen[1], 0);
42
 
43
  gEngfuncs.pTriAPI->TexCoord2f(1, 0);
44
  gEngfuncs.pTriAPI->Vertex3f(screen[0] + XRES(5), screen[1], 0);
45
 
46
  gEngfuncs.pTriAPI->TexCoord2f(1, 1);
47
  gEngfuncs.pTriAPI->Vertex3f(screen[0] + XRES(5), screen[1] + YRES(5), 0);
48
 
49
  gEngfuncs.pTriAPI->TexCoord2f(0, 1);
50
  gEngfuncs.pTriAPI->Vertex3f(screen[0], screen[1] + YRES(5), 0);
51
  gEngfuncs.pTriAPI->End();
52
}

Чисто клиентское решение.


Временная зона GMT. Текущее время 22:47. Страницы (2): « 1 [2]
Показать все 4062 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024