Добавлен Diaboliko,
не публикуется
Хотелось бы знать какие пути решения без использования отдельных массивов/хэштэйбла видит кто-либо для разрешения ситуации следующего характера:
Скилл поражает цели в выбранной зоне и оставляет даммика, находясь возле которого юниты, задетые заклинанием, получают урон. В один момент времени может существовать хоть с десяток таких даммиков, но они должны наносить повреждения лишь целям, задетыми заклинанием их создателя. Проверка на бафф не актуальна, поскольку два таких кастера будут перебивать баффы друг друга.
В данный момент под каждый каст скилла выделяется перерабатываемая группа на время жизни этого скилла, которая содержит юнитов, задетых этим конкретным кастом, а также группа, содержащие все цели, пораженные этими же заклинаниями кастера. Поскольку нельзя добавить в группу юнита, который уже содержится в ней, нерешенным остается вопрос о том, как же удалять юнита из второй группы, только когда он не содержится в первых группах. Сейчас на ум приходит только выделение, скажем, 64 перерабатываемых элементов параллельных массивов юнит+интегер, куда в интегер записывается число групп, в которых содержится юнит. Солюшн весьма хреновый, поскольку придется каждый раз искать этого юнита в 64 элементах массива...
Скилл поражает цели в выбранной зоне и оставляет даммика, находясь возле которого юниты, задетые заклинанием, получают урон. В один момент времени может существовать хоть с десяток таких даммиков, но они должны наносить повреждения лишь целям, задетыми заклинанием их создателя. Проверка на бафф не актуальна, поскольку два таких кастера будут перебивать баффы друг друга.
В данный момент под каждый каст скилла выделяется перерабатываемая группа на время жизни этого скилла, которая содержит юнитов, задетых этим конкретным кастом, а также группа, содержащие все цели, пораженные этими же заклинаниями кастера. Поскольку нельзя добавить в группу юнита, который уже содержится в ней, нерешенным остается вопрос о том, как же удалять юнита из второй группы, только когда он не содержится в первых группах. Сейчас на ум приходит только выделение, скажем, 64 перерабатываемых элементов параллельных массивов юнит+интегер, куда в интегер записывается число групп, в которых содержится юнит. Солюшн весьма хреновый, поскольку придется каждый раз искать этого юнита в 64 элементах массива...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован biridius
Каждую сек. очищаем группу, далее каждый даммик перебирает юнитов вокруг себя добавляя их в группу, затем каждый даммик перебирает группу нанося урон
Отредактирован Diaboliko
Опять же - единственный солюшн, который я вижу - использовать 2 параллельных массива(юнит+интегер), где массив юнитов заменит глобальную группу, а параллельный этому массиву массив интегеров будет работать как счетчик. Недостаток этого метода в необходимости искать задетых каждым следующим кастом юнитов из массива юнитов.
Если этого описания все еще недостаточно, то пора закрывать эту тему -_-
не проще ли создать 2 структуры
1 содержит группу всех задетых юнитов и крепится к кастеру
2 содержит оставшееся время баффа, даммика который наносит урон и структуру 1 и крепится к юнитам попавшим под спелл
Diaboliko:
Отредактирован Diaboliko
nvc123:
Diaboliko:
если время равно 0 то удаляем экземпляр
Diaboliko:
если бафы от 1 кастера то просто обновляется время
а если от разных то они действую порознь
Diaboliko:
Отредактирован Diaboliko
Просто я все больше вижу в твоем решении свое. Подход немного другой, но в целом - я делаю тоже самое. Я храню в массиве из 64 элементов(сохранив ссылку на выделенное пространство там, где надо) информацию о числе задеваний таргета Т1 кастами кастера C1. Прогоняюсь через этот массив каждый раз при непосредственном задевании дабы увеличить или уменьшить счетчик, плюс при проверке на нахождение целей вблизи даммиков для нанесения урона. Уменьшаю этот счетчик при звонке таймера на окончание действие дебаффа(/жизни даммика). Считай тот же отсчет времени дебаффа. Таймер реализован как отдельный поток работы одного глобального, так что использую ресурсы, находящиеся в простОе.
Отредактирован nvc123
да и размер массива всегда фиксирован и равен 8192(2 в 13 степени)
Diaboliko:
сколько таймеров(игровых объектов), с каким периодом работают таймеры и каким образом ты реализуешь свои таймеры?
nvc123:
Эти "потоки" так или иначе сидят в простое и персонаж сам по себе ест не много этих "потоков", поэтому я их с легким сердцем пускаю в оборот.