PDA

Просмотр полной версии : Координаты прицела



gggfff
28.03.2019, 01:26
Тригонометрия.

Необходимо выполнить расчеты, чтобы получить координаты положения прицела и направления прицела.

По поводу оплаты договоримся.

DeimoS
29.03.2019, 13:17
Координаты прицела:


#define MAX_SCALE_DIST 100.0 //Максимальная дистанция для проверки, на которую пустится луч

new
Float:pX, Float:pY, Float:pZ,
Float:vX, Float:vY, Float:vZ,
Float:atX, Float:atY, Float:atZ;

GetPlayerCameraPos(playerid, pX, pY, pZ); //Узнаём начальные координаты для луча
GetPlayerCameraFrontVector(playerid, vX, vY, vZ);

//Вычисляем конечные координаты для луча
atX = pX + (vX * MAX_SCALE_DIST);
atY = pY + (vY * MAX_SCALE_DIST);
atZ = pZ + (vZ * MAX_SCALE_DIST);

//Узнаём, нашёл ли луч какую-то коллизию с объектом на своём пути
if(CA_RayCastLine(pX, pY, pZ, vX, vY, vZ, atX, atY, atZ)) //Нашёл
{ //Координаты коллизии (т.е. та точка, в которую смотрит игрок) теперь лежат в atX, atY, atZ
//Твой код
}
else //Луч ни с чем не столкнулся, возможно игрок смотрит в небо или что-то подобное
{
//Твой код
}


Направление прицела: GetPlayerFacingAngle (http://wiki.pro-pawn.ru/wiki/GetPlayerCameraFrontVector) или GetPlayerCameraFrontVector (https://wiki.sa-mp.com/wiki/GetPlayerCameraFrontVector).

Пользуйся. Отдаю безвозмездно

gggfff
29.03.2019, 17:44
Ты проверял в действии? Видимо нет, а я проверял
Это центральная точка на экране и направление у нее тоже идет по центру, у прицела же иначе

Чтобы получить координаты положения прицела и направления прицела, нужно сначала выставить начало луча используя координаты Origin во время выстрела, далее сместить координаты направления камеры таким образом, чтобы луч был пропорционален направлению прицела (проще говоря, направить луч в прицел), ну а после того, как направление луча найдено, нужно найти координаты начало луча используя GetPlayerPos + GetPlayerFacingAngle.

Концепцию и порядок действий описал, осталось реализовать. Найдутся такие? Денюжкой не обижу