Когда в тебя прилетает залп, или тебя берет в лок весь вражеский флот по бродкасту, или тебя ждамит полсотни натравленных на тебя дронов, тебе надо применить актуальные параметры корабля. Сейчас - эти параметры пересчитываются один раз - когда во флоте меняется вингбустер, а применяются постоянно.
Если бонусы будут зависеть от расстояния - актуальные параметры будут пересчитываться
- либо каждый тик (ведь каждый тик меняется расстояние между вами)
- либо каждый раз перед использованием, то есть 0/100/200/500 раз за тик.
Ага, твоя трансверсальная скорость, просто скорость, действие пэйнтеров и прочие "актуальные параметры корабля" расчитываются безусловно только когда во флоте меняется вингбустер.
Я молчу, что скорость стрельбы любого разумного числа маэлей много меньше тика сервера.(то есть будет 0.001 операция за тик, например) это даже не столь критично. Критично то, что пересчитываться параметры корабля будут только в случае перехода между состояниями. Все остальное время бонус статично присутствует или статично отсутствует.
Пересчитать параметры корабля каждый раз перед использованием (именно на этом продолжает настаивать Дельчиф, я правильно понял?) - значит пересчитать параметры корабля каждый раз перед тем как посчитать урон от каждого из 250 маэлей. А не как сейчас просто посчитать урон.
Нет, в том то и дело, что неправильно понял. Урон просто считается от каждого из 250 маэлей. Никаких перерасчетов не производится. Сам урон считается уже с учетом действия бонусов на твой корабль.
Да, проверка расстояния - фигня, особенно в полярной системе координат, и похоже мы и так каждый тик пересчитываем расстояние до всех объектов в гриде. Не в этом проблема. Проблема в том, как часто придется пересчитывать параметры кораблей.
Реже, чем раз в тик. Точнее параметры кораблей вообще не пересчитываются. Они всегда равны актуальному значению.
Ты хоть понимаешь что для кода выражение a=x не важно может ли меняться x или нет. Это смущает только человека.
Хотите прочувствовать какой лаг вызывает пересчет параметров корабля? зайдите во флот и посмотрите какой это вызывает лаг. Поменяйте во флоте вингбустера, посмотрите какой это вызывает лаг. А теперь представьте этот лаг или каждую секунду, или (еще лучше) 200 раз в секунду.
Ага, попросите вингбустера выключить линк. Отключите модули. Что никто не умер в лагах при пересчете параметров корабля? Странно...
Ну, попробую ответить.
Что же, неплохо. А теперь разбор полетов.
Во-первых, это не "еще один" способ. Это тот самый способ под номером 2 в моем посте.
Во-вторых, у этого алгоритма есть две ЗДОРОВЕННЫЕ ДЫРИЩИ, не закрыв которые ему нельзя давать ход.
Первая - наличие/отсутствие бонуса можно определить только в момент активации модуля, на который распространяется бонус, что вообще недопустимо с точки зрения геймплея. Вариант с кэшированием последнего значения не подходит по понятным причинам.
Вторая - даже если забыть про скилы ветки лидершип, то есть такой замечательный линк как Siege Warfare Link - Shield Harmonizing. Данный линк НЕ ВОЗДЕЙСТВУЕТ ни на один из модулей корабля. А исключительно на его резисты. Таким образом нам не к чему привязывать проверку(ну так, чтобы не попадать в первую дыру разумеется, ибо так-то она завязывается на просчет дамага по тебе).
Как предлагаешь решить озвученные выше проблемы?
Бонусы привязываются не к модулям а к расчетной модели.
То есть параметры резистов учитываются при расчете урона в данном случае. (Они же там и так учитываются)
Зы: и разумеется, еще вопрос, как сделать проверку бонуса на резисты, чтобы минимально нагружать систему когда тебя прайморит 100500 шипов.
Ну их там может быть 2000, например (при 100500, конечно залагает от трафика)
Тут надо подумать хотя расчет DMG=DMG*(куча параметров и модификаторов сейчас)*(модификатор бонусника в рендже)
мало отличается от DMG=DMG*(куча параметров и модификаторов сейчас)*(фиксированый модификатор)
по производительности.