Добрый день
подскажите есть ли какай нибуть функция котороя позволяет определить куда смотрит игрок на север, запад и тд
пробовал сделать с GetPlayerFacingAngle но у меня почемуто не получается
пробовал делать по такому примеру
Прошу помощи
Добрый день
подскажите есть ли какай нибуть функция котороя позволяет определить куда смотрит игрок на север, запад и тд
пробовал сделать с GetPlayerFacingAngle но у меня почемуто не получается
пробовал делать по такому примеру
Прошу помощи
Последний раз редактировалось Витёк; 08.12.2016 в 11:00.
Разработка • • Ч Е Р Н О Б Ы Л Ь • • Выживание в припяти •
Направлен игрок в какую строну или куда направлена его камера?
А знаешь почему? Редко когда игрок встает ровно по вращению.
Если у тебя проверка
А нуль - это 0.0000. Если игрок стоит во вращении 0.0001 то у тебя уже проверка пройдет мимо.PHP код:
if (GetPlayerFacingAngle(playerid) == float(0)) SendClientMessage(playerid, -1, "north");
Не знаю, правильно ли я написал этот код, ибо недавно встал и мозги не варят:
PHP код:
switch (GetPlayerFacingAngle(playerid))
{
case float(-2)..float(2): SendClientMessage(playerid, -1, "north");
case float(88)..float(92): SendClientMessage(playerid, -1, "west");
case float(178)..float(182): SendClientMessage(playerid, -1, "south");
case float(268)..float(272): SendClientMessage(playerid, -1, "east");
}
Последний раз редактировалось middlematt; 08.12.2016 в 11:44.
Во-первых, что это за извращение с вызовом float?
Во-вторых, когда это у нас на компасе появились отрицательные значения градусов?
В-третьих, когда это GetPlayerFacingAngle стала возвращать градусы не через второй параметр?
Функция:
И вариант массива, в котором уже заранее хранятся имена сторон светаPHP код:
stock GetDirectionInWhichPlayerLooks(playerid, Float:facing_angle = -1.0)
{
static const
Float: side_of_the_world = 20.0,// Минимум: 0.0, Максимум - 45.0
Float: coord_indent = 0.1;
new const
Float: north_coord_min = 360.0-side_of_the_world,
Float: north_coord_max = 0.0+side_of_the_world,
Float: west_coord_min = 90.0-side_of_the_world,
Float: west_coord_max = 90.0+side_of_the_world,
Float: south_coord_min = 180.0-side_of_the_world,
Float: south_coord_max = 180.0+side_of_the_world,
Float: east_coord_min = 280.0-side_of_the_world,
Float: east_coord_max = 280.0+side_of_the_world;
if(!floatcmp(facing_angle, -1.0))
GetPlayerFacingAngle(playerid, facing_angle);
else if(floatcmp(facing_angle, 0.0) == -1)
facing_angle = 0.0;
else if(floatcmp(facing_angle, 360.0) == 1)
facing_angle = 360.0;
if(north_coord_min <= facing_angle <= 360.0 || 0.0 <= facing_angle <= north_coord_max)
return 0;
else if(north_coord_max+coord_indent <= facing_angle <= west_coord_min-coord_indent)
return 1;
else if(west_coord_min <= facing_angle <= west_coord_max)
return 2;
else if(west_coord_max+coord_indent <= facing_angle <= south_coord_min-coord_indent)
return 3;
else if(south_coord_min <= facing_angle <= south_coord_max)
return 4;
else if(south_coord_max+coord_indent <= facing_angle <= east_coord_min-coord_indent)
return 5;
else if(east_coord_min <= facing_angle <= east_coord_max)
return 6;
else //if(east_coord_max+coord_indent <= facing_angle <= north_coord_min-coord_indent)
return 7;
}
Чтоб настроить "чувствительность" функции к определению сторон света (то бишь, тот промежуток координат, при котором будет определять север, а при котором уже северо-запад), нужно изменить значение вот этой переменнойPHP код:
new side_of_the_world_list[8][14] =
{
"Север",
"Северо-Запад",
"Запад",
"Юго-Запад",
"Юг",
"Юго-Восток",
"Восток",
"Северо-Восток"
};
PHP код:
Float: side_of_the_world = 20.0,
Больше никаких настроек не нужно производить.
Теперь касаемо параметров функции. В ней есть один необязательный параметр, который позволяет заранее указать направление взгляда игрока. Он сделан на случай, если ты в своём коде уже вызывал GetPlayerFacingAngle до того, как вызвал мою функцию. То бишь:
Если же этого не сделать (не указать второй параметр), вызов GetPlayerFacingAngle случится внутри самой функции GetDirectionInWhichPlayerLooks. То бишь, можно сделать так:PHP код:
new Float:facing_angle;
GetPlayerFacingAngle(playerid, facing_angle);
//Тут твой остальной код, в котором ты используешь facing_angle
//И теперь тебе нужно узнать сторону света, в которую смотрит игрок. Ты можешь сразу прописать направление взгляда во втором параметре
GetDirectionInWhichPlayerLooks(playerid, facing_angle);
И теперь, при нажатии на "Y", в чат будет писать сторону света, в которую смотрит игрок.PHP код:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(newkeys & KEY_YES)
SendClientMessage(playerid, -1, side_of_the_world_list[GetDirectionInWhichPlayerLooks(playerid)]);
return 1;
}
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Витёк (09.12.2016)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)