GM 5: Создаем объект-локацию и наполняем его

Ладушки, снова кодим. Займемся локацией перед ее заселением мобами.

Для тех кто не понимает что происходит ниже ссылка на первую статью из цикла

Про ощущения

После прошлой статьи было желание сразу же накинуться на следующую, но я себя сдержала. Мне начинает казаться, что такой подход мне больше подходит. Обычно я погружаюсь во что-то с головой и рискую перегореть и потерять интерес. А с промежутками голова остывает, мысли о возможных проблемах уходят, заинтересованность не пропадает, появляются новые идеи, а старые становятся четче.

Последние приготовления

В будущем может получиться так, что я решу по какой-либо причине изменить размер карты или смещу ее в сторону (при добавлении новых локаций, например), потому сделаю небольшую зарубку. Выберу на рисунке карты точку, от которой буду вести отсчет координат для размещения объектов и пропишу в коде комментарий с указанием размера изображения локации в пикселях (если потеряю картинку и буду искать новую).

Пускай это будет халупа жаднюги.
Пускай это будет халупа жаднюги.

Соответственно, нужно поправить и код для пометок, чтобы они указывали координаты пометок относительно этой точки.

Идеально.
Идеально.

Создаем объект-локацию

Создаем невидимый объект Кардон, и помещаем его на игровую карту (в комнату) через скрипт создания объекта внутри "зоны" (чтобы запомнить его ID и иметь возможность в будущем к нему обращаться).

В этом объекте будем хранить массивы с координатами всех возможных типов мест и объектов, к которым будут обращаться отряды на карте при поиске точек назначения. Также он будет отвечать за удаление и размещение игровых ресурсов между выбросами (аномалий и мест кормежки мутантов). В нем же будут генерироваться случайные события на локации.

Для начала выберем пару мест на карте и создадим мини массив для обкатки алгоритмов.

Этого пока хватит.
Этого пока хватит.

Я просто выбрала 6 точек, где могут появиться аномалии или прокормка для мутантов, теперь занесем эти координаты в массив. Еще сохраним в отдельную переменную количество точек для обращение к ней в циклах в будущем. Начальную позицию mass[0] заполним также значением из этой переменной, чтобы не было диссонанса, когда у нас точек 6, но последняя записана в mass[5] (иногда это может сбить с толку, если долго в код не заглядывать).

Вот тут у меня дилемма. Мне нужно хранить для каждой точки два значения, координату «х« и "у". Можно сделать два массива под каждую отдельную координату или один двойной массив, это в теории займет меньше памяти, но будет трудночитаемым в будущем. Ведь надо будет помнить, что условный mass[0, 100] хранит координату по »х», а mass[1, 200] — по "у".

Хммм… пойду лучше по первому варианту, ведь проблем с производительностью в моем проекте быть не должно.

И еще один вопрос остается… важен ли порядок внесения точек в массив? Буду ли я с этим играться в будущем? Пока не знаю. Не буду этим грузиться. У меня пока всего лишь 6 точек, это можно будет быстро поправить после пробных прокатов.

Хмм… теперь надо запустить процесс размещения местных благ на карте. Для этого создадим переменную — триггер для "Кардона«. Если она равна "1", то »Кардон« очищает карту от аномалий и переразмещает их в рандомные места, после чего она станет «0«. Переменная будет равна »1» изначально, чтобы расположить аномалии при запуске игры. Также объект »зона« будет менять значение на "1» по окончании каждого цикла.

В "Кардоне« создадим событие »шаг« и в нем пропишем код размещения аномалии и травы в случайном месте при условии срабатывания нашего триггера. Для этого сделаем объекты »аномалия« и »трава".

Я в процессе накосячила, и все мои объекты создавались исключительно в углу экрана, потому что нужно было учесть, что записанные мной координаты точек были с учетом изначальных координат для локации. Тех, что в начале задавали.

Так… косяков было куда больше и они абсурдные, но расписывать я их не буду, а то совсем потеряете веру в меня и перестанете ставить лайки.

Ооо… один был достаточно серьезным. Мне нужно было координаты начальной точки локации не передавать из зоны в Кардон, а, наоборот, в Кардоне запрашивать их из зоны. В противном случае они не учитывались при занесении данных в массив.

И блть, как же наш любимый ПДФ рвется при размещении нескольких кавычек в одном абзаце при исправлении форматирования… Да я даже редачить не буду, сами посмотрите на эту хренотень.

Создаем объекты наполнения

Объекты аномалия и трава. Они будут размещаться на локации и иметь запас ресурса, по истощении которого будут пропадать. На данном этапе нужно отработать механизм их появления и удаления.

Появляются они корректно. Нужно решить, как их удалять. Можно в Кардоне создать еще один массив и прописывать в него ID ресурсных объектов, чтобы по окончании цикла отправлять им команду на удаление. Но что делать, если объект истощился и его уже нет на карте? Тогда при попытке отправить ему команду будет вылетать ошибка, а значит, надо каждому объекту при создании отправлять данные о его местоположении в массиве Кардона, чтобы перед удалением из-за истощения он отправлял сигнал об этом в массив.

Да пофиг, проще ввести в зону переменную, которая будет переключаться на "1" в конце цикла на небольшой промежуток времени и отслеживать ее из ресурсных объектов, чтобы по сигналу удалить их самих из себя.

Не идеально, но работает как надо.

На этом пока остановлюсь. Дальше буду продумывать организацию файлов фракций. Точнее, пока проработаю мутантов, их поведение, цепочки питания, параметры агрессивности. Главный вопрос делать ли мне один файл, который будет контролировать задачи всех отрядов мутантов или сделать отдельные файлы на каждую разновидность?

Нужно ли прикладывать скрины с текстом кода или добавить условные блок-схемы с описанием какой объект куда ссылается и где берет запросы?
И так сойдет
Прикладывай скрины с кодом, позорься до конца
Рисуй блок схемы хоть от руки
Все нам подавай
2727
29 комментариев

Опять блог о разработке

3
Ответить

могу обзор хорни игры сделать

4
Ответить
3
Ответить

ля сколько ярлычков там... полюбас там дотушка затерялась
и конечно же, жду босса бабочку, да

2
Ответить

нее, дтф уберег от доты, слава грангеру

2
Ответить

Не бросай это дело

2
Ответить
1
Ответить