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 сегодня в 16:15:
Цитата:
ZGreen писал:
Так-то он для 95й винды появился.
Я 95-й виндой вообще не пользовался, довелось только 98-й немного. Помню, что-то такое, что пинбол в ХР по наследству перешёл из предыдущих версий. Это же не отменяет того факта, что он там был, и многие с ним познакомились именно в XP. Вообще, совместимость с 16-битными приложухами в 32-битной XP вроде ещё была, поэтому многое из Windows 9x могло запускаться.
Добавлено сегодня в 23:15:
JPEG вот, глянь. Накалякал за 20 минут на коленке лагающий спрайт. Остаётся только сгладить движения и посчитать расстояние до игрока, чтобы играться с масштабом.
C++ Source Code:
1 | gmsgWinCursor = REG_USER_MSG("WinCursor", 2); |
3 | extern int gmsgWinCursor; |
5 | void CRpg::UpdateSpot( void ) |
13 | m_pSpot = CLaserSpot::CreateSpot(); |
15 | MESSAGE_BEGIN(MSG_ONE, gmsgWinCursor, NULL, m_pPlayer->pev); |
16 | WRITE_SHORT(m_pSpot->entindex()); |
19 | ALERT(at_console, "Creating spot, index: %i\n", m_pSpot->entindex()); |
22 | UTIL_MakeVectors( m_pPlayer->pev->v_angle ); |
23 | Vector vecSrc = m_pPlayer->GetGunPosition( );; |
24 | Vector vecAiming = gpGlobals->v_forward; |
27 | UTIL_TraceLine ( vecSrc, vecSrc + vecAiming * 8192, dont_ignore_monsters, ENT(m_pPlayer->pev), &tr ); |
29 | UTIL_SetOrigin( m_pSpot->pev, tr.vecEndPos ); |
33 | MESSAGE_BEGIN(MSG_ONE, gmsgWinCursor, NULL, m_pPlayer->pev); |
43 | int __MsgFunc_WinCursor(const char* pszName, int iSize, void* pbuf) |
45 | BEGIN_READ(pbuf, iSize); |
46 | g_iWinCursor = READ_SHORT(); |
50 | void HUD_DrawCursor(void) |
52 | if (!(gHUD.m_iWeaponBits & (1 << (WEAPON_SUIT)))) return; |
53 | if (gHUD.m_iHideHUDDisplay & HIDEHUD_ALL) return; |
55 | if (g_iWinCursor <= 0) return; |
57 | cl_entity_t* ent = gEngfuncs.GetEntityByIndex(g_iWinCursor); |
63 | VectorCopy(ent->origin, world); |
66 | static vec3_t origin_last; |
68 | origin_diff = world - origin_last; |
69 | origin_last = origin_last + origin_diff * (50.0 * gHUD.m_flTimeDelta); |
70 | origin_last.Normalize(); |
72 | gEngfuncs.pTriAPI->WorldToScreen(world - origin_diff, screen); |
74 | screen[0] = XPROJECT(screen[0]); |
75 | screen[1] = YPROJECT(screen[1]); |
80 | UnpackRGB(r, g, b, RGB_YELLOWISH); |
81 | ScaleColors(r, g, b, a); |
83 | SPR_Set(gHUD.GetSprite(gHUD.GetSpriteIndex("cross")), r, g, b); |
84 | SPR_DrawAdditive(0, screen[0], screen[1], &gHUD.GetSpriteRect(gHUD.GetSpriteIndex("cross"))); |
86 | gEngfuncs.Con_DPrintf("Client Cursor, index is %i\n", g_iWinCursor); |
Отправлено JPEG сегодня в 17:06:
Цитата:
Ku2zoff писал:
вот, глянь. Накалякал за 20 минут на коленке лагающий спрайт. Остаётся только сгладить движения и посчитать расстояние до игрока, чтобы играться с масштабом.
спасибо, скоро попробую. До этого пробовал из ракеты его сделать, но это был полный провал)__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))
Отправлено 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(); |
Чисто клиентское решение.