(void Console :: execute ( const Strings str ) {
Array argv; String buf;
history -> insertNoRetain ( new String ( str ) );
curLine++; cursorPos = 0;
for ( int i = 0; i < str.getLength () ,- i++ ) {
char ch = str [i];

if ( СП == ' ' || СП == '\t' )

{
if ( buf.getLength () > 0 )
argv.insertNoRetain ( new String ( buf ) );
buf = "";
}
else
buf += ch;
}
if ( buf.getLength () > 0 )
argv.insertNoRetain ( new String ( buf ) );
if ( iexecuteHelp ( argv ) )
for ( Set : .- Iterator it = commands.getlterator (); !it.end (); ++it )
{
ConsoleCommand * com = (ConsoleCommand *) it.value ();
com -> execute ( argv, this );
}
}

Для передачи введенных символов контроллер будет просто передавать их консоли. Сама консоль решает, требует ли введенный символ обработки.

Для подключения консоли необходимо внести некоторые изменения в класс Controller, а именно добавить переменную console типа Console *, добавить создание и уничтожение консоли, а также передачу сообщений объекту консоли.

intController :: handleChar ( int ch )
{
console -> handleChar ( ch ) ; return controllerContinue;
}
intController :: handleKey ( int key, bool pressed ) {
if ( !pressed ) //we're interested only in presses
return controllerContinue;
if ( key == keyEsc I I key == keyFlO ) // check for quit command

Пишем портальный рендерер (часть 11)

return controllerQuit; console --> handleKey ( key, pressed ) ; return controllerContinue;
}

Также необходимо включить вызов console -> draw (view) для вывода консоли.

При создании контроллер автоматически создает консоль и добавляет объекты для поддержки ряда стандартных комнат, приводимых ниже.

setvidmode width height fullscreen [on I off] map map-file fov value

На рис. 8.1 приводится UML-диаграмма классов, используемых для работы консоли.

Обработка столкновений Еще одной возможностью, которую мы рассмотрим в этой главе, будет обработка столкновений игрока с гранями сцены.


⇐ Предыдущая| |Следующая ⇒