Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 7 из 7
  1. #1
    Аватар для Salik_Davince
    Пользователь

    Статус
    Оффлайн
    Регистрация
    18.02.2014
    Сообщений
    81
    Репутация:
    1 ±

    Функция PlayerInLine

    Здравствуйте, ломаю голову с функцией проверки на нахождение игрока в линии.
    Те функция должна быть примерно таковой - PlayersInLine(startPosX, startPosY, startPosZ, endPosX, endPosY, endPosZ, radius = 1.0)//это в 3д измерении, было бы так же познательно узнать и в 2д

    startPosX,Y,Z = Начальная точка
    endPosX,Y,Z = Конечная точка
    radius = радиус линии (т.e толщина)

    Функция в примере картинки -


  2. #2
    Аватар для SteveStage
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.10.2019
    Адрес
    Планета Земля
    Сообщений
    315
    Репутация:
    6 ±
    1) Можно попробовать создавать просто радиусы вдоль линии, равномерно распределив по всей длине и исключив пробелы, но т.к. несколько кругов не овал, то это будет не очень практично и правильно.
    2) Также можно попробовать просто находить ближайшие к игроку координаты в пределах линии, потом через IsPlayerInRangeOfPoint проверять, стоит ли игрок в определенном радиусе.
    А вообще эта задумка бредова и сложна в реалиях сампа - тут только динамические зоны и радиусы.

    Последний раз редактировалось SteveStage; 15.10.2020 в 21:55.

  3. #3
    Аватар для ihNNNNNify
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2018
    Сообщений
    15
    Репутация:
    0 ±
    Попробуй использовать colandreas

  4. #4
    Аватар для Salik_Davince
    Пользователь

    Статус
    Оффлайн
    Регистрация
    18.02.2014
    Сообщений
    81
    Репутация:
    1 ±
    Плагин ColAndreas самое то, только в ней идёт учитываение только Объекта в линии, а мне нужно сделать по принципу Игрок/либо Машина, посмотрел исходники плагина, только там для нахождения линии используются с++ - функции. Так что тема пока актуальна.

  5. #5
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,441
    Репутация:
    1921 ±
    Ну так а что мешает найти описание исходного кода этих функций, подсмотреть алгоритм их работы и перенести его на Pawn?
    Связаться со мной в VK можно через личные сообщения этой группы

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  6. #6
    Аватар для Salik_Davince
    Пользователь

    Статус
    Оффлайн
    Регистрация
    18.02.2014
    Сообщений
    81
    Репутация:
    1 ±
    Вот в конечном счете к чему я пришёл с исходниками, но чутка не допонял. http://docs.ros.org/en/diamondback/a...8h_source.html
    //233 Строка функции

    EDIT: После пришёл к функции http://docs.ros.org/en/jade/api/tf/h...8454f4958f499a
    Последний раз редактировалось Salik_Davince; 21.10.2020 в 21:35.

  7. #7
    Аватар для Salik_Davince
    Пользователь

    Статус
    Оффлайн
    Регистрация
    18.02.2014
    Сообщений
    81
    Репутация:
    1 ±
    Выяснил, данная функция - performRayTest (rayTest)
    В самой функции имеется такое выражение, идёт проверка на rayTest, если объект найден в линии - возвращает флаг .hasHit - как наглядно можно привести пример сам код.

    1. int ColAndreasWorld::performRayTest(const btVector3& Start, const btVector3& End, btVector3& Result, int32_t& model)
    2. {
    3. btCollisionWorld::ClosestRayResultCallback RayCallback(Start, End);
    4.  
    5. dynamicsWorld->rayTest(Start, End, RayCallback);
    6.  
    7. if (RayCallback.hasHit())
    8. {
    9. Result = RayCallback.m_hitPointWorld;
    10. model = RayCallback.m_collisionObject->getUserIndex();
    11. return 1;
    12. }
    13. return 0;
    14. }


    Тут подробная информация, поможете? )
    http://docs.ros.org/en/diamondback/a...d9da557f359f36

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •