PDA

Просмотр полной версии : [Вопрос] ColAndreas. Координаты



Jous
20.02.2018, 22:11
Долго искал по интернету и пришел к выводу, что единственным нормальным выходом будет ColAndreas. Мне требуется узнать, в какую точку смотрит игрок(и куда он целится), а именно координаты этой точки. Только вот функцию из ColAndreas, которая выполняет это, не знаю. Прошу помочь, описать функцию и желательно пример использования, просто в первые работаю с этим плагином

Long-
24.02.2018, 15:13
Думаю, хватит одной функции:


CA_RayCastLine(Float:StartX, Float:StartY, Float:StartZ, Float:EndX, Float:EndY, Float:EndZ, &Float:x, &Float:y, &Float:z)

Nexius_Tailer
24.02.2018, 17:21
#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 //Луч ни с чем не столкнулся, возможно игрок смотрит в небо или что-то подобное
{
//Твой код
}

Long-
24.02.2018, 17:34
#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 //Луч ни с чем не столкнулся, возможно игрок смотрит в небо или что-то подобное
{
//Твой код
}


Лучше бы он сам попробовал сделать, чем кидать готовый код :)
Так-же у тебя немного не корректный код:

Параметры в первые три аргумента стоило находить от нахождения игрока, а не камеры.

Float:StartX, Float:StartY, Float:StartZ - задаёшь сюда координаты игрока
Float:EndX, Float:EndY, Float:EndZ - задаёшь сюда точку назначения
&Float:x, &Float:y, &Float:z - получаешь здесь координаты точки коллизии объекта

Nexius_Tailer
25.02.2018, 02:22
Лучше бы он сам попробовал сделать, чем кидать готовый код :)
Так-же у тебя немного не корректный код:

Параметры в первые три аргумента стоило находить от нахождения игрока, а не камеры.

Float:StartX, Float:StartY, Float:StartZ - задаёшь сюда координаты игрока
Float:EndX, Float:EndY, Float:EndZ - задаёшь сюда точку назначения
&Float:x, &Float:y, &Float:z - получаешь здесь координаты точки коллизии объекта
Корректный, т.к. от позиции игрока будет правильно работать только тогда, когда он на ногах, в то время как от камеры работает корректно при любой ситуации.