Több hónapnyi szenvedés végére sikerült pontot tennem elmúlt hétvégén. Az enginem látott már néhány gui-t egy kivételével (guichan.sourceforge.net/) mindegyik saját próbálkozás volt.
Sajnos egy jól használható gui elkészítése nem kevés idő és energia. Ezenkívül szükséges hozzá külső szerkesztési lehetőség script vagy - ami leginkább ajánlott - vizuális eszköz formájában.
Miután ez nagy nehezen világossá vált elkezdtem keresgélni külső segítség után. Érdekes módon nincs túl nagy kínálat. A legtöbb SDK meglehetősen nagy méretű ami számomra nem tűnt szimpatikusnak. Azonban ha speciálisan játékhoz szánt gui-t keresünk kicsit jobbak az esélyek. Léteznek egyéni próbálkozások (egyik igéretes ez volt www.thomasandamy.com/projects/GLO/ ), de sajnos ezek támogatottsága nem a legjobb.
Utolsó próbálkozásom a CEGUI volt. A mérete ennek sem kicsit, de töredéke a "nagy" SDK-knak. A következő kérdéses pont a függőségek voltak, amiből akad néhány. Természetesen a csomag elérhető előre lefordított csomagként is így a függőségekkel nem kellene foglalkozni, de jobban szeretem magamnak lefordítani és csak azt ami nekem szükséges. Így nekiláttam kiválogatni a számomra szükségtelen összetevőket.
Nagyon előnyös tulajdonsága a CEGUI-nak, hogy nagyon praktikus konfiguráló lua scriptet készítettek hozzá.
Ami mindenképp szükséges, hogy használhatóvá tegyük:
- Freetype.
- Legalább egy image codec. Lehetőleg ne a beépített TGA legyen, hanem a SILLY, amit kimondottan a CEGUI-hoz fejleszettek ki. Kezeli a JPG, PNG és TGA formátumokat, ami gyakorlatilag mindenhez elég. Az első kettő formátumhoz szükségesek a nekik megfelelő könyvtárak, de általában ezeket a játék engine-k is igénylik.
- Falagard window renderer.
- XML parser. Szerencsére a tinyxml verzió beépített így nem kell külön könyvtár hozzá.
- Renderer. Az OpenGL renderer a glew könyvtárat használja, amelyet bevontak a CEGUI-ba.
Szerencsére a használata sem egetverően bonyolult könnyen rá lehet érezni a stílusára. Könnyen skin-elhető, létezik hozzá vizuális szerkesztő és folyamatosan fejlesztik. Amivel viszonylag meggyűlt a gondom az a setDefaultResourceGroup és a setResourceGroupDirectory volt ti. mindkettőt az inicializáláskor megfelelően be kell állítani. Ezek után viszont adja magát a használat. Annyit talán érdemes még megjegyezni, hogy az események kezelése callback-eken keresztül működik tehát ezt figyelembe véve kell struktúrálni a függvényeinket / osztályainkat.