George писал(а):А как ты оставишь её без изменений?
Буду возвращать значение в зависимости от критериев.
Либо вычислять, либо хранить в регистре.
George писал(а):Потому что он жрёт до .... CPU. CB 27 можно использовать только тогда, когда иначе никак. В нашем случае можно обойтись.
Читаем:
anim_speed 0 .. 16 Decide the time an animation frame should last. Return value is interpreted as (num_ticks = 2^anim_speed), which each tick lasting 30 ms. Avoid using this callback if possible, since it has to be called each tick for every animated tile. This can be used to create animation frames that last between 30 ms and 33 minutes.
Каждый тик фрейма производится этот опрос длительности следующего фрейма. Если мы зададим бОльшую длительность, до до следующего вызова нагрузки не будет. Там и так дофига блоков вызывается ещё один на их фоне будет стоить копейки.
Другое дело, если задать anim_speed близкое к 0, тогда не только в anim_speed будет проблема, проблема будет в частом вызове других cb, в т.ч. для отрисовки.
Я хочу чего сказать - что надо разумно задавать длительность фрейма, подходящую для анимации. Слишком часто вызывать не стоит. Величина 3 вполне оптимальна.
George писал(а):Что значит с 2 на 3? Если ты про PROP 10 то ты просто замедлил анимацию и всё.
Поясню. Бульдозерная анимация у тебя на 8 фреймов, а задавал ты в 2 раза больше - 16. Т.е. с в два раза большей точностью ты делал вызовы, но внешний вид менял в 2 раза реже. Я эту ступеньку убрал, у меня 8 фреймов, и вызываются они реже. Визуально ничего не изменилось -- бульдозеры елозят так же, с той же скоростью. Но вызов anim_next_frame/anim_speed происходит в 2 раза реже.
С дымом я действительно снизил скорость в 2 раза. Он теперь как у стандартной электростанции мельтешит. А был смысл мельтешить дымом чаще?
George писал(а):В мире TTD зимой деревья покрыты снегом, но листья не опадают. Не надо это менять, лес будет выделяться из окружающего леса. Это неправильно. Лес, на котором нет производства, если не смотреть на домик лесника, должен быть совершенно незаметен.
Ну, в реальной жизни листья опадают и стоят палки. Спрайты такие есть, там даже несколько стадий опадания. Снежная линия работает, чего бы и с листьями не поработать. Но это так, эстетика.
Просто снегом покрывать куда проще, чем лисья отбирать.
George писал(а):Не надо. Это приём пассажиров. Если невдалеке будут домики, то груз принимается.
Это как у многих домов. Отдельно стоящий дом может не принимать пассажиров/почту/товары, и только группа домов принимает груз.
Я понимаю, что это добавляет вклад в пассажироперевозки, я не понимаю зачем это для той же лесопилки, как предприятия принимающего и производящего грузы конкретного вектора. Поясни?
George писал(а):Хорошо, а как тогда менять счётчики? Даже в самом последнем коде (bauxite mine) CB26 используется как таймер. Более эффективных таймеров я не нашёл. Твои предложения?
Не понял вопроса.
Смена индекса фрейма означает смену внешнего вида. Вхолостую менять индекс фрейма смысла нет.
По сути, если мы знаем, что следующий тик должен произойти через N единиц времени, то мы меняем animation_speed под это N, и не делаем холостых вызовов ожидания.
Это похоже на таймер Windows - мы задаём время следующего вызова anim_next_frame вызовом anim_speed, и до истечения возвращенного anim_speed времени вызова не случится.