Сделал конфиг на луа как говорил Эльмиго. Только пока без класса и только для размеров окна.
lua_State* L = lua_open(); luaL_openlibs( L); if( luaL_dofile( L,"Scripts/config.lua")) { const char* err = lua_tostring( L, -1); printf( "%s\n", err); } lua_getglobal( L, "windowWidth"); int screenWidth = ( int)lua_tonumber( L, -1); lua_getglobal( L, "windowHeight"); int screenHeight = ( int)lua_tonumber( L, -1); device = createDevice( video::EDT_DIRECT3D9, dimension2d<u32>( screenWidth, screenHeight), 16, false, false, false, 0);
Сам скрипт. Содержимое файла config.lua
windowWidth = 800 windowHeight = 600
Все таки гораздо проще чем использование xml :)
>Все таки гораздо проще чем использование xml :)
Понятия не имею. Я с Луа/Луной пока-что не знаком. Может быть.
Чисто для интереса 2 вопроса:
1. Цифры вы получаете как видно. А как насчёт русского текста? С ним можно корректно работать? Тут как я вижу работа с char строками. А если понадобится конвертировать в wchar_t для отображения окошка сообщения, Луна может корректно конвертировать русские символы?
2. При таком способе инициализации главного устройства скибокс отображается корректно?
Насчет отображения русского текста тоже стало интересно. И я собрал небольшой пример.
Для начала написал функцию для преобразования char* в wchar_t*
const wchar_t* charToWchar(const char* text) { const c8 *cs = ( const c8 *)text; wchar_t *ws = new wchar_t[strlen( cs) + 1]; int len = mbstowcs( ws,cs,strlen( cs)); ws[len] = 0; return ws; delete [] ws; }
Далее добавил в включения
#include <locale.h>
И где-то в коде перед тем как нужен русский текст:
#if !defined(_IRR_WINDOWS_CE_PLATFORM_) setlocale( LC_ALL,""); #endif
Далее создал шрифт с помощью FontTool, который идет вместе с движком.
Далее устанавливаем шрифт, получаем из конфига заголовок, текст и отображаем его в MessageBox
gui::IGUISkin* skin = guienv->getSkin(); gui::IGUIFont* font = guienv->getFont( "Font/MyFont.xml"); if( font) skin->setFont( font); lua_getglobal( L, "Text"); const wchar_t* text = charToWchar( lua_tostring( L, -1)); lua_getglobal( L, "Title"); const wchar_t* title = charToWchar( lua_tostring( L, -1)); guienv->addMessageBox( title,text);
Текст скрипта на луа:
windowWidth = 1024 windowHeight = 768 Title = 'Заголовок' Text = 'Привет от LUA!'
Результат:
И немного поменял код задания размеров окна:
lua_getglobal(L, "windowWidth"); u32 screenWidth = ( u32)lua_tonumber( L, -1); lua_getglobal( L, "windowHeight"); u32 screenHeight = ( u32)lua_tonumber( L, -1); device = createDevice( video::EDT_DIRECT3D9, dimension2d<u32>( screenWidth, screenHeight), 16, false, false, false, 0);
Со скайбоксом тоже вроде все нормально.
В коде я только не возвращаю стеку луа первоначальное состояние, хотя надо бы.
Вот бинарник и исходники http://narod.ru/disk/24519222000/HelloLua.rar.html
Спасибо, думаю это пригодится не только мне.
Единственное замечание: у меня почему-то ф-ции mbstowcs() и wcstombs() работали не всегда корректно, пришлось использовать MultiByteToWideChar() и WideCharToMultiByte() из WinSDK.
Тема в архиве.