это просто мой рассказ о сегодняшней проблеме в гейм-мейкер студии. кому то может быть полезно для улучшения видения проблем в коде. рекомендуется лицам "шарющим" за GML и gamemaker studio.
в коде создания рума описана структура уровня и ивенты добавляются в таблицу текущей миссии - считывается игроком и если текущий тик = тику события то оно вызывается.
if mission_events[ticks ] {...}
проблемой стало то что в иерархии ивентов в виде:
add_tick(5, ...) - сработает на 5 секунде
add_tick(10, ...) - сработает на 10 секунде
add_tick(15, ...) - сработает на 15 секунде
add_tick(20, ...) - сработает на 20 секунде
очень неудобно сменить продолжительность одного ивента чтобы она вписалась во всю цепочку.
например хочу изменить один из первых ивентов, просто укоротить ее продолжительность - мне придется укоротить все ивенты вручную из за этого
поэтому я поменял вид структуры на:
где первое значение равно тому, сколько секунд должно пройти с предыдущего ивента. это удобно и легко поддается редакции + понятно что "событие полет длится 10 секунд", а не 420 секунда миссии = полет.
но и тут не без проблем. обработчик тиков записывал какой ивент исполнен в виде expired_events[tick] = true или expired_events[5 секунд] = true и проверял, находится ли текущий ивент в этой таблице.
и в виде повторяющихся ивентов длинною в 5 сек, очевидно, сработал бы только 1. поэтому я думал ввести сид для каждого ивента (это было крайне тупое и импульсивное решение).
минус этого метода в том что я все еще не понимал как правильно проходиться по валидным ивентам. t = (ticks += 1) + условие с поиском наименьшего валидного ивента ближе всего к t? что то в этом роде должно было происходить но на половине пути я просто полежал 5 минут и понял, что:
в коде создания я использую функцию add_tick() - ее вид должен быть удобен с одной стороны. а другая сторона обрабатывает аргументы и может просто приплюсовать к ticks (5) общую продолжительность миссии за кулисами:
valid_events[mission_duration(0) + tick(5)] = ...
valid_events[mission_duration(5) + tick(5)] = ...
и после этого уже добавляем в таблицу ивентов миссии.
вот такое вот простое решение в итоге вышло. поэтому если у вас возникают проблемы такого рода, стоит дважды подумать прежде чем создавать костыльное решение, которая кажется логичным с первого взгляда. излишнее усложнение = фу
этот пост не претендует на премию как самая интересная, наоборот, я ее создал потому что начал вести социальные сети и хочу собрать вокруг себя аудиторию для своих будущих игр и это тестовый пост.
в скором времени начнут выходить новости о моей первой тестовой игрушке на платформе itch.io.