TauCetiStation / TauCetiClassic

Франкенштейн жив
GNU Affero General Public License v3.0
143 stars 417 forks source link

[Task][Bug] Постоянные обновления vision мобов #13094

Open volas opened 6 months ago

volas commented 6 months ago

Беспорядочные обновления eye_blur в течении практически одного тика, например в life

https://github.com/TauCetiStation/TauCetiClassic/blob/00be3fb068f4e7da83e24c3891da9d5eb33be0e5/code/modules/mob/living/carbon/human/life.dm#L820-L824

мы "лечим" зрение, и тут же в трейте слепоты

https://github.com/TauCetiStation/TauCetiClassic/blob/00be3fb068f4e7da83e24c3891da9d5eb33be0e5/code/game/dna/genes/disabilities.dm#L135-L138

или в процессинге органа глаз

https://github.com/TauCetiStation/TauCetiClassic/blob/00be3fb068f4e7da83e24c3891da9d5eb33be0e5/code/modules/organs/organ_internal.dm#L466-L469

дергаем обратно, и таких мест очень много. Каждый не знает о другом.

Каждое изменение eye_blur вызывает обновление соответствующих фильтров на плейне, что может быть затратно. И возможно было другой частью проблемы, решаемой в https://github.com/TauCetiStation/TauCetiClassic/pull/12430 (смотреть комментарий https://github.com/TauCetiStation/TauCetiClassic/pull/12430#discussion_r1391008105) - до этого фикса мы получается могли обновлять в плохом случае несколько сотен (!!!) фильтров на клиенте в тик.

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

volas commented 6 months ago

В целом можно еще посмотреть на /mob/living/carbon/update_sight(), с lighting_alpha такая же ситуация. Все эти обновления идут в лайфе, а не по ивентам, и сложно цеплять какие-нибудь сигналы.

С другими счетчиками "дамага" подозреваю похожие проблемы, типо ear_damage