Crystallize писал: В фитцквейке нельзя обновить r_refdef.vieworg через VectorAdd. Вот Мастер бы развонялся...
Цитата:
Дядя Миша писал: Скорее расскажи ему об этом
Всё оказалось ещё интереснее. Сами VectorAdd и VectorCopy не виноваты. Но, в совершенно другой функции которая указана выше в том же файле, и которая даже не вызывается, есть объявление:
vec_t Length2D (vec3_t v);
Можно оставить в той функции только его, и всё будет работать. Но если ту строчку или ту функцию целиком закомментировать, то в совершенно другом месте ниже по файлу что-то по-тихому сломается и будет неправильно считаться позиция камеры.
Ну да, она юзается у меня там где что-то ломается. Непонятно только почему она берется из совершенно левой функции а не из матчлибы где она тоже есть. Как объявление вообще может браться из чужой функции?
Дядя Миша Я говорю, в Си для декларации функции не существует понятия области видимости. Главное чтобы где-то в файле она была. Ее можно объявить в одной функции, а пользоваться ей совсем в другой.
Дядя Миша писал: Вообще-то структура cl зануляется при каждом рестарте уровня. С чего бы пропадать? И почему именно 655 секунд? Как ты получил это число?
Перепутал с шортом. Этот счетчик бежит по 100 мессаг в секунду, я поделил 65к на 100.
currentorigin в кваке отстаёт от origin на целый кадр. Снова Мастер moment.
Цитата:
Дядя Миша писал: Crystallize я боюсь ты её как-то неправильно понял. Модули - это в Делфи.
Я не в курсе про Дельфи и модули.
Я просто жду что правила для переменных будут распространяться также и на остальные части языка. Та самая интуитивная понятность.
Дядя Миша писал: а кто мешает объявить переменную в одном файле и использовать в другом?
Никто не мешает, но и проблема совершенно обратная.
Если ты шаришь переменную между функциями, ты сам выносишь её в глобалсы. Если ты шаришь её между файлами, ты ещё и пишешь extern в дальнем файле. Ты сознательно выстраиваешь эту цепочку и если что не так то компилятор сразу орёт про unresolved external.
А я столкнулся с тем, что ненайденная декларация не вызывает никаких сообщений даже на Level 4, просто фича не работает. А если она найдена, она без моего ведома растекается на весь файл, опять же мне не сообщая. А прикинь работать над одним проектом командой, кто-то убрал декларацию а у тебя по-тихому что-то сломалось.
extern - это просто подсказка такая. Оно в любом случае "растекается" как ты изящно выразился, потому что объявлено в глобальном скоупе.
Файлы видимость НЕ ОГРАНИЧИВАЮТ и не ограничивали её вообще никогда.
Видимость ограничивают скоупы. Но можно принудительно ограничить видимость текущим файлом через модификатор static.
То есть ты опять сам себе там что-то нафантазировал.