FurFur
Участник
- Сообщения
- 153
- Реакции
- 85
Как можно нарисовать луч (TE_SetupBeamPoints) между двумя точками с определенной длинной? (например 800.0 - требуемая длинна луча),если первая точка это позиция игрока,а вторая точка это координаты его прицела?
Если делать вектор,то определенным способом это получается делать,но конечная точка поднимается слишком высоко,либо опускается(зависит от конечного расстояния второй точки). Это фиксилось определенными расчетами,но все равно как то не то. Можно ли это все сделать как то проще?
Вот код:
Если делать вектор,то определенным способом это получается делать,но конечная точка поднимается слишком высоко,либо опускается(зависит от конечного расстояния второй точки). Это фиксилось определенными расчетами,но все равно как то не то. Можно ли это все сделать как то проще?
Вот код:
PHP:
int TraceFailEye(int iEyeClient)
{
float TRpos[3], TReye[3];
GetClientEyeAngles(iEyeClient, TRpos);
GetClientEyePosition(iEyeClient, TReye);
TR_TraceRayFilter(TReye, TRpos, MASK_SOLID, RayType_Infinite, TraceEntityFilterPlayer, iEyeClient);
if (TR_DidHit(null))
{
int iTrClient = TR_GetEntityIndex(null);
if (iTrClient > 0 && iTrClient <= MaxClients) return iTrClient;
float posn[3];
GetClientAbsOrigin(iEyeClient, posn);
TR_GetEndPosition(TReye, INVALID_HANDLE);
float dist1 = GetVectorDistance(posn, TReye)
if (dist1 > 800.0)
{
float dist2 = SquareRoot(Pow(TReye[0] - posn[0], 2.0) + Pow(TReye[1] - posn[1], 2.0));
TReye[0] = posn[0] + Cosine(DegToRad(TRpos[1])) * 800.0;
TReye[1] = posn[1] + Sine(DegToRad(TRpos[1])) * 800.0;
float posZ = RoundFloat((dist2 - 800.0) / 350.0);
if (posZ < 1.0) posZ = 1;
else if (posZ > 4.0) posZ = 4;
float posz;
switch (posZ)
{
case 1:
{
if (dist2 > 1050.0) posz = 21.0;
else if (dist2 < 850.0) posz = 1.0;
else if (dist2 > 850.0 && dist2 < 1000.0) posz = 8.7;
else if (dist2 > 1000.0 && dist2 < 1050.0) posz = 11.0;
}
case 2:
{
if (dist2 < 1420.0) posz = 13.0;
else posz = 15.0;
}
case 4:
posz = 10.0;
default:
posz = 11.3;
}
TReye[2] = posn[2] + (800.0 * (TReye[2] - posn[2]) / dist2) + posz * posZ;
}
posn[2] += 43.0;
TE_SetupBeamPoints(posn, TReye, Sprite[0], 0, 0, 0, 0.8, 5.0, 5.0, 10, 0.0, {255, 255, 255, 255}, 0);
TE_SendToAll(0.0);
}
return -1;
}
Последнее редактирование: