|
Форум Программирование в Pawno Стандартные функции PointAngle [угол поворота] |
PointAngle [угол поворота] |
Функция позволяет узнать угол поворота от точки до точки.
Код stock Float:PointAngle(playerid, Float:xa, Float:ya, Float:xb, Float:yb) { new Float:carangle; new Float:xc, Float:yc; new Float:angle; xc = floatabs(floatsub(xa,xb)); yc = floatabs(floatsub(ya,yb)); if (yc == 0.0 || xc == 0.0) { if(yc == 0 && xc > 0) angle = 0.0; else if(yc == 0 && xc < 0) angle = 180.0; else if(yc > 0 && xc == 0) angle = 90.0; else if(yc < 0 && xc == 0) angle = 270.0; else if(yc == 0 && xc == 0) angle = 0.0; } else { angle = atan(xc/yc); if(xb > xa && yb <= ya) angle += 90.0; else if(xb <= xa && yb < ya) angle = floatsub(90.0, angle); else if(xb < xa && yb >= ya) angle -= 90.0; else if(xb >= xa && yb > ya) angle = floatsub(270.0, angle); } GetVehicleZAngle(GetPlayerVehicleID(playerid), carangle); return floatadd(angle, -carangle); } Оптимизация: #define fclamp360(%0) %0 += (%0 >= 360.0) ? -360.0 : ((%0 < 0.0) ? 360.0 : 0.0) Код #define fclamp360(%0) %0 += (%0 >= 360.0) ? -360.0 : ((%0 < 0.0) ? 360.0 : 0.0) stock ReturnZAngleToPoint(playerid, Float:x, Float:y) { new Float:P[4]; GetPlayerPos(playerid,P[0],P[1],P[2]); P[3] = (180.0 - atan2(floatsub(P[0],x),floatsub(P[1],y))); fclamp360(P[3]); return P[3]; } Программист любитель :) |
| |||
| |||