Пример рекомендуется для знающих GML и геометрию на хорошем уровне
Пример для тех, кто делает игры типа "Splinter Cell" и тем, кто знает про технологию "Frustum Culling" для повышения fps.
- Основа - это определение видимости точки. Идет проверка на расстояние, столкновение отрезка со стенами и нахождение точки в "диапазоне углов".
- Для куба идет проверка всех 4-х углов на видимость. Если виден хоть один, то значит куб в зоне видимости.
- Для круга находятся 2 точки. Они находятся на прямой, перпендикулярной прямой между точкой "глаза" и центра круга (точки естественно расположены на окружности круга).
- На самом деле можно легко расширить движок, до возможности проверки объекта любой формы. Для этого надо отредактировать код видимости куба, а именно изменить массив вершин на все вершины объекта.
- Правая кнопка мыши - передвинуть "глаз"
- Левая кнопка мыши (Debug режим) - направить "глаз" на мышь
- Левая кнопка мыши (Block режим) - поставить блок
- Block panel - включает/выключает Block режим
- Debug points - показывает/скрывает вспомогательные точки
- Automove - включает/выключает автоматическое передвижение "глаза" по направлению (при столкновении выбирается случайное направление)
- Draw zone - показывает/скрывает зону видимости "глаза"
- Draw lines - показывает/скрывает линии от "глаза" к вспомогательным точкам (для проверки столкновений)
P.S: Я знаю что правильно писать "eye". "Eve" - это марка.
P.S: Весь код я писал с нуля, поэтому я обладаю всеми правами на пример.
P.S: Кстати тут есть неплохой объект панелек "object_gui", тоже может понадобиться.