Интерфейсы

Поскольку в нашем случае исходный код уже существует, мы не станем делать вид, что начинаем его проектирование с нуля. Однако при этом мы не будем разбирать строка за строкой множество не самого лучшего в мире исходного кода, а посмотрим лишь на самые важные его фрагменты (полную документацию и заголовочные файлы интерфейсов можно найти на Web-узле этой книги).
Итак, интерфейсы с окружающей средой игрового мира состоят из трех частей. Эти части не только концептуально различны, но и реализованы по отдельности. Сначала рассмотрим выходы, определенные в модуле Motion.
void Move{ const Vec3f& direction ); void Turn{ const Vec3f& orientation );
При каждом вызове функции Move () предпринимается попьггка выполнить шаг в направлении, заданном относительно текущего состояния. Функция Turn () выполняет вращение в заданном направлении, также выраженном относительно текущего состояния.
Теперь рассмотрим физический интерфейс, определенный в модуле Physics.
bool CollisionO;
Эта функция возвращает значение true в том случае, если анимат столкнулся с препятствием. Альтернативный (и более эффективный) подход заключается в определении простой функции обратного вызова OnCollision (), которая будет получать в подобных ситуациях соответствующее извещение. Наконец, нужно обеспечить имитацию визуального интерфейса, чтобы попьггаться выполнить огибание ближайших препятствий, столкновение с которыми можно предвидеть. Эта задача решается в модуле vision.
float TraceWalk{ const float angle, const float steps = 4.Of ) const;
Эта функция выполняет предварительный прогноз движения анимата от текущей начальной точки в заданном секторе. Возвращаемое ею значение представляет собой расстояние, которое анимат сможет пройти до первого столкновения с препятствием.
В последующих главах мы будем возвращаться к представленной выше функциональности, дорабатывая ее по мере необходимости.