From 8a60edf24107654b0770f4adcf246baa7a80d50c Mon Sep 17 00:00:00 2001 From: hikerstk Date: Thu, 12 Mar 2009 03:49:31 +0000 Subject: [PATCH 0002/1008] Moved file manager to io subdir, made irrlicht compilation default, started removing #ifdefs HAVE_IRRLICHT. git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3239 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- src/Makefile.am | 4 +- src/audio/sfx_manager.cpp | 6 +- src/audio/sfx_openal.cpp | 2 +- src/audio/sound_manager.cpp | 2 +- src/challenges/unlock_manager.cpp | 2 +- src/grand_prix_data.cpp | 2 +- src/grand_prix_manager.cpp | 2 +- src/graphics/irr_driver.cpp | 2 +- src/gui/credits_menu.cpp | 7 +- src/gui/font.cpp | 2 +- src/highscore_manager.cpp | 2 +- src/ide/vc9/supertuxkart.sln | 21 ++--- src/ide/vc9/supertuxkart.vcproj | 110 +++----------------------- src/{ => io}/file_manager.cpp | 50 ++---------- src/{ => io}/file_manager.hpp | 13 +-- src/items/attachment_manager.cpp | 3 +- src/items/item_manager.cpp | 2 +- src/items/powerup_manager.cpp | 2 +- src/karts/kart.cpp | 5 +- src/karts/kart_model.cpp | 2 +- src/karts/kart_properties.cpp | 2 +- src/karts/kart_properties_manager.cpp | 2 +- src/loader.cpp | 2 +- src/main.cpp | 16 +--- src/material.cpp | 2 +- src/material_manager.cpp | 2 +- src/modes/world.cpp | 2 +- src/physics/moving_physics.cpp | 2 +- src/stk_config.cpp | 2 +- src/tracks/track.cpp | 5 +- src/tracks/track_manager.cpp | 6 +- src/user_config.cpp | 2 +- src/utils/translation.cpp | 5 +- 33 files changed, 68 insertions(+), 223 deletions(-) rename src/{ => io}/file_manager.cpp (94%) rename src/{ => io}/file_manager.hpp (93%) diff --git a/src/Makefile.am b/src/Makefile.am index 8ca8940d1..bc62387a7 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -91,6 +91,8 @@ supertuxkart_SOURCES = \ graphics/skid_marks.hpp \ graphics/smoke.cpp \ graphics/smoke.hpp \ + io/file_manager.cpp \ + io/file_manager.hpp \ io/xml_node.cpp \ io/xml_node.hpp \ io/xml_reader.cpp \ @@ -150,8 +152,6 @@ supertuxkart_SOURCES = \ highscores.hpp \ highscore_manager.cpp \ highscore_manager.hpp \ - file_manager.cpp \ - file_manager.hpp \ loader.cpp \ loader.hpp \ race_manager.cpp \ diff --git a/src/audio/sfx_manager.cpp b/src/audio/sfx_manager.cpp index a54ee63d9..dde667927 100644 --- a/src/audio/sfx_manager.cpp +++ b/src/audio/sfx_manager.cpp @@ -31,10 +31,10 @@ # include #endif -#include "audio/sfx_openal.hpp" -#include "user_config.hpp" -#include "file_manager.hpp" #include "race_manager.hpp" +#include "user_config.hpp" +#include "audio/sfx_openal.hpp" +#include "io/file_manager.hpp" SFXManager* sfx_manager= NULL; diff --git a/src/audio/sfx_openal.cpp b/src/audio/sfx_openal.cpp index 7f745ac70..c4a4fdeaa 100644 --- a/src/audio/sfx_openal.cpp +++ b/src/audio/sfx_openal.cpp @@ -34,8 +34,8 @@ #include #include -#include "file_manager.hpp" #include "user_config.hpp" +#include "io/file_manager.hpp" SFXOpenAL::SFXOpenAL(ALuint buffer, bool positional, float rolloff, float gain) : SFXBase() { diff --git a/src/audio/sound_manager.cpp b/src/audio/sound_manager.cpp index a7d0dcdc4..89e7851ca 100644 --- a/src/audio/sound_manager.cpp +++ b/src/audio/sound_manager.cpp @@ -31,9 +31,9 @@ #endif #include "user_config.hpp" -#include "file_manager.hpp" #include "audio/music_ogg.hpp" #include "audio/sfx_openal.hpp" +#include "io/file_manager.hpp" #include "utils/string_utils.hpp" SoundManager* sound_manager= NULL; diff --git a/src/challenges/unlock_manager.cpp b/src/challenges/unlock_manager.cpp index 1da50d15a..d35c86534 100644 --- a/src/challenges/unlock_manager.cpp +++ b/src/challenges/unlock_manager.cpp @@ -24,9 +24,9 @@ #include #include "race_manager.hpp" -#include "file_manager.hpp" #include "user_config.hpp" #include "challenges/challenge_data.hpp" +#include "io/file_manager.hpp" #include "utils/string_utils.hpp" UnlockManager* unlock_manager=0; diff --git a/src/grand_prix_data.cpp b/src/grand_prix_data.cpp index a84d03a91..742ac52fd 100644 --- a/src/grand_prix_data.cpp +++ b/src/grand_prix_data.cpp @@ -20,8 +20,8 @@ #include #include -#include "file_manager.hpp" #include "grand_prix_data.hpp" +#include "io/file_manager.hpp" #include "lisp/parser.hpp" #include "lisp/lisp.hpp" #include "tracks/track_manager.hpp" diff --git a/src/grand_prix_manager.cpp b/src/grand_prix_manager.cpp index 1d5041d67..e4e816771 100644 --- a/src/grand_prix_manager.cpp +++ b/src/grand_prix_manager.cpp @@ -21,7 +21,7 @@ #include -#include "file_manager.hpp" +#include "io/file_manager.hpp" #include "utils/string_utils.hpp" GrandPrixManager *grand_prix_manager = NULL; diff --git a/src/graphics/irr_driver.cpp b/src/graphics/irr_driver.cpp index e4675d298..aac795427 100644 --- a/src/graphics/irr_driver.cpp +++ b/src/graphics/irr_driver.cpp @@ -22,7 +22,7 @@ using namespace core; #include "user_config.hpp" -#include "file_manager.hpp" +#include "io/file_manager.hpp" IrrDriver *irr_driver = NULL; diff --git a/src/gui/credits_menu.cpp b/src/gui/credits_menu.cpp index b81502164..7503f546f 100644 --- a/src/gui/credits_menu.cpp +++ b/src/gui/credits_menu.cpp @@ -17,18 +17,15 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -#include "credits_menu.hpp" +#include "gui/credits_menu.hpp" #include #include #include -#if defined(WIN32) && !defined(__CYGWIN__) -# define strdup _strdup -#endif -#include "file_manager.hpp" #include "gui/menu_manager.hpp" #include "gui/widget_manager.hpp" +#include "io/file_manager.hpp" #include "utils/translation.hpp" enum WidgetTokens diff --git a/src/gui/font.cpp b/src/gui/font.cpp index eaa7de9bd..4a0ecc62e 100644 --- a/src/gui/font.cpp +++ b/src/gui/font.cpp @@ -19,9 +19,9 @@ #include -#include "file_manager.hpp" #include "user_config.hpp" #include "gui/font.hpp" +#include "io/file_manager.hpp" #include "utils/string_utils.hpp" Font* font_gui; diff --git a/src/highscore_manager.cpp b/src/highscore_manager.cpp index 51054a02b..55b614565 100644 --- a/src/highscore_manager.cpp +++ b/src/highscore_manager.cpp @@ -23,8 +23,8 @@ #include #include "race_manager.hpp" -#include "file_manager.hpp" #include "user_config.hpp" +#include "io/file_manager.hpp" #include "lisp/parser.hpp" #include "lisp/writer.hpp" #include "utils/string_utils.hpp" diff --git a/src/ide/vc9/supertuxkart.sln b/src/ide/vc9/supertuxkart.sln index aad396929..ee939a19e 100644 --- a/src/ide/vc9/supertuxkart.sln +++ b/src/ide/vc9/supertuxkart.sln @@ -13,27 +13,20 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "enet", "enet.vcproj", "{B0E EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - irrlicht-debug|Win32 = irrlicht-debug|Win32 + debug|Win32 = debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Debug|Win32.ActiveCfg = Debug|Win32 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Debug|Win32.Build.0 = Debug|Win32 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.irrlicht-debug|Win32.ActiveCfg = irrlicht-debug|Win32 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.irrlicht-debug|Win32.Build.0 = irrlicht-debug|Win32 + {B1BC2764-1A43-4800-A654-788B0D05EDA2}.debug|Win32.ActiveCfg = Debug|Win32 + {B1BC2764-1A43-4800-A654-788B0D05EDA2}.debug|Win32.Build.0 = Debug|Win32 {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Release|Win32.ActiveCfg = Release|Win32 {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Release|Win32.Build.0 = Release|Win32 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Debug|Win32.ActiveCfg = Debug|Win32 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Debug|Win32.Build.0 = Debug|Win32 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.irrlicht-debug|Win32.ActiveCfg = Release|Win32 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.irrlicht-debug|Win32.Build.0 = Release|Win32 + {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.debug|Win32.ActiveCfg = Release|Win32 + {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.debug|Win32.Build.0 = Release|Win32 {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Release|Win32.ActiveCfg = Release|Win32 {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Release|Win32.Build.0 = Release|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Debug|Win32.ActiveCfg = Release|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Debug|Win32.Build.0 = Release|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.irrlicht-debug|Win32.ActiveCfg = Release|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.irrlicht-debug|Win32.Build.0 = Release|Win32 + {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.debug|Win32.ActiveCfg = Release|Win32 + {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.debug|Win32.Build.0 = Release|Win32 {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Release|Win32.ActiveCfg = Release|Win32 {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection diff --git a/src/ide/vc9/supertuxkart.vcproj b/src/ide/vc9/supertuxkart.vcproj index df64e4f83..5565ae68d 100644 --- a/src/ide/vc9/supertuxkart.vcproj +++ b/src/ide/vc9/supertuxkart.vcproj @@ -17,7 +17,7 @@ - - - - - - - - - - - - - - - - - - - - - @@ -840,6 +748,10 @@ + + @@ -871,10 +783,6 @@ RelativePath="../../../src\explosion.hpp" > - - @@ -1522,6 +1430,10 @@ + + diff --git a/src/file_manager.cpp b/src/io/file_manager.cpp similarity index 94% rename from src/file_manager.cpp rename to src/io/file_manager.cpp index b17d0498f..2674963d5 100644 --- a/src/file_manager.cpp +++ b/src/io/file_manager.cpp @@ -18,7 +18,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -#include "file_manager.hpp" +#include "io/file_manager.hpp" #include #include @@ -30,25 +30,19 @@ # ifndef __CYGWIN__ # define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) // Some portabilty defines -# define access _access -# define F_OK 04 # endif # define CONFIGDIR "." #else # define CONFIGDIR ".supertuxkart" #endif -#ifdef HAVE_IRRLICHT -# include "irrlicht.h" -#endif +#include "irrlicht.h" // ul.h includes windows.h, so this define is necessary #define _WINSOCKAPI_ #include #include "btBulletDynamicsCommon.h" -#ifdef HAVE_IRRLICHT -# include "graphics/irr_driver.hpp" -#endif +#include "graphics/irr_driver.hpp" #include "material_manager.hpp" #include "utils/string_utils.hpp" @@ -97,11 +91,8 @@ FileManager* file_manager = 0; */ FileManager::FileManager() { -#ifdef HAVE_IRRLICHT - // m_device = createDevice(video::EDT_NULL); m_file_system = m_device->getFileSystem(); -#endif m_is_full_path = false; if ( getenv ( "SUPERTUXKART_DATADIR" ) != NULL ) @@ -109,17 +100,9 @@ FileManager::FileManager() #ifdef __APPLE__ else if( macSetBundlePathIfRelevant( m_root_dir ) ) { /* nothing to do */ } #endif -#ifdef HAVE_IRRLICHT else if(m_file_system->existFile("data/stk_config.data")) -#else - else if ( access ( "data/stk_config.data", F_OK ) == 0 ) -#endif m_root_dir = "." ; -#ifdef HAVE_IRRLICHT else if(m_file_system->existFile("../data/stk_config.data")) -#else - else if ( access ( "../data/stk_config.data", F_OK ) == 0 ) -#endif m_root_dir = ".." ; else #ifdef SUPERTUXKART_DATADIR @@ -135,9 +118,7 @@ FileManager::FileManager() pushTextureSearchPath(m_root_dir+"/data/textures"); pushModelSearchPath (m_root_dir+"/data/models" ); pushMusicSearchPath (m_root_dir+"/data/music" ); -#ifdef HAVE_IRRLICHT m_file_system->addFolderFileArchive("data/models"); -#endif // Add more paths from the STK_MUSIC_PATH environment variable if(getenv("SUPERTUXKART_MUSIC_PATH")!=NULL) { @@ -183,14 +164,12 @@ FileManager::FileManager() /** Remove the dummy file system (which is called from IrrDriver before * creating the actual device. */ -#ifdef HAVE_IRRLICHT void FileManager::dropFileSystem() { m_device->drop(); } // dropFileSystem -#endif + //----------------------------------------------------------------------------- -#ifdef HAVE_IRRLICHT /** This function is used to re-initialise the file-manager after reading in * the user configuration data. */ @@ -201,66 +180,49 @@ void FileManager::setDevice(IrrlichtDevice *device) // file_manager has a pointer to the file system. m_file_system = m_device->getFileSystem(); } // reInit -#endif + //----------------------------------------------------------------------------- FileManager::~FileManager() { popMusicSearchPath(); popModelSearchPath(); popTextureSearchPath(); -#ifdef HAVE_IRRLICHT // m_file_system is ref-counted, so no delete/drop necessary. m_file_system = NULL; m_device->drop(); -#endif } // ~FileManager //----------------------------------------------------------------------------- -#ifdef HAVE_IRRLICHT XMLReader *FileManager::getXMLReader(const std::string &f) { io::IXMLReader *r = m_file_system->createXMLReader(f.c_str()); return new XMLReader(r); } // getXMLReader -#endif + //----------------------------------------------------------------------------- void FileManager::pushModelSearchPath(const std::string& path) { m_model_search_path.push_back(path); -#ifdef HAVE_IRRLICHT m_file_system->addFolderFileArchive(path.c_str()); -#endif } // pushModelSearchPath //----------------------------------------------------------------------------- void FileManager::pushTextureSearchPath(const std::string& path) { m_texture_search_path.push_back(path); -#ifdef HAVE_IRRLICHT m_file_system->addFolderFileArchive(path.c_str()); -#endif } // pushTextureSearchPath //----------------------------------------------------------------------------- - - bool FileManager::findFile(std::string& full_path, const std::string& fname, const std::vector& search_path) const { -#ifndef HAVE_IRRLICHT - struct stat mystat; -#endif - for(std::vector::const_reverse_iterator i = search_path.rbegin(); i != search_path.rend(); ++i) { full_path = *i + "/" + fname; -#ifdef HAVE_IRRLICHT if(m_file_system->existFile(full_path.c_str())) return true; -#else - if(stat(full_path.c_str(), &mystat) >= 0) return true; -#endif } full_path=""; return false; diff --git a/src/file_manager.hpp b/src/io/file_manager.hpp similarity index 93% rename from src/file_manager.hpp rename to src/io/file_manager.hpp index 9e573eaea..78541c1cd 100644 --- a/src/file_manager.hpp +++ b/src/io/file_manager.hpp @@ -23,16 +23,13 @@ #include #include -#ifdef HAVE_IRRLICHT -# include "irrlicht.h" - using namespace irr; +#include "irrlicht.h" +using namespace irr; #include "io/xml_reader.hpp" -#endif class FileManager { private: -#ifdef HAVE_IRRLICHT /** Handle to irrlicht's file systems. */ io::IFileSystem *m_file_system; /** Pointer to the irrlicht device. This is necessary before reInit is @@ -40,7 +37,6 @@ private: * for details. */ IrrlichtDevice *m_device; -#endif bool m_is_full_path; std::string m_root_dir; std::vector m_texture_search_path, @@ -56,14 +52,9 @@ private: public: FileManager(); ~FileManager(); -#ifdef HAVE_IRRLICHT void setDevice(IrrlichtDevice *device); void dropFileSystem(); XMLReader *getXMLReader(const std::string &f); -// io::IXMLWriter *getXMLWriter(const std::string &f) - //{ return m_file_system->createXMLWriter(f.c_str());} - -#endif std::string getHomeDir () const; std::string getTrackDir () const; diff --git a/src/items/attachment_manager.cpp b/src/items/attachment_manager.cpp index 9bcd17de7..1bad6d4d9 100644 --- a/src/items/attachment_manager.cpp +++ b/src/items/attachment_manager.cpp @@ -18,8 +18,9 @@ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "items/attachment_manager.hpp" -#include "file_manager.hpp" + #include "loader.hpp" +#include "io/file_manager.hpp" AttachmentManager *attachment_manager = 0; diff --git a/src/items/item_manager.cpp b/src/items/item_manager.cpp index c90caa61b..57f9d10e5 100644 --- a/src/items/item_manager.cpp +++ b/src/items/item_manager.cpp @@ -22,11 +22,11 @@ #include #include "user_config.hpp" -#include "file_manager.hpp" #include "loader.hpp" #include "material_manager.hpp" #include "material.hpp" #include "graphics/irr_driver.hpp" +#include "io/file_manager.hpp" #include "items/item_manager.hpp" #include "items/bubblegumitem.hpp" #include "karts/kart.hpp" diff --git a/src/items/powerup_manager.cpp b/src/items/powerup_manager.cpp index 6177957a8..ed690a980 100644 --- a/src/items/powerup_manager.cpp +++ b/src/items/powerup_manager.cpp @@ -23,10 +23,10 @@ #include #include -#include "file_manager.hpp" #include "material_manager.hpp" #include "material.hpp" #include "graphics/irr_driver.hpp" +#include "io/file_manager.hpp" #include "items/bowling.hpp" #include "items/cake.hpp" #include "items/plunger.hpp" diff --git a/src/karts/kart.cpp b/src/karts/kart.cpp index 883258e2f..b1189beab 100644 --- a/src/karts/kart.cpp +++ b/src/karts/kart.cpp @@ -27,9 +27,8 @@ #include #include "bullet/Demos/OpenGL/GL_ShapeDrawer.h" + #include "loader.hpp" -#include "items/item_manager.hpp" -#include "file_manager.hpp" #include "user_config.hpp" #include "material_manager.hpp" #include "audio/sound_manager.hpp" @@ -41,6 +40,8 @@ #include "graphics/smoke.hpp" #include "gui/menu_manager.hpp" #include "gui/race_gui.hpp" +#include "io/file_manager.hpp" +#include "items/item_manager.hpp" #include "karts/kart_model.hpp" #include "karts/kart_properties_manager.hpp" #include "network/race_state.hpp" diff --git a/src/karts/kart_model.cpp b/src/karts/kart_model.cpp index f5d56365d..aab89931b 100644 --- a/src/karts/kart_model.cpp +++ b/src/karts/kart_model.cpp @@ -19,12 +19,12 @@ #include "karts/kart_model.hpp" -#include "file_manager.hpp" #include "loader.hpp" #include "stk_config.hpp" #include "user_config.hpp" #include "graphics/irr_driver.hpp" #include "graphics/mesh_tools.hpp" +#include "io/file_manager.hpp" #include "utils/constants.hpp" #include "utils/ssg_help.hpp" diff --git a/src/karts/kart_properties.cpp b/src/karts/kart_properties.cpp index 29373ecc8..356c26c2d 100644 --- a/src/karts/kart_properties.cpp +++ b/src/karts/kart_properties.cpp @@ -24,10 +24,10 @@ #include #include "material_manager.hpp" #include "loader.hpp" -#include "file_manager.hpp" #include "stk_config.hpp" #include "user_config.hpp" #include "karts/kart_model.hpp" +#include "io/file_manager.hpp" #include "lisp/parser.hpp" #include "lisp/lisp.hpp" #include "utils/ssg_help.hpp" diff --git a/src/karts/kart_properties_manager.cpp b/src/karts/kart_properties_manager.cpp index 6190f9b9e..902bd9cce 100644 --- a/src/karts/kart_properties_manager.cpp +++ b/src/karts/kart_properties_manager.cpp @@ -23,11 +23,11 @@ #include #include -#include "file_manager.hpp" #include "stk_config.hpp" #include "user_config.hpp" #include "callback_manager.hpp" #include "challenges/unlock_manager.hpp" +#include "io/file_manager.hpp" #include "karts/kart_properties.hpp" #include "utils/string_utils.hpp" diff --git a/src/loader.cpp b/src/loader.cpp index 3ec511fbd..d6a1a9e5f 100644 --- a/src/loader.cpp +++ b/src/loader.cpp @@ -34,9 +34,9 @@ #include "loader.hpp" #include "material_manager.hpp" -#include "file_manager.hpp" #include "material.hpp" #include "graphics/moving_texture.hpp" +#include "io/file_manager.hpp" #include "physics/moving_physics.hpp" Loader* loader = 0; diff --git a/src/main.cpp b/src/main.cpp index 738e9c394..60c2bd62a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -46,7 +46,6 @@ #include "user_config.hpp" #include "race_manager.hpp" -#include "file_manager.hpp" #include "loader.hpp" #include "main_loop.hpp" #include "material_manager.hpp" @@ -59,13 +58,12 @@ #include "audio/sound_manager.hpp" #include "audio/sfx_manager.hpp" #include "challenges/unlock_manager.hpp" -#ifdef HAVE_IRRLICHT -# include "graphics/irr_driver.hpp" -#endif +#include "graphics/irr_driver.hpp" #include "graphics/scene.hpp" #include "gui/menu_manager.hpp" #include "gui/menu_manager.hpp" #include "gui/widget_manager.hpp" +#include "io/file_manager.hpp" #include "items/attachment_manager.hpp" #include "items/item_manager.hpp" #include "items/projectile_manager.hpp" @@ -440,13 +438,8 @@ void InitTuxkart() // unlock manager is needed when reading the config file unlock_manager = new UnlockManager(); user_config = new UserConfig(); -#ifdef HAVE_IRRLICHT irr_driver = new IrrDriver(); -#endif loader = new Loader(); -#ifndef HAVE_IRRLICHT - loader->setCreateStateCallback(getAppState); -#endif sound_manager = new SoundManager(); sfx_manager = new SFXManager(); // The order here can be important, e.g. KartPropertiesManager needs @@ -514,9 +507,7 @@ void CleanTuxKart() if(translations) delete translations; if(file_manager) delete file_manager; if(stk_scene) delete stk_scene; -#ifdef HAVE_IRRLICHT if(irr_driver) delete irr_driver; -#endif } //============================================================================= @@ -553,9 +544,6 @@ int main(int argc, char *argv[] ) //FIXME: this needs a better organization inputDriver = new SDLDriver (); -#ifndef HAVE_IRRLICHT - ssgInit(); -#endif main_loop = new MainLoop(); // loadMaterials needs ssgLoadTextures (internally), which can diff --git a/src/material.cpp b/src/material.cpp index 2a592e8de..f160429d8 100644 --- a/src/material.cpp +++ b/src/material.cpp @@ -21,9 +21,9 @@ #include -#include "file_manager.hpp" #include "stk_config.hpp" #include "graphics/irr_driver.hpp" +#include "io/file_manager.hpp" #include "io/xml_node.hpp" #include "utils/string_utils.hpp" diff --git a/src/material_manager.cpp b/src/material_manager.cpp index 76c89ef19..fcc53796b 100644 --- a/src/material_manager.cpp +++ b/src/material_manager.cpp @@ -22,8 +22,8 @@ #include #include -#include "file_manager.hpp" #include "material.hpp" +#include "io/file_manager.hpp" #include "io/xml_node.hpp" #include "utils/string_utils.hpp" diff --git a/src/modes/world.cpp b/src/modes/world.cpp index 4392cd25b..aab06f360 100644 --- a/src/modes/world.cpp +++ b/src/modes/world.cpp @@ -23,7 +23,6 @@ #include #include -#include "file_manager.hpp" #include "race_manager.hpp" #include "user_config.hpp" #include "callback_manager.hpp" @@ -36,6 +35,7 @@ #include "graphics/camera.hpp" #include "graphics/scene.hpp" #include "gui/menu_manager.hpp" +#include "io/file_manager.hpp" #include "items/item_manager.hpp" #include "items/projectile_manager.hpp" #include "karts/auto_kart.hpp" diff --git a/src/physics/moving_physics.cpp b/src/physics/moving_physics.cpp index 9715d0032..85eb9f449 100644 --- a/src/physics/moving_physics.cpp +++ b/src/physics/moving_physics.cpp @@ -28,10 +28,10 @@ using namespace irr; #define _WINSOCKAPI_ #include -#include "file_manager.hpp" #include "graphics/irr_driver.hpp" #include "graphics/mesh_tools.hpp" #include "graphics/scene.hpp" +#include "io/file_manager.hpp" #include "io/xml_node.hpp" #include "modes/world.hpp" #include "tracks/track.hpp" diff --git a/src/stk_config.cpp b/src/stk_config.cpp index 5703aabec..da030bd48 100644 --- a/src/stk_config.cpp +++ b/src/stk_config.cpp @@ -23,7 +23,7 @@ #include #include -#include "file_manager.hpp" +#include "io/file_manager.hpp" #include "lisp/parser.hpp" #include "audio/music_information.hpp" diff --git a/src/tracks/track.cpp b/src/tracks/track.cpp index 788140c31..ca2efb5c3 100644 --- a/src/tracks/track.cpp +++ b/src/tracks/track.cpp @@ -24,10 +24,8 @@ #include #define _WINSOCKAPI_ #include -#ifdef HAVE_IRRLICHT #include "irrlicht.h" -#endif -#include "file_manager.hpp" + #include "loader.hpp" #include "stk_config.hpp" #include "material_manager.hpp" @@ -37,6 +35,7 @@ #include "graphics/irr_driver.hpp" #include "graphics/mesh_tools.hpp" #include "graphics/scene.hpp" +#include "io/file_manager.hpp" #include "io/xml_node.hpp" #include "items/item.hpp" #include "items/item_manager.hpp" diff --git a/src/tracks/track_manager.cpp b/src/tracks/track_manager.cpp index 327bab34c..02853182b 100644 --- a/src/tracks/track_manager.cpp +++ b/src/tracks/track_manager.cpp @@ -17,17 +17,17 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -#include "file_manager.hpp" +#include "tracks/track_manager.hpp" #include #include #include #include -#include "track_manager.hpp" -#include "track.hpp" #include "stk_config.hpp" #include "audio/sound_manager.hpp" +#include "io/file_manager.hpp" +#include "tracks/track.hpp" TrackManager* track_manager = 0; diff --git a/src/user_config.cpp b/src/user_config.cpp index cfd2297b6..c40e82f3a 100644 --- a/src/user_config.cpp +++ b/src/user_config.cpp @@ -40,8 +40,8 @@ #include "stk_config.hpp" #include "actionmap.hpp" #include "race_manager.hpp" -#include "file_manager.hpp" #include "challenges/unlock_manager.hpp" +#include "io/file_manager.hpp" #include "lisp/lisp.hpp" #include "lisp/parser.hpp" #include "lisp/writer.hpp" diff --git a/src/utils/translation.cpp b/src/utils/translation.cpp index 7365cf3a2..1e09bcfd7 100644 --- a/src/utils/translation.cpp +++ b/src/utils/translation.cpp @@ -18,8 +18,9 @@ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -#include "translation.hpp" -#include "file_manager.hpp" +#include "utils/translation.hpp" + +#include "io/file_manager.hpp" Translations* translations=NULL; From d2b45f076131cca3d9cf3fc5ae33a243c22eb6ce Mon Sep 17 00:00:00 2001 From: hikerstk Date: Thu, 12 Mar 2009 05:21:13 +0000 Subject: [PATCH 0005/1008] Converted DomesticManners to an irrlicht font, more cleanup. Time is now displayed using the new font. git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3242 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- data/fonts/DomesticManners.xml | Bin 0 -> 22262 bytes data/fonts/DomesticManners0.png | Bin 0 -> 30475 bytes data/fonts/DomesticManners1.png | Bin 0 -> 3184 bytes src/graphics/irr_driver.cpp | 8 +- src/graphics/irr_driver.hpp | 4 - src/gui/race_gui.cpp | 4 +- src/tracks/track.cpp | 178 +------------------------------- src/tracks/track.hpp | 38 ------- src/tracks/track_manager.cpp | 5 +- 9 files changed, 9 insertions(+), 228 deletions(-) create mode 100755 data/fonts/DomesticManners.xml create mode 100755 data/fonts/DomesticManners0.png create mode 100755 data/fonts/DomesticManners1.png diff --git a/data/fonts/DomesticManners.xml b/data/fonts/DomesticManners.xml new file mode 100755 index 0000000000000000000000000000000000000000..6ee6457b964c6b366b71f13dc3fd58471b320873 GIT binary patch literal 22262 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 literal 0 HcmV?d00001 diff --git a/data/fonts/DomesticManners0.png b/data/fonts/DomesticManners0.png new file mode 100755 index 0000000000000000000000000000000000000000..3f74583a9214b953005394b4ccbada4ccffaa44e GIT binary patch literal 30475 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

%Lft(d4U!H6CgzPO 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 literal 0 HcmV?d00001 diff --git a/data/fonts/DomesticManners1.png b/data/fonts/DomesticManners1.png new file mode 100755 index 0000000000000000000000000000000000000000..4603ecca041123b304aea8985c8b8b8d3950edc7 GIT binary patch literal 3184 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 bits -=16) { m_device = createDevice(type, - dimension2d(user_config->m_width, + core::dimension2d(user_config->m_width, user_config->m_height ), bits, //bits per pixel user_config->m_fullscreen, @@ -63,7 +61,7 @@ IrrDriver::IrrDriver() m_device->setWindowCaption(L"SuperTuxKart"); m_scene_manager = m_device->getSceneManager(); m_gui_env = m_device->getGUIEnvironment(); - const std::string &font = file_manager->getFontFile("fonthaettenschweiler.bmp"); + const std::string &font = file_manager->getFontFile("DomesticManners.xml"); m_race_font = m_gui_env->getFont(font.c_str()); } // IrrDriver @@ -201,5 +199,3 @@ bool IrrDriver::OnEvent(const irr::SEvent &event) } // OnEvent // ---------------------------------------------------------------------------- - -#endif // HAVE_IRRLICHT diff --git a/src/graphics/irr_driver.hpp b/src/graphics/irr_driver.hpp index 78484e2bc..b6d1c1fc6 100644 --- a/src/graphics/irr_driver.hpp +++ b/src/graphics/irr_driver.hpp @@ -17,8 +17,6 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -#ifdef HAVE_IRRLICHT - #ifndef HEADER_IRR_DRIVER_HPP #define HEADER_IRR_DRIVER_HPP @@ -65,5 +63,3 @@ extern IrrDriver *irr_driver; #endif // HEADER_IRR_DRIVER_HPP -#endif // HAVE_IRRLICHT - diff --git a/src/gui/race_gui.cpp b/src/gui/race_gui.cpp index 5b4280273..78d790800 100644 --- a/src/gui/race_gui.cpp +++ b/src/gui/race_gui.cpp @@ -52,8 +52,8 @@ RaceGUI::RaceGUI() #ifdef HAVE_IRRLICHT gui::IGUIEnvironment *gui_env = irr_driver->getGUI(); - core::rect pos(user_config->m_width-60, 10, - user_config->m_width, 50); + core::rect pos(user_config->m_width-160, 10, + user_config->m_width, 150); m_time = gui_env->addStaticText(L"", pos); m_time->setOverrideFont(irr_driver->getRaceFont()); diff --git a/src/tracks/track.cpp b/src/tracks/track.cpp index ca2efb5c3..aa4681d3d 100644 --- a/src/tracks/track.cpp +++ b/src/tracks/track.cpp @@ -69,10 +69,8 @@ Track::Track( std::string filename_, float w, float h, bool stretch ) m_version = 0; m_track_mesh = new TriangleMesh(); m_non_collision_mesh = new TriangleMesh(); -#ifdef HAVE_IRRLICHT m_all_nodes.clear(); m_all_meshes.clear(); -#endif m_has_final_camera = false; m_is_arena = false; loadTrack(m_filename); @@ -90,7 +88,6 @@ Track::~Track() */ void Track::cleanup() { -#ifdef HAVE_IRRLICHT for(unsigned int i=0; iremoveNode(m_all_nodes[i]); @@ -99,7 +96,7 @@ void Track::cleanup() { irr_driver->removeMesh(m_all_meshes[i]); } -#endif + delete m_non_collision_mesh; delete m_track_mesh; @@ -860,7 +857,6 @@ void Track::loadTrack(const std::string &filename) m_fog_start = 0.0f; m_fog_end = 1000.0f; m_gravity = 9.80665f; -#ifdef HAVE_IRRLICHT m_sun_position = core::vector3df(0.4f, 0.4f, 0.4f); m_sky_color = video::SColorf(0.3f, 0.7f, 0.9f, 1.0f); m_fog_color = video::SColorf(0.3f, 0.7f, 0.9f, 1.0f); @@ -911,61 +907,6 @@ void Track::loadTrack(const std::string &filename) m_has_final_camera &= node->get("camera-final-hpr", &m_camera_final_hpr) !=1; m_camera_final_hpr.degreeToRad(); -#else - sgSetVec3 ( m_sun_position, 0.4f, 0.4f, 0.4f ); - sgSetVec4 ( m_sky_color, 0.3f, 0.7f, 0.9f, 1.0f ); - sgSetVec4 ( m_fog_color, 0.3f, 0.7f, 0.9f, 1.0f ); - sgSetVec4 ( m_ambient_col, 0.5f, 0.5f, 0.5f, 1.0f ); - sgSetVec4 ( m_specular_col, 1.0f, 1.0f, 1.0f, 1.0f ); - sgSetVec4 ( m_diffuse_col, 1.0f, 1.0f, 1.0f, 1.0f ); - lisp::Parser parser; - const lisp::Lisp* const ROOT = parser.parse(m_filename); - - const lisp::Lisp* const LISP = ROOT->getLisp("tuxkart-track"); - if(!LISP) - { - delete ROOT; - std::ostringstream msg; - msg <<"Couldn't load map '"<get ("name", m_name); - LISP->get ("description", m_description); - LISP->get ("designer", m_designer); - LISP->get ("version", m_version); - std::vector filenames; - LISP->getVector("music", filenames); - getMusicInformation(filenames, m_music); - LISP->get ("item", m_item_style); - LISP->get ("screenshot", m_screenshot); - LISP->get ("topview", m_top_view); - LISP->get ("sky-color", m_sky_color); - LISP->getVector("start-x", m_start_x); - LISP->getVector("start-y", m_start_y); - LISP->getVector("start-z", m_start_z); - LISP->getVector("start-heading", m_start_heading); - LISP->get ("use-fog", m_use_fog); - LISP->get ("fog-color", m_fog_color); - LISP->get ("fog-density", m_fog_density); - LISP->get ("fog-start", m_fog_start); - LISP->get ("fog-end", m_fog_end); - LISP->get ("sun-position", m_sun_position); - LISP->get ("sun-ambient", m_ambient_col); - LISP->get ("sun-specular", m_specular_col); - LISP->get ("sun-diffuse", m_diffuse_col); - LISP->get ("gravity", m_gravity); - LISP->get ("arena", m_is_arena); - LISP->getVector("groups", m_groups); - if(m_groups.size()==0) - m_groups.push_back("standard"); - // if both camera position and rotation are defined, - // set the flag that the track has final camera position - m_has_final_camera = LISP->get("camera-final-position", m_camera_final_position); - m_has_final_camera &= LISP->get("camera-final-hpr", m_camera_final_hpr); - m_camera_final_hpr.degreeToRad(); - delete ROOT; -#endif // Set the correct paths m_screenshot = file_manager->getTrackFile(m_screenshot, getIdent()); @@ -1154,12 +1095,7 @@ Track::readDrivelineFromFile(std::vector& line, const std::string& file_ex //* Convert the ssg track tree into its physics equivalents. void Track::createPhysicsModel() { -#ifndef HAVE_IRRLICHT - if(!m_model) return; -#endif - -#ifdef HAVE_IRRLICHT // Remove the temporary track rigid body, and then convert all objects // (i.e. the track and all additional objects) into a new rigid body // and convert this again. So this way we have an optimised track @@ -1172,12 +1108,6 @@ void Track::createPhysicsModel() { convertTrackToBullet(m_all_meshes[i]); } -#else - // Collect all triangles in the track_mesh - sgMat4 mat; - sgMakeIdentMat4(mat); - convertTrackToBullet(m_model, mat); -#endif m_track_mesh->createBody(); m_non_collision_mesh->createBody(btCollisionObject::CF_NO_CONTACT_RESPONSE); @@ -1185,7 +1115,6 @@ void Track::createPhysicsModel() // ----------------------------------------------------------------------------- //* Convert the ssg track tree into its physics equivalents. -#ifdef HAVE_IRRLICHT void Track::convertTrackToBullet(const scene::IMesh *mesh) { for(unsigned int i=0; igetMeshBufferCount(); i++) { @@ -1220,80 +1149,11 @@ void Track::convertTrackToBullet(const scene::IMesh *mesh) } // for i(track); - if(mp) - { - // If the track contains obect of type MovingPhysics, - // these objects will be real rigid body and are already - // part of the world. So these objects must not be converted - // to triangle meshes. - } - else if(track->isAKindOf(ssgTypeLeaf())) - { - ssgLeaf *leaf = (ssgLeaf*)(track); - Material *material = material_manager->getMaterial(leaf); - // Don't convert triangles with material that is ignored (e.g. fuzzy_sand) - if(!material || material->isIgnore()) return; - - for(int i=0; igetNumTriangles(); i++) - { - short v1,v2,v3; - sgVec3 vv1, vv2, vv3; - - leaf->getTriangle(i, &v1, &v2, &v3); - sgXformPnt3 ( vv1, leaf->getVertex(v1), m ); - sgXformPnt3 ( vv2, leaf->getVertex(v2), m ); - sgXformPnt3 ( vv3, leaf->getVertex(v3), m ); - btVector3 vb1(vv1[0],vv1[1],vv1[2]); - btVector3 vb2(vv2[0],vv2[1],vv2[2]); - btVector3 vb3(vv3[0],vv3[1],vv3[2]); - if(material->isZipper()) - { - m_non_collision_mesh->addTriangle(vb1, vb2, vb3, material); - } - else - { - m_track_mesh->addTriangle(vb1, vb2, vb3, material); - } - } - - } // if(track isAKindOf leaf) - else if(track->isAKindOf(ssgTypeTransform())) - { - ssgBaseTransform *t = (ssgBaseTransform*)(track); - sgMat4 tmpT, tmpM; - t->getTransform(tmpT); - sgCopyMat4(tmpM, m); - sgPreMultMat4(tmpM,tmpT); - for(ssgEntity *e = t->getKid(0); e!=NULL; e=t->getNextKid()) - { - convertTrackToBullet(e, tmpM); - } // for i - } - else if (track->isAKindOf(ssgTypeBranch())) - { - ssgBranch *b =(ssgBranch*)track; - for(ssgEntity* e=b->getKid(0); e!=NULL; e=b->getNextKid()) { - convertTrackToBullet(e, m); - } // for icreateBody(); return true; } // loadMainTrack -#endif + // ---------------------------------------------------------------------------- void Track::loadTrackModel() { @@ -1348,7 +1208,7 @@ void Track::loadTrackModel() // Start building the scene graph #ifdef HAVE_IRRLICHT - std::string path = file_manager->getTrackFile(getIdent()+".irrloc"); + std::string path = file_manager->getTrackFile(getIdent()+".scene"); XMLReader *xml = file_manager->getXMLReader(path); // Make sure that we have a track (which is used for raycasts to @@ -1622,22 +1482,15 @@ void Track::loadTrackModel() file_manager->popTextureSearchPath(); file_manager->popModelSearchPath (); -#ifdef HAVE_IRRLICHT const core::vector3df &sun_pos = getSunPos(); m_light = irr_driver->getSceneManager()->addLightSceneNode(0, sun_pos); video::SLight light; m_light->setLightData(light); // Note: the physics world for irrlicht is created in loadMainTrack -#else - Vec3 min, max; - SSGHelp::MinMax(m_model, &min, &max); - RaceManager::getWorld()->getPhysics()->init(min, max); -#endif createPhysicsModel(); } // loadTrack //----------------------------------------------------------------------------- -#ifdef HAVE_IRRLICHT void Track::itemCommand(const Vec3 &xyz, Item::ItemType type, int bNeedHeight) { @@ -1660,31 +1513,8 @@ void Track::itemCommand(const Vec3 &xyz, Item::ItemType type, Vec3 normal(0, 0, 0.0f); item_manager->newItem(type, loc, normal); } // itemCommand + // ---------------------------------------------------------------------------- -#else -void Track::itemCommand (sgVec3 *xyz, int type, int bNeedHeight ) -{ - - // if only 2d coordinates are given, let the item fall from very high - if(bNeedHeight) (*xyz)[2] = 1000000.0f; - - // Even if 3d data are given, make sure that the item is on the ground - (*xyz)[2] = getHeight( m_model, *xyz ) + 0.06f; - - // Some modes (e.g. time trial) don't have any bonus boxes - if(type==Item::ITEM_BONUS_BOX && !RaceManager::getWorld()->enableBonusBoxes()) - return; - Vec3 loc((*xyz)); - - // Don't tilt the items, since otherwise the rotation will look odd, - // i.e. the items will not rotate around the normal, but 'wobble' - // around. - Vec3 normal(0, 0, 0.0f); - item_manager->newItem((Item::ItemType)type, loc, normal); -} // itemCommand -// ---------------------------------------------------------------------------- -#endif - void Track::getTerrainInfo(const Vec3 &pos, float *hot, Vec3 *normal, const Material **material) const { diff --git a/src/tracks/track.hpp b/src/tracks/track.hpp index 4d139a95c..9ea70c5b0 100644 --- a/src/tracks/track.hpp +++ b/src/tracks/track.hpp @@ -29,10 +29,8 @@ #endif #include #include -#ifdef HAVE_IRRLICHT #include "irrlicht.h" using namespace irr; -#endif #include #include #include "LinearMath/btTransform.h" @@ -58,13 +56,9 @@ private: std::string m_designer; std::string m_filename; std::vector m_groups; -#ifdef HAVE_IRRLICHT std::vector m_all_nodes; std::vector m_all_meshes; scene::ILightSceneNode *m_light; -#else - ssgBranch *m_model; -#endif TriangleMesh* m_track_mesh; TriangleMesh* m_non_collision_mesh; bool m_has_final_camera; @@ -72,9 +66,7 @@ private: Vec3 m_camera_final_hpr; bool m_is_arena; int m_version; -#ifdef HAVE_IRRLICHT bool loadMainTrack(const XMLNode &node); -#endif public: enum RoadSide{ RS_DONT_KNOW = -1, RS_LEFT = 0, RS_RIGHT = 1 }; @@ -103,21 +95,12 @@ public: float m_fog_density; float m_fog_start; float m_fog_end; -#ifdef HAVE_IRRLICHT core::vector3df m_sun_position; video::SColorf m_ambient_color; video::SColorf m_specular_color; video::SColorf m_diffuse_color; video::SColorf m_sky_color; video::SColorf m_fog_color; -#else - sgVec4 m_sky_color; - sgVec4 m_fog_color; - sgVec3 m_sun_position; /** Position of the sun */ - sgVec4 m_ambient_col; - sgVec4 m_specular_col; - sgVec4 m_diffuse_col; -#endif //FIXME: Maybe the next 4 vectors should be inside an struct and be used //from a vector of structs? @@ -177,10 +160,6 @@ public: bool isShortcut (const int OLDSEC, const int NEWSEC) const; void addMusic (MusicInformation* mi) {m_music.push_back(mi); } -#ifdef HAVE_IRRLICHT -#else - ssgBranch* getModel () const {return m_model; } -#endif float getGravity () const {return m_gravity; } /** Returns the version of the .track file. */ int getVersion () const {return m_version; } @@ -191,21 +170,12 @@ public: getGroups () const {return m_groups; } void startMusic () const; const std::string& getFilename () const {return m_filename; } -#ifdef HAVE_IRRLICHT const core::vector3df& getSunPos () const {return m_sun_position; } const video::SColorf& getAmbientCol () const {return m_ambient_color; } const video::SColorf& getDiffuseCol () const {return m_diffuse_color; } const video::SColorf& getSpecularCol () const {return m_specular_color; } const video::SColorf& getFogColor () const {return m_fog_color; } const video::SColorf& getSkyColor () const {return m_sky_color; } -#else - const sgVec3& getSunPos () const {return m_sun_position; } - const sgVec4& getAmbientCol () const {return m_ambient_col; } - const sgVec4& getDiffuseCol () const {return m_diffuse_col; } - const sgVec4& getSpecularCol () const {return m_specular_col; } - const sgVec4& getFogColor () const {return m_fog_color; } - const sgVec4& getSkyColor () const {return m_sky_color; } -#endif const bool& useFog () const {return m_use_fog; } const float& getFogDensity () const {return m_fog_density; } const float& getFogStart () const {return m_fog_start; } @@ -233,20 +203,12 @@ public: private: void loadTrack(const std::string &filename); -#ifdef HAVE_IRRLICHT void itemCommand(const Vec3 &xyz, Item::ItemType item_type, int bNeedHeight); -#else - void itemCommand(sgVec3 *xyz, int item_type, int bNeedHeight); -#endif void loadDriveline(); void readDrivelineFromFile(std::vector& line, const std::string& file_ext); -#ifdef HAVE_IRRLICHT void convertTrackToBullet(const scene::IMesh *mesh); -#else - void convertTrackToBullet(ssgEntity *track, sgMat4 m); -#endif float pointSideToLine(const Vec3& L1, const Vec3& L2, const Vec3& P ) const; int pointInQuad(const Vec3& A, const Vec3& B, diff --git a/src/tracks/track_manager.cpp b/src/tracks/track_manager.cpp index 02853182b..699d4e9ce 100644 --- a/src/tracks/track_manager.cpp +++ b/src/tracks/track_manager.cpp @@ -131,11 +131,8 @@ void TrackManager::loadTrackList () try { // getTrackFile appends dir, so it's opening: *dir/*dir.track -#ifdef HAVE_IRRLICHT + // FIXME: rename from .irrtrack to .track config_file = file_manager->getTrackFile((*dir)+".irrtrack"); -#else - config_file = file_manager->getTrackFile((*dir)+".track"); -#endif } catch (std::exception& e) { From 282c849af297e851e2a35d6ebf96074266da373c Mon Sep 17 00:00:00 2001 From: hikerstk Date: Thu, 12 Mar 2009 05:24:11 +0000 Subject: [PATCH 0006/1008] Made the time being displayed in white. git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3243 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- src/gui/race_gui.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/race_gui.cpp b/src/gui/race_gui.cpp index 78d790800..16b7fb488 100644 --- a/src/gui/race_gui.cpp +++ b/src/gui/race_gui.cpp @@ -56,6 +56,7 @@ RaceGUI::RaceGUI() user_config->m_width, 150); m_time = gui_env->addStaticText(L"", pos); m_time->setOverrideFont(irr_driver->getRaceFont()); + m_time->setOverrideColor(video::SColor(255, 255, 255, 255)); int icon_width=40; int icon_player_width=50; From ef3f73ad0bc450ecdef3f69b62ea38c8ae50a756 Mon Sep 17 00:00:00 2001 From: auria Date: Thu, 12 Mar 2009 15:59:29 +0000 Subject: [PATCH 0007/1008] updated xcode project git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3244 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- .../Xcode/STK_XCode.xcodeproj/project.pbxproj | 40 ++++++++++--------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/src/ide/Xcode/STK_XCode.xcodeproj/project.pbxproj b/src/ide/Xcode/STK_XCode.xcodeproj/project.pbxproj index a669eb6fd..8220548a6 100644 --- a/src/ide/Xcode/STK_XCode.xcodeproj/project.pbxproj +++ b/src/ide/Xcode/STK_XCode.xcodeproj/project.pbxproj @@ -7,6 +7,11 @@ objects = { /* Begin PBXBuildFile section */ + 950557140F6963790056E88C /* file_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9505570E0F6963790056E88C /* file_manager.cpp */; }; + 9505574F0F69684D0056E88C /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9505574E0F69684D0056E88C /* AudioUnit.framework */; }; + 950557580F6968860056E88C /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 950557570F6968860056E88C /* Carbon.framework */; }; + 950557600F6968A50056E88C /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9505575F0F6968A50056E88C /* QuickTime.framework */; }; + 950557650F6968BE0056E88C /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 950557640F6968BE0056E88C /* IOKit.framework */; }; 953EAAAF0F30A4220000D57D /* terrain_info.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 953EAAAE0F30A4220000D57D /* terrain_info.cpp */; }; 953EAAB20F30A4410000D57D /* triangle_mesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 953EAAB10F30A4410000D57D /* triangle_mesh.cpp */; }; 953EAAB60F30A4650000D57D /* translation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 953EAAB50F30A4650000D57D /* translation.cpp */; }; @@ -129,7 +134,6 @@ 95C2B2F60F296546000D3E5D /* unix.c in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AE700F296542000D3E5D /* unix.c */; }; 95C2B2F80F296546000D3E5D /* win32.c in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AE720F296542000D3E5D /* win32.c */; }; 95C2B2FA0F296546000D3E5D /* explosion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AE740F296542000D3E5D /* explosion.cpp */; }; - 95C2B2FD0F296546000D3E5D /* file_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AE780F296542000D3E5D /* file_manager.cpp */; }; 95C2B3030F296546000D3E5D /* grand_prix_data.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AE7F0F296542000D3E5D /* grand_prix_data.cpp */; }; 95C2B3060F296546000D3E5D /* grand_prix_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AE830F296542000D3E5D /* grand_prix_manager.cpp */; }; 95C2B3100F296546000D3E5D /* base_gui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AE970F296542000D3E5D /* base_gui.cpp */; }; @@ -244,9 +248,6 @@ 95C65DAB0F532FD400BE7BA7 /* nitro.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C65DA10F532FD400BE7BA7 /* nitro.cpp */; }; 95F423130E26E3DC00692113 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95F423120E26E3DC00692113 /* OpenGL.framework */; }; 95F4231F0E26E44800692113 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95F4231E0E26E44800692113 /* Cocoa.framework */; }; - 95F423300E26E58400692113 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95F4232F0E26E58400692113 /* Carbon.framework */; }; - 95F423350E26E58E00692113 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95F423340E26E58E00692113 /* IOKit.framework */; }; - 95F423390E26E59700692113 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95F423380E26E59700692113 /* AGL.framework */; }; 95F423410E26E65B00692113 /* GLUT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95F423400E26E65B00692113 /* GLUT.framework */; }; /* End PBXBuildFile section */ @@ -263,6 +264,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 9505570E0F6963790056E88C /* file_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = file_manager.cpp; path = games/supertuxkart/src/io/file_manager.cpp; sourceTree = SYSTEM_DEVELOPER_DIR; }; + 9505570F0F6963790056E88C /* file_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = file_manager.hpp; path = games/supertuxkart/src/io/file_manager.hpp; sourceTree = SYSTEM_DEVELOPER_DIR; }; + 9505574E0F69684D0056E88C /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = ""; }; + 950557570F6968860056E88C /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; + 9505575F0F6968A50056E88C /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = ""; }; + 950557640F6968BE0056E88C /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; 951F96810F29670C00E1AC66 /* SuperTuxKart */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = SuperTuxKart; sourceTree = BUILT_PRODUCTS_DIR; }; 953EAAAD0F30A4220000D57D /* terrain_info.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = terrain_info.hpp; path = ../../tracks/terrain_info.hpp; sourceTree = SOURCE_ROOT; }; 953EAAAE0F30A4220000D57D /* terrain_info.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = terrain_info.cpp; path = ../../tracks/terrain_info.cpp; sourceTree = SOURCE_ROOT; }; @@ -556,8 +563,6 @@ 95C2AE720F296542000D3E5D /* win32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = win32.c; path = ../../enet/win32.c; sourceTree = SOURCE_ROOT; }; 95C2AE740F296542000D3E5D /* explosion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = explosion.cpp; path = ../../explosion.cpp; sourceTree = SOURCE_ROOT; }; 95C2AE750F296542000D3E5D /* explosion.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = explosion.hpp; path = ../../explosion.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AE780F296542000D3E5D /* file_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = file_manager.cpp; path = ../../file_manager.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AE790F296542000D3E5D /* file_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = file_manager.hpp; path = ../../file_manager.hpp; sourceTree = SOURCE_ROOT; }; 95C2AE7F0F296542000D3E5D /* grand_prix_data.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = grand_prix_data.cpp; path = ../../grand_prix_data.cpp; sourceTree = SOURCE_ROOT; }; 95C2AE800F296542000D3E5D /* grand_prix_data.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = grand_prix_data.hpp; path = ../../grand_prix_data.hpp; sourceTree = SOURCE_ROOT; }; 95C2AE830F296542000D3E5D /* grand_prix_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = grand_prix_manager.cpp; path = ../../grand_prix_manager.cpp; sourceTree = SOURCE_ROOT; }; @@ -1027,9 +1032,6 @@ 95E106DD0E28F66200503124 /* btVector3.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = btVector3.h; path = ../../bullet/src/LinearMath/btVector3.h; sourceTree = SOURCE_ROOT; }; 95F423120E26E3DC00692113 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; 95F4231E0E26E44800692113 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; - 95F4232F0E26E58400692113 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; - 95F423340E26E58E00692113 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; - 95F423380E26E59700692113 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; 95F423400E26E65B00692113 /* GLUT.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLUT.framework; path = /System/Library/Frameworks/GLUT.framework; sourceTree = ""; }; /* End PBXFileReference section */ @@ -1040,10 +1042,11 @@ files = ( 95F423130E26E3DC00692113 /* OpenGL.framework in Frameworks */, 95F4231F0E26E44800692113 /* Cocoa.framework in Frameworks */, - 95F423300E26E58400692113 /* Carbon.framework in Frameworks */, - 95F423350E26E58E00692113 /* IOKit.framework in Frameworks */, - 95F423390E26E59700692113 /* AGL.framework in Frameworks */, 95F423410E26E65B00692113 /* GLUT.framework in Frameworks */, + 9505574F0F69684D0056E88C /* AudioUnit.framework in Frameworks */, + 950557580F6968860056E88C /* Carbon.framework in Frameworks */, + 950557600F6968A50056E88C /* QuickTime.framework in Frameworks */, + 950557650F6968BE0056E88C /* IOKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1072,10 +1075,11 @@ 9513B40E0F0EDE80005D29F6 /* Frameworks */ = { isa = PBXGroup; children = ( + 950557640F6968BE0056E88C /* IOKit.framework */, + 9505575F0F6968A50056E88C /* QuickTime.framework */, + 950557570F6968860056E88C /* Carbon.framework */, + 9505574E0F69684D0056E88C /* AudioUnit.framework */, 95F423400E26E65B00692113 /* GLUT.framework */, - 95F423380E26E59700692113 /* AGL.framework */, - 95F423340E26E58E00692113 /* IOKit.framework */, - 95F4232F0E26E58400692113 /* Carbon.framework */, 95F4231E0E26E44800692113 /* Cocoa.framework */, 95F423120E26E3DC00692113 /* OpenGL.framework */, ); @@ -1109,8 +1113,6 @@ 95C2AE1E0F296541000D3E5D /* callback_manager.hpp */, 95C2AE740F296542000D3E5D /* explosion.cpp */, 95C2AE750F296542000D3E5D /* explosion.hpp */, - 95C2AE780F296542000D3E5D /* file_manager.cpp */, - 95C2AE790F296542000D3E5D /* file_manager.hpp */, 95C2AE7F0F296542000D3E5D /* grand_prix_data.cpp */, 95C2AE800F296542000D3E5D /* grand_prix_data.hpp */, 95C2AE830F296542000D3E5D /* grand_prix_manager.cpp */, @@ -1924,6 +1926,8 @@ 95C65D750F532F7D00BE7BA7 /* io */ = { isa = PBXGroup; children = ( + 9505570E0F6963790056E88C /* file_manager.cpp */, + 9505570F0F6963790056E88C /* file_manager.hpp */, 95C65D760F532F7D00BE7BA7 /* xml_node.cpp */, 95C65D770F532F7D00BE7BA7 /* xml_node.hpp */, 95C65D790F532F7D00BE7BA7 /* xml_reader.cpp */, @@ -2423,7 +2427,6 @@ 95C2B2F60F296546000D3E5D /* unix.c in Sources */, 95C2B2F80F296546000D3E5D /* win32.c in Sources */, 95C2B2FA0F296546000D3E5D /* explosion.cpp in Sources */, - 95C2B2FD0F296546000D3E5D /* file_manager.cpp in Sources */, 95C2B3030F296546000D3E5D /* grand_prix_data.cpp in Sources */, 95C2B3060F296546000D3E5D /* grand_prix_manager.cpp in Sources */, 95C2B3100F296546000D3E5D /* base_gui.cpp in Sources */, @@ -2539,6 +2542,7 @@ 95C65DA90F532FD400BE7BA7 /* scene.cpp in Sources */, 95C65DAA0F532FD400BE7BA7 /* shadow.cpp in Sources */, 95C65DAB0F532FD400BE7BA7 /* nitro.cpp in Sources */, + 950557140F6963790056E88C /* file_manager.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; From 921d9a34d5a32decc7472c05d9478f578ad01ee3 Mon Sep 17 00:00:00 2001 From: hikerstk Date: Thu, 12 Mar 2009 23:35:15 +0000 Subject: [PATCH 0008/1008] Added more textures (by putting them for now in the same directory as the model), fixed detection of terrain (e.g. triggering rescue when trying to drive on water). git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3245 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- data/items/banana.b3d | Bin 0 -> 18204 bytes data/items/banana.png | Bin 0 -> 56552 bytes data/items/gift-box.ac | 4 +- data/items/gift-box.b3d | Bin 0 -> 15867 bytes data/items/gift-box.png | Bin 0 -> 102387 bytes data/items/gift-loop.png | Bin 0 -> 32659 bytes data/items/nitro-tank.png | Bin 0 -> 30787 bytes data/items/nitrotank-big.ac | 6 +- data/items/nitrotank-big.b3d | Bin 0 -> 17084 bytes data/items/nitrotank-small.ac | 6 +- data/items/nitrotank-small.b3d | Bin 0 -> 16833 bytes data/items/tank-blue.png | Bin 0 -> 47286 bytes data/items/tank-cyan.png | Bin 0 -> 35586 bytes data/items/tank-green.png | Bin 0 -> 78307 bytes data/models/bowling.b3d | Bin 0 -> 23366 bytes data/models/bowling.png | Bin 0 -> 20755 bytes src/explosion.cpp | 16 +++-- src/explosion.hpp | 23 ++++--- src/io/file_manager.cpp | 1 + src/io/xml_node.cpp | 2 +- src/items/item_manager.cpp | 63 +------------------ src/items/powerup_manager.cpp | 50 --------------- src/items/powerup_manager.hpp | 14 +---- src/items/projectile_manager.cpp | 6 +- src/items/projectile_manager.hpp | 15 ++--- src/karts/kart_properties.cpp | 2 +- src/material.cpp | 102 ------------------------------- src/material.hpp | 31 ---------- src/material_manager.cpp | 99 +----------------------------- src/material_manager.hpp | 8 --- src/sdldrv.cpp | 57 ----------------- src/tracks/track.cpp | 2 +- 32 files changed, 50 insertions(+), 457 deletions(-) create mode 100755 data/items/banana.b3d create mode 100644 data/items/banana.png create mode 100755 data/items/gift-box.b3d create mode 100644 data/items/gift-box.png create mode 100644 data/items/gift-loop.png create mode 100644 data/items/nitro-tank.png create mode 100755 data/items/nitrotank-big.b3d create mode 100755 data/items/nitrotank-small.b3d create mode 100644 data/items/tank-blue.png create mode 100644 data/items/tank-cyan.png create mode 100644 data/items/tank-green.png create mode 100755 data/models/bowling.b3d create mode 100644 data/models/bowling.png diff --git a/data/items/banana.b3d b/data/items/banana.b3d new file mode 100755 index 0000000000000000000000000000000000000000..a15413adc7b4e60b0c2af71fffb8b0fc7da5572a GIT binary patch literal 18204 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 j9mnSP{H_=L literal 0 HcmV?d00001 diff --git a/data/items/banana.png b/data/items/banana.png new file mode 100644 index 0000000000000000000000000000000000000000..3ddc4e67fa4d9a7beb215b3ae971d79c2a26c9e6 GIT binary patch literal 56552 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

pp2JUqLs@XR{eC7ZO71sBp;AGe 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 Hu0mjft3XzT literal 0 HcmV?d00001 diff --git a/data/items/gift-box.ac b/data/items/gift-box.ac index 78c0b8fdc..988c0ee63 100644 --- a/data/items/gift-box.ac +++ b/data/items/gift-box.ac @@ -9,7 +9,7 @@ OBJECT poly name "GiftBox_0" data 7 GiftBox -texture "gift-loop.rgb" +texture "gift-loop.png" texrep 1 1 crease 70.000000 numvert 158 @@ -1188,7 +1188,7 @@ OBJECT poly name "GiftBox_1" data 7 GiftBox -texture "gift-box.rgb" +texture "gift-box.png" texrep 1 1 crease 70.000000 numvert 28 diff --git a/data/items/gift-box.b3d b/data/items/gift-box.b3d new file mode 100755 index 0000000000000000000000000000000000000000..9ed24bb25ecee7eafb46e4855f1dea5680708661 GIT binary patch literal 15867 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%0Dk{9fA+>x`XVq;9XcG{y~xBI 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 X$2f-G{!6iO5I{+b%ZvRMF%0}aP2sxB literal 0 HcmV?d00001 diff --git a/data/items/nitro-tank.png b/data/items/nitro-tank.png new file mode 100644 index 0000000000000000000000000000000000000000..03a4322f0f08b2de86279fd5599d8a35a123f8d8 GIT binary patch literal 30787 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 QaPBWiQ&ksJs%#zne`%O#lmGw# literal 0 HcmV?d00001 diff --git a/data/items/nitrotank-big.ac b/data/items/nitrotank-big.ac index 08ceec733..796ed1143 100644 --- a/data/items/nitrotank-big.ac +++ b/data/items/nitrotank-big.ac @@ -9,7 +9,7 @@ OBJECT poly name "BigTank_0" data 7 BigTank -texture "tank-blue.rgb" +texture "tank-blue.png" texrep 1 1 crease 70.000000 numvert 37 @@ -434,7 +434,7 @@ OBJECT poly name "BigTank_1" data 7 BigTank -texture "nitro-tank.rgb" +texture "nitro-tank.png" texrep 1 1 crease 70.000000 numvert 67 @@ -999,7 +999,7 @@ OBJECT poly name "BigTank_2" data 7 BigTank -texture "tank-green.rgb" +texture "tank-green.png" texrep 1 1 crease 70.000000 numvert 46 diff --git a/data/items/nitrotank-big.b3d b/data/items/nitrotank-big.b3d new file mode 100755 index 0000000000000000000000000000000000000000..8c1f713847394a991b3b8778fb9c40ec1740c75f GIT binary patch literal 17084 zcmdU$2Xqu=*T;v1njk%)Lm+{GNGO7o>^=iXs8S>}=|n=4-UY=0r6bb25DZd-)DS{; zXGE&POBDeH1XP+JU_nuY_kZWfPWIWE&FaU!F<;I$ zlGeFxyQXnV8%t7$cI`UqMY8_5hIZX&{fClj;A!JFO)(_XUIc4A zXh26yXm9VCQ*zdo30H2LxcC;A3ro^-+&XvY7=O9|{|~Jzt;M1e>)G%k!5L#x!;Dw% z|GJy>{&3c}_Ic;+!CRSYJw-<|C`qE@k(-XpVb?>8s`G1IK(0R1nr~;7Yvp)d^LUbU ze!^zSpP`uoe8UR8}6qT@CE zbDrbzxe{~vJg0{JV;`9k>g?Vm#;EJt@nsR?yg5lS$4L_2)9iE%Xgsx|QCD<)nMKE! zdFqYk_HR@EwzWPMZRCoM=ZcQ!jyRc@)qSwf{!${%Ghb%k&MMc+@w(>mBq=sW8+NPg zM%&2J)s4EMEj(<8u(Wlca=oOIb$rNA~=S zN*b?+=y;95oh04-ERmh+f8PF1->mfz9k1b^^Bj-Qm6*%txo)q9>`qz@w)<|@vC+5V z%Ob{kbCP6^lcZb!Y__LtD}nbmdOzhi(eY gjPGKAZ)uY{63N{bd|`M8|VQ$8%G| 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 literal 0 HcmV?d00001 diff --git a/data/items/nitrotank-small.ac b/data/items/nitrotank-small.ac index 51a285a94..c34eab8e0 100644 --- a/data/items/nitrotank-small.ac +++ b/data/items/nitrotank-small.ac @@ -9,7 +9,7 @@ OBJECT poly name "SmallTank_0" data 9 SmallTank -texture "nitro-tank.rgb" +texture "nitro-tank.png" texrep 1 1 crease 70.000000 numvert 59 @@ -558,7 +558,7 @@ OBJECT poly name "SmallTank_1" data 9 SmallTank -texture "tank-cyan.rgb" +texture "tank-cyan.png" texrep 1 1 crease 70.000000 numvert 46 @@ -1100,7 +1100,7 @@ OBJECT poly name "SmallTank_2" data 9 SmallTank -texture "tank-blue.rgb" +texture "tank-blue.png" texrep 1 1 crease 70.000000 numvert 37 diff --git a/data/items/nitrotank-small.b3d b/data/items/nitrotank-small.b3d new file mode 100755 index 0000000000000000000000000000000000000000..1b0a320365d79c081f09371a1eb1e21421394c7c GIT binary patch literal 16833 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 literal 0 HcmV?d00001 diff --git a/data/items/tank-blue.png b/data/items/tank-blue.png new file mode 100644 index 0000000000000000000000000000000000000000..0ab0eb070115c5576e5872285b0c1cf36c8b8c96 GIT binary patch literal 47286 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 m@{l%V`KvwI@b&B0um3-;f&n?2p>%ct0000W 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 Z{{gQy{_#*;9~S@s002ovPDHLkV1l}#&uahx literal 0 HcmV?d00001 diff --git a/data/models/bowling.b3d b/data/models/bowling.b3d new file mode 100755 index 0000000000000000000000000000000000000000..9be533304ee148f6efc8af71323beb558445a56a GIT binary patch literal 23366 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 b@^_|XY^hYca!3+sXmfe~C#LDpwwdyOgCS0! literal 0 HcmV?d00001 diff --git a/data/models/bowling.png b/data/models/bowling.png new file mode 100644 index 0000000000000000000000000000000000000000..5214fb87ff0421a28c8bd4e48acb55ffef52766f GIT binary patch literal 20755 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 #include "explosion.hpp" + #include "items/projectile_manager.hpp" #include "audio/sfx_base.hpp" #include "audio/sfx_manager.hpp" #include "graphics/scene.hpp" #include "utils/vec3.hpp" -Explosion::Explosion(const Vec3& coord, const int explosion_sound) : ssgTransform() +Explosion::Explosion(const Vec3& coord, const int explosion_sound) { - this->ref(); - ssgCutout *cut = new ssgCutout(); - addKid(cut); // derefing the explosion will free the cutout - m_seq = projectile_manager->getExplosionModel(); - cut->addKid(m_seq); + m_mesh = projectile_manager->getExplosionModel(); m_explode_sound = sfx_manager->newSFX( (SFXManager::SFXType)explosion_sound ); init(coord); } // Explosion @@ -54,15 +50,16 @@ void Explosion::init(const Vec3& coord) sgCoord c; c.xyz[0]=coord[0];c.xyz[1]=coord[1];c.xyz[2]=coord[2]; c.hpr[0]=0; c.hpr[1]=0; c.hpr[2]=0; - setTransform(&c); + //setTransform(&c); m_step = -1; - stk_scene->add(this); + //stk_scene->add(this); m_has_ended = false; } //----------------------------------------------------------------------------- void Explosion::update(float dt) { +#ifndef HAVE_IRRLICHT //fprintf(stderr, "Explosion: update: "); if(++m_step >= m_seq->getNumKids()) { @@ -85,4 +82,5 @@ void Explosion::update(float dt) //fprintf(stderr, "Step.\n"); m_seq->selectStep(m_step); } +#endif } diff --git a/src/explosion.hpp b/src/explosion.hpp index 48b357dc0..0ce601a6c 100644 --- a/src/explosion.hpp +++ b/src/explosion.hpp @@ -17,23 +17,30 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -#ifndef HEADER_EXPLOSION_H -#define HEADER_EXPLOSION_H - -#include +#ifndef HEADER_EXPLOSION_HPP +#define HEADER_EXPLOSION_HPP class Vec3; class SFXBase; +namespace irr +{ + namespace scene + { + class IMesh; + class ISceneNode; + } +} -class Explosion : public ssgTransform +class Explosion { private: - SFXBase* m_explode_sound; - bool m_has_ended; + SFXBase* m_explode_sound; + bool m_has_ended; + irr::scene::IMesh *m_mesh; + irr::scene::ISceneNode *m_node; public: int m_step ; - ssgSelector *m_seq ; Explosion(const Vec3& coord, const int explosion_sound); ~Explosion(); diff --git a/src/io/file_manager.cpp b/src/io/file_manager.cpp index 2674963d5..9be052e41 100644 --- a/src/io/file_manager.cpp +++ b/src/io/file_manager.cpp @@ -196,6 +196,7 @@ FileManager::~FileManager() XMLReader *FileManager::getXMLReader(const std::string &f) { io::IXMLReader *r = m_file_system->createXMLReader(f.c_str()); + if(!r) return NULL; return new XMLReader(r); } // getXMLReader diff --git a/src/io/xml_node.cpp b/src/io/xml_node.cpp index 7f2da61cd..1b439d0a3 100644 --- a/src/io/xml_node.cpp +++ b/src/io/xml_node.cpp @@ -113,7 +113,7 @@ int XMLNode::get(const std::string &attribute, bool *value) const { std::string s; if(!get(attribute, &s)) return 0; - *value = s=="" || s[0]=='T' || s[0]=='t' || + *value = s=="" || s[0]=='T' || s[0]=='t' || s[0]=='Y' || s[0]=='y' || s=="true" || s=="TRUE" || s=="#t" || s=="#T"; return 1; } // get(bool) diff --git a/src/items/item_manager.cpp b/src/items/item_manager.cpp index 57f9d10e5..73ce1e8b1 100644 --- a/src/items/item_manager.cpp +++ b/src/items/item_manager.cpp @@ -73,26 +73,21 @@ Shadow::Shadow ( float x1, float x2, float y1, float y2 ) ssgVtxTable *gs = new ssgVtxTable ( GL_TRIANGLE_STRIP, va, na, ta, ca ) ; gs -> clrTraversalMaskBits ( SSGTRAV_ISECT|SSGTRAV_HOT ) ; +#ifndef HAVE_IRRLICHT gs -> setState ( fuzzy_gst ) ; +#endif sh -> addKid ( gs ) ; sh -> ref () ; /* Make sure it doesn't get deleted by mistake */ } // Shadow //============================================================================= ItemManager* item_manager; -#ifdef HAVE_IRRLICHT + typedef std::map::const_iterator CI_type; -#else -typedef std::map::const_iterator CI_type; -#endif ItemManager::ItemManager() { -#ifdef HAVE_IRRLICHT m_all_meshes.clear(); -#else - m_all_models.clear(); -#endif // The actual loading is done in loadDefaultItems } // ItemManager @@ -106,26 +101,17 @@ void ItemManager::removeTextures() } m_all_items.clear(); -#ifdef HAVE_IRRLICHT for(CI_type i=m_all_meshes.begin(); i!=m_all_meshes.end(); ++i) { i->second->drop(); } m_all_meshes.clear(); -#else - for(CI_type i=m_all_models.begin(); i!=m_all_models.end(); ++i) - { - i->second->deRef(); - } - m_all_models.clear(); -#endif callback_manager->clear(CB_ITEM); } // removeTextures //----------------------------------------------------------------------------- ItemManager::~ItemManager() { -#ifdef HAVE_IRRLICHT for(CI_type i=m_all_meshes.begin(); i!=m_all_meshes.end(); ++i) { // FIXME: What about this plib comment: @@ -135,16 +121,6 @@ ItemManager::~ItemManager() i->second->drop(); } m_all_meshes.clear(); -#else - for(CI_type i=m_all_models.begin(); i!=m_all_models.end(); ++i) - { - // We can't use ssgDeRefDelete here, since then the object would be - // freed, and when m_all_models is deleted, we have invalid memory - // accesses. - i->second->deRef(); - } - m_all_models.clear(); -#endif } // ~ItemManager //----------------------------------------------------------------------------- @@ -160,7 +136,6 @@ void ItemManager::loadDefaultItems() for(std::set::iterator i = files.begin(); i != files.end(); ++i) { -#ifdef HAVE_IRRLICHT // FIXME: We should try to check the extension, // i.e. load only .3ds files scene::IMesh *mesh = irr_driver->getAnimatedMesh(*i); @@ -168,16 +143,6 @@ void ItemManager::loadDefaultItems() std::string shortName = StringUtils::basename(StringUtils::without_extension(*i)); m_all_meshes[shortName] = mesh; mesh->grab(); -#else - if(!StringUtils::has_suffix(*i, ".ac")) continue; - ssgEntity* h = loader->load(*i, CB_ITEM, - /*optimise*/true, - /*full_path*/true); - std::string shortName = StringUtils::basename(StringUtils::without_extension(*i)); - h->ref(); - h->setName(shortName.c_str()); - m_all_models[shortName] = h; -#endif } // for i setDefaultItemStyle(); @@ -198,13 +163,8 @@ void ItemManager::setDefaultItemStyle() std::ostringstream msg; for(int i=Item::ITEM_FIRST; i<=Item::ITEM_LAST; i++) { -#ifdef HAVE_IRRLICHT m_item_mesh[i] = m_all_meshes[DEFAULT_NAMES[i]]; if(!m_item_mesh[i]) -#else - m_item_model[i] = m_all_models[DEFAULT_NAMES[i]]; - if(!m_item_model[i]) -#endif { msg << "Item model '" << DEFAULT_NAMES[i] << "' is missing (see item_manager)!\n"; @@ -215,11 +175,7 @@ void ItemManager::setDefaultItemStyle() if(bError) { fprintf(stderr, "The following models are available:\n"); -#ifdef HAVE_IRRLICHT for(CI_type i=m_all_meshes.begin(); i!=m_all_meshes.end(); ++i) -#else - for(CI_type i=m_all_models.begin(); i!=m_all_models.end(); ++i) -#endif { if(i->second) { @@ -242,21 +198,12 @@ Item* ItemManager::newItem(Item::ItemType type, const Vec3& xyz, const Vec3 &normal, Kart *parent) { Item* h; -#ifdef HAVE_IRRLICHT if(type == Item::ITEM_BUBBLEGUM) h = new BubbleGumItem(type, xyz, normal, m_item_mesh[type], m_all_items.size()); else h = new Item(type, xyz, normal, m_item_mesh[type], m_all_items.size()); -#else - if(type == Item::ITEM_BUBBLEGUM) - h = new BubbleGumItem(type, xyz, normal, m_item_model[type], - m_all_items.size()); - else - h = new Item(type, xyz, normal, m_item_model[type], - m_all_items.size()); -#endif if(parent != NULL) h->setParent(parent); m_all_items.push_back(h); @@ -409,10 +356,6 @@ void ItemManager::setItem(const lisp::Lisp *item_node, item_node->get(colour, name); if(name.size()>0) { -#ifdef HAVE_IRRLICHT m_item_mesh[type]=m_all_meshes[name]; -#else - m_item_model[type]=m_all_models[name]; -#endif } } // setItem diff --git a/src/items/powerup_manager.cpp b/src/items/powerup_manager.cpp index ed690a980..3605b2bc9 100644 --- a/src/items/powerup_manager.cpp +++ b/src/items/powerup_manager.cpp @@ -42,7 +42,6 @@ initPowerupType; initPowerupType ict[]= { -#ifdef HAVE_IRRLICHT {POWERUP_ZIPPER, "zipper.collectable" }, {POWERUP_BOWLING, "bowling.projectile" }, {POWERUP_BUBBLEGUM, "bubblegum.xml" }, @@ -51,16 +50,6 @@ initPowerupType ict[]= {POWERUP_PARACHUTE, "parachute.collectable" }, {POWERUP_PLUNGER, "plunger.projectile" }, {POWERUP_MAX, "" }, -#else - {POWERUP_ZIPPER, "zipper.collectable" }, - {POWERUP_BOWLING, "bowling.projectile" }, - {POWERUP_BUBBLEGUM, "bubblegum.projectile" }, - {POWERUP_CAKE, "cake.projectile" }, - {POWERUP_ANVIL, "anvil.collectable" }, - {POWERUP_PARACHUTE, "parachute.collectable" }, - {POWERUP_PLUNGER, "plunger.projectile" }, - {POWERUP_MAX, "" }, -#endif }; PowerupManager* powerup_manager=0; @@ -70,11 +59,7 @@ PowerupManager::PowerupManager() { for(int i=0; iget("name", sName ); -#ifdef HAVE_IRRLICHT lisp->get("mesh", sModel ); -#else - lisp->get("model", sModel ); -#endif lisp->get("icon", sIconFile ); // load material m_all_icons[collectType] = material_manager->getMaterial(sIconFile, /* full_path */ false, /*make_permanent */ true); -#ifdef HAVE_IRRLICHT if(sModel!="") { // FIXME LEAK: not freed (unimportant, since the models have to exist @@ -153,27 +133,8 @@ void PowerupManager::LoadNode(const lisp::Lisp* lisp, int collectType ) m_all_meshes[collectType] = 0; m_all_extends[collectType] = btVector3(0.0f,0.0f,0.0f); } -#else - m_all_icons[collectType]->getState()->ref(); - - if(sModel!="") - { - // FIXME LEAK: not freed (unimportant, since the models have to exist - // for the whole game anyway). - ssgEntity* e = loader->load(sModel, CB_COLLECTABLE); - m_all_models[collectType] = e; - e->ref(); - e->clrTraversalMaskBits(SSGTRAV_ISECT|SSGTRAV_HOT); - } - else - { - m_all_models[collectType] = 0; - m_all_extends[collectType] = btVector3(0.0f,0.0f,0.0f); - } -#endif // Load special attributes for certain powerups -#ifdef HAVE_IRRLICHT switch (collectType) { case POWERUP_BOWLING: Bowling::init(lisp, m_all_meshes[collectType]); break; @@ -183,16 +144,5 @@ void PowerupManager::LoadNode(const lisp::Lisp* lisp, int collectType ) Cake::init(lisp, m_all_meshes[collectType]); break; default:; } // switch -#else - switch (collectType) { - case POWERUP_BOWLING: - Bowling::init (lisp, m_all_models[collectType]); break; - case POWERUP_PLUNGER: - Plunger::init (lisp, m_all_models[collectType]); break; - case POWERUP_CAKE: - Cake::init (lisp, m_all_models[collectType]); break; - default:; - } // switch -#endif } // LoadNode diff --git a/src/items/powerup_manager.hpp b/src/items/powerup_manager.hpp index 8a5fffe11..478592f02 100644 --- a/src/items/powerup_manager.hpp +++ b/src/items/powerup_manager.hpp @@ -20,17 +20,13 @@ #ifndef HEADER_POWERUPMANAGER_HPP #define HEADER_POWERUPMANAGER_HPP -#ifdef HAVE_IRRLICHT #include "irrlicht.h" -#endif + #include "lisp/parser.hpp" #include "lisp/lisp.hpp" #include "btBulletDynamicsCommon.h" class Material; -#ifndef HAVE_IRRLICHT -class ssgEntity; -#endif // The anvil and parachute must be at the end of the enum, and the // zipper just before them (see Powerup::hitBonusBox). @@ -48,11 +44,7 @@ protected: float m_all_force_to_target[POWERUP_MAX]; // apply this force to move towards // the target float m_all_max_turn_angle[POWERUP_MAX]; // maximum turn angle for homing -#ifdef HAVE_IRRLICHT scene::IMesh *m_all_meshes[POWERUP_MAX]; -#else - ssgEntity* m_all_models[POWERUP_MAX]; -#endif btVector3 m_all_extends[POWERUP_MAX]; void LoadNode (const lisp::Lisp* lisp, int collectType); public: @@ -61,13 +53,9 @@ public: void removeTextures (); void Load (int collectType, const char* filename); Material* getIcon (int type) const {return m_all_icons [type]; } -#ifdef HAVE_IRRLICHT /** Returns the mesh for a certain powerup. * \param type Mesh type for which the model is returned. */ scene::IMesh *getMesh (int type) const {return m_all_meshes[type]; } -#else - ssgEntity* getModel (int type) const {return m_all_models[type]; } -#endif float getForceToTarget(int type) const {return m_all_force_to_target[type]; } float getMaxDistance (int type) const {return m_all_max_distance[type];} float getMaxTurnAngle (int type) const {return m_all_max_turn_angle[type];} diff --git a/src/items/projectile_manager.cpp b/src/items/projectile_manager.cpp index 91de59bdd..ab69e4dcd 100644 --- a/src/items/projectile_manager.cpp +++ b/src/items/projectile_manager.cpp @@ -54,7 +54,7 @@ void ProjectileManager::loadData() void ProjectileManager::removeTextures() { cleanup(); - ssgDeRefDelete(m_explosion_model); + //ssgDeRefDelete(m_explosion_model); // Only the explosion is here, all other models are actually managed // by powerup_manager. callback_manager->clear(CB_EXPLOSION); @@ -78,7 +78,7 @@ void ProjectileManager::cleanup() i != m_active_explosions.end(); ++i) { stk_scene->remove((ssgTransform*)*i); - ssgDeRefDelete(*i); + //ssgDeRefDelete(*i); } m_active_explosions.clear(); } // cleanup @@ -129,7 +129,7 @@ void ProjectileManager::update(float dt) if(!(*e)->hasEnded()) { e++; continue;} Explosion *exp=*e; Explosions::iterator eNext=m_active_explosions.erase(e); - ssgDeRefDelete(exp); // reduce refcount and free object + //ssgDeRefDelete(exp); // reduce refcount and free object e=eNext; } // while e!=m_active_explosions.end() } // if m_explosion_ended diff --git a/src/items/projectile_manager.hpp b/src/items/projectile_manager.hpp index 9f15dd2b5..4a6f98897 100644 --- a/src/items/projectile_manager.hpp +++ b/src/items/projectile_manager.hpp @@ -17,13 +17,14 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -#ifndef HEADER_PROJECTILEMANAGER_H -#define HEADER_PROJECTILEMANAGER_H +#ifndef HEADER_PROJECTILEMANAGER_HPP +#define HEADER_PROJECTILEMANAGER_HPP #include -#include -#include "items/powerup_manager.hpp" +#include "irrlicht.h" + #include "audio/sfx_manager.hpp" +#include "items/powerup_manager.hpp" class Vec3; class Kart; @@ -44,7 +45,7 @@ private: // being shown Explosions m_active_explosions; - ssgSelector* m_explosion_model; + scene::IMesh *m_explosion_model; bool m_something_was_hit; bool m_explosion_ended; void updateClient(float dt); @@ -55,9 +56,9 @@ public: /** Notifies the projectile manager that something needs to be removed. */ void notifyRemove () {m_something_was_hit=true; } void FinishedExplosion() {m_explosion_ended =true; } - ssgSelector* getExplosionModel() + scene::IMesh* getExplosionModel() { - return (ssgSelector*)m_explosion_model->clone(); + return m_explosion_model; } unsigned int getNumProjectiles() const {return m_active_explosions.size();} int getProjectileId (const std::string ident); diff --git a/src/karts/kart_properties.cpp b/src/karts/kart_properties.cpp index 356c26c2d..9cc908c1f 100644 --- a/src/karts/kart_properties.cpp +++ b/src/karts/kart_properties.cpp @@ -127,7 +127,7 @@ void KartProperties::load(const std::string &filename, const std::string &node, // Load material - std::string materials_file = file_manager->getKartFile("materials.dat",getIdent()); + std::string materials_file = file_manager->getKartFile("materials.xml",getIdent()); file_manager->pushModelSearchPath(file_manager->getKartFile("", getIdent())); file_manager->pushTextureSearchPath(file_manager->getKartFile("", getIdent())); diff --git a/src/material.cpp b/src/material.cpp index f160429d8..b84381ed2 100644 --- a/src/material.cpp +++ b/src/material.cpp @@ -30,74 +30,15 @@ #define UCLAMP 1 #define VCLAMP 2 -#ifndef HAVE_IRRLICHT -int clearSpheremap ( ssgEntity * ) -{ - glDisable ( GL_TEXTURE_GEN_S ) ; - glDisable ( GL_TEXTURE_GEN_T ) ; - return true ; -} // clearSpheremap - -//============================================================================= -int setSpheremap ( ssgEntity * ) -{ - glTexGeni ( GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP ) ; - glTexGeni ( GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP ) ; - glEnable ( GL_TEXTURE_GEN_S ) ; - glEnable ( GL_TEXTURE_GEN_T ) ; - return true ; -} // setSpheremap -#endif - -//============================================================================= -#ifndef HAVE_IRRLICHT -bool Material::parseBool ( char **p ) -{ - /* Skip leading spaces */ - - while ( **p <= ' ' && **p != '\0' ) (*p)++ ; - - const bool RES = ( ( **p == 'Y' ) || ( **p == 'y' ) ) ; - - while ( **p > ' ' && **p != '\0' ) (*p)++ ; - - return RES ; -} // parseBool - -//----------------------------------------------------------------------------- -int Material::parseInt ( char **p ) -{ - /* Skip leading spaces */ - - while ( **p <= ' ' && **p != '\0' ) (*p)++ ; - - return strtol ( *p, p, 0 ) ; -} // parseInt - -//----------------------------------------------------------------------------- -float Material::parseFloat ( char **p ) -{ - /* Skip leading spaces */ - - while ( **p <= ' ' && **p != '\0' ) (*p)++ ; - - return (float)strtod ( *p, p ) ; -} // parseFloat -#endif //----------------------------------------------------------------------------- Material::Material(unsigned int index) { m_texname = ""; -#ifndef HAVE_IRRLICHT - m_predraw = m_postdraw = NULL ; -#endif - init (index); install(); } // Material //----------------------------------------------------------------------------- -#ifdef HAVE_IRRLICHT /** Create a new material using the parameters specified in the xml file. * \param node Node containing the parameters for this material. * \param index Index in material_manager. @@ -142,41 +83,6 @@ Material::Material(const std::string& fname, int index, bool is_full_path) install(is_full_path); } // Material -#else -Material::Material(const std::string& fname, char *description, - int index, bool is_full_path) -{ - m_texname = fname; - m_predraw = m_postdraw = NULL ; - - init (index); - - if(strlen(description)>0) - { - m_clamp_tex = parseBool (&description) ? UCLAMP : 0 ; - m_clamp_tex += parseBool (&description) ? VCLAMP : 0 ; - - m_transparency = parseBool (&description); - m_alpha_ref = parseFloat(&description); - m_lighting = parseBool (&description); - m_sphere_map = parseBool (&description); - m_friction = parseFloat(&description); - m_ignore = parseBool (&description); - m_zipper = parseBool (&description); - m_resetter = parseBool (&description); - m_collideable = parseBool (&description); - m_max_speed_fraction = parseFloat(&description); - m_slowdown = parseFloat(&description); - // Set the optional parameters. - if(m_max_speed_fraction <= 0.0f) - m_max_speed_fraction = 1.0f; - if(m_slowdown <= 0.0f) - m_slowdown = stk_config->m_slowdown_factor; - } - install(is_full_path); -} // Material -#endif - //----------------------------------------------------------------------------- Material::~Material() { @@ -203,14 +109,6 @@ void Material::init(unsigned int index) m_slowdown = stk_config->m_slowdown_factor; } -//----------------------------------------------------------------------------- -#ifndef HAVE_IRRLICHT -void Material::applyToLeaf(ssgLeaf *l) -{ - if ( m_predraw ) l -> setCallback ( SSG_CALLBACK_PREDRAW , m_predraw ) ; - if ( m_postdraw ) l -> setCallback ( SSG_CALLBACK_POSTDRAW, m_postdraw ) ; -} // applyToLeaf -#endif //----------------------------------------------------------------------------- void Material::install(bool is_full_path) { diff --git a/src/material.hpp b/src/material.hpp index d3798ab4b..5653483ec 100644 --- a/src/material.hpp +++ b/src/material.hpp @@ -22,25 +22,15 @@ #include #define _WINSOCKAPI_ -#ifdef HAVE_IRRLICHT #include "irrlicht.h" using namespace irr; -#else -#include -#endif class XMLNode; class Material { private: -#ifdef HAVE_IRRLICHT video::ITexture *m_texture; -#else - ssgSimpleState *m_state; - ssgCallback m_predraw; - ssgCallback m_postdraw; -#endif unsigned int m_index; std::string m_texname; bool m_collideable; @@ -57,35 +47,20 @@ private: float m_slowdown; /** Maximum speed at which no more slow down occurs. */ float m_max_speed_fraction; -#ifndef HAVE_IRRLICHT - bool parseBool ( char **p ); - int parseInt ( char **p ); - float parseFloat ( char **p ); -#endif void init (unsigned int index); void install (bool is_full_path=false); public: Material(unsigned int index); -#ifdef HAVE_IRRLICHT Material(const XMLNode *node, int index); Material(const std::string& fname, int index, bool is_full_path=false); -#else - Material(const std::string& fname, char *description, int index, - bool is_full_path=false); -#endif ~Material (); int matches ( char *tx ) ; -#ifdef HAVE_IRRLICHT /** Returns the ITexture associated with this material. */ video::ITexture *getTexture() const { return m_texture; } -#else - ssgSimpleState - *getState () const { return m_state ; } -#endif bool isIgnore () const { return m_ignore; } bool isZipper () const { return m_zipper; } bool isSphereMap () const { return m_sphere_map; } @@ -100,12 +75,6 @@ public: /** Returns the slowdown that happens if a kart is * faster than the maximum speed. */ float getSlowDown () const { return m_slowdown; } -#ifndef HAVE_IRRLICHT - void apply () { m_state ->apply(); } - void force () { m_state ->force(); } - void applyToLeaf ( ssgLeaf *l ) ; -#endif - } ; diff --git a/src/material_manager.cpp b/src/material_manager.cpp index fcc53796b..26a474e98 100644 --- a/src/material_manager.cpp +++ b/src/material_manager.cpp @@ -70,17 +70,9 @@ void MaterialManager::loadMaterial() // Use temp material for reading, but then set the shared // material index later, so that these materials are not popped -#ifdef HAVE_IRRLICHT const std::string fname = "materials.xml"; -#else - const std::string fname = "materials.dat"; -#endif std::string full_name = file_manager->getTextureFile(fname); addSharedMaterial(full_name); -#ifndef HAVE_IRRLICHT - ssgSetAppStateCallback(getAppState); - fuzzy_gst = getMaterial("fuzzy.rgb")->getState(); -#endif // Save index of shared textures m_shared_material_index = (int)m_materials.size(); } // MaterialManager @@ -108,8 +100,8 @@ void MaterialManager::addSharedMaterial(const std::string& filename) //----------------------------------------------------------------------------- bool MaterialManager::pushTempMaterial(const std::string& filename) { -#ifdef HAVE_IRRLICHT XMLReader *xml = file_manager->getXMLReader(filename); + if(!xml) return true; for(unsigned int i=0; igetNumNodes(); i++) { const XMLNode *node = xml->getNode(i); @@ -130,17 +122,6 @@ bool MaterialManager::pushTempMaterial(const std::string& filename) } } // for igetNumNodes)( return true; -#else - FILE *fd = fopen(filename.c_str(), "r" ); - - if ( fd == NULL ) return false; - - while ( parseMaterial ( fd ) ) - /* Read file */ ; - - fclose ( fd ) ; - return true; -#endif } // pushTempMaterial //----------------------------------------------------------------------------- @@ -153,71 +134,6 @@ void MaterialManager::popTempMaterial() } // for i } // popTempMaterial -//----------------------------------------------------------------------------- -#ifndef HAVE_IRRLICHT -char* MaterialManager::parseFileName(char **str) -{ - char *p = *str ; - - /* Skip leading spaces */ - while ( *p <= ' ' && *p != '\0' ) p++ ; - - /* Skip blank lines and comments */ - if ( *p == '#' || *p == '\0' ) - return NULL ; - - if ( *p != '"' ) - { - fprintf(stderr, "ERROR: Material file entries must start with '\"'\n" - "ERROR: Offending line is '%s'\n", *str); - return NULL ; - } - - /* Filename? */ - char *f = ++p ; - while ( *p != '"' && *p != '\0' ) p++ ; - - if ( *p != '"' ) - { - fprintf(stderr, - "ERROR: Unterminated string constant '%s' in materials file.\n", *str ) ; - return NULL ; - } - - *p = '\0' ; - *str = ++p ; - - return f ; -} // parseFilename -#endif -//----------------------------------------------------------------------------- -#ifndef HAVE_IRRLICHT -int MaterialManager::parseMaterial ( FILE *fd ) -{ - char str [ 1024 ] ; - - while ( ! feof ( fd ) ) - { - char *s = str ; - - if ( fgets ( s, 1024, fd ) == NULL ) - return false ; - - s [ strlen(s) - 1 ] = '\0' ; - - char *f = parseFileName ( & s ) ; - - if ( f != NULL ) - { - m_materials.push_back(new Material (f, s, m_materials.size() )); - return true ; - } - } - - return false ; -} // parseMaterial -#endif - //----------------------------------------------------------------------------- Material *MaterialManager::getMaterial ( ssgLeaf *l ) { @@ -262,22 +178,9 @@ Material *MaterialManager::getMaterial(const std::string& fname, } // Add the new material -#ifdef HAVE_IRRLICHT Material* m=new Material(fname, m_materials.size(), is_full_path); -#else - Material* m=new Material(fname, "", m_materials.size(), is_full_path); -#endif m_materials.push_back(m); if(make_permanent) m_shared_material_index = (int)m_materials.size(); return m ; } // getMaterial -//============================================================================= -#ifndef HAVE_IRRLICHT -ssgState *getAppState ( char *fname ) -{ - Material *m = material_manager->getMaterial ( fname ) ; - return ( m == NULL ) ? NULL : m -> getState () ; -} // getAppState -#endif - diff --git a/src/material_manager.hpp b/src/material_manager.hpp index ea42c992d..babc50312 100644 --- a/src/material_manager.hpp +++ b/src/material_manager.hpp @@ -32,10 +32,6 @@ class MaterialManager { private: -#ifndef HAVE_IRRLICHT - char *parseFileName(char **str); - int parseMaterial(FILE *fd); -#endif void parseMaterialFile(const std::string& filename); int m_shared_material_index; @@ -53,10 +49,6 @@ public: void popTempMaterial (); }; -extern ssgState *fuzzy_gst;//, *herringbones_gst; -#ifndef HAVE_IRRLICHT -ssgState *getAppState ( char *fname ) ; -#endif extern MaterialManager *material_manager; #endif diff --git a/src/sdldrv.cpp b/src/sdldrv.cpp index 12148727d..fed7f94c4 100644 --- a/src/sdldrv.cpp +++ b/src/sdldrv.cpp @@ -59,11 +59,7 @@ SDLDriver::SDLDriver() : m_sensed_input(0), m_action_map(0), m_main_surface(0), m_flags(0), m_stick_infos(0), m_mode(BOOTSTRAP), m_mouse_val_x(0), m_mouse_val_y(0) { -#ifdef HAVE_IRRLICHT if (SDL_Init(SDL_INIT_JOYSTICK | SDL_INIT_TIMER) < 0) -#else - if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_TIMER) < 0) -#endif { fprintf(stderr, "SDL_Init failed: %s\n", SDL_GetError()); exit(1); @@ -109,9 +105,6 @@ SDLDriver::SDLDriver() SDL_JoystickEventState(SDL_ENABLE); initStickInfos(); -#ifndef HAVE_IRRLICHT - SDL_WM_SetCaption("SuperTuxKart", NULL); -#endif // Get into menu mode initially. setMode(MENU); @@ -260,52 +253,6 @@ void SDLDriver::toggleFullscreen(bool resetTextures) */ void SDLDriver::setVideoMode(bool resetTextures) { -#ifndef HAVE_IRRLICHT - //Is SDL_FreeSurface necessary? SDL wiki says not?? - SDL_FreeSurface(m_main_surface); - - SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); - SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); - SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); - SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); - SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); - SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); - SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 1); - - m_main_surface = SDL_SetVideoMode(user_config->m_width, user_config->m_height, 0, m_flags); - - if (!m_main_surface) - { - //ask for lower quality as a fallback - SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5); - SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5); - SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5); - SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16); - - m_main_surface = SDL_SetVideoMode(user_config->m_width, user_config->m_height, 0, m_flags); - if (m_main_surface) - { - fprintf(stderr, "Using fallback OpenGL settings\n"); - } - else - { - //one last attempt: get rid of the alpha channel - SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 0); - - m_main_surface = SDL_SetVideoMode(user_config->m_width, user_config->m_height, 0, m_flags); - if (m_main_surface) - { - fprintf(stderr, "Using fallback OpenGL settings, without alpha channel\n"); - } - else - { - fprintf(stderr, "SDL_SetVideoMode (%dx%d) failed: %s\n", - user_config->m_width, user_config->m_height, SDL_GetError()); - exit(1); - } - } // !m_main_surface - } // !m_main_surface -#endif #if defined(WIN32) || defined(__APPLE__) if(resetTextures) { @@ -361,10 +308,6 @@ SDLDriver::~SDLDriver() // FIXME LEAK: delete m_action_map if defined SDL_FreeSurface(m_main_surface); -#ifndef HAVE_IRRLICHT - // Irrlicht calls SDL_Quit otherwise - SDL_Quit(); -#endif } // ~SDLDriver //----------------------------------------------------------------------------- diff --git a/src/tracks/track.cpp b/src/tracks/track.cpp index aa4681d3d..6aca8d5ec 100644 --- a/src/tracks/track.cpp +++ b/src/tracks/track.cpp @@ -1197,7 +1197,7 @@ void Track::loadTrackModel() // First read the temporary materials.dat file if it exists try { - std::string materials_file = file_manager->getTrackFile("materials.dat",getIdent()); + std::string materials_file = file_manager->getTrackFile("materials.xml",getIdent()); material_manager->pushTempMaterial(materials_file); } catch (std::exception& e) From 85bff451733124244b080f7753470f15da425e6a Mon Sep 17 00:00:00 2001 From: hikerstk Date: Fri, 13 Mar 2009 01:18:06 +0000 Subject: [PATCH 0013/1008] Added missing file (temporary version). git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3250 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- data/bubblegum.xml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 data/bubblegum.xml diff --git a/data/bubblegum.xml b/data/bubblegum.xml new file mode 100644 index 000000000..32b7aa201 --- /dev/null +++ b/data/bubblegum.xml @@ -0,0 +1,13 @@ +;; -*- mode: lisp -*- + +(tuxkart-collectable + (name "Bubble Gum") + (model "../items/bubblegum.ac") + (icon "bubblegum-icon.rgb") + (speed 50.0) + (min-height 0.3) + (max-height 1.0) + (force-updown 20) +) + +;; EOF ;; From ac00d6e1eac114e32f894c1516e94f2853838e42 Mon Sep 17 00:00:00 2001 From: hikerstk Date: Fri, 13 Mar 2009 01:26:13 +0000 Subject: [PATCH 0014/1008] Avoid crash if model is missing. git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3251 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- src/items/powerup_manager.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/items/powerup_manager.cpp b/src/items/powerup_manager.cpp index 3605b2bc9..616613788 100644 --- a/src/items/powerup_manager.cpp +++ b/src/items/powerup_manager.cpp @@ -133,7 +133,12 @@ void PowerupManager::LoadNode(const lisp::Lisp* lisp, int collectType ) m_all_meshes[collectType] = 0; m_all_extends[collectType] = btVector3(0.0f,0.0f,0.0f); } - + if(!m_all_meshes[collectType]) + { + std::ostringstream o; + o<<"Can't load model '"< Date: Fri, 13 Mar 2009 01:39:21 +0000 Subject: [PATCH 0015/1008] Updated items to b3d models. git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3252 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- data/items/banana.ac | 1397 ----------------------- data/items/bonusblock1.png | Bin 0 -> 20387 bytes data/items/bonusblock2.ac | 546 --------- data/items/bonusblock2.b3d | Bin 0 -> 7233 bytes data/items/bubblegum.ac | 2032 --------------------------------- data/items/bubblegum.b3d | Bin 0 -> 22646 bytes data/items/bubblegum.png | Bin 0 -> 55710 bytes data/items/gift-box.ac | 1378 ---------------------- data/items/nitrotank-big.ac | 1539 ------------------------- data/items/nitrotank-small.ac | 1523 ------------------------ data/items/warning.ac | 65 -- data/items/warning.b3d | Bin 0 -> 861 bytes data/items/warning.png | Bin 0 -> 41347 bytes 13 files changed, 8480 deletions(-) delete mode 100644 data/items/banana.ac create mode 100644 data/items/bonusblock1.png delete mode 100644 data/items/bonusblock2.ac create mode 100755 data/items/bonusblock2.b3d delete mode 100644 data/items/bubblegum.ac create mode 100755 data/items/bubblegum.b3d create mode 100644 data/items/bubblegum.png delete mode 100644 data/items/gift-box.ac delete mode 100644 data/items/nitrotank-big.ac delete mode 100644 data/items/nitrotank-small.ac delete mode 100644 data/items/warning.ac create mode 100755 data/items/warning.b3d create mode 100644 data/items/warning.png diff --git a/data/items/banana.ac b/data/items/banana.ac deleted file mode 100644 index 740632b05..000000000 --- a/data/items/banana.ac +++ /dev/null @@ -1,1397 +0,0 @@ -AC3Db -MATERIAL "Default" rgb 1 1 1 amb 1 1 1 emis 0 0 0 spec 0 0 0 shi 0 trans 0 -OBJECT world -kids 1 -OBJECT poly -name "banana" -data 6 -banana -texture "banana.rgb" -texrep 1 1 -crease 30.000000 -numvert 169 -0.201361 0.305631 -0.220205 -0.267663 0.342365 -0.065445 -0.267663 0.342365 0.065477 -0.20136 0.305633 0.220237 -0.045114 0.343121 0.288031 --0.085807 0.343309 0.288031 --0.239073 0.307224 0.220239 --0.308347 0.344047 0.065487 --0.308081 0.343589 -0.065168 --0.236554 0.302881 -0.217676 --0.085532 0.342834 -0.287722 -0.045123 0.343103 -0.287989 -0.082748 0.770195 -0.129788 -0.130212 0.76967 -0.047506 -0.130212 0.76967 0.047506 -0.082749 0.770195 0.129788 -0.000539 0.771104 0.177293 --0.094388 0.772154 0.177293 --0.176598 0.773063 0.129788 --0.224062 0.773588 0.047506 --0.224062 0.773588 -0.047505 --0.176598 0.773063 -0.129787 --0.094389 0.772154 -0.177293 -0.000539 0.771104 -0.177293 --0.02017 0.993147 -0.05582 --0.075285 1.00199 -0.076251 --0.1304 1.010833 -0.05582 --0.150574 1.014069 0 --0.1304 1.010833 0.05582 --0.075285 1.00199 0.076252 --0.02017 0.993147 0.05582 -4e-006 0.989911 0 -0.030839 1.378029 -0.045214 -0.030839 1.378029 0.045214 --0.013804 1.385191 0.061764 --0.058448 1.392354 0.045214 --0.074788 1.394975 0 --0.058448 1.392354 -0.045214 --0.013805 1.385191 -0.061764 -0.047179 1.375407 0 -0.206247 0.602414 -0.063213 -0.143035 0.602414 -0.1727 -0.206247 0.602414 0.063212 -0.143035 0.602414 0.1727 -0.033548 0.602414 0.235913 --0.092878 0.602414 0.235913 --0.202365 0.602414 0.1727 --0.265578 0.602414 0.063213 --0.265578 0.602414 -0.063212 --0.202365 0.602414 -0.1727 --0.092878 0.602414 -0.235912 -0.033547 0.602414 -0.235913 -0.002463 1.201167 -0.045214 -0.018804 1.198545 0 -0.002463 1.201167 0.045214 --0.04218 1.208329 0.061764 --0.086823 1.215492 0.045214 --0.103164 1.218113 0 --0.086823 1.215492 -0.045214 --0.04218 1.208329 -0.061764 -0.180515 0.249683 -0.195156 -0.038496 0.254115 -0.247066 --0.065335 0.254034 -0.24682 --0.209047 0.250317 -0.194363 --0.260439 0.255189 -0.051709 --0.260684 0.255612 0.052124 --0.209836 0.251678 0.195208 --0.065648 0.254574 0.247167 -0.038427 0.254234 0.247166 -0.180505 0.249701 0.195197 -0.233532 0.253079 0.052055 -0.233533 0.253077 -0.052023 --0.001099 0.257625 0 -0.174769 0.183264 0.539703 -0.170135 0.233837 0.542757 -0.042905 0.211306 0.571262 --0.080713 0.211438 0.571263 --0.213461 0.183702 0.539705 --0.209254 0.234244 0.542758 --0.09423 0.268431 0.608759 -0.055159 0.268431 0.608759 -0.520338 0.179521 -0.194119 -0.552338 0.207335 -0.061812 -0.552337 0.207336 0.061807 -0.520336 0.179524 0.194114 -0.523176 0.230124 0.189694 -0.523177 0.230123 -0.189697 -0.589206 0.264503 0.07469 -0.589206 0.264503 -0.0747 --0.212915 0.18276 -0.539159 --0.208084 0.232228 -0.541587 --0.080534 0.211129 -0.571088 -0.042939 0.211247 -0.571234 -0.17477 0.183261 -0.539708 -0.170135 0.233836 -0.542761 -0.055159 0.268431 -0.608769 --0.09423 0.268431 -0.608769 --0.559028 0.187442 0.194116 --0.562295 0.237957 0.189694 --0.590111 0.215349 0.061841 --0.589966 0.2151 -0.061632 --0.558482 0.1865 -0.19357 --0.561126 0.235941 -0.188523 --0.628276 0.272358 -0.074699 --0.628276 0.272358 0.07469 --0.810583 0.217853 0.161948 --0.862587 0.263132 0.062906 --0.862571 0.263104 -0.06289 --0.810304 0.217372 -0.161669 --0.810974 0.174962 -0.168487 --0.86256 0.204568 -0.057166 --0.862573 0.20459 0.05718 --0.811069 0.175126 0.168582 --0.998769 0.170192 0.132799 --0.994681 0.201316 0.129379 --1.141399 0.170609 0.055496 --1.141399 0.170609 -0.055495 --0.998769 0.170192 -0.132798 --0.99466 0.20128 -0.129357 --1.140893 0.196086 -0.055495 --1.140893 0.196086 0.055496 --0.181528 0.210551 -0.790487 --0.082515 0.256043 -0.84299 -0.043282 0.256068 -0.843006 -0.14209 0.210968 -0.790767 -0.148339 0.168208 -0.790867 -0.036608 0.197638 -0.842043 --0.077738 0.197624 -0.84203 --0.188731 0.168102 -0.790772 --0.153129 0.161042 -0.978492 --0.149314 0.192615 -0.974757 --0.075881 0.164993 -1.12107 -0.03511 0.164993 -1.12107 -0.112467 0.161042 -0.978492 -0.109422 0.192648 -0.974779 -0.035615 0.19047 -1.12107 --0.075375 0.19047 -1.12107 -0.770868 0.204148 -0.16195 -0.82334 0.249007 -0.062907 -0.82334 0.249007 0.062906 -0.770868 0.204148 0.161948 -0.770583 0.161348 -0.168583 -0.770582 0.161348 0.168582 -0.82143 0.190696 0.057179 -0.82143 0.190696 -0.05718 -1.100629 0.159377 -0.055495 -0.958107 0.151893 -0.132798 -1.100629 0.159377 0.055495 -0.958107 0.151893 0.132798 -0.95477 0.183983 0.129379 -0.95477 0.183983 -0.129379 -1.101135 0.184854 0.055495 -1.101135 0.184854 -0.055495 -0.142091 0.210968 0.790765 -0.043282 0.256068 0.843005 --0.08253 0.256071 0.843005 --0.181806 0.211032 0.790766 --0.188825 0.168266 0.790866 --0.077751 0.197648 0.842043 -0.036608 0.19764 0.842043 -0.148339 0.168208 0.790866 -0.112468 0.161042 0.978493 -0.109423 0.192648 0.974779 -0.035111 0.164993 1.12107 --0.07588 0.164993 1.12107 --0.153129 0.161042 0.978493 --0.149334 0.192652 0.974779 --0.075375 0.19047 1.12107 -0.035616 0.19047 1.12107 -numsurf 176 -SURF 0x10 -mat 0 -refs 4 -12 0.3515625 0.6953125 -23 0.5 0.6953125 -25 0.5625 0.828125 -24 0.4140625 0.828125 -SURF 0x10 -mat 0 -refs 3 -23 0.5 0.6953125 -22 0.625 0.6953125 -25 0.5625 0.828125 -SURF 0x10 -mat 0 -refs 4 -22 0.625 0.6953125 -21 0.78125 0.6953125 -26 0.6953125 0.828125 -25 0.5625 0.828125 -SURF 0x10 -mat 0 -refs 4 -21 0.3515625 0.6953125 -20 0.5 0.6953125 -27 0.5625 0.828125 -26 0.4140625 0.828125 -SURF 0x10 -mat 0 -refs 3 -20 0.5 0.6953125 -19 0.625 0.6953125 -27 0.5625 0.828125 -SURF 0x10 -mat 0 -refs 4 -19 0.625 0.6953125 -18 0.78125 0.6953125 -28 0.6953125 0.828125 -27 0.5625 0.828125 -SURF 0x10 -mat 0 -refs 4 -18 0.3515625 0.6953125 -17 0.5 0.6953125 -29 0.5625 0.828125 -28 0.4140625 0.828125 -SURF 0x10 -mat 0 -refs 3 -17 0.5 0.6953125 -16 0.625 0.6953125 -29 0.5625 0.828125 -SURF 0x10 -mat 0 -refs 4 -16 0.625 0.6953125 -15 0.78125 0.6953125 -30 0.6953125 0.828125 -29 0.5625 0.828125 -SURF 0x10 -mat 0 -refs 4 -15 0.3515625 0.6953125 -14 0.5 0.6953125 -31 0.5625 0.828125 -30 0.4140625 0.828125 -SURF 0x10 -mat 0 -refs 3 -14 0.5 0.6953125 -13 0.625 0.6953125 -31 0.5625 0.828125 -SURF 0x10 -mat 0 -refs 4 -13 0.625 0.6953125 -12 0.78125 0.6953125 -24 0.6953125 0.828125 -31 0.5625 0.828125 -SURF 0x10 -mat 0 -refs 4 -0 0.984375 0.453125 -41 0.859375 0.58984375 -40 0.671875 0.58984375 -1 0.671875 0.453125 -SURF 0x10 -mat 0 -refs 4 -41 0.859375 0.58984375 -12 0.78125 0.6953125 -13 0.625 0.6953125 -40 0.671875 0.58984375 -SURF 0x10 -mat 0 -refs 4 -1 0.671875 0.453125 -40 0.671875 0.58984375 -42 0.4609375 0.58984375 -2 0.4609375 0.453125 -SURF 0x10 -mat 0 -refs 4 -40 0.671875 0.58984375 -13 0.625 0.6953125 -14 0.5 0.6953125 -42 0.4609375 0.58984375 -SURF 0x10 -mat 0 -refs 4 -2 0.4609375 0.453125 -42 0.4609375 0.58984375 -43 0.28125 0.58984375 -3 0.15625 0.453125 -SURF 0x10 -mat 0 -refs 4 -42 0.4609375 0.58984375 -14 0.5 0.6953125 -15 0.3515625 0.6953125 -43 0.28125 0.58984375 -SURF 0x10 -mat 0 -refs 4 -3 0.984375 0.453125 -43 0.859375 0.58984375 -44 0.671875 0.58984375 -4 0.671875 0.453125 -SURF 0x10 -mat 0 -refs 4 -43 0.859375 0.58984375 -15 0.78125 0.6953125 -16 0.625 0.6953125 -44 0.671875 0.58984375 -SURF 0x10 -mat 0 -refs 4 -4 0.671875 0.453125 -44 0.671875 0.58984375 -45 0.4609375 0.58984375 -5 0.4609375 0.453125 -SURF 0x10 -mat 0 -refs 4 -44 0.671875 0.58984375 -16 0.625 0.6953125 -17 0.5 0.6953125 -45 0.4609375 0.58984375 -SURF 0x10 -mat 0 -refs 4 -5 0.4609375 0.453125 -45 0.4609375 0.58984375 -46 0.28125 0.58984375 -6 0.15625 0.453125 -SURF 0x10 -mat 0 -refs 4 -45 0.4609375 0.58984375 -17 0.5 0.6953125 -18 0.3515625 0.6953125 -46 0.28125 0.58984375 -SURF 0x10 -mat 0 -refs 4 -6 0.984375 0.453125 -46 0.859375 0.58984375 -47 0.671875 0.58984375 -7 0.671875 0.453125 -SURF 0x10 -mat 0 -refs 4 -46 0.859375 0.58984375 -18 0.78125 0.6953125 -19 0.625 0.6953125 -47 0.671875 0.58984375 -SURF 0x10 -mat 0 -refs 4 -7 0.671875 0.453125 -47 0.671875 0.58984375 -48 0.4609375 0.58984375 -8 0.4609375 0.453125 -SURF 0x10 -mat 0 -refs 4 -47 0.671875 0.58984375 -19 0.625 0.6953125 -20 0.5 0.6953125 -48 0.4609375 0.58984375 -SURF 0x10 -mat 0 -refs 4 -8 0.4609375 0.453125 -48 0.4609375 0.58984375 -49 0.28125 0.58984375 -9 0.15625 0.453125 -SURF 0x10 -mat 0 -refs 4 -48 0.4609375 0.58984375 -20 0.5 0.6953125 -21 0.3515625 0.6953125 -49 0.28125 0.58984375 -SURF 0x10 -mat 0 -refs 4 -9 0.984375 0.453125 -49 0.859375 0.58984375 -50 0.671875 0.58984375 -10 0.671875 0.453125 -SURF 0x10 -mat 0 -refs 4 -49 0.859375 0.58984375 -21 0.78125 0.6953125 -22 0.625 0.6953125 -50 0.671875 0.58984375 -SURF 0x10 -mat 0 -refs 4 -10 0.671875 0.453125 -50 0.671875 0.58984375 -51 0.4609375 0.58984375 -11 0.4609375 0.453125 -SURF 0x10 -mat 0 -refs 4 -50 0.671875 0.58984375 -22 0.625 0.6953125 -23 0.5 0.6953125 -51 0.4609375 0.58984375 -SURF 0x10 -mat 0 -refs 4 -12 0.3515625 0.6953125 -41 0.28125 0.58984375 -51 0.4609375 0.58984375 -23 0.5 0.6953125 -SURF 0x10 -mat 0 -refs 4 -41 0.28125 0.58984375 -0 0.15625 0.453125 -11 0.4609375 0.453125 -51 0.4609375 0.58984375 -SURF 0x10 -mat 0 -refs 4 -24 0.6953125 0.828125 -52 0.6953125 0.8984375 -53 0.5625 0.8984375 -31 0.5625 0.828125 -SURF 0x10 -mat 0 -refs 4 -52 0.6953125 0.8984375 -32 0.6953125 0.96875 -39 0.5625 0.96875 -53 0.5625 0.8984375 -SURF 0x10 -mat 0 -refs 4 -31 0.5625 0.828125 -53 0.5625 0.8984375 -54 0.4140625 0.8984375 -30 0.4140625 0.828125 -SURF 0x10 -mat 0 -refs 4 -53 0.5625 0.8984375 -39 0.5625 0.96875 -33 0.4140625 0.96875 -54 0.4140625 0.8984375 -SURF 0x10 -mat 0 -refs 4 -30 0.6953125 0.828125 -54 0.6953125 0.8984375 -55 0.5625 0.8984375 -29 0.5625 0.828125 -SURF 0x10 -mat 0 -refs 4 -54 0.6953125 0.8984375 -33 0.6953125 0.96875 -34 0.5625 0.96875 -55 0.5625 0.8984375 -SURF 0x10 -mat 0 -refs 4 -29 0.5625 0.828125 -55 0.5625 0.8984375 -56 0.4140625 0.8984375 -28 0.4140625 0.828125 -SURF 0x10 -mat 0 -refs 4 -55 0.5625 0.8984375 -34 0.5625 0.96875 -35 0.4140625 0.96875 -56 0.4140625 0.8984375 -SURF 0x10 -mat 0 -refs 4 -28 0.6953125 0.828125 -56 0.6953125 0.8984375 -57 0.5625 0.8984375 -27 0.5625 0.828125 -SURF 0x10 -mat 0 -refs 4 -56 0.6953125 0.8984375 -35 0.6953125 0.96875 -36 0.5625 0.96875 -57 0.5625 0.8984375 -SURF 0x10 -mat 0 -refs 4 -27 0.5625 0.828125 -57 0.5625 0.8984375 -58 0.4140625 0.8984375 -26 0.4140625 0.828125 -SURF 0x10 -mat 0 -refs 4 -57 0.5625 0.8984375 -36 0.5625 0.96875 -37 0.4140625 0.96875 -58 0.4140625 0.8984375 -SURF 0x10 -mat 0 -refs 4 -26 0.6953125 0.828125 -58 0.6953125 0.8984375 -59 0.5625 0.8984375 -25 0.5625 0.828125 -SURF 0x10 -mat 0 -refs 4 -58 0.6953125 0.8984375 -37 0.6953125 0.96875 -38 0.5625 0.96875 -59 0.5625 0.8984375 -SURF 0x10 -mat 0 -refs 4 -25 0.5625 0.828125 -59 0.5625 0.8984375 -52 0.4140625 0.8984375 -24 0.4140625 0.828125 -SURF 0x10 -mat 0 -refs 4 -59 0.5625 0.8984375 -38 0.5625 0.96875 -32 0.4140625 0.96875 -52 0.4140625 0.8984375 -SURF 0x10 -mat 0 -refs 3 -61 0.2890625 0.9296875 -60 0.2578125 0.96875 -72 0.15625 0.92578125 -SURF 0x10 -mat 0 -refs 3 -72 0.15625 0.92578125 -62 0.2890625 0.91015625 -61 0.2890625 0.9296875 -SURF 0x10 -mat 0 -refs 3 -72 0.15625 0.92578125 -63 0.2578125 0.8671875 -62 0.2890625 0.91015625 -SURF 0x10 -mat 0 -refs 3 -72 0.15625 0.92578125 -64 0.1796875 0.85546875 -63 0.2578125 0.8671875 -SURF 0x10 -mat 0 -refs 3 -72 0.15625 0.92578125 -65 0.1328125 0.85546875 -64 0.1796875 0.85546875 -SURF 0x10 -mat 0 -refs 3 -72 0.15625 0.92578125 -66 0.0546875 0.8671875 -65 0.1328125 0.85546875 -SURF 0x10 -mat 0 -refs 3 -72 0.15625 0.92578125 -67 0.0234375 0.91015625 -66 0.0546875 0.8671875 -SURF 0x10 -mat 0 -refs 3 -72 0.15625 0.92578125 -68 0.0234375 0.9296875 -67 0.0234375 0.91015625 -SURF 0x10 -mat 0 -refs 3 -72 0.15625 0.92578125 -69 0.0546875 0.96875 -68 0.0234375 0.9296875 -SURF 0x10 -mat 0 -refs 3 -72 0.15625 0.92578125 -70 0.1328125 0.98828125 -69 0.0546875 0.96875 -SURF 0x10 -mat 0 -refs 3 -72 0.15625 0.92578125 -71 0.1796875 0.98828125 -70 0.1328125 0.98828125 -SURF 0x10 -mat 0 -refs 3 -72 0.15625 0.92578125 -60 0.2578125 0.96875 -71 0.1796875 0.98828125 -SURF 0x10 -mat 0 -refs 4 -69 0.1015625 0.01953125 -3 0.2421875 0.03125 -74 0.1171875 0.2109375 -73 0.03125 0.2109375 -SURF 0x10 -mat 0 -refs 4 -68 0.125 0.84375 -69 0.03125 0.859375 -73 0.03125 0.75 -75 0.125 0.73828125 -SURF 0x10 -mat 0 -refs 4 -67 0.203125 0.84375 -68 0.125 0.84375 -75 0.125 0.73828125 -76 0.203125 0.73828125 -SURF 0x10 -mat 0 -refs 4 -66 0.2890625 0.859375 -67 0.203125 0.84375 -76 0.203125 0.73828125 -77 0.2890625 0.75 -SURF 0x10 -mat 0 -refs 4 -6 0.2421875 0.03125 -66 0.1015625 0.01953125 -77 0.03125 0.2109375 -78 0.1171875 0.2109375 -SURF 0x10 -mat 0 -refs 4 -5 0.4609375 0.453125 -6 0.15625 0.453125 -78 0.15625 0.296875 -79 0.4609375 0.296875 -SURF 0x10 -mat 0 -refs 4 -4 0.671875 0.453125 -5 0.4609375 0.453125 -79 0.4609375 0.296875 -80 0.671875 0.296875 -SURF 0x10 -mat 0 -refs 4 -3 0.984375 0.453125 -4 0.671875 0.453125 -80 0.671875 0.296875 -74 0.984375 0.296875 -SURF 0x10 -mat 0 -refs 4 -71 0.203125 0.84375 -60 0.2890625 0.859375 -81 0.2890625 0.75 -82 0.203125 0.73828125 -SURF 0x10 -mat 0 -refs 4 -70 0.125 0.84375 -71 0.203125 0.84375 -82 0.203125 0.73828125 -83 0.125 0.73828125 -SURF 0x10 -mat 0 -refs 4 -69 0.03125 0.859375 -70 0.125 0.84375 -83 0.125 0.73828125 -84 0.03125 0.75 -SURF 0x10 -mat 0 -refs 4 -3 0.2421875 0.03125 -69 0.1015625 0.01953125 -84 0.03125 0.2109375 -85 0.1171875 0.2109375 -SURF 0x10 -mat 0 -refs 4 -60 0.1015625 0.01953125 -0 0.2421875 0.03125 -86 0.1171875 0.2109375 -81 0.03125 0.2109375 -SURF 0x10 -mat 0 -refs 4 -2 0.4609375 0.453125 -3 0.15625 0.453125 -85 0.15625 0.296875 -87 0.4609375 0.296875 -SURF 0x10 -mat 0 -refs 4 -1 0.671875 0.453125 -2 0.4609375 0.453125 -87 0.4609375 0.296875 -88 0.671875 0.296875 -SURF 0x10 -mat 0 -refs 4 -0 0.984375 0.453125 -1 0.671875 0.453125 -88 0.671875 0.296875 -86 0.984375 0.296875 -SURF 0x10 -mat 0 -refs 4 -63 0.1015625 0.01953125 -9 0.2421875 0.03125 -90 0.1171875 0.2109375 -89 0.03125 0.2109375 -SURF 0x10 -mat 0 -refs 4 -62 0.203125 0.84375 -63 0.2890625 0.859375 -89 0.2890625 0.75 -91 0.203125 0.73828125 -SURF 0x10 -mat 0 -refs 4 -61 0.125 0.84375 -62 0.203125 0.84375 -91 0.203125 0.73828125 -92 0.125 0.73828125 -SURF 0x10 -mat 0 -refs 4 -60 0.03125 0.859375 -61 0.125 0.84375 -92 0.125 0.73828125 -93 0.03125 0.75 -SURF 0x10 -mat 0 -refs 4 -0 0.2421875 0.03125 -60 0.1015625 0.01953125 -93 0.03125 0.2109375 -94 0.1171875 0.2109375 -SURF 0x10 -mat 0 -refs 4 -11 0.4609375 0.453125 -0 0.15625 0.453125 -94 0.15625 0.296875 -95 0.4609375 0.296875 -SURF 0x10 -mat 0 -refs 4 -10 0.671875 0.453125 -11 0.4609375 0.453125 -95 0.4609375 0.296875 -96 0.671875 0.296875 -SURF 0x10 -mat 0 -refs 4 -9 0.984375 0.453125 -10 0.671875 0.453125 -96 0.671875 0.296875 -90 0.984375 0.296875 -SURF 0x10 -mat 0 -refs 4 -66 0.1015625 0.01953125 -6 0.2421875 0.03125 -98 0.1171875 0.2109375 -97 0.03125 0.2109375 -SURF 0x10 -mat 0 -refs 4 -65 0.125 0.84375 -66 0.03125 0.859375 -97 0.03125 0.75 -99 0.125 0.73828125 -SURF 0x10 -mat 0 -refs 4 -64 0.203125 0.84375 -65 0.125 0.84375 -99 0.125 0.73828125 -100 0.203125 0.73828125 -SURF 0x10 -mat 0 -refs 4 -63 0.2890625 0.859375 -64 0.203125 0.84375 -100 0.203125 0.73828125 -101 0.2890625 0.75 -SURF 0x10 -mat 0 -refs 4 -9 0.2421875 0.03125 -63 0.1015625 0.01953125 -101 0.03125 0.2109375 -102 0.1171875 0.2109375 -SURF 0x10 -mat 0 -refs 4 -8 0.4609375 0.453125 -9 0.15625 0.453125 -102 0.15625 0.296875 -103 0.4609375 0.296875 -SURF 0x10 -mat 0 -refs 4 -7 0.671875 0.453125 -8 0.4609375 0.453125 -103 0.4609375 0.296875 -104 0.671875 0.296875 -SURF 0x10 -mat 0 -refs 4 -6 0.984375 0.453125 -7 0.671875 0.453125 -104 0.671875 0.296875 -98 0.984375 0.296875 -SURF 0x10 -mat 0 -refs 4 -98 0.984375 0.296875 -104 0.671875 0.296875 -106 0.671875 0.17578125 -105 0.9453125 0.17578125 -SURF 0x10 -mat 0 -refs 4 -104 0.671875 0.296875 -103 0.4609375 0.296875 -107 0.4609375 0.17578125 -106 0.671875 0.17578125 -SURF 0x10 -mat 0 -refs 4 -103 0.4609375 0.296875 -102 0.15625 0.296875 -108 0.1875 0.17578125 -107 0.4609375 0.17578125 -SURF 0x10 -mat 0 -refs 4 -102 0.1171875 0.2109375 -101 0.03125 0.2109375 -109 0.03125 0.34765625 -108 0.1015625 0.34765625 -SURF 0x10 -mat 0 -refs 4 -101 0.2890625 0.75 -100 0.203125 0.73828125 -110 0.203125 0.65234375 -109 0.265625 0.66796875 -SURF 0x10 -mat 0 -refs 4 -100 0.203125 0.73828125 -99 0.125 0.73828125 -111 0.125 0.65234375 -110 0.203125 0.65234375 -SURF 0x10 -mat 0 -refs 4 -99 0.125 0.73828125 -97 0.03125 0.75 -112 0.046875 0.66796875 -111 0.125 0.65234375 -SURF 0x10 -mat 0 -refs 4 -97 0.03125 0.2109375 -98 0.1171875 0.2109375 -105 0.1015625 0.34765625 -112 0.03125 0.34765625 -SURF 0x10 -mat 0 -refs 4 -112 0.03125 0.34765625 -105 0.1015625 0.34765625 -114 0.1015625 0.453125 -113 0.046875 0.45703125 -SURF 0x10 -mat 0 -refs 4 -111 0.125 0.65234375 -112 0.046875 0.66796875 -113 0.078125 0.60546875 -115 0.125 0.5625 -SURF 0x10 -mat 0 -refs 4 -110 0.203125 0.65234375 -111 0.125 0.65234375 -115 0.125 0.5625 -116 0.203125 0.5625 -SURF 0x10 -mat 0 -refs 4 -109 0.265625 0.66796875 -110 0.203125 0.65234375 -116 0.203125 0.5625 -117 0.25 0.60546875 -SURF 0x10 -mat 0 -refs 4 -108 0.1015625 0.34765625 -109 0.03125 0.34765625 -117 0.046875 0.45703125 -118 0.1015625 0.453125 -SURF 0x10 -mat 0 -refs 4 -107 0.4609375 0.17578125 -108 0.1875 0.17578125 -118 0.234375 0.10546875 -119 0.4609375 0.01953125 -SURF 0x10 -mat 0 -refs 4 -106 0.671875 0.17578125 -107 0.4609375 0.17578125 -119 0.4609375 0.01953125 -120 0.671875 0.01953125 -SURF 0x10 -mat 0 -refs 4 -105 0.9453125 0.17578125 -106 0.671875 0.17578125 -120 0.671875 0.01953125 -114 0.9140625 0.10546875 -SURF 0x10 -mat 0 -refs 4 -114 0.1015625 0.453125 -120 0.125 0.54296875 -115 0.0859375 0.54296875 -113 0.046875 0.45703125 -SURF 0x10 -mat 0 -refs 4 -120 0.7578125 0.859375 -119 0.9609375 0.859375 -116 0.9609375 0.82421875 -115 0.7578125 0.82421875 -SURF 0x10 -mat 0 -refs 4 -119 0.125 0.54296875 -118 0.1015625 0.453125 -117 0.046875 0.45703125 -116 0.0859375 0.54296875 -SURF 0x10 -mat 0 -refs 4 -90 0.984375 0.296875 -96 0.671875 0.296875 -122 0.671875 0.17578125 -121 0.9453125 0.17578125 -SURF 0x10 -mat 0 -refs 4 -96 0.671875 0.296875 -95 0.4609375 0.296875 -123 0.4609375 0.17578125 -122 0.671875 0.17578125 -SURF 0x10 -mat 0 -refs 4 -95 0.4609375 0.296875 -94 0.15625 0.296875 -124 0.1875 0.17578125 -123 0.4609375 0.17578125 -SURF 0x10 -mat 0 -refs 4 -94 0.1171875 0.2109375 -93 0.03125 0.2109375 -125 0.03125 0.34765625 -124 0.1015625 0.34765625 -SURF 0x10 -mat 0 -refs 4 -93 0.03125 0.75 -92 0.125 0.73828125 -126 0.125 0.65234375 -125 0.046875 0.66796875 -SURF 0x10 -mat 0 -refs 4 -92 0.125 0.73828125 -91 0.203125 0.73828125 -127 0.203125 0.65234375 -126 0.125 0.65234375 -SURF 0x10 -mat 0 -refs 4 -91 0.203125 0.73828125 -89 0.2890625 0.75 -128 0.265625 0.66796875 -127 0.203125 0.65234375 -SURF 0x10 -mat 0 -refs 4 -89 0.03125 0.2109375 -90 0.1171875 0.2109375 -121 0.1015625 0.34765625 -128 0.03125 0.34765625 -SURF 0x10 -mat 0 -refs 4 -128 0.03125 0.34765625 -121 0.1015625 0.34765625 -130 0.1015625 0.453125 -129 0.046875 0.45703125 -SURF 0x10 -mat 0 -refs 4 -127 0.203125 0.65234375 -128 0.265625 0.66796875 -129 0.25 0.60546875 -131 0.203125 0.5625 -SURF 0x10 -mat 0 -refs 4 -126 0.125 0.65234375 -127 0.203125 0.65234375 -131 0.203125 0.5625 -132 0.125 0.5625 -SURF 0x10 -mat 0 -refs 4 -125 0.046875 0.66796875 -126 0.125 0.65234375 -132 0.125 0.5625 -133 0.078125 0.60546875 -SURF 0x10 -mat 0 -refs 4 -124 0.1015625 0.34765625 -125 0.03125 0.34765625 -133 0.046875 0.45703125 -134 0.1015625 0.453125 -SURF 0x10 -mat 0 -refs 4 -123 0.4609375 0.17578125 -124 0.1875 0.17578125 -134 0.234375 0.10546875 -135 0.4609375 0.01953125 -SURF 0x10 -mat 0 -refs 4 -122 0.671875 0.17578125 -123 0.4609375 0.17578125 -135 0.4609375 0.01953125 -136 0.671875 0.01953125 -SURF 0x10 -mat 0 -refs 4 -121 0.9453125 0.17578125 -122 0.671875 0.17578125 -136 0.671875 0.01953125 -130 0.9140625 0.10546875 -SURF 0x10 -mat 0 -refs 4 -130 0.1015625 0.453125 -136 0.125 0.54296875 -131 0.0859375 0.54296875 -129 0.046875 0.45703125 -SURF 0x10 -mat 0 -refs 4 -136 0.7578125 0.859375 -135 0.9609375 0.859375 -132 0.9609375 0.82421875 -131 0.7578125 0.82421875 -SURF 0x10 -mat 0 -refs 4 -135 0.125 0.54296875 -134 0.1015625 0.453125 -133 0.046875 0.45703125 -132 0.0859375 0.54296875 -SURF 0x10 -mat 0 -refs 4 -86 0.984375 0.296875 -88 0.671875 0.296875 -138 0.671875 0.17578125 -137 0.9453125 0.17578125 -SURF 0x10 -mat 0 -refs 4 -88 0.671875 0.296875 -87 0.4609375 0.296875 -139 0.4609375 0.17578125 -138 0.671875 0.17578125 -SURF 0x10 -mat 0 -refs 4 -87 0.4609375 0.296875 -85 0.15625 0.296875 -140 0.1875 0.17578125 -139 0.4609375 0.17578125 -SURF 0x10 -mat 0 -refs 4 -81 0.03125 0.2109375 -86 0.1171875 0.2109375 -137 0.1015625 0.34765625 -141 0.03125 0.34765625 -SURF 0x10 -mat 0 -refs 4 -85 0.1171875 0.2109375 -84 0.03125 0.2109375 -142 0.03125 0.34765625 -140 0.1015625 0.34765625 -SURF 0x10 -mat 0 -refs 4 -84 0.03125 0.75 -83 0.125 0.73828125 -143 0.125 0.65234375 -142 0.046875 0.66796875 -SURF 0x10 -mat 0 -refs 4 -83 0.125 0.73828125 -82 0.203125 0.73828125 -144 0.203125 0.65234375 -143 0.125 0.65234375 -SURF 0x10 -mat 0 -refs 4 -82 0.203125 0.73828125 -81 0.2890625 0.75 -141 0.265625 0.66796875 -144 0.203125 0.65234375 -SURF 0x10 -mat 0 -refs 4 -144 0.203125 0.65234375 -141 0.265625 0.66796875 -146 0.25 0.60546875 -145 0.203125 0.5625 -SURF 0x10 -mat 0 -refs 4 -143 0.125 0.65234375 -144 0.203125 0.65234375 -145 0.203125 0.5625 -147 0.125 0.5625 -SURF 0x10 -mat 0 -refs 4 -142 0.046875 0.66796875 -143 0.125 0.65234375 -147 0.125 0.5625 -148 0.078125 0.60546875 -SURF 0x10 -mat 0 -refs 4 -140 0.1015625 0.34765625 -142 0.03125 0.34765625 -148 0.046875 0.45703125 -149 0.1015625 0.453125 -SURF 0x10 -mat 0 -refs 4 -141 0.03125 0.34765625 -137 0.1015625 0.34765625 -150 0.1015625 0.453125 -146 0.046875 0.45703125 -SURF 0x10 -mat 0 -refs 4 -139 0.4609375 0.17578125 -140 0.1875 0.17578125 -149 0.234375 0.10546875 -151 0.4609375 0.01953125 -SURF 0x10 -mat 0 -refs 4 -138 0.671875 0.17578125 -139 0.4609375 0.17578125 -151 0.4609375 0.01953125 -152 0.671875 0.01953125 -SURF 0x10 -mat 0 -refs 4 -137 0.9453125 0.17578125 -138 0.671875 0.17578125 -152 0.671875 0.01953125 -150 0.9140625 0.10546875 -SURF 0x10 -mat 0 -refs 4 -150 0.1015625 0.453125 -152 0.125 0.54296875 -145 0.0859375 0.54296875 -146 0.046875 0.45703125 -SURF 0x10 -mat 0 -refs 4 -152 0.9609375 0.82421875 -151 0.7578125 0.82421875 -147 0.7578125 0.859375 -145 0.9609375 0.859375 -SURF 0x10 -mat 0 -refs 4 -151 0.125 0.54296875 -149 0.1015625 0.453125 -148 0.046875 0.45703125 -147 0.0859375 0.54296875 -SURF 0x10 -mat 0 -refs 4 -74 0.984375 0.296875 -80 0.671875 0.296875 -154 0.671875 0.17578125 -153 0.9453125 0.17578125 -SURF 0x10 -mat 0 -refs 4 -80 0.671875 0.296875 -79 0.4609375 0.296875 -155 0.4609375 0.17578125 -154 0.671875 0.17578125 -SURF 0x10 -mat 0 -refs 4 -79 0.4609375 0.296875 -78 0.15625 0.296875 -156 0.1875 0.17578125 -155 0.4609375 0.17578125 -SURF 0x10 -mat 0 -refs 4 -78 0.1171875 0.2109375 -77 0.03125 0.2109375 -157 0.03125 0.34765625 -156 0.1015625 0.34765625 -SURF 0x10 -mat 0 -refs 4 -77 0.2890625 0.75 -76 0.203125 0.73828125 -158 0.203125 0.65234375 -157 0.265625 0.66796875 -SURF 0x10 -mat 0 -refs 4 -76 0.203125 0.73828125 -75 0.125 0.73828125 -159 0.125 0.65234375 -158 0.203125 0.65234375 -SURF 0x10 -mat 0 -refs 4 -75 0.125 0.73828125 -73 0.03125 0.75 -160 0.046875 0.66796875 -159 0.125 0.65234375 -SURF 0x10 -mat 0 -refs 4 -73 0.03125 0.2109375 -74 0.1171875 0.2109375 -153 0.1015625 0.34765625 -160 0.03125 0.34765625 -SURF 0x10 -mat 0 -refs 4 -160 0.03125 0.34765625 -153 0.1015625 0.34765625 -162 0.1015625 0.453125 -161 0.046875 0.45703125 -SURF 0x10 -mat 0 -refs 4 -159 0.125 0.65234375 -160 0.046875 0.66796875 -161 0.078125 0.60546875 -163 0.125 0.5625 -SURF 0x10 -mat 0 -refs 4 -158 0.203125 0.65234375 -159 0.125 0.65234375 -163 0.125 0.5625 -164 0.203125 0.5625 -SURF 0x10 -mat 0 -refs 4 -157 0.265625 0.66796875 -158 0.203125 0.65234375 -164 0.203125 0.5625 -165 0.25 0.60546875 -SURF 0x10 -mat 0 -refs 4 -156 0.1015625 0.34765625 -157 0.03125 0.34765625 -165 0.046875 0.45703125 -166 0.1015625 0.453125 -SURF 0x10 -mat 0 -refs 4 -155 0.4609375 0.17578125 -156 0.1875 0.17578125 -166 0.234375 0.10546875 -167 0.4609375 0.01953125 -SURF 0x10 -mat 0 -refs 4 -154 0.671875 0.17578125 -155 0.4609375 0.17578125 -167 0.4609375 0.01953125 -168 0.671875 0.01953125 -SURF 0x10 -mat 0 -refs 4 -153 0.9453125 0.17578125 -154 0.671875 0.17578125 -168 0.671875 0.01953125 -162 0.9140625 0.10546875 -SURF 0x10 -mat 0 -refs 4 -162 0.1015625 0.453125 -168 0.125 0.54296875 -163 0.0859375 0.54296875 -161 0.046875 0.45703125 -SURF 0x10 -mat 0 -refs 4 -168 0.9609375 0.82421875 -167 0.7578125 0.82421875 -164 0.7578125 0.859375 -163 0.9609375 0.859375 -SURF 0x10 -mat 0 -refs 4 -167 0.125 0.54296875 -166 0.1015625 0.453125 -165 0.046875 0.45703125 -164 0.0859375 0.54296875 -SURF 0x10 -mat 0 -refs 4 -32 0.9609375 0.90625 -37 0.90625 0.98046875 -36 0.8125 0.98046875 -39 0.90625 0.87890625 -SURF 0x10 -mat 0 -refs 3 -32 0.9609375 0.90625 -38 0.9609375 0.953125 -37 0.90625 0.98046875 -SURF 0x10 -mat 0 -refs 4 -33 0.8125 0.87890625 -39 0.90625 0.87890625 -36 0.8125 0.98046875 -35 0.7578125 0.953125 -SURF 0x10 -mat 0 -refs 3 -33 0.8125 0.87890625 -35 0.7578125 0.953125 -34 0.7578125 0.90625 -kids 0 diff --git a/data/items/bonusblock1.png b/data/items/bonusblock1.png new file mode 100644 index 0000000000000000000000000000000000000000..dd0d6f2535789c0683c3dd87c90b93c81ef6ba1d GIT binary patch literal 20387 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 Sw*d82?*gxY2Jm~`Q~f=F5lk@v literal 0 HcmV?d00001 diff --git a/data/items/bubblegum.ac b/data/items/bubblegum.ac deleted file mode 100644 index 8712dd21d..000000000 --- a/data/items/bubblegum.ac +++ /dev/null @@ -1,2032 +0,0 @@ -AC3Db -MATERIAL "Gum" rgb 1 0.5 0.8 amb 0.5 0.5 0.5 emis 0 0 0 spec 1 1 1 shi 32 trans 0 -MATERIAL "DefaultWhite" rgb 1 1 1 amb 1 1 1 emis 0 0 0 spec 0.5 0.5 0.5 shi 64 trans 0 -OBJECT world -kids 1 -OBJECT poly -name "Bubblegum" -data 9 -Bubblegum -texture "bubblegum.rgb" -texrep 1 1 -crease 90.000000 -numvert 157 -0.707107 0.01 -0.707107 -0.925292 0.01 -0.534916 -0.982566 0.01 -0.185912 -0.9143 0.01 0.111965 -0.916562 0.01 0.399892 -0.757972 0.01 0.652287 -0.581821 0.01 0.915184 -0.280309 0.01 1.045909 --0.041069 0.01 0.999038 --0.330279 0.01 0.888001 --0.61773 0.01 0.833175 --0.804598 0.01 0.59382 --0.849765 0.01 0.294985 --0.999301 0.01 0.037392 --0.972893 0.01 -0.282835 --0.828395 0.01 -0.542642 --0.666994 0.01 -0.778559 --0.399893 0.01 -0.916562 --0.106083 0.01 -0.893712 -0.191793 0.01 -0.926684 -0.414326 0.01 -0.784116 -0 -0.04 0 -0.777185 0.022353 -0.780128 -0.999995 0.056185 -0.574216 -1.078889 0.022353 -0.209276 -1.004119 0.022353 0.11698 -1.006596 0.022353 0.432339 -0.832896 0.022353 0.708781 -0.634287 0.012201 0.988957 -0.303811 0.022353 1.141561 --0.052939 0.022353 1.087807 --0.359036 0.022353 0.966951 --0.672777 0.022353 0.912398 --0.855743 0.017918 0.685245 --0.928016 0.022353 0.317437 --1.091798 0.022353 0.035302 --1.065303 0.02133 -0.283359 --0.905795 0.022353 -0.607109 --0.723561 0.039231 -0.849502 --0.430065 0.027047 -0.992551 --0.11348 0.022353 -0.984511 -0.212775 0.022353 -1.020625 -0.45651 0.022353 -0.864474 -1.036713 0.158055 -0.521411 -0.769829 0.061219 -0.802669 -1.093341 0.044951 -0.212782 -1.017595 0.044951 0.117732 -1.020105 0.044951 0.437207 -0.844138 0.044951 0.717257 -0.643232 0.044951 1.001458 -0.307337 0.044951 1.155913 --0.05472 0.044951 1.101125 --0.363351 0.044951 0.978797 --0.680764 0.047165 0.923253 --0.893238 0.059403 0.648304 --0.939756 0.044951 0.320806 --1.105676 0.044951 0.034988 --1.08668 0.044951 -0.305066 --0.917408 0.044951 -0.616782 --0.714134 0.102941 -0.883514 --0.426456 0.096815 -1.012612 --0.111944 0.068965 -0.998828 -0.215923 0.044951 -1.03472 -0.463542 0.066234 -0.873183 -0.745876 0.188761 -0.688732 -0.929902 0.222534 -0.477692 -1.016578 0.075232 -0.224884 -0.973464 0.102972 0.131556 -0.973899 0.072011 0.420556 -0.79683 0.107464 0.690348 -0.615827 0.072011 0.962959 -0.296304 0.085371 1.100829 --0.047601 0.085371 1.049575 --0.348593 0.072011 0.93828 --0.650343 0.091941 0.874345 --0.846804 0.111872 0.607685 --0.899598 0.072011 0.309283 --1.058206 0.072011 0.036061 --1.035903 0.072011 -0.295146 --0.844721 0.134888 -0.543912 --0.687943 0.173562 -0.853943 --0.387532 0.17485 -0.963164 --0.102713 0.118569 -0.934195 -0.205155 0.072011 -0.986509 -0.495753 0.097103 -0.849299 -0.535447 0.122798 -0.470848 -0.609756 0.199782 -0.325456 -0.807498 0.096717 -0.143446 -0.721833 0.168972 0.079369 -0.758111 0.092012 0.284368 -0.633971 0.148976 0.462936 -0.454573 0.130512 0.778376 -0.065852 0.119593 0.770545 --0.113747 0.128719 0.828172 --0.278013 0.096717 0.744506 --0.519664 0.178532 0.581856 --0.540279 0.093326 0.336725 --0.744617 0.090423 0.208854 --0.898112 0.100641 0.036596 --0.824225 0.100641 -0.164623 --0.687719 0.096717 -0.425472 --0.540904 0.245106 -0.66819 --0.283493 0.156344 -0.783633 --0.760553 0.160803 -0.111367 --0.821091 0.125241 0.007684 --0.689478 0.14119 0.100589 --0.583064 0.168642 -0.00447 --0.643691 0.245899 -0.10979 --0.826148 0.217969 0.053727 --0.597784 0.134471 -0.195655 --0.486319 0.100122 0.081642 --0.772089 0.22201 -0.067246 --0.790625 0.178262 -0.011396 --0.728453 0.213468 0.058204 --0.668479 0.244071 0.009885 --0.737241 0.290877 -0.041363 -0.162925 0.206975 -0.669337 -0.081238 0.199669 -0.685159 -0.067108 0.171238 -0.759957 -0.14917 0.156761 -0.80065 -0.199057 0.195489 -0.734306 -0.330416 0.106814 -0.728865 -0.173081 0.074855 -0.892689 --0.015642 0.078369 -0.787506 --0.040333 0.130303 -0.588179 -0.215666 0.101925 -0.543259 -0.151104 0.231319 -0.841525 -0.203772 0.155246 -0.617306 -0.051242 0.137833 -0.622534 -0.027222 0.121365 -0.753659 -0.161261 0.109219 -0.801472 -0.242152 0.140682 -0.720192 -0.370446 0.241299 0.62074 -0.457841 0.248653 0.472846 -0.465617 0.256607 0.323351 -0.331328 0.309846 0.302162 -0.201257 0.329643 0.42863 -0.170191 0.286619 0.563968 -0.243397 0.253376 0.679251 -0.422461 0.313445 0.579926 -0.361424 0.158085 0.693122 -0.483955 0.192258 0.45147 -0.452623 0.174258 0.187606 -0.23914 0.266853 0.175157 -0.047104 0.262977 0.289231 --0.015201 0.26021 0.545065 -0.100476 0.215517 0.715681 -0.524708 0.115793 0.132448 -0.229337 0.155121 -0.025383 --0.230854 0.085596 0.317816 --0.12767 0.115792 0.570967 --0.530362 0.145972 -0.266623 --0.335811 0.209261 -0.350972 --0.148737 0.113972 -0.44495 --0.105665 0.193726 -0.068607 --0.331003 0.091501 0.054579 -0.127475 0.11519 -0.31148 -numsurf 310 -SURF 0x10 -mat 1 -refs 3 -21 0.760514318943 0.508749544621 -0 0.8671875 0.65625 -1 0.84765625 0.7109375 -SURF 0x10 -mat 1 -refs 3 -21 0.760514318943 0.508749544621 -1 0.84765625 0.7109375 -2 0.80859375 0.75 -SURF 0x10 -mat 1 -refs 3 -21 0.760514318943 0.508749544621 -2 0.80859375 0.75 -3 0.76953125 0.75 -SURF 0x10 -mat 1 -refs 3 -21 0.760514318943 0.508749544621 -3 0.76953125 0.75 -4 0.73046875 0.765625 -SURF 0x10 -mat 1 -refs 3 -21 0.760514318943 0.508749544621 -4 0.73046875 0.765625 -5 0.6953125 0.734375 -SURF 0x10 -mat 1 -refs 3 -21 0.760514318943 0.508749544621 -5 0.6953125 0.734375 -6 0.65625 0.6953125 -SURF 0x10 -mat 1 -refs 3 -21 0.760514318943 0.508749544621 -6 0.65625 0.6953125 -7 0.6328125 0.6328125 -SURF 0x10 -mat 1 -refs 3 -21 0.760514318943 0.508749544621 -7 0.6328125 0.6328125 -8 0.62890625 0.546875 -SURF 0x10 -mat 1 -refs 3 -21 0.760514318943 0.508749544621 -8 0.62890625 0.546875 -9 0.63671875 0.46875 -SURF 0x10 -mat 1 -refs 3 -21 0.760514318943 0.508749544621 -9 0.63671875 0.46875 -10 0.640625 0.390625 -SURF 0x10 -mat 1 -refs 3 -21 0.760514318943 0.508749544621 -10 0.640625 0.390625 -11 0.6640625 0.3359375 -SURF 0x10 -mat 1 -refs 3 -21 0.760514318943 0.508749544621 -11 0.6640625 0.3359375 -12 0.69921875 0.3046875 -SURF 0x10 -mat 1 -refs 3 -21 0.760514318943 0.508749544621 -12 0.69921875 0.3046875 -13 0.73046875 0.25 -SURF 0x10 -mat 1 -refs 3 -21 0.760514318943 0.508749544621 -13 0.73046875 0.25 -14 0.7734375 0.2421875 -SURF 0x10 -mat 1 -refs 3 -21 0.760514318943 0.508749544621 -14 0.7734375 0.2421875 -15 0.80859375 0.265625 -SURF 0x10 -mat 1 -refs 3 -21 0.760514318943 0.508749544621 -15 0.80859375 0.265625 -16 0.84375 0.296875 -SURF 0x10 -mat 1 -refs 3 -21 0.760514318943 0.508749544621 -16 0.84375 0.296875 -17 0.8671875 0.359375 -SURF 0x10 -mat 1 -refs 3 -21 0.760514318943 0.508749544621 -17 0.8671875 0.359375 -18 0.875 0.4375 -SURF 0x10 -mat 1 -refs 3 -21 0.760514318943 0.508749544621 -18 0.875 0.4375 -19 0.8828125 0.5078125 -SURF 0x10 -mat 1 -refs 3 -21 0.760514318943 0.508749544621 -19 0.8828125 0.5078125 -20 0.87109375 0.578125 -SURF 0x10 -mat 1 -refs 3 -20 0.87109375 0.578125 -0 0.8671875 0.65625 -21 0.760514318943 0.508749544621 -SURF 0x10 -mat 1 -refs 3 -112 0.08984375 0.7109375 -108 0.11328125 0.6875 -111 0.107993111014 0.738994002342 -SURF 0x10 -mat 1 -refs 3 -113 0.09765625 0.6640625 -108 0.11328125 0.6875 -112 0.08984375 0.7109375 -SURF 0x10 -mat 1 -refs 3 -114 0.12890625 0.65625 -108 0.11328125 0.6875 -113 0.09765625 0.6640625 -SURF 0x10 -mat 1 -refs 3 -115 0.12890625 0.6953125 -108 0.11328125 0.6875 -114 0.12890625 0.65625 -SURF 0x10 -mat 1 -refs 3 -111 0.107993111014 0.738994002342 -108 0.11328125 0.6875 -115 0.12890625 0.6953125 -SURF 0x10 -mat 1 -refs 3 -120 0.40234375 0.671875 -126 0.37890625 0.703125 -116 0.375 0.671875 -SURF 0x10 -mat 1 -refs 3 -116 0.375 0.671875 -126 0.37890625 0.703125 -117 0.353741139174 0.674978613853 -SURF 0x10 -mat 1 -refs 3 -117 0.353741139174 0.674978613853 -126 0.37890625 0.703125 -118 0.3670116961 0.731668949127 -SURF 0x10 -mat 1 -refs 3 -118 0.3670116961 0.731668949127 -126 0.37890625 0.703125 -119 0.40625 0.7265625 -SURF 0x10 -mat 1 -refs 3 -119 0.40625 0.7265625 -126 0.37890625 0.703125 -120 0.40234375 0.671875 -SURF 0x10 -mat 1 -refs 3 -139 0.235644742846 0.249117672443 -132 0.24888317287 0.162046328187 -133 0.28515625 0.234375 -SURF 0x10 -mat 1 -refs 3 -139 0.235644742846 0.249117672443 -133 0.28515625 0.234375 -134 0.312136918306 0.292646586895 -SURF 0x10 -mat 1 -refs 3 -139 0.235644742846 0.249117672443 -134 0.312136918306 0.292646586895 -135 0.266520798206 0.332503914833 -SURF 0x10 -mat 1 -refs 3 -139 0.235644742846 0.249117672443 -135 0.266520798206 0.332503914833 -136 0.218589171767 0.320026636124 -SURF 0x10 -mat 1 -refs 3 -139 0.235644742846 0.249117672443 -136 0.218589171767 0.320026636124 -137 0.190177842975 0.258580088615 -SURF 0x10 -mat 1 -refs 3 -139 0.235644742846 0.249117672443 -137 0.190177842975 0.258580088615 -138 0.1953125 0.203125 -SURF 0x10 -mat 1 -refs 3 -139 0.235644742846 0.249117672443 -138 0.1953125 0.203125 -132 0.24888317287 0.162046328187 -SURF 0x10 -mat 1 -refs 3 -102 0.29296875 0.8515625 -124 0.3046875 0.74925082922 -123 0.327597558498 0.8359375 -SURF 0x10 -mat 1 -refs 3 -85 0.405248969793 0.524760901928 -121 0.453125 0.6484375 -125 0.35546875 0.578125 -SURF 0x10 -mat 1 -refs 3 -96 0.0920853987336 0.517139673233 -110 0.140625 0.5859375 -97 0.0671324580908 0.605017721653 -SURF 0x10 -mat 1 -refs 3 -99 0.0987808331847 0.802955746651 -109 0.17578125 0.6953125 -100 0.1796875 0.84375 -SURF 0x10 -mat 1 -refs 3 -102 0.29296875 0.8515625 -153 0.2734375 0.7109375 -124 0.3046875 0.74925082922 -SURF 0x10 -mat 1 -refs 3 -100 0.1796875 0.84375 -109 0.17578125 0.6953125 -151 0.21484375 0.6953125 -SURF 0x10 -mat 1 -refs 3 -96 0.0920853987336 0.517139673233 -155 0.19140625 0.6015625 -110 0.140625 0.5859375 -SURF 0x10 -mat 1 -refs 3 -85 0.405248969793 0.524760901928 -125 0.35546875 0.578125 -156 0.30859375 0.5703125 -SURF 0x10 -mat 1 -refs 3 -87 0.412885278463 0.309243530035 -147 0.375726222992 0.308693140745 -88 0.41411074996 0.21947054565 -SURF 0x10 -mat 1 -refs 3 -87 0.412885278463 0.309243530035 -148 0.326236486435 0.483146160841 -147 0.375726222992 0.308693140745 -SURF 0x10 -mat 1 -refs 3 -148 0.326236486435 0.483146160841 -156 0.30859375 0.5703125 -154 0.24609375 0.59375 -SURF 0x10 -mat 1 -refs 3 -85 0.405248969793 0.524760901928 -156 0.30859375 0.5703125 -148 0.326236486435 0.483146160841 -SURF 0x10 -mat 1 -refs 3 -86 0.414303064346 0.454133152962 -148 0.326236486435 0.483146160841 -87 0.412885278463 0.309243530035 -SURF 0x10 -mat 1 -refs 3 -85 0.405248969793 0.524760901928 -148 0.326236486435 0.483146160841 -86 0.414303064346 0.454133152962 -SURF 0x10 -mat 1 -refs 3 -95 0.0634306892753 0.437916308641 -149 0.15234375 0.484375 -96 0.0920853987336 0.517139673233 -SURF 0x10 -mat 1 -refs 3 -149 0.15234375 0.484375 -155 0.19140625 0.6015625 -96 0.0920853987336 0.517139673233 -SURF 0x10 -mat 1 -refs 3 -148 0.326236486435 0.483146160841 -154 0.24609375 0.59375 -149 0.15234375 0.484375 -SURF 0x10 -mat 1 -refs 3 -154 0.24609375 0.59375 -155 0.19140625 0.6015625 -149 0.15234375 0.484375 -SURF 0x10 -mat 1 -refs 3 -153 0.2734375 0.7109375 -152 0.238854154944 0.698581337929 -154 0.24609375 0.59375 -SURF 0x10 -mat 1 -refs 3 -153 0.2734375 0.7109375 -154 0.24609375 0.59375 -156 0.30859375 0.5703125 -SURF 0x10 -mat 1 -refs 3 -151 0.21484375 0.6953125 -155 0.19140625 0.6015625 -154 0.24609375 0.59375 -SURF 0x10 -mat 1 -refs 3 -151 0.21484375 0.6953125 -154 0.24609375 0.59375 -152 0.238854154944 0.698581337929 -SURF 0x10 -mat 1 -refs 3 -94 0.0859375 0.3046875 -150 0.11328125 0.328125 -95 0.0634306892753 0.437916308641 -SURF 0x10 -mat 1 -refs 3 -150 0.11328125 0.328125 -149 0.15234375 0.484375 -95 0.0634306892753 0.437916308641 -SURF 0x10 -mat 1 -refs 3 -88 0.41411074996 0.21947054565 -147 0.375726222992 0.308693140745 -89 0.377847552299 0.153959617019 -SURF 0x10 -mat 1 -refs 3 -147 0.375726222992 0.308693140745 -90 0.33984375 0.1484375 -89 0.377847552299 0.153959617019 -SURF 0x10 -mat 1 -refs 3 -92 0.140625 0.1328125 -150 0.11328125 0.328125 -93 0.098296970129 0.230275198817 -SURF 0x10 -mat 1 -refs 3 -150 0.11328125 0.328125 -94 0.0859375 0.3046875 -93 0.098296970129 0.230275198817 -SURF 0x10 -mat 1 -refs 3 -151 0.21484375 0.6953125 -109 0.17578125 0.6953125 -155 0.19140625 0.6015625 -SURF 0x10 -mat 1 -refs 3 -109 0.17578125 0.6953125 -110 0.140625 0.5859375 -155 0.19140625 0.6015625 -SURF 0x10 -mat 1 -refs 3 -124 0.3046875 0.74925082922 -153 0.2734375 0.7109375 -156 0.30859375 0.5703125 -SURF 0x10 -mat 1 -refs 3 -124 0.3046875 0.74925082922 -156 0.30859375 0.5703125 -125 0.35546875 0.578125 -SURF 0x10 -mat 1 -refs 3 -102 0.29296875 0.8515625 -101 0.2421875 0.8828125 -152 0.238854154944 0.698581337929 -SURF 0x10 -mat 1 -refs 3 -102 0.29296875 0.8515625 -152 0.238854154944 0.698581337929 -153 0.2734375 0.7109375 -SURF 0x10 -mat 1 -refs 3 -101 0.2421875 0.8828125 -100 0.1796875 0.84375 -152 0.238854154944 0.698581337929 -SURF 0x10 -mat 1 -refs 3 -100 0.1796875 0.84375 -151 0.21484375 0.6953125 -152 0.238854154944 0.698581337929 -SURF 0x10 -mat 1 -refs 3 -140 0.242554008961 0.106540672481 -146 0.1640625 0.21875 -92 0.140625 0.1328125 -SURF 0x10 -mat 1 -refs 3 -140 0.242554008961 0.106540672481 -92 0.140625 0.1328125 -91 0.24609375 0.0625 -SURF 0x10 -mat 1 -refs 3 -145 0.170006126165 0.318896204233 -144 0.203125 0.4453125 -149 0.15234375 0.484375 -SURF 0x10 -mat 1 -refs 3 -145 0.170006126165 0.318896204233 -149 0.15234375 0.484375 -150 0.11328125 0.328125 -SURF 0x10 -mat 1 -refs 3 -143 0.26953125 0.4140625 -142 0.337357401848 0.329529851675 -148 0.326236486435 0.483146160841 -SURF 0x10 -mat 1 -refs 3 -142 0.337357401848 0.329529851675 -147 0.375726222992 0.308693140745 -148 0.326236486435 0.483146160841 -SURF 0x10 -mat 1 -refs 3 -142 0.337357401848 0.329529851675 -141 0.3359375 0.25 -147 0.375726222992 0.308693140745 -SURF 0x10 -mat 1 -refs 3 -141 0.3359375 0.25 -90 0.33984375 0.1484375 -147 0.375726222992 0.308693140745 -SURF 0x10 -mat 1 -refs 3 -141 0.33716288209 0.22778826952 -140 0.242554008961 0.106540672481 -90 0.33984375 0.1484375 -SURF 0x10 -mat 1 -refs 3 -140 0.242554008961 0.106540672481 -91 0.24609375 0.0625 -90 0.33984375 0.1484375 -SURF 0x10 -mat 1 -refs 3 -132 0.24888317287 0.162046328187 -138 0.1953125 0.203125 -140 0.242554008961 0.106540672481 -SURF 0x10 -mat 1 -refs 3 -138 0.1953125 0.203125 -146 0.1640625 0.21875 -140 0.242554008961 0.106540672481 -SURF 0x10 -mat 1 -refs 3 -138 0.1953125 0.203125 -137 0.190177842975 0.258580088615 -146 0.1640625 0.21875 -SURF 0x10 -mat 1 -refs 3 -137 0.190177842975 0.258580088615 -145 0.170006126165 0.318896204233 -146 0.1640625 0.21875 -SURF 0x10 -mat 1 -refs 3 -137 0.190177842975 0.258580088615 -136 0.218589171767 0.320026636124 -145 0.170006126165 0.318896204233 -SURF 0x10 -mat 1 -refs 3 -136 0.218589171767 0.320026636124 -144 0.203125 0.4453125 -145 0.170006126165 0.318896204233 -SURF 0x10 -mat 1 -refs 3 -136 0.218589171767 0.320026636124 -135 0.266520798206 0.332503914833 -143 0.26953125 0.4140625 -SURF 0x10 -mat 1 -refs 3 -136 0.218589171767 0.320026636124 -143 0.26953125 0.4140625 -144 0.203125 0.4453125 -SURF 0x10 -mat 1 -refs 3 -135 0.266520798206 0.332503914833 -134 0.312136918306 0.292646586895 -142 0.337357401848 0.329529851675 -SURF 0x10 -mat 1 -refs 3 -135 0.266520798206 0.332503914833 -142 0.337357401848 0.329529851675 -143 0.26953125 0.4140625 -SURF 0x10 -mat 1 -refs 3 -134 0.312136918306 0.292646586895 -133 0.28515625 0.234375 -141 0.33716288209 0.22778826952 -SURF 0x10 -mat 1 -refs 3 -134 0.312136918306 0.292646586895 -141 0.3359375 0.25 -142 0.337357401848 0.329529851675 -SURF 0x10 -mat 1 -refs 3 -133 0.28515625 0.234375 -132 0.24888317287 0.162046328187 -141 0.33716288209 0.22778826952 -SURF 0x10 -mat 1 -refs 3 -132 0.24888317287 0.162046328187 -140 0.242554008961 0.106540672481 -141 0.33716288209 0.22778826952 -SURF 0x10 -mat 1 -refs 3 -131 0.421875 0.671875 -127 0.37109375 0.6171875 -121 0.453125 0.6484375 -SURF 0x10 -mat 1 -refs 3 -127 0.37109375 0.6171875 -125 0.35546875 0.578125 -121 0.453125 0.6484375 -SURF 0x10 -mat 1 -refs 3 -127 0.37109375 0.6171875 -128 0.340294748545 0.66516327858 -125 0.35546875 0.578125 -SURF 0x10 -mat 1 -refs 3 -128 0.340294748545 0.66516327858 -124 0.3046875 0.74925082922 -125 0.35546875 0.578125 -SURF 0x10 -mat 1 -refs 3 -128 0.340294748545 0.66516327858 -129 0.349934279919 0.771633446217 -124 0.3046875 0.74925082922 -SURF 0x10 -mat 1 -refs 3 -129 0.349934279919 0.771633446217 -123 0.327597558498 0.8359375 -124 0.3046875 0.74925082922 -SURF 0x10 -mat 1 -refs 3 -129 0.349934279919 0.771633446217 -130 0.41796875 0.7578125 -123 0.327597558498 0.8359375 -SURF 0x10 -mat 1 -refs 3 -130 0.41796875 0.7578125 -122 0.42578125 0.796875 -123 0.327597558498 0.8359375 -SURF 0x10 -mat 1 -refs 3 -130 0.41796875 0.7578125 -131 0.421875 0.671875 -121 0.453125 0.6484375 -SURF 0x10 -mat 1 -refs 3 -130 0.41796875 0.7578125 -121 0.453125 0.6484375 -122 0.42578125 0.796875 -SURF 0x10 -mat 1 -refs 3 -130 0.41796875 0.7578125 -119 0.40625 0.7265625 -131 0.421875 0.671875 -SURF 0x10 -mat 1 -refs 3 -119 0.40625 0.7265625 -120 0.40234375 0.671875 -131 0.421875 0.671875 -SURF 0x10 -mat 1 -refs 3 -129 0.349934279919 0.771633446217 -118 0.3670116961 0.731668949127 -130 0.41796875 0.7578125 -SURF 0x10 -mat 1 -refs 3 -118 0.3670116961 0.731668949127 -119 0.40625 0.7265625 -130 0.41796875 0.7578125 -SURF 0x10 -mat 1 -refs 3 -128 0.340294748545 0.66516327858 -117 0.353741139174 0.674978613853 -129 0.349934279919 0.771633446217 -SURF 0x10 -mat 1 -refs 3 -117 0.353741139174 0.674978613853 -118 0.3670116961 0.731668949127 -129 0.349934279919 0.771633446217 -SURF 0x10 -mat 1 -refs 3 -127 0.37109375 0.6171875 -116 0.375 0.671875 -117 0.353741139174 0.674978613853 -SURF 0x10 -mat 1 -refs 3 -127 0.37109375 0.6171875 -117 0.353741139174 0.674978613853 -128 0.340294748545 0.66516327858 -SURF 0x10 -mat 1 -refs 3 -131 0.421875 0.671875 -120 0.40234375 0.671875 -127 0.37109375 0.6171875 -SURF 0x10 -mat 1 -refs 3 -120 0.40234375 0.671875 -116 0.375 0.671875 -127 0.37109375 0.6171875 -SURF 0x10 -mat 1 -refs 3 -103 0.10138668865 0.7734375 -111 0.107993111014 0.738994002342 -107 0.15234375 0.6953125 -SURF 0x10 -mat 1 -refs 3 -111 0.107993111014 0.738994002342 -115 0.12890625 0.6953125 -107 0.15234375 0.6953125 -SURF 0x10 -mat 1 -refs 3 -107 0.15234375 0.6953125 -115 0.12890625 0.6953125 -114 0.12890625 0.65625 -SURF 0x10 -mat 1 -refs 3 -107 0.15234375 0.6953125 -114 0.12890625 0.65625 -106 0.13671875 0.6328125 -SURF 0x10 -mat 1 -refs 3 -106 0.13671875 0.6328125 -114 0.12890625 0.65625 -105 0.08203125 0.6328125 -SURF 0x10 -mat 1 -refs 3 -114 0.12890625 0.65625 -113 0.09765625 0.6640625 -105 0.08203125 0.6328125 -SURF 0x10 -mat 1 -refs 3 -104 0.07421875 0.7265625 -112 0.08984375 0.7109375 -103 0.10138668865 0.7734375 -SURF 0x10 -mat 1 -refs 3 -112 0.08984375 0.7109375 -111 0.107993111014 0.738994002342 -103 0.10138668865 0.7734375 -SURF 0x10 -mat 1 -refs 3 -104 0.07421875 0.7265625 -103 0.10138668865 0.7734375 -99 0.0987808331847 0.802955746651 -SURF 0x10 -mat 1 -refs 3 -104 0.07421875 0.7265625 -99 0.0987808331847 0.802955746651 -98 0.0588470809162 0.751277804375 -SURF 0x10 -mat 1 -refs 3 -105 0.08203125 0.6328125 -104 0.07421875 0.7265625 -97 0.0671324580908 0.605017721653 -SURF 0x10 -mat 1 -refs 3 -104 0.07421875 0.7265625 -98 0.0588470809162 0.751277804375 -97 0.0671324580908 0.605017721653 -SURF 0x10 -mat 1 -refs 3 -106 0.13671875 0.6328125 -105 0.08203125 0.6328125 -110 0.140625 0.5859375 -SURF 0x10 -mat 1 -refs 3 -105 0.08203125 0.6328125 -97 0.0671324580908 0.605017721653 -110 0.140625 0.5859375 -SURF 0x10 -mat 1 -refs 3 -107 0.15234375 0.6953125 -106 0.13671875 0.6328125 -109 0.17578125 0.6953125 -SURF 0x10 -mat 1 -refs 3 -106 0.13671875 0.6328125 -110 0.140625 0.5859375 -109 0.17578125 0.6953125 -SURF 0x10 -mat 1 -refs 3 -103 0.10138668865 0.7734375 -107 0.15234375 0.6953125 -109 0.17578125 0.6953125 -SURF 0x10 -mat 1 -refs 3 -103 0.10138668865 0.7734375 -109 0.17578125 0.6953125 -99 0.0987808331847 0.802955746651 -SURF 0x10 -mat 1 -refs 3 -64 0.467577964067 0.536275923252 -84 0.488967001438 0.656314849854 -85 0.405248969793 0.524760901928 -SURF 0x10 -mat 1 -refs 3 -84 0.488967001438 0.656314849854 -121 0.453125 0.6484375 -85 0.405248969793 0.524760901928 -SURF 0x10 -mat 1 -refs 3 -84 0.488967001438 0.656314849854 -83 0.445051699877 0.84172898531 -121 0.453125 0.6484375 -SURF 0x10 -mat 1 -refs 3 -83 0.445051699877 0.84172898531 -122 0.42578125 0.796875 -121 0.453125 0.6484375 -SURF 0x10 -mat 1 -refs 3 -83 0.445051699877 0.84172898531 -82 0.375 0.921875 -123 0.327597558498 0.8359375 -SURF 0x10 -mat 1 -refs 3 -83 0.445051699877 0.84172898531 -123 0.327597558498 0.8359375 -122 0.42578125 0.796875 -SURF 0x10 -mat 1 -refs 3 -82 0.375 0.921875 -81 0.30422320962 0.907368242741 -102 0.29296875 0.8515625 -SURF 0x10 -mat 1 -refs 3 -82 0.375 0.921875 -102 0.29296875 0.8515625 -123 0.327597558498 0.8359375 -SURF 0x10 -mat 1 -refs 3 -81 0.30422320962 0.907368242741 -80 0.243401035666 0.940974891186 -101 0.2421875 0.8828125 -SURF 0x10 -mat 1 -refs 3 -81 0.30422320962 0.907368242741 -101 0.2421875 0.8828125 -102 0.29296875 0.8515625 -SURF 0x10 -mat 1 -refs 3 -80 0.243401035666 0.940974891186 -79 0.17578125 0.921875 -101 0.2421875 0.8828125 -SURF 0x10 -mat 1 -refs 3 -79 0.17578125 0.921875 -100 0.1796875 0.84375 -101 0.2421875 0.8828125 -SURF 0x10 -mat 1 -refs 3 -79 0.17578125 0.921875 -78 0.0940528288484 0.912137210369 -100 0.1796875 0.84375 -SURF 0x10 -mat 1 -refs 3 -78 0.0940528288484 0.912137210369 -99 0.0987808331847 0.802955746651 -100 0.1796875 0.84375 -SURF 0x10 -mat 1 -refs 3 -78 0.0940528288484 0.912137210369 -77 0.0378141477704 0.799818515778 -99 0.0987808331847 0.802955746651 -SURF 0x10 -mat 1 -refs 3 -77 0.0378141477704 0.799818515778 -98 0.0588470809162 0.751277804375 -99 0.0987808331847 0.802955746651 -SURF 0x10 -mat 1 -refs 3 -77 0.0378141477704 0.799818515778 -76 0.0444211699069 0.584683835506 -98 0.0588470809162 0.751277804375 -SURF 0x10 -mat 1 -refs 3 -76 0.0444211699069 0.584683835506 -97 0.0671324580908 0.605017721653 -98 0.0588470809162 0.751277804375 -SURF 0x10 -mat 1 -refs 3 -76 0.0444211699069 0.584683835506 -75 0.0292412061244 0.488995611668 -96 0.0920853987336 0.517139673233 -SURF 0x10 -mat 1 -refs 3 -76 0.0444211699069 0.584683835506 -96 0.0920853987336 0.517139673233 -97 0.0671324580908 0.605017721653 -SURF 0x10 -mat 1 -refs 3 -75 0.0292412061244 0.488995611668 -74 0.0306321252137 0.354566156864 -95 0.0634306892753 0.437916308641 -SURF 0x10 -mat 1 -refs 3 -75 0.0292412061244 0.488995611668 -95 0.0634306892753 0.437916308641 -96 0.0920853987336 0.517139673233 -SURF 0x10 -mat 1 -refs 3 -74 0.0306321252137 0.354566156864 -73 0.0715231373906 0.248358666897 -95 0.0634306892753 0.437916308641 -SURF 0x10 -mat 1 -refs 3 -73 0.0715231373906 0.248358666897 -94 0.0859375 0.3046875 -95 0.0634306892753 0.437916308641 -SURF 0x10 -mat 1 -refs 3 -73 0.0715231373906 0.248358666897 -72 0.0872320532799 0.150018960238 -93 0.098296970129 0.230275198817 -SURF 0x10 -mat 1 -refs 3 -73 0.0715231373906 0.248358666897 -93 0.098296970129 0.230275198817 -94 0.0859375 0.3046875 -SURF 0x10 -mat 1 -refs 3 -72 0.0872320532799 0.150018960238 -71 0.142805993557 0.0798013284802 -92 0.140625 0.1328125 -SURF 0x10 -mat 1 -refs 3 -72 0.0872320532799 0.150018960238 -92 0.140625 0.1328125 -93 0.098296970129 0.230275198817 -SURF 0x10 -mat 1 -refs 3 -71 0.142805993557 0.0798013284802 -70 0.241668924689 0.0393568128347 -91 0.24609375 0.0625 -SURF 0x10 -mat 1 -refs 3 -71 0.142805993557 0.0798013284802 -91 0.24609375 0.0625 -92 0.140625 0.1328125 -SURF 0x10 -mat 1 -refs 3 -70 0.241668924689 0.0393568128347 -69 0.3203125 0.0703125 -91 0.24609375 0.0625 -SURF 0x10 -mat 1 -refs 3 -69 0.3203125 0.0703125 -90 0.33984375 0.1484375 -91 0.24609375 0.0625 -SURF 0x10 -mat 1 -refs 3 -69 0.3203125 0.0703125 -68 0.401784092188 0.104774206877 -90 0.33984375 0.1484375 -SURF 0x10 -mat 1 -refs 3 -68 0.401784092188 0.104774206877 -89 0.377847552299 0.153959617019 -90 0.33984375 0.1484375 -SURF 0x10 -mat 1 -refs 3 -68 0.401784092188 0.104774206877 -67 0.442038238049 0.180448561907 -89 0.377847552299 0.153959617019 -SURF 0x10 -mat 1 -refs 3 -67 0.442038238049 0.180448561907 -88 0.41411074996 0.21947054565 -89 0.377847552299 0.153959617019 -SURF 0x10 -mat 1 -refs 3 -67 0.442038238049 0.180448561907 -66 0.446313917637 0.274339526892 -87 0.412885278463 0.309243530035 -SURF 0x10 -mat 1 -refs 3 -67 0.442038238049 0.180448561907 -87 0.412885278463 0.309243530035 -88 0.41411074996 0.21947054565 -SURF 0x10 -mat 1 -refs 3 -65 0.469290703535 0.432796478271 -64 0.467577964067 0.536275923252 -85 0.405248969793 0.524760901928 -SURF 0x10 -mat 1 -refs 3 -65 0.469290703535 0.432796478271 -85 0.405248969793 0.524760901928 -86 0.414303064346 0.454133152962 -SURF 0x10 -mat 1 -refs 3 -44 0.959107041359 0.77781945467 -63 0.97344905138 0.643190085888 -84 0.99609375 0.6796875 -SURF 0x10 -mat 1 -refs 3 -44 0.495882332325 0.577848434448 -84 0.488967001438 0.656314849854 -64 0.467577964067 0.536275923252 -SURF 0x10 -mat 1 -refs 3 -63 0.48351764679 0.779047369957 -62 0.46070587635 0.921023547649 -83 0.445051699877 0.84172898531 -SURF 0x10 -mat 1 -refs 3 -63 0.48351764679 0.779047369957 -83 0.445051699877 0.84172898531 -84 0.488967001438 0.656314849854 -SURF 0x10 -mat 1 -refs 3 -62 0.46070587635 0.921023547649 -61 0.376946985722 0.961014032364 -83 0.445051699877 0.84172898531 -SURF 0x10 -mat 1 -refs 3 -61 0.376946985722 0.961014032364 -82 0.375 0.921875 -83 0.445051699877 0.84172898531 -SURF 0x10 -mat 1 -refs 3 -61 0.376946985722 0.961014032364 -60 0.308261811733 0.948345243931 -81 0.30422320962 0.907368242741 -SURF 0x10 -mat 1 -refs 3 -61 0.376946985722 0.961014032364 -81 0.30422320962 0.907368242741 -82 0.375 0.921875 -SURF 0x10 -mat 1 -refs 3 -60 0.308261811733 0.948345243931 -59 0.242032244802 0.973247468472 -80 0.243401035666 0.940974891186 -SURF 0x10 -mat 1 -refs 3 -60 0.308261811733 0.948345243931 -80 0.243401035666 0.940974891186 -81 0.30422320962 0.907368242741 -SURF 0x10 -mat 1 -refs 3 -59 0.242032244802 0.973247468472 -58 0.168403998017 0.976581275463 -80 0.243401035666 0.940974891186 -SURF 0x10 -mat 1 -refs 3 -58 0.168403998017 0.976581275463 -79 0.17578125 0.921875 -80 0.243401035666 0.940974891186 -SURF 0x10 -mat 1 -refs 3 -58 0.168403998017 0.976581275463 -57 0.0752365663648 0.960035502911 -78 0.0940528288484 0.912137210369 -SURF 0x10 -mat 1 -refs 3 -58 0.168403998017 0.976581275463 -78 0.0940528288484 0.912137210369 -79 0.17578125 0.921875 -SURF 0x10 -mat 1 -refs 3 -57 0.0752365663648 0.960035502911 -56 0.0212325155735 0.828438937664 -78 0.0940528288484 0.912137210369 -SURF 0x10 -mat 1 -refs 3 -56 0.0212325155735 0.828438937664 -77 0.0378141477704 0.799818515778 -78 0.0940528288484 0.912137210369 -SURF 0x10 -mat 1 -refs 3 -56 0.0212325155735 0.828438937664 -55 0.020053261891 0.672528743744 -77 0.0378141477704 0.799818515778 -SURF 0x10 -mat 1 -refs 3 -55 0.020053261891 0.672528743744 -76 0.0444211699069 0.584683835506 -77 0.0378141477704 0.799818515778 -SURF 0x10 -mat 1 -refs 3 -55 0.020053261891 0.672528743744 -54 0.0113434959203 0.487248897552 -75 0.0292412061244 0.488995611668 -SURF 0x10 -mat 1 -refs 3 -55 0.020053261891 0.672528743744 -75 0.0292412061244 0.488995611668 -76 0.0444211699069 0.584683835506 -SURF 0x10 -mat 1 -refs 3 -54 0.0113434959203 0.487248897552 -53 0.0160396117717 0.341841340065 -74 0.0306321252137 0.354566156864 -SURF 0x10 -mat 1 -refs 3 -54 0.0113434959203 0.487248897552 -74 0.0306321252137 0.354566156864 -75 0.0292412061244 0.488995611668 -SURF 0x10 -mat 1 -refs 3 -53 0.0160396117717 0.341841340065 -52 0.043477319181 0.179295152426 -74 0.0306321252137 0.354566156864 -SURF 0x10 -mat 1 -refs 3 -52 0.043477319181 0.179295152426 -73 0.0715231373906 0.248358666897 -74 0.0306321252137 0.354566156864 -SURF 0x10 -mat 1 -refs 3 -52 0.043477319181 0.179295152426 -51 0.0779823362827 0.0814236104488 -72 0.0872320532799 0.150018960238 -SURF 0x10 -mat 1 -refs 3 -52 0.043477319181 0.179295152426 -72 0.0872320532799 0.150018960238 -73 0.0715231373906 0.248358666897 -SURF 0x10 -mat 1 -refs 3 -51 0.0779823362827 0.0814236104488 -50 0.139971092343 0.0293684862554 -71 0.142805993557 0.0798013284802 -SURF 0x10 -mat 1 -refs 3 -51 0.0779823362827 0.0814236104488 -71 0.142805993557 0.0798013284802 -72 0.0872320532799 0.150018960238 -SURF 0x10 -mat 1 -refs 3 -50 0.139971092343 0.0293684862554 -49 0.24165250361 0.0182437747717 -71 0.142805993557 0.0798013284802 -SURF 0x10 -mat 1 -refs 3 -49 0.24165250361 0.0182437747717 -70 0.241668924689 0.0393568128347 -71 0.142805993557 0.0798013284802 -SURF 0x10 -mat 1 -refs 3 -49 0.24165250361 0.0182437747717 -48 0.33487701416 0.0375375524163 -70 0.241668924689 0.0393568128347 -SURF 0x10 -mat 1 -refs 3 -48 0.33487701416 0.0375375524163 -69 0.3203125 0.0703125 -70 0.241668924689 0.0393568128347 -SURF 0x10 -mat 1 -refs 3 -48 0.33487701416 0.0375375524163 -47 0.442151129246 0.0809339210391 -68 0.401784092188 0.104774206877 -SURF 0x10 -mat 1 -refs 3 -48 0.33487701416 0.0375375524163 -68 0.401784092188 0.104774206877 -69 0.3203125 0.0703125 -SURF 0x10 -mat 1 -refs 3 -47 0.442151129246 0.0809339210391 -46 0.471876978874 0.145466387272 -68 0.401784092188 0.104774206877 -SURF 0x10 -mat 1 -refs 3 -46 0.471876978874 0.145466387272 -67 0.442038238049 0.180448561907 -68 0.401784092188 0.104774206877 -SURF 0x10 -mat 1 -refs 3 -46 0.471876978874 0.145466387272 -45 0.488546103239 0.257268875837 -66 0.446313917637 0.274339526892 -SURF 0x10 -mat 1 -refs 3 -46 0.471876978874 0.145466387272 -66 0.446313917637 0.274339526892 -67 0.442038238049 0.180448561907 -SURF 0x10 -mat 1 -refs 3 -45 0.488546103239 0.257268875837 -43 0.495882332325 0.419330954552 -65 0.469290703535 0.432796478271 -SURF 0x10 -mat 1 -refs 3 -45 0.488546103239 0.257268875837 -65 0.469290703535 0.432796478271 -66 0.446313917637 0.274339526892 -SURF 0x10 -mat 1 -refs 3 -43 0.495882332325 0.419330954552 -44 0.495882332325 0.577848434448 -64 0.467577964067 0.536275923252 -SURF 0x10 -mat 1 -refs 3 -43 0.495882332325 0.419330954552 -64 0.467577964067 0.536275923252 -65 0.469290703535 0.432796478271 -SURF 0x10 -mat 1 -refs 3 -22 0.920557498932 0.735282242298 -42 0.932433485985 0.61659091711 -63 0.97344905138 0.643190085888 -SURF 0x10 -mat 1 -refs 3 -22 0.920557498932 0.735282242298 -63 0.97344905138 0.643190085888 -44 0.959107041359 0.77781945467 -SURF 0x10 -mat 1 -refs 3 -42 0.932433485985 0.61659091711 -41 0.949274301529 0.513861000538 -63 0.97344905138 0.643190085888 -SURF 0x10 -mat 1 -refs 3 -41 0.949274301529 0.513861000538 -62 0.992276310921 0.515772759914 -63 0.97344905138 0.643190085888 -SURF 0x10 -mat 1 -refs 3 -41 0.949274301529 0.513861000538 -40 0.933539628983 0.40002900362 -61 0.975619673729 0.376772344112 -SURF 0x10 -mat 1 -refs 3 -41 0.949274301529 0.513861000538 -61 0.975619673729 0.376772344112 -62 0.992276310921 0.515772759914 -SURF 0x10 -mat 1 -refs 3 -40 0.933539628983 0.40002900362 -39 0.920007586479 0.288489878178 -61 0.975619673729 0.376772344112 -SURF 0x10 -mat 1 -refs 3 -39 0.920007586479 0.288489878178 -60 0.963808774948 0.238409101963 -61 0.975619673729 0.376772344112 -SURF 0x10 -mat 1 -refs 3 -39 0.920007586479 0.288489878178 -38 0.886143803596 0.196042001247 -60 0.963808774948 0.238409101963 -SURF 0x10 -mat 1 -refs 3 -38 0.886143803596 0.196042001247 -59 0.922949075699 0.127638876438 -60 0.963808774948 0.238409101963 -SURF 0x10 -mat 1 -refs 3 -38 0.886143803596 0.196042001247 -37 0.836663067341 0.147383391857 -58 0.8549066782 0.0669838786125 -SURF 0x10 -mat 1 -refs 3 -38 0.886143803596 0.196042001247 -58 0.8549066782 0.0669838786125 -59 0.922949075699 0.127638876438 -SURF 0x10 -mat 1 -refs 3 -37 0.836663067341 0.147383391857 -36 0.774908840656 0.111627995968 -58 0.8549066782 0.0669838786125 -SURF 0x10 -mat 1 -refs 3 -36 0.774908840656 0.111627995968 -57 0.782662928104 0.023001730442 -58 0.8549066782 0.0669838786125 -SURF 0x10 -mat 1 -refs 3 -36 0.774908840656 0.111627995968 -35 0.718566417694 0.126920282841 -56 0.709200024605 0.041924059391 -SURF 0x10 -mat 1 -refs 3 -36 0.774908840656 0.111627995968 -56 0.709200024605 0.041924059391 -57 0.782662928104 0.023001730442 -SURF 0x10 -mat 1 -refs 3 -35 0.718566417694 0.126920282841 -34 0.672369122505 0.19940251112 -55 0.652491629124 0.128690302372 -SURF 0x10 -mat 1 -refs 3 -35 0.718566417694 0.126920282841 -55 0.652491629124 0.128690302372 -56 0.709200024605 0.041924059391 -SURF 0x10 -mat 1 -refs 3 -34 0.672369122505 0.19940251112 -33 0.61197835207 0.260478079319 -54 0.587895035744 0.190292298794 -SURF 0x10 -mat 1 -refs 3 -34 0.672369122505 0.19940251112 -54 0.587895035744 0.190292298794 -55 0.652491629124 0.128690302372 -SURF 0x10 -mat 1 -refs 3 -33 0.61197835207 0.260478079319 -32 0.579860091209 0.333561003208 -53 0.540296673775 0.29540425539 -SURF 0x10 -mat 1 -refs 3 -33 0.61197835207 0.260478079319 -53 0.540296673775 0.29540425539 -54 0.587895035744 0.190292298794 -SURF 0x10 -mat 1 -refs 3 -32 0.579860091209 0.333561003208 -31 0.576464295387 0.44653314352 -52 0.534985601902 0.433327019215 -SURF 0x10 -mat 1 -refs 3 -32 0.579860091209 0.333561003208 -52 0.534985601902 0.433327019215 -53 0.540296673775 0.29540425539 -SURF 0x10 -mat 1 -refs 3 -31 0.576464295387 0.44653314352 -30 0.566298604012 0.566022098064 -52 0.534985601902 0.433327019215 -SURF 0x10 -mat 1 -refs 3 -30 0.566298604012 0.566022098064 -51 0.522465825081 0.57778519392 -52 0.534985601902 0.433327019215 -SURF 0x10 -mat 1 -refs 3 -30 0.566298604012 0.566022098064 -29 0.570373654366 0.692124664783 -51 0.522465825081 0.57778519392 -SURF 0x10 -mat 1 -refs 3 -29 0.570373654366 0.692124664783 -50 0.527596652508 0.733253538609 -51 0.522465825081 0.57778519392 -SURF 0x10 -mat 1 -refs 3 -29 0.570373654366 0.692124664783 -28 0.607036888599 0.795050561428 -49 0.573071181774 0.861068546772 -SURF 0x10 -mat 1 -refs 3 -29 0.570373654366 0.692124664783 -49 0.573071181774 0.861068546772 -50 0.527596652508 0.733253538609 -SURF 0x10 -mat 1 -refs 3 -28 0.607036888599 0.795050561428 -27 0.66145080328 0.852866232395 -48 0.639987170696 0.932617723942 -SURF 0x10 -mat 1 -refs 3 -28 0.607036888599 0.795050561428 -48 0.639987170696 0.932617723942 -49 0.573071181774 0.861068546772 -SURF 0x10 -mat 1 -refs 3 -27 0.66145080328 0.852866232395 -26 0.717160761356 0.89742654562 -48 0.639987170696 0.932617723942 -SURF 0x10 -mat 1 -refs 3 -26 0.717160761356 0.89742654562 -47 0.708601236343 0.986105263233 -48 0.639987170696 0.932617723942 -SURF 0x10 -mat 1 -refs 3 -26 0.717160761356 0.89742654562 -25 0.775344371796 0.878023207188 -46 0.779693067074 0.963419735432 -SURF 0x10 -mat 1 -refs 3 -26 0.717160761356 0.89742654562 -46 0.779693067074 0.963419735432 -47 0.708601236343 0.986105263233 -SURF 0x10 -mat 1 -refs 3 -25 0.775344371796 0.878023207188 -24 0.836454212666 0.873127758503 -46 0.779693067074 0.963419735432 -SURF 0x10 -mat 1 -refs 3 -24 0.836454212666 0.873127758503 -45 0.85475486517 0.957306206226 -46 0.779693067074 0.963419735432 -SURF 0x10 -mat 1 -refs 3 -24 0.836454212666 0.873127758503 -23 0.894192218781 0.819080531597 -45 0.85475486517 0.957306206226 -SURF 0x10 -mat 1 -refs 3 -23 0.894192218781 0.819080531597 -43 0.924257278442 0.921842753887 -45 0.85475486517 0.957306206226 -SURF 0x10 -mat 1 -refs 3 -23 0.894192218781 0.819080531597 -22 0.920557498932 0.735282242298 -44 0.959107041359 0.77781945467 -SURF 0x10 -mat 1 -refs 3 -23 0.894192218781 0.819080531597 -44 0.959107041359 0.77781945467 -43 0.924257278442 0.921842753887 -SURF 0x10 -mat 1 -refs 3 -0 0.8671875 0.65625 -20 0.87109375 0.578125 -42 0.932433485985 0.61659091711 -SURF 0x10 -mat 1 -refs 3 -0 0.8671875 0.65625 -42 0.932433485985 0.61659091711 -22 0.920557498932 0.735282242298 -SURF 0x10 -mat 1 -refs 3 -20 0.87109375 0.578125 -19 0.8828125 0.5078125 -42 0.932433485985 0.61659091711 -SURF 0x10 -mat 1 -refs 3 -19 0.8828125 0.5078125 -41 0.949274301529 0.513861000538 -42 0.932433485985 0.61659091711 -SURF 0x10 -mat 1 -refs 3 -19 0.8828125 0.5078125 -18 0.875 0.4375 -40 0.933539628983 0.40002900362 -SURF 0x10 -mat 1 -refs 3 -19 0.8828125 0.5078125 -40 0.933539628983 0.40002900362 -41 0.949274301529 0.513861000538 -SURF 0x10 -mat 1 -refs 3 -18 0.875 0.4375 -17 0.8671875 0.359375 -40 0.933539628983 0.40002900362 -SURF 0x10 -mat 1 -refs 3 -17 0.8671875 0.359375 -39 0.920007586479 0.288489878178 -40 0.933539628983 0.40002900362 -SURF 0x10 -mat 1 -refs 3 -17 0.8671875 0.359375 -16 0.84375 0.296875 -39 0.920007586479 0.288489878178 -SURF 0x10 -mat 1 -refs 3 -16 0.84375 0.296875 -38 0.886143803596 0.196042001247 -39 0.920007586479 0.288489878178 -SURF 0x10 -mat 1 -refs 3 -16 0.84375 0.296875 -15 0.80859375 0.265625 -37 0.836663067341 0.147383391857 -SURF 0x10 -mat 1 -refs 3 -16 0.84375 0.296875 -37 0.836663067341 0.147383391857 -38 0.886143803596 0.196042001247 -SURF 0x10 -mat 1 -refs 3 -15 0.80859375 0.265625 -14 0.7734375 0.2421875 -37 0.836663067341 0.147383391857 -SURF 0x10 -mat 1 -refs 3 -14 0.7734375 0.2421875 -36 0.774908840656 0.111627995968 -37 0.836663067341 0.147383391857 -SURF 0x10 -mat 1 -refs 3 -14 0.7734375 0.2421875 -13 0.73046875 0.25 -35 0.718566417694 0.126920282841 -SURF 0x10 -mat 1 -refs 3 -14 0.7734375 0.2421875 -35 0.718566417694 0.126920282841 -36 0.774908840656 0.111627995968 -SURF 0x10 -mat 1 -refs 3 -13 0.73046875 0.25 -12 0.69921875 0.3046875 -34 0.672369122505 0.19940251112 -SURF 0x10 -mat 1 -refs 3 -13 0.73046875 0.25 -34 0.672369122505 0.19940251112 -35 0.718566417694 0.126920282841 -SURF 0x10 -mat 1 -refs 3 -12 0.69921875 0.3046875 -11 0.6640625 0.3359375 -34 0.672369122505 0.19940251112 -SURF 0x10 -mat 1 -refs 3 -11 0.6640625 0.3359375 -33 0.61197835207 0.260478079319 -34 0.672369122505 0.19940251112 -SURF 0x10 -mat 1 -refs 3 -11 0.6640625 0.3359375 -10 0.640625 0.390625 -33 0.61197835207 0.260478079319 -SURF 0x10 -mat 1 -refs 3 -10 0.640625 0.390625 -32 0.579860091209 0.333561003208 -33 0.61197835207 0.260478079319 -SURF 0x10 -mat 1 -refs 3 -10 0.640625 0.390625 -9 0.63671875 0.46875 -31 0.576464295387 0.44653314352 -SURF 0x10 -mat 1 -refs 3 -10 0.640625 0.390625 -31 0.576464295387 0.44653314352 -32 0.579860091209 0.333561003208 -SURF 0x10 -mat 1 -refs 3 -9 0.63671875 0.46875 -8 0.62890625 0.546875 -31 0.576464295387 0.44653314352 -SURF 0x10 -mat 1 -refs 3 -8 0.62890625 0.546875 -30 0.566298604012 0.566022098064 -31 0.576464295387 0.44653314352 -SURF 0x10 -mat 1 -refs 3 -8 0.62890625 0.546875 -7 0.6328125 0.6328125 -30 0.566298604012 0.566022098064 -SURF 0x10 -mat 1 -refs 3 -7 0.6328125 0.6328125 -29 0.570373654366 0.692124664783 -30 0.566298604012 0.566022098064 -SURF 0x10 -mat 1 -refs 3 -7 0.6328125 0.6328125 -6 0.65625 0.6953125 -29 0.570373654366 0.692124664783 -SURF 0x10 -mat 1 -refs 3 -6 0.65625 0.6953125 -28 0.607036888599 0.795050561428 -29 0.570373654366 0.692124664783 -SURF 0x10 -mat 1 -refs 3 -6 0.65625 0.6953125 -5 0.6953125 0.734375 -27 0.66145080328 0.852866232395 -SURF 0x10 -mat 1 -refs 3 -6 0.65625 0.6953125 -27 0.66145080328 0.852866232395 -28 0.607036888599 0.795050561428 -SURF 0x10 -mat 1 -refs 3 -5 0.6953125 0.734375 -4 0.73046875 0.765625 -27 0.66145080328 0.852866232395 -SURF 0x10 -mat 1 -refs 3 -4 0.73046875 0.765625 -26 0.717160761356 0.89742654562 -27 0.66145080328 0.852866232395 -SURF 0x10 -mat 1 -refs 3 -4 0.73046875 0.765625 -3 0.76953125 0.75 -25 0.775344371796 0.878023207188 -SURF 0x10 -mat 1 -refs 3 -4 0.73046875 0.765625 -25 0.775344371796 0.878023207188 -26 0.717160761356 0.89742654562 -SURF 0x10 -mat 1 -refs 3 -3 0.76953125 0.75 -2 0.80859375 0.75 -25 0.775344371796 0.878023207188 -SURF 0x10 -mat 1 -refs 3 -2 0.80859375 0.75 -24 0.836454212666 0.873127758503 -25 0.775344371796 0.878023207188 -SURF 0x10 -mat 1 -refs 3 -2 0.80859375 0.75 -1 0.84765625 0.7109375 -24 0.836454212666 0.873127758503 -SURF 0x10 -mat 1 -refs 3 -1 0.84765625 0.7109375 -23 0.894192218781 0.819080531597 -24 0.836454212666 0.873127758503 -SURF 0x10 -mat 1 -refs 3 -1 0.84765625 0.7109375 -0 0.8671875 0.65625 -22 0.920557498932 0.735282242298 -SURF 0x10 -mat 1 -refs 3 -1 0.84765625 0.7109375 -22 0.920557498932 0.735282242298 -23 0.894192218781 0.819080531597 -SURF 0x10 -mat 1 -refs 3 -105 0.08203125 0.6328125 -113 0.09765625 0.6640625 -112 0.08984375 0.7109375 -SURF 0x10 -mat 1 -refs 3 -105 0.08203125 0.6328125 -112 0.08984375 0.7109375 -104 0.07421875 0.7265625 -SURF 0x10 -mat 1 -refs 3 -146 0.1640625 0.21875 -145 0.170006126165 0.318896204233 -150 0.11328125 0.328125 -SURF 0x10 -mat 1 -refs 3 -146 0.1640625 0.21875 -150 0.11328125 0.328125 -92 0.140625 0.1328125 -SURF 0x10 -mat 1 -refs 3 -144 0.203125 0.4453125 -143 0.26953125 0.4140625 -148 0.326236486435 0.483146160841 -SURF 0x10 -mat 1 -refs 3 -144 0.203125 0.4453125 -148 0.326236486435 0.483146160841 -149 0.15234375 0.484375 -SURF 0x10 -mat 1 -refs 3 -66 0.446313917637 0.274339526892 -65 0.469290703535 0.432796478271 -86 0.414303064346 0.454133152962 -SURF 0x10 -mat 1 -refs 3 -66 0.446313917637 0.274339526892 -86 0.414303064346 0.454133152962 -87 0.412885278463 0.309243530035 -kids 0 diff --git a/data/items/bubblegum.b3d b/data/items/bubblegum.b3d new file mode 100755 index 0000000000000000000000000000000000000000..6be928b2190b0f7e09a69729a95c1e23c9960f83 GIT binary patch literal 22646 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 literal 0 HcmV?d00001 diff --git a/data/items/bubblegum.png b/data/items/bubblegum.png new file mode 100644 index 0000000000000000000000000000000000000000..8697209dad1f5d0d13f12936ab56a36cf8f48881 GIT binary patch literal 55710 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 literal 0 HcmV?d00001 diff --git a/data/items/gift-box.ac b/data/items/gift-box.ac deleted file mode 100644 index 988c0ee63..000000000 --- a/data/items/gift-box.ac +++ /dev/null @@ -1,1378 +0,0 @@ -AC3Db -MATERIAL "DefaultWhite" rgb 1 1 1 amb 1 1 1 emis 0 0 0 spec 0.5 0.5 0.5 shi 64 trans 0 -OBJECT world -kids 1 -OBJECT group -name "GiftBox" -kids 2 -OBJECT poly -name "GiftBox_0" -data 7 -GiftBox -texture "gift-loop.png" -texrep 1 1 -crease 70.000000 -numvert 158 -0.1 0.818012 0.409267 -0.1 0.113297 0.432906 --0.1 0.113297 0.432906 --0.1 0.818012 0.409267 -0.1 0.640048 0.449319 --0.1 0.640048 0.449319 -0.1 0.088676 0.400079 --0.1 0.088676 0.400079 --0.1 0.088676 0.104566 -0.1 0.088676 0.104566 --0.1 0.088676 -0.104566 -0.1 0.088676 -0.104566 -0.1 0.088676 -0.400079 --0.1 0.088676 -0.400079 -0.1 0.640048 -0.449319 --0.1 0.640048 -0.449319 -0.1 0.818012 -0.409267 -0.1 0.113297 -0.432906 --0.1 0.113297 -0.432906 --0.1 0.818012 -0.409267 -0.422765 0.809805 -0.1 -0.432906 0.113297 -0.1 -0.432906 0.113297 0.1 -0.422765 0.809805 0.1 -0.449319 0.640048 -0.1 -0.449319 0.640048 0.1 -0.400079 0.088676 -0.1 -0.400079 0.088676 0.1 --0.400079 0.088676 -0.1 --0.400079 0.088676 0.1 --0.449319 0.640048 -0.1 --0.449319 0.640048 0.1 --0.422765 0.809805 -0.1 --0.432906 0.113297 -0.1 --0.432906 0.113297 0.1 --0.422765 0.809805 0.1 -0.1 0.792936 0.449319 --0.1 0.792936 0.449319 -0.1 0.792936 -0.449319 --0.1 0.792936 -0.449319 -0.449319 0.788832 -0.1 -0.449319 0.788832 0.1 --0.449319 0.788832 -0.1 --0.449319 0.788832 0.1 --0.035042 0.830893 0.035042 -0.047767 0.830893 0.144266 -0.096017 0.822103 0.096017 -0.144893 0.830893 0.04714 -0.108296 0.851655 0.24909 -0.249717 0.851656 0.107669 -0.186847 0.843 0.172705 -0.151241 0.904814 0.292035 -0.218625 0.898156 0.232767 -0.292662 0.904814 0.150614 -0.169227 0.982044 0.310022 -0.310648 0.982044 0.1686 -0.252585 0.979233 0.238442 -0.151342 1.046792 0.292136 -0.220488 1.049878 0.23463 -0.292763 1.046792 0.150714 -0.106394 1.066031 0.247188 -0.247815 1.066031 0.105767 -0.185804 1.074381 0.171662 -0.039938 1.031013 0.180732 -0.10114 1.039273 0.115282 -0.181359 1.031012 0.039311 -0.013851 0.95218 0.117221 -0.117848 0.95218 0.013225 -0.06778 0.957717 0.053637 -0.015379 0.868448 0.085462 -0.044402 0.870645 0.044402 -0.08609 0.868448 0.014752 --0.016265 0.868448 -0.087603 --0.086976 0.868448 -0.016892 --0.045916 0.870645 -0.045916 --0.118734 0.95218 -0.015365 --0.055151 0.957717 -0.069293 --0.014738 0.95218 -0.119361 --0.040824 1.031013 -0.182872 --0.182246 1.031012 -0.041451 --0.116795 1.039273 -0.102653 --0.248701 1.066031 -0.107907 --0.173175 1.074381 -0.187318 --0.10728 1.066031 -0.249328 --0.152228 1.046792 -0.294276 --0.293649 1.046792 -0.152855 --0.236143 1.049878 -0.222001 --0.311535 0.982044 -0.17074 --0.239956 0.979233 -0.254098 --0.170114 0.982044 -0.312162 --0.152127 0.904814 -0.294175 --0.293549 0.904814 -0.152754 --0.23428 0.898156 -0.220138 --0.250604 0.851656 -0.109809 --0.174219 0.843 -0.188361 --0.109182 0.851655 -0.251231 --0.048654 0.830893 -0.146407 --0.14578 0.830893 -0.049281 --0.09753 0.822103 -0.09753 -0.035669 0.830893 -0.035669 -0.002237 0.90201 0.098583 --0.018205 0.869222 0.119024 --0.005686 0.834277 0.106506 -0.033935 0.813526 0.066884 -0.08212 0.816679 0.018699 -0.116322 0.842261 -0.015503 -0.120538 0.878301 -0.019718 -0.092795 0.907936 0.008025 -0.046074 0.917299 0.054746 --0.097956 0.90201 -0.00161 --0.118398 0.869222 0.018832 --0.105879 0.834277 0.006313 --0.066257 0.813526 -0.033308 --0.018072 0.816679 -0.081493 -0.01613 0.842261 -0.115695 -0.020345 0.878301 -0.119911 --0.007398 0.907936 -0.092168 --0.054119 0.9173 -0.045447 --0.080702 0.873523 0.06656 --0.04464 0.908682 0.058782 --0.053136 0.836051 0.067278 --0.01772 0.8138 0.01772 -0.033949 0.817181 -0.033949 -0.077695 0.844612 -0.063553 -0.068073 0.883258 -0.082215 -0.052466 0.915036 -0.038324 --0.011775 0.925077 -0.002367 -0.114306 0.876622 -0.009268 -0.111079 0.847823 -0.012495 -0.015948 0.847647 -0.10833 -0.008109 0.879367 -0.115465 --0.009501 0.87666 0.107036 --0.010508 0.847842 0.105341 --0.101677 0.851443 0.013485 --0.107333 0.879077 0.007589 --0.018744 0.910081 -0.068881 --0.064676 0.910081 -0.02295 -0.061271 0.905548 0.011134 -0.015339 0.905548 0.057065 -0.0647 0.861589 0.060494 -0.051839 0.82137 0.001702 -0.005907 0.82137 0.047633 --0.04666 0.814148 -0.004639 --0.000729 0.814148 -0.050571 --0.057985 0.863719 -0.062191 --0.367974 0.818012 0.177986 --0.442118 0.818012 -0.007763 --0.166882 0.818012 0.365326 -0.023567 0.818012 0.426394 --0.215932 0.818432 0.117296 --0.0654 0.818012 0.055077 --0.116896 0.818432 0.209437 -0.073553 0.818432 0.270505 -0.123539 0.818012 0.114616 --0.138034 0.818012 -0.129142 --0.290076 0.818432 -0.068453 --0.253004 0.835903 0.024422 --0.021671 0.835903 0.239971 -numsurf 162 -SURF 0x10 -mat 0 -refs 4 -1 0.0 1.0 -4 0.0 0.0 -5 1.0 0.0 -2 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -1 0.0 1.0 -2 0.0 0.0 -7 1.0 0.0 -6 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -6 0.0 1.0 -7 0.0 0.0 -8 1.0 0.0 -9 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -13 0.0 1.0 -12 0.0 0.0 -11 1.0 0.0 -10 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -18 0.0 1.0 -17 0.0 0.0 -12 1.0 0.0 -13 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -18 0.0 1.0 -15 0.0 0.0 -14 1.0 0.0 -17 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -0 0.0 1.0 -16 0.0 0.0 -19 1.0 0.0 -3 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -35 0.0 1.0 -23 0.0 0.0 -20 1.0 0.0 -32 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -21 0.0 1.0 -24 0.0 0.0 -25 1.0 0.0 -22 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -21 0.0 1.0 -22 0.0 0.0 -27 1.0 0.0 -26 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -34 0.0 1.0 -33 0.0 0.0 -28 1.0 0.0 -29 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -34 0.0 1.0 -31 0.0 0.0 -30 1.0 0.0 -33 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -26 0.0 1.0 -27 0.0 0.0 -29 1.0 0.0 -28 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -4 0.0 1.0 -36 0.0 0.0 -37 1.0 0.0 -5 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -36 0.0 1.0 -0 0.0 0.0 -3 1.0 0.0 -37 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -15 0.0 1.0 -39 0.0 0.0 -38 1.0 0.0 -14 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -39 0.0 1.0 -19 0.0 0.0 -16 1.0 0.0 -38 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -24 0.0 1.0 -40 0.0 0.0 -41 1.0 0.0 -25 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -40 0.0 1.0 -20 0.0 0.0 -23 1.0 0.0 -41 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -31 0.0 1.0 -43 0.0 0.0 -42 1.0 0.0 -30 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -43 0.0 1.0 -35 0.0 0.0 -32 1.0 0.0 -42 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -44 0.0 1.0 -45 0.0 0.0 -47 1.0 0.0 -99 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -45 0.0 1.0 -48 0.0 0.0 -49 1.0 0.0 -47 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -48 0.0 1.0 -51 0.0 0.0 -53 1.0 0.0 -49 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -51 0.0 1.0 -54 0.0 0.0 -55 1.0 0.0 -53 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -54 0.0 1.0 -57 0.0 0.0 -59 1.0 0.0 -55 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -57 0.0 1.0 -60 0.0 0.0 -61 1.0 0.0 -59 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -60 0.0 1.0 -63 0.0 0.0 -65 1.0 0.0 -61 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -63 0.0 1.0 -66 0.0 0.0 -67 1.0 0.0 -65 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -66 0.0 1.0 -69 0.0 0.0 -71 1.0 0.0 -67 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -75 0.0 1.0 -77 0.0 0.0 -72 1.0 0.0 -73 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -79 0.0 1.0 -78 0.0 0.0 -77 1.0 0.0 -75 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -81 0.0 1.0 -83 0.0 0.0 -78 1.0 0.0 -79 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -85 0.0 1.0 -84 0.0 0.0 -83 1.0 0.0 -81 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -87 0.0 1.0 -89 0.0 0.0 -84 1.0 0.0 -85 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -91 0.0 1.0 -90 0.0 0.0 -89 1.0 0.0 -87 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -93 0.0 1.0 -95 0.0 0.0 -90 1.0 0.0 -91 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -97 0.0 1.0 -96 0.0 0.0 -95 1.0 0.0 -93 1.0 1.0 -SURF 0x10 -mat 0 -refs 4 -44 0.0 1.0 -99 0.0 0.0 -96 1.0 0.0 -97 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -137 0.0 1.0 -138 0.0 0.0 -139 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -127 0.0 1.0 -139 0.0 0.0 -128 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -139 0.0 1.0 -131 0.0 0.0 -132 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -139 0.0 1.0 -141 0.0 0.0 -140 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -143 0.0 1.0 -142 0.0 0.0 -144 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -129 0.0 1.0 -144 0.0 0.0 -130 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -144 0.0 1.0 -133 0.0 0.0 -134 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -144 0.0 1.0 -136 0.0 0.0 -135 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -156 0.0 1.0 -150 0.0 0.0 -154 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -155 0.0 1.0 -156 0.0 0.0 -154 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -156 0.0 1.0 -149 0.0 0.0 -150 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -149 0.0 1.0 -156 0.0 0.0 -145 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -156 0.0 1.0 -155 0.0 0.0 -146 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -152 0.0 1.0 -157 0.0 0.0 -148 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -157 0.0 1.0 -151 0.0 0.0 -147 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -157 0.0 1.0 -153 0.0 0.0 -150 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -151 0.0 1.0 -157 0.0 0.0 -150 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -157 0.0 1.0 -152 0.0 0.0 -153 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -150 0.0 1.0 -153 0.0 0.0 -154 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -142 0.0 1.0 -133 0.0 0.0 -144 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -143 0.0 1.0 -144 0.0 0.0 -129 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -144 0.0 1.0 -134 0.0 0.0 -136 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -130 0.0 1.0 -144 0.0 0.0 -135 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -138 0.0 1.0 -131 0.0 0.0 -139 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -128 0.0 1.0 -139 0.0 0.0 -140 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -139 0.0 1.0 -132 0.0 0.0 -141 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -137 0.0 1.0 -139 0.0 0.0 -127 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -86 0.0 1.0 -85 0.0 0.0 -82 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -82 0.0 1.0 -85 0.0 0.0 -81 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -86 0.0 1.0 -82 0.0 0.0 -84 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -82 0.0 1.0 -83 0.0 0.0 -84 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -82 0.0 1.0 -80 0.0 0.0 -83 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -80 0.0 1.0 -78 0.0 0.0 -83 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -82 0.0 1.0 -81 0.0 0.0 -80 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -80 0.0 1.0 -81 0.0 0.0 -79 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -62 0.0 1.0 -61 0.0 0.0 -64 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -64 0.0 1.0 -61 0.0 0.0 -65 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -62 0.0 1.0 -64 0.0 0.0 -60 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -64 0.0 1.0 -63 0.0 0.0 -60 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -58 0.0 1.0 -62 0.0 0.0 -57 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -62 0.0 1.0 -60 0.0 0.0 -57 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -58 0.0 1.0 -59 0.0 0.0 -62 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -62 0.0 1.0 -59 0.0 0.0 -61 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -68 0.0 1.0 -65 0.0 0.0 -67 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -68 0.0 1.0 -64 0.0 0.0 -65 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -68 0.0 1.0 -66 0.0 0.0 -63 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -68 0.0 1.0 -63 0.0 0.0 -64 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -70 0.0 1.0 -69 0.0 0.0 -66 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -70 0.0 1.0 -66 0.0 0.0 -68 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -70 0.0 1.0 -67 0.0 0.0 -71 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -70 0.0 1.0 -68 0.0 0.0 -67 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -74 0.0 1.0 -75 0.0 0.0 -73 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -74 0.0 1.0 -76 0.0 0.0 -75 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -74 0.0 1.0 -72 0.0 0.0 -77 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -74 0.0 1.0 -77 0.0 0.0 -76 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -76 0.0 1.0 -79 0.0 0.0 -75 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -76 0.0 1.0 -80 0.0 0.0 -79 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -76 0.0 1.0 -77 0.0 0.0 -78 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -76 0.0 1.0 -78 0.0 0.0 -80 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -46 0.0 1.0 -50 0.0 0.0 -48 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -46 0.0 1.0 -48 0.0 0.0 -45 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -46 0.0 1.0 -49 0.0 0.0 -50 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -46 0.0 1.0 -47 0.0 0.0 -49 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -98 0.0 1.0 -94 0.0 0.0 -95 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -98 0.0 1.0 -95 0.0 0.0 -96 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -98 0.0 1.0 -93 0.0 0.0 -94 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -98 0.0 1.0 -97 0.0 0.0 -93 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -106 0.0 1.0 -124 0.0 0.0 -125 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -106 0.0 1.0 -125 0.0 0.0 -107 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -105 0.0 1.0 -123 0.0 0.0 -106 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -123 0.0 1.0 -124 0.0 0.0 -106 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -122 0.0 1.0 -113 0.0 0.0 -114 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -122 0.0 1.0 -114 0.0 0.0 -123 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -120 0.0 1.0 -111 0.0 0.0 -121 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -111 0.0 1.0 -112 0.0 0.0 -121 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -101 0.0 1.0 -118 0.0 0.0 -120 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -101 0.0 1.0 -120 0.0 0.0 -102 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -100 0.0 1.0 -119 0.0 0.0 -101 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -119 0.0 1.0 -118 0.0 0.0 -101 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -119 0.0 1.0 -100 0.0 0.0 -108 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -119 0.0 1.0 -108 0.0 0.0 -126 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -117 0.0 1.0 -109 0.0 0.0 -119 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -117 0.0 1.0 -119 0.0 0.0 -126 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -125 0.0 1.0 -116 0.0 0.0 -117 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -125 0.0 1.0 -117 0.0 0.0 -126 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -125 0.0 1.0 -126 0.0 0.0 -108 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -125 0.0 1.0 -108 0.0 0.0 -107 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -119 0.0 1.0 -109 0.0 0.0 -110 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -119 0.0 1.0 -110 0.0 0.0 -118 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -110 0.0 1.0 -111 0.0 0.0 -120 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -110 0.0 1.0 -120 0.0 0.0 -118 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -115 0.0 1.0 -116 0.0 0.0 -125 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -115 0.0 1.0 -125 0.0 0.0 -124 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -123 0.0 1.0 -114 0.0 0.0 -115 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -123 0.0 1.0 -115 0.0 0.0 -124 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -122 0.0 1.0 -123 0.0 0.0 -105 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -122 0.0 1.0 -105 0.0 0.0 -104 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -102 0.0 1.0 -120 0.0 0.0 -121 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -102 0.0 1.0 -121 0.0 0.0 -103 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -56 0.0 1.0 -58 0.0 0.0 -57 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -56 0.0 1.0 -57 0.0 0.0 -54 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -56 0.0 1.0 -59 0.0 0.0 -58 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -56 0.0 1.0 -55 0.0 0.0 -59 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -50 0.0 1.0 -53 0.0 0.0 -52 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -50 0.0 1.0 -49 0.0 0.0 -53 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -54 0.0 1.0 -51 0.0 0.0 -52 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -54 0.0 1.0 -52 0.0 0.0 -56 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -50 0.0 1.0 -52 0.0 0.0 -51 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -50 0.0 1.0 -51 0.0 0.0 -48 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -55 0.0 1.0 -52 0.0 0.0 -53 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -55 0.0 1.0 -56 0.0 0.0 -52 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -88 0.0 1.0 -85 0.0 0.0 -86 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -88 0.0 1.0 -87 0.0 0.0 -85 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -88 0.0 1.0 -86 0.0 0.0 -84 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -88 0.0 1.0 -84 0.0 0.0 -89 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -94 0.0 1.0 -91 0.0 0.0 -92 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -94 0.0 1.0 -93 0.0 0.0 -91 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -92 0.0 1.0 -88 0.0 0.0 -89 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -92 0.0 1.0 -89 0.0 0.0 -90 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -94 0.0 1.0 -92 0.0 0.0 -90 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -94 0.0 1.0 -90 0.0 0.0 -95 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -92 0.0 1.0 -87 0.0 0.0 -88 1.0 0.0 -SURF 0x10 -mat 0 -refs 3 -92 0.0 1.0 -91 0.0 0.0 -87 1.0 0.0 -kids 0 -OBJECT poly -name "GiftBox_1" -data 7 -GiftBox -texture "gift-box.png" -texrep 1 1 -crease 70.000000 -numvert 28 -0.4 0.1 -0.4 -0.4 0.1 0.4 --0.4 0.1 0.4 --0.4 0.1 -0.4 --0.4 0.78 -0.4 --0.4 0.78 0.4 -0.4 0.78 0.4 -0.4 0.78 -0.4 --0.421548 0.115179 -0.421549 --0.421548 0.115179 0.421548 -0.421548 0.115179 -0.421548 -0.421548 0.115179 0.421548 -0.44 0.79 -0.44 -0.44 0.79 0.44 --0.44 0.79 0.44 --0.44 0.79 -0.44 --0.44 0.65 0.44 -0.44 0.65 0.44 -0.44 0.65 -0.44 --0.44 0.65 -0.44 --0.352 0.75 0.352 -0.352 0.75 0.352 -0.352 0.75 -0.352 --0.352 0.75 -0.352 --0.4158 0.8 0.4158 --0.4158 0.8 -0.4158 -0.4158 0.8 -0.4158 -0.4158 0.8 0.4158 -numsurf 22 -SURF 0x10 -mat 0 -refs 4 -0 0.994140625 0.01171875 -1 0.994140625 0.27734375 -2 0.86328125 0.27734375 -3 0.86328125 0.01171875 -SURF 0x10 -mat 0 -refs 4 -3 0.86328125 0.01171875 -2 0.86328125 0.27734375 -9 0.859375 0.28515625 -8 0.859375 0.00390625 -SURF 0x10 -mat 0 -refs 4 -8 0.85546875 0.99609375 -9 0.498046875 0.99609375 -5 0.498046875 0.5 -4 0.85546875 0.5 -SURF 0x10 -mat 0 -refs 4 -0 0.994140625 0.01171875 -3 0.86328125 0.01171875 -8 0.859375 0.00390625 -10 0.998046875 0.00390625 -SURF 0x10 -mat 0 -refs 4 -10 0.498046875 0.00390625 -8 0.85546875 0.00390625 -4 0.85546875 0.5 -7 0.498046875 0.5 -SURF 0x10 -mat 0 -refs 4 -1 0.994140625 0.27734375 -0 0.994140625 0.01171875 -10 0.998046875 0.00390625 -11 0.998046875 0.28515625 -SURF 0x10 -mat 0 -refs 4 -11 0.85546875 0.99609375 -10 0.498046875 0.99609375 -7 0.498046875 0.5 -6 0.85546875 0.5 -SURF 0x10 -mat 0 -refs 4 -2 0.86328125 0.27734375 -1 0.994140625 0.27734375 -11 0.998046875 0.28515625 -9 0.859375 0.28515625 -SURF 0x10 -mat 0 -refs 4 -9 0.498046875 0.00390625 -11 0.85546875 0.00390625 -6 0.85546875 0.5 -5 0.498046875 0.5 -SURF 0x10 -mat 0 -refs 4 -13 0.064453125 0.1328125 -14 0.064453125 0.87109375 -16 0.005859375 0.87109375 -17 0.005859375 0.1328125 -SURF 0x10 -mat 0 -refs 4 -12 0.435546875 0.1328125 -13 0.064453125 0.1328125 -17 0.064453125 0.015625 -18 0.435546875 0.015625 -SURF 0x10 -mat 0 -refs 4 -15 0.435546875 0.87109375 -12 0.435546875 0.1328125 -18 0.494140625 0.1328125 -19 0.494140625 0.87109375 -SURF 0x10 -mat 0 -refs 4 -14 0.064453125 0.87109375 -15 0.435546875 0.87109375 -19 0.435546875 0.98828125 -16 0.064453125 0.98828125 -SURF 0x10 -mat 0 -refs 4 -17 0.998046875 0.2890625 -16 0.859375 0.2890625 -20 0.873046875 0.31640625 -21 0.984375 0.31640625 -SURF 0x10 -mat 0 -refs 4 -18 0.998046875 0.56640625 -17 0.998046875 0.2890625 -21 0.984375 0.31640625 -22 0.984375 0.5390625 -SURF 0x10 -mat 0 -refs 4 -19 0.859375 0.56640625 -18 0.998046875 0.56640625 -22 0.984375 0.5390625 -23 0.873046875 0.5390625 -SURF 0x10 -mat 0 -refs 4 -16 0.859375 0.2890625 -19 0.859375 0.56640625 -23 0.873046875 0.5390625 -20 0.873046875 0.31640625 -SURF 0x10 -mat 0 -refs 4 -15 0.435546875 0.87109375 -14 0.064453125 0.87109375 -24 0.076171875 0.84765625 -25 0.423828125 0.84765625 -SURF 0x10 -mat 0 -refs 4 -12 0.435546875 0.1328125 -15 0.435546875 0.87109375 -25 0.423828125 0.84765625 -26 0.423828125 0.15625 -SURF 0x10 -mat 0 -refs 4 -13 0.064453125 0.1328125 -12 0.435546875 0.1328125 -26 0.423828125 0.15625 -27 0.076171875 0.15625 -SURF 0x10 -mat 0 -refs 4 -14 0.064453125 0.87109375 -13 0.064453125 0.1328125 -27 0.076171875 0.15625 -24 0.076171875 0.84765625 -SURF 0x10 -mat 0 -refs 4 -24 0.076171875 0.84765625 -27 0.076171875 0.15625 -26 0.423828125 0.15625 -25 0.423828125 0.84765625 -kids 0 diff --git a/data/items/nitrotank-big.ac b/data/items/nitrotank-big.ac deleted file mode 100644 index 796ed1143..000000000 --- a/data/items/nitrotank-big.ac +++ /dev/null @@ -1,1539 +0,0 @@ -AC3Db -MATERIAL "DefaultWhite" rgb 1 1 1 amb 1 1 1 emis 0 0 0 spec 0.5 0.5 0.5 shi 64 trans 0 -OBJECT world -kids 1 -OBJECT group -name "BigTank" -kids 3 -OBJECT poly -name "BigTank_0" -data 7 -BigTank -texture "tank-blue.png" -texrep 1 1 -crease 70.000000 -numvert 37 -0.32052 0.584843 -0.002047 -0.233918 0.334843 -0.104141 -0.272984 0.420252 -0.143593 -0.331027 0.449487 -0.074852 -0.331934 0.534625 -0.060677 -0.307336 0.57723 -0.078583 -0.293974 0.513664 -0.137034 -0.213598 0.523111 -0.186823 -0.181517 0.425603 -0.19208 -0.113113 0.544082 -0.19208 -0.154212 0.62597 -0.143593 -0.245605 0.597442 -0.137034 -0.282737 0.619836 -0.060677 -0.269649 0.642506 -0.015337 -0.208553 0.661619 -0.074852 -0.122614 0.6807 -0.034133 -0.060713 0.634843 -0.104141 -0.048834 0.655416 0.030588 -0.133588 0.661693 0.090341 -0.200153 0.676167 0.020416 -0.274195 0.634633 0.036222 -0.294247 0.599901 0.069874 -0.224338 0.634278 0.104194 -0.181999 0.577841 0.171586 -0.083036 0.596177 0.149068 -0.147315 0.484843 0.195859 -0.245196 0.468381 0.171586 -0.26979 0.555553 0.13728 -0.320424 0.55456 0.069874 -0.340477 0.519828 0.036222 -0.315242 0.476828 0.104194 -0.293608 0.384529 0.090341 -0.211594 0.373508 0.149068 -0.245796 0.314269 0.030589 -0.304582 0.365521 -0.034133 -0.339426 0.434939 0.020416 -0.345023 0.511955 -0.015337 -numsurf 63 -SURF 0x10 -mat 0 -refs 3 -4 0.0 0.0 -0 1.0 0.0 -36 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -5 0.0 0.0 -0 1.0 0.0 -4 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -12 0.0 0.0 -0 1.0 0.0 -5 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -13 0.0 0.0 -0 1.0 0.0 -12 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -20 0.0 0.0 -0 1.0 0.0 -13 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -21 0.0 0.0 -0 1.0 0.0 -20 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -28 0.0 0.0 -0 1.0 0.0 -21 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -29 0.0 0.0 -0 1.0 0.0 -28 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -36 0.0 0.0 -0 1.0 0.0 -29 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -30 0.0 0.0 -35 1.0 0.0 -29 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -35 0.0 0.0 -36 1.0 0.0 -29 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -31 0.0 0.0 -34 1.0 0.0 -35 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -31 0.0 0.0 -35 1.0 0.0 -30 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -32 0.0 0.0 -33 1.0 0.0 -31 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -33 0.0 0.0 -34 1.0 0.0 -31 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -25 0.0 0.0 -32 1.0 0.0 -26 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -32 0.0 0.0 -31 1.0 0.0 -26 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -26 0.0 0.0 -31 1.0 0.0 -30 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -26 0.0 0.0 -30 1.0 0.0 -27 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -27 0.0 0.0 -30 1.0 0.0 -28 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -30 0.0 0.0 -29 1.0 0.0 -28 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -22 0.0 0.0 -27 1.0 0.0 -21 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -27 0.0 0.0 -28 1.0 0.0 -21 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -23 0.0 0.0 -26 1.0 0.0 -27 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -23 0.0 0.0 -27 1.0 0.0 -22 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -24 0.0 0.0 -25 1.0 0.0 -23 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -25 0.0 0.0 -26 1.0 0.0 -23 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -17 0.0 0.0 -24 1.0 0.0 -18 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -24 0.0 0.0 -23 1.0 0.0 -18 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -18 0.0 0.0 -23 1.0 0.0 -22 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -18 0.0 0.0 -22 1.0 0.0 -19 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -19 0.0 0.0 -22 1.0 0.0 -20 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -22 0.0 0.0 -21 1.0 0.0 -20 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -14 0.0 0.0 -19 1.0 0.0 -13 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -19 0.0 0.0 -20 1.0 0.0 -13 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -15 0.0 0.0 -18 1.0 0.0 -19 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -15 0.0 0.0 -19 1.0 0.0 -14 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -16 0.0 0.0 -17 1.0 0.0 -15 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -17 0.0 0.0 -18 1.0 0.0 -15 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -9 0.0 0.0 -16 1.0 0.0 -10 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -16 0.0 0.0 -15 1.0 0.0 -10 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -10 0.0 0.0 -15 1.0 0.0 -14 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -10 0.0 0.0 -14 1.0 0.0 -11 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -11 0.0 0.0 -14 1.0 0.0 -12 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -14 0.0 0.0 -13 1.0 0.0 -12 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -6 0.0 0.0 -11 1.0 0.0 -5 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -11 0.0 0.0 -12 1.0 0.0 -5 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -7 0.0 0.0 -10 1.0 0.0 -11 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -7 0.0 0.0 -11 1.0 0.0 -6 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -8 0.0 0.0 -9 1.0 0.0 -7 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -9 0.0 0.0 -10 1.0 0.0 -7 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -1 0.0 0.0 -8 1.0 0.0 -2 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -8 0.0 0.0 -7 1.0 0.0 -2 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -2 0.0 0.0 -7 1.0 0.0 -6 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -2 0.0 0.0 -6 1.0 0.0 -3 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -3 0.0 0.0 -6 1.0 0.0 -4 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -6 0.0 0.0 -5 1.0 0.0 -4 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -35 0.0 0.0 -3 1.0 0.0 -36 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -3 0.0 0.0 -4 1.0 0.0 -36 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -34 0.0 0.0 -2 1.0 0.0 -3 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -34 0.0 0.0 -3 1.0 0.0 -35 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -33 0.0 0.0 -1 1.0 0.0 -34 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -1 0.0 0.0 -2 1.0 0.0 -34 1.0 1.0 -kids 0 -OBJECT poly -name "BigTank_1" -data 7 -BigTank -texture "nitro-tank.png" -texrep 1 1 -crease 70.000000 -numvert 67 -0.390069 0.584381 -0.035355 -0.397296 0.571863 -0.004358 -0.39287 0.57953 0.028679 -0.378861 0.603793 0.048296 -0.361825 0.6333 0.045315 -0.349733 0.654244 0.021131 -0.348243 0.656826 -0.012941 -0.358051 0.639837 -0.040958 -0.37457 0.611226 -0.04981 -0.412027 0.586348 -0.02138 -0.413518 0.583766 0.012692 -0.403709 0.600755 0.040709 -0.387191 0.629366 0.049561 -0.371692 0.65621 0.035107 -0.364465 0.668728 0.004109 -0.368891 0.661062 -0.028928 -0.382899 0.636799 -0.048545 -0.399935 0.607292 -0.045564 -0.31646 0.561876 -0.01974 -0.320042 0.55567 0.000736 -0.314271 0.565666 0.019105 -0.303492 0.584336 0.021534 -0.295822 0.597621 0.006194 -0.297037 0.595517 -0.015363 -0.306221 0.579609 -0.026905 -0.382186 0.608035 -0.02472 -0.389054 0.596139 -0.007929 -0.386772 0.600091 0.01328 -0.377059 0.616915 0.022935 -0.367228 0.633943 0.013767 -0.364683 0.638351 -0.007321 -0.371339 0.626821 -0.02445 -0.313804 0.650037 -0.020805 -0.298877 0.641419 -0.018776 -0.290944 0.636838 -0.004035 -0.295978 0.639745 0.012318 -0.31019 0.64795 0.017968 -0.322876 0.655275 0.008661 -0.324484 0.656203 -0.008594 -0.350179 0.601756 -0.016205 -0.335993 0.593565 -0.021937 -0.323266 0.586218 -0.012703 -0.321583 0.585246 0.004543 -0.332211 0.591382 0.016815 -0.347147 0.600005 0.014872 -0.355143 0.604622 0.000177 -0.313165 0.638121 -0.001895 -0.217072 0.404021 0.176864 -0.146675 0.525951 0.20169 -0.08477 0.633174 0.130207 -0.084082 0.634366 -0.138115 -0.145987 0.527143 -0.209597 -0.216383 0.405213 -0.184772 --0.16415 0.184315 -0.182919 --0.234546 0.306245 -0.207745 --0.296451 0.413469 -0.136262 --0.296451 0.413469 0.132423 --0.234546 0.306245 0.203905 --0.16415 0.184316 0.17908 -0.113144 0.58403 0.174791 --0.268087 0.36434 0.177123 -0.182776 0.463423 0.199347 --0.198454 0.243733 0.201679 -0.182052 0.464678 -0.207454 --0.198454 0.243733 -0.205504 -0.112419 0.585285 -0.182898 --0.268087 0.36434 -0.180948 -numsurf 80 -SURF 0x10 -mat 0 -refs 3 -9 0.885816395283 0.017615377903 -17 0.940894424915 0.017615377903 -16 0.983086585999 0.0884221643209 -SURF 0x10 -mat 0 -refs 3 -9 0.885816395283 0.017615377903 -16 0.983086585999 0.0884221643209 -15 0.992650866508 0.196904525161 -SURF 0x10 -mat 0 -refs 3 -10 0.843624353409 0.0884223431349 -9 0.885816395283 0.017615377903 -15 0.992650866508 0.196904525161 -SURF 0x10 -mat 0 -refs 3 -10 0.843624353409 0.0884223431349 -15 0.992650866508 0.196904525161 -14 0.965111851692 0.29230222106 -SURF 0x10 -mat 0 -refs 3 -11 0.834060192108 0.196904614568 -10 0.843624353409 0.0884223431349 -14 0.965111851692 0.29230222106 -SURF 0x10 -mat 0 -refs 3 -11 0.834060192108 0.196904614568 -14 0.965111851692 0.29230222106 -13 0.913355529308 0.32997789979 -SURF 0x10 -mat 0 -refs 3 -12 0.861599266529 0.292302280664 -11 0.834060192108 0.196904614568 -13 0.913355529308 0.32997789979 -SURF 0x10 -mat 0 -refs 3 -8 0.99609375 0.90625 -17 0.921875 0.875 -0 0.99609375 0.84375 -SURF 0x10 -mat 0 -refs 3 -17 0.921875 0.875 -9 0.921875 0.8125 -0 0.99609375 0.84375 -SURF 0x10 -mat 0 -refs 3 -7 0.99609375 0.9609375 -16 0.921875 0.921875 -8 0.99609375 0.90625 -SURF 0x10 -mat 0 -refs 3 -16 0.921875 0.921875 -17 0.921875 0.875 -8 0.99609375 0.90625 -SURF 0x10 -mat 0 -refs 3 -6 0.99609375 0.453125 -15 0.921875 0.421875 -7 0.99609375 0.390625 -SURF 0x10 -mat 0 -refs 3 -15 0.921875 0.421875 -16 0.921875 0.3515625 -7 0.99609375 0.390625 -SURF 0x10 -mat 0 -refs 3 -5 0.99609375 0.515625 -14 0.921875 0.484375 -6 0.99609375 0.453125 -SURF 0x10 -mat 0 -refs 3 -14 0.921875 0.484375 -15 0.921875 0.421875 -6 0.99609375 0.453125 -SURF 0x10 -mat 0 -refs 3 -4 0.99609375 0.5859375 -13 0.921875 0.5546875 -5 0.99609375 0.515625 -SURF 0x10 -mat 0 -refs 3 -13 0.921875 0.5546875 -14 0.921875 0.484375 -5 0.99609375 0.515625 -SURF 0x10 -mat 0 -refs 3 -3 0.99609375 0.6484375 -12 0.921875 0.609375 -4 0.99609375 0.5859375 -SURF 0x10 -mat 0 -refs 3 -12 0.921875 0.609375 -13 0.921875 0.5546875 -4 0.99609375 0.5859375 -SURF 0x10 -mat 0 -refs 3 -2 0.99609375 0.71875 -11 0.921875 0.6796875 -3 0.99609375 0.6484375 -SURF 0x10 -mat 0 -refs 3 -11 0.921875 0.6796875 -12 0.921875 0.609375 -3 0.99609375 0.6484375 -SURF 0x10 -mat 0 -refs 3 -1 0.99609375 0.7734375 -10 0.921875 0.7421875 -2 0.99609375 0.71875 -SURF 0x10 -mat 0 -refs 3 -10 0.921875 0.7421875 -11 0.921875 0.6796875 -2 0.99609375 0.71875 -SURF 0x10 -mat 0 -refs 3 -0 0.99609375 0.84375 -9 0.921875 0.8125 -1 0.99609375 0.7734375 -SURF 0x10 -mat 0 -refs 3 -9 0.921875 0.8125 -10 0.921875 0.7421875 -1 0.99609375 0.7734375 -SURF 0x10 -mat 0 -refs 3 -24 0.802644848824 0.00980581343174 -31 0.820613920689 0.319767445326 -25 0.774310052395 0.319767445326 -SURF 0x10 -mat 0 -refs 3 -24 0.802644848824 0.00980581343174 -25 0.774310052395 0.319767445326 -18 0.756210446358 0.00980581343174 -SURF 0x10 -mat 0 -refs 3 -23 0.523637294769 0.00980581343174 -30 0.541547477245 0.319767445326 -31 0.495466113091 0.319767445326 -SURF 0x10 -mat 0 -refs 3 -23 0.523637294769 0.00980581343174 -31 0.495466113091 0.319767445326 -24 0.477497041225 0.00980581343174 -SURF 0x10 -mat 0 -refs 3 -22 0.56971514225 0.00980605185032 -29 0.587679922581 0.319767445326 -30 0.541547477245 0.319767445326 -SURF 0x10 -mat 0 -refs 3 -22 0.56971514225 0.00980605185032 -30 0.541547477245 0.319767445326 -23 0.523637294769 0.00980581343174 -SURF 0x10 -mat 0 -refs 3 -21 0.616006195545 0.00980605185032 -28 0.634100437164 0.319767445326 -29 0.587679922581 0.319767445326 -SURF 0x10 -mat 0 -refs 3 -21 0.616006195545 0.00980605185032 -29 0.587679922581 0.319767445326 -22 0.56971514225 0.00980605185032 -SURF 0x10 -mat 0 -refs 3 -20 0.6626329422 0.00980605185032 -27 0.680835723877 0.319767445326 -28 0.634100437164 0.319767445326 -SURF 0x10 -mat 0 -refs 3 -20 0.6626329422 0.00980605185032 -28 0.634100437164 0.319767445326 -21 0.616006195545 0.00980605185032 -SURF 0x10 -mat 0 -refs 3 -19 0.709465503693 0.00980605185032 -26 0.727670907974 0.319767445326 -27 0.680835723877 0.319767445326 -SURF 0x10 -mat 0 -refs 3 -19 0.709465503693 0.00980605185032 -27 0.680835723877 0.319767445326 -20 0.6626329422 0.00980605185032 -SURF 0x10 -mat 0 -refs 3 -18 0.756210446358 0.00980581343174 -25 0.774310052395 0.319767445326 -26 0.727670907974 0.319767445326 -SURF 0x10 -mat 0 -refs 3 -18 0.756210446358 0.00980581343174 -26 0.727670907974 0.319767445326 -19 0.709465503693 0.00980605185032 -SURF 0x10 -mat 0 -refs 3 -46 0.078805424273 0.163940280676 -32 0.00363153964281 0.21570892632 -33 0.0116978883743 0.0786713585258 -SURF 0x10 -mat 0 -refs 3 -46 0.078805424273 0.163940280676 -33 0.0116978883743 0.0786713585258 -34 0.0702976882458 0.00584210455418 -SURF 0x10 -mat 0 -refs 3 -46 0.078805424273 0.163940280676 -34 0.0702976882458 0.00584210455418 -35 0.135303914547 0.0520648509264 -SURF 0x10 -mat 0 -refs 3 -46 0.078805424273 0.163940280676 -35 0.135303914547 0.0520648509264 -36 0.157765716314 0.182531937957 -SURF 0x10 -mat 0 -refs 3 -46 0.078805424273 0.163940280676 -36 0.157765716314 0.182531937957 -37 0.120768755674 0.298998832703 -SURF 0x10 -mat 0 -refs 3 -46 0.078805424273 0.163940280676 -37 0.120768755674 0.298998832703 -38 0.0521726161242 0.313764333725 -SURF 0x10 -mat 0 -refs 3 -46 0.078805424273 0.163940280676 -38 0.0521726161242 0.313764333725 -32 0.00363153964281 0.21570892632 -SURF 0x10 -mat 0 -refs 3 -38 0.383910685778 0.319846689701 -45 0.365535438061 0.00860934518278 -39 0.40285000205 0.00860934518278 -SURF 0x10 -mat 0 -refs 3 -38 0.383910685778 0.319846689701 -39 0.40285000205 0.00860934518278 -32 0.420989334583 0.319846689701 -SURF 0x10 -mat 0 -refs 3 -37 0.347033381462 0.319846689701 -44 0.328119903803 0.00860934518278 -45 0.365535438061 0.00860934518278 -SURF 0x10 -mat 0 -refs 3 -37 0.347033381462 0.319846689701 -45 0.365535438061 0.00860934518278 -38 0.383910685778 0.319846689701 -SURF 0x10 -mat 0 -refs 3 -36 0.310159862041 0.319846689701 -43 0.290811926126 0.00860934518278 -44 0.328119903803 0.00860934518278 -SURF 0x10 -mat 0 -refs 3 -36 0.310159862041 0.319846689701 -44 0.328119903803 0.00860934518278 -37 0.347033381462 0.319846689701 -SURF 0x10 -mat 0 -refs 3 -35 0.273089557886 0.319846689701 -42 0.253735005856 0.00860934518278 -43 0.290811926126 0.00860934518278 -SURF 0x10 -mat 0 -refs 3 -35 0.273089557886 0.319846689701 -43 0.290811926126 0.00860934518278 -36 0.310159862041 0.319846689701 -SURF 0x10 -mat 0 -refs 3 -34 0.235764443874 0.319846689701 -41 0.216836720705 0.00860934518278 -42 0.253735005856 0.00860934518278 -SURF 0x10 -mat 0 -refs 3 -34 0.235764443874 0.319846689701 -42 0.253735005856 0.00860934518278 -35 0.273089557886 0.319846689701 -SURF 0x10 -mat 0 -refs 3 -33 0.198320925236 0.319846689701 -40 0.17993491888 0.00860934518278 -41 0.216836720705 0.00860934518278 -SURF 0x10 -mat 0 -refs 3 -33 0.198320925236 0.319846689701 -41 0.216836720705 0.00860934518278 -34 0.235764443874 0.319846689701 -SURF 0x10 -mat 0 -refs 3 -32 0.420989334583 0.319846689701 -39 0.40285000205 0.00860934518278 -40 0.439934879541 0.00860934518278 -SURF 0x10 -mat 0 -refs 3 -32 0.420989334583 0.319846689701 -40 0.439934879541 0.00860934518278 -33 0.458320945501 0.319846689701 -SURF 0x10 -mat 0 -refs 4 -56 0.00390625 0.9921875 -60 0.00390625 0.8359375 -59 0.87890625 0.8359375 -49 0.87890625 0.9921875 -SURF 0x10 -mat 0 -refs 4 -60 0.00390625 0.8359375 -57 0.00390625 0.6796875 -48 0.87890625 0.6796875 -59 0.87890625 0.8359375 -SURF 0x10 -mat 0 -refs 4 -57 0.00390625 0.6796875 -62 0.00390625 0.51171875 -61 0.87890625 0.51171875 -48 0.87890625 0.6796875 -SURF 0x10 -mat 0 -refs 4 -62 0.00390625 0.51171875 -58 0.00390625 0.34375 -47 0.87890625 0.34375 -61 0.87890625 0.51171875 -SURF 0x10 -mat 0 -refs 4 -51 0.00390625 0.6796875 -63 0.00390625 0.51171875 -64 0.87890625 0.51171875 -54 0.87890625 0.6796875 -SURF 0x10 -mat 0 -refs 4 -63 0.00390625 0.51171875 -52 0.00390625 0.34375 -53 0.87890625 0.34375 -64 0.87890625 0.51171875 -SURF 0x10 -mat 0 -refs 4 -50 0.00390625 0.9921875 -65 0.00390625 0.8359375 -66 0.87890625 0.8359375 -55 0.87890625 0.9921875 -SURF 0x10 -mat 0 -refs 4 -65 0.00390625 0.8359375 -51 0.00390625 0.6796875 -54 0.87890625 0.6796875 -66 0.87890625 0.8359375 -SURF 0x10 -mat 0 -refs 3 -4 0.861599266529 0.292302280664 -5 0.913355529308 0.32997789979 -3 0.834060192108 0.196904614568 -SURF 0x10 -mat 0 -refs 3 -3 0.834060192108 0.196904614568 -5 0.913355529308 0.32997789979 -6 0.965111851692 0.29230222106 -SURF 0x10 -mat 0 -refs 3 -3 0.834060192108 0.196904614568 -6 0.965111851692 0.29230222106 -2 0.843624353409 0.0884223431349 -SURF 0x10 -mat 0 -refs 3 -2 0.843624353409 0.0884223431349 -6 0.965111851692 0.29230222106 -7 0.992650866508 0.196904525161 -SURF 0x10 -mat 0 -refs 3 -2 0.843624353409 0.0884223431349 -7 0.992650866508 0.196904525161 -1 0.885816395283 0.017615377903 -SURF 0x10 -mat 0 -refs 3 -1 0.885816395283 0.017615377903 -7 0.992650866508 0.196904525161 -8 0.983086585999 0.0884221643209 -SURF 0x10 -mat 0 -refs 3 -1 0.885816395283 0.017615377903 -8 0.983086585999 0.0884221643209 -0 0.940894424915 0.017615377903 -SURF 0x00 -mat 0 -refs 3 -26 0.13671875 0.1640625 -25 0.1171875 0.2421875 -31 0.07421875 0.265625 -SURF 0x00 -mat 0 -refs 3 -26 0.13671875 0.1640625 -31 0.07421875 0.265625 -30 0.0390625 0.2109375 -SURF 0x00 -mat 0 -refs 3 -27 0.1171875 0.0859375 -26 0.13671875 0.1640625 -30 0.0390625 0.2109375 -SURF 0x00 -mat 0 -refs 3 -27 0.1171875 0.0859375 -30 0.0390625 0.2109375 -29 0.0390625 0.1171875 -SURF 0x00 -mat 0 -refs 3 -28 0.07421875 0.0625 -27 0.1171875 0.0859375 -29 0.0390625 0.1171875 -kids 0 -OBJECT poly -name "BigTank_2" -data 7 -BigTank -texture "tank-green.png" -texrep 1 1 -crease 70.000000 -numvert 46 --0.112492 0.134843 0.097953 --0.174751 0.089605 0.032008 --0.260332 0.108066 0.068664 --0.321787 0.127799 0.013212 --0.334875 0.150469 0.058552 --0.297385 0.172243 0.130846 --0.20635 0.144335 0.141468 --0.164893 0.225603 0.185892 --0.233297 0.344082 0.185892 --0.265736 0.247195 0.184697 --0.345754 0.256021 0.130846 --0.359474 0.193075 0.076458 --0.384072 0.235681 0.058552 --0.382807 0.320198 0.068664 --0.325122 0.350054 0.141468 --0.285697 0.434843 0.097953 --0.297576 0.455416 -0.036776 --0.35672 0.404784 0.032007 --0.391206 0.334746 -0.026604 --0.397161 0.258351 0.013212 --0.372658 0.185463 -7.9e-05 --0.392615 0.250477 -0.038347 --0.367021 0.292857 -0.110382 --0.345746 0.385776 -0.092467 --0.263374 0.396177 -0.155256 --0.199095 0.284842 -0.202047 --0.297334 0.301925 -0.173711 --0.321569 0.214132 -0.143468 --0.372562 0.215745 -0.072 --0.346385 0.170405 -0.072 --0.276117 0.135407 -0.110382 --0.234137 0.192464 -0.173711 --0.134816 0.173508 -0.155256 --0.100614 0.114269 -0.036776 --0.185726 0.108613 -0.092467 --0.251933 0.093518 -0.026604 --0.326332 0.135672 -0.038347 -0.233918 0.334843 -0.104141 -0.181517 0.425603 -0.19208 -0.113113 0.544082 -0.19208 -0.060713 0.634843 -0.104141 -0.048834 0.655416 0.030588 -0.083036 0.596177 0.149068 -0.147315 0.484843 0.195859 -0.211594 0.373508 0.149068 -0.245796 0.314269 0.030589 -numsurf 81 -SURF 0x10 -mat 0 -refs 3 -20 0.0 0.0 -3 1.0 0.0 -4 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -20 0.0 0.0 -4 1.0 0.0 -11 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -20 0.0 0.0 -11 1.0 0.0 -12 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -20 0.0 0.0 -12 1.0 0.0 -19 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -20 0.0 0.0 -19 1.0 0.0 -21 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -20 0.0 0.0 -21 1.0 0.0 -28 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -20 0.0 0.0 -28 1.0 0.0 -29 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -20 0.0 0.0 -29 1.0 0.0 -36 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -20 0.0 0.0 -36 1.0 0.0 -3 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -3 0.0 0.0 -36 1.0 0.0 -35 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -3 0.0 0.0 -35 1.0 0.0 -2 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -2 0.0 0.0 -35 1.0 0.0 -1 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -35 0.0 0.0 -34 1.0 0.0 -1 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -33 0.0 0.0 -0 1.0 0.0 -1 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -33 0.0 0.0 -1 1.0 0.0 -34 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -34 0.0 0.0 -31 1.0 0.0 -32 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -34 0.0 0.0 -32 1.0 0.0 -33 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -35 0.0 0.0 -30 1.0 0.0 -34 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -30 0.0 0.0 -31 1.0 0.0 -34 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -36 0.0 0.0 -29 1.0 0.0 -30 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -36 0.0 0.0 -30 1.0 0.0 -35 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -29 0.0 0.0 -28 1.0 0.0 -27 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -29 0.0 0.0 -27 1.0 0.0 -30 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -30 0.0 0.0 -27 1.0 0.0 -31 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -27 0.0 0.0 -26 1.0 0.0 -31 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -31 0.0 0.0 -26 1.0 0.0 -25 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -31 0.0 0.0 -25 1.0 0.0 -32 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -26 0.0 0.0 -23 1.0 0.0 -24 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -26 0.0 0.0 -24 1.0 0.0 -25 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -27 0.0 0.0 -22 1.0 0.0 -26 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -22 0.0 0.0 -23 1.0 0.0 -26 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -28 0.0 0.0 -21 1.0 0.0 -22 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -28 0.0 0.0 -22 1.0 0.0 -27 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -21 0.0 0.0 -19 1.0 0.0 -18 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -21 0.0 0.0 -18 1.0 0.0 -22 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -22 0.0 0.0 -18 1.0 0.0 -23 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -18 0.0 0.0 -17 1.0 0.0 -23 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -23 0.0 0.0 -17 1.0 0.0 -16 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -23 0.0 0.0 -16 1.0 0.0 -24 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -17 0.0 0.0 -14 1.0 0.0 -15 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -17 0.0 0.0 -15 1.0 0.0 -16 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -18 0.0 0.0 -13 1.0 0.0 -17 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -13 0.0 0.0 -14 1.0 0.0 -17 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -19 0.0 0.0 -12 1.0 0.0 -13 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -19 0.0 0.0 -13 1.0 0.0 -18 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -12 0.0 0.0 -11 1.0 0.0 -10 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -12 0.0 0.0 -10 1.0 0.0 -13 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -13 0.0 0.0 -10 1.0 0.0 -14 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -10 0.0 0.0 -9 1.0 0.0 -14 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -14 0.0 0.0 -9 1.0 0.0 -8 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -14 0.0 0.0 -8 1.0 0.0 -15 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -9 0.0 0.0 -6 1.0 0.0 -7 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -9 0.0 0.0 -7 1.0 0.0 -8 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -10 0.0 0.0 -5 1.0 0.0 -9 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -5 0.0 0.0 -6 1.0 0.0 -9 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -11 0.0 0.0 -4 1.0 0.0 -5 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -11 0.0 0.0 -5 1.0 0.0 -10 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -4 0.0 0.0 -3 1.0 0.0 -2 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -4 0.0 0.0 -2 1.0 0.0 -5 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -5 0.0 0.0 -2 1.0 0.0 -6 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -2 0.0 0.0 -1 1.0 0.0 -6 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -0 0.0 0.0 -7 1.0 0.0 -6 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -0 0.0 0.0 -6 1.0 0.0 -1 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -32 0.0 0.0 -38 1.0 0.0 -37 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -32 0.0 0.0 -37 1.0 0.0 -33 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -25 0.0 0.0 -39 1.0 0.0 -38 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -25 0.0 0.0 -38 1.0 0.0 -32 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -24 0.0 0.0 -40 1.0 0.0 -39 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -24 0.0 0.0 -39 1.0 0.0 -25 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -16 0.0 0.0 -41 1.0 0.0 -40 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -16 0.0 0.0 -40 1.0 0.0 -24 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -15 0.0 0.0 -42 1.0 0.0 -41 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -15 0.0 0.0 -41 1.0 0.0 -16 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -0 0.0 0.0 -45 1.0 0.0 -44 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -0 0.0 0.0 -44 1.0 0.0 -7 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -8 0.0 0.0 -43 1.0 0.0 -42 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -8 0.0 0.0 -42 1.0 0.0 -15 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -7 0.0 0.0 -44 1.0 0.0 -43 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -7 0.0 0.0 -43 1.0 0.0 -8 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -33 0.0 0.0 -37 1.0 0.0 -45 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -45 0.0 0.0 -0 1.0 0.0 -33 1.0 1.0 -kids 0 diff --git a/data/items/nitrotank-small.ac b/data/items/nitrotank-small.ac deleted file mode 100644 index c34eab8e0..000000000 --- a/data/items/nitrotank-small.ac +++ /dev/null @@ -1,1523 +0,0 @@ -AC3Db -MATERIAL "DefaultWhite" rgb 1 1 1 amb 1 1 1 emis 0 0 0 spec 0.5 0.5 0.5 shi 64 trans 0 -OBJECT world -kids 1 -OBJECT group -name "SmallTank" -kids 3 -OBJECT poly -name "SmallTank_0" -data 9 -SmallTank -texture "nitro-tank.png" -texrep 1 1 -crease 70.000000 -numvert 59 -0.3648 0.519792 -0.035355 -0.372027 0.507274 -0.004358 -0.367601 0.514941 0.028679 -0.353592 0.539204 0.048296 -0.336556 0.568711 0.045315 -0.324464 0.589655 0.021131 -0.322974 0.592237 -0.012941 -0.332783 0.575248 -0.040958 -0.349301 0.546637 -0.04981 -0.386758 0.521759 -0.02138 -0.388249 0.519177 0.012692 -0.37844 0.536166 0.040709 -0.361922 0.564777 0.049561 -0.346423 0.591621 0.035107 -0.339196 0.604139 0.004109 -0.343622 0.596473 -0.028928 -0.35763 0.57221 -0.048545 -0.374666 0.542703 -0.045564 -0.291191 0.497287 -0.01974 -0.294773 0.491081 0.000736 -0.289002 0.501077 0.019105 -0.278223 0.519747 0.021534 -0.270553 0.533032 0.006194 -0.271768 0.530928 -0.015363 -0.280952 0.51502 -0.026905 -0.356917 0.543446 -0.02472 -0.363785 0.53155 -0.007929 -0.361503 0.535502 0.01328 -0.35179 0.552326 0.022935 -0.341959 0.569354 0.013767 -0.339414 0.573762 -0.007321 -0.34607 0.562232 -0.02445 -0.288564 0.585465 -0.020805 -0.273637 0.576846 -0.018776 -0.265704 0.572266 -0.004035 -0.270739 0.575173 0.012318 -0.28495 0.583378 0.017968 -0.297637 0.590703 0.008661 -0.299245 0.591631 -0.008594 -0.32494 0.537184 -0.016205 -0.310753 0.528993 -0.021937 -0.298027 0.521646 -0.012703 -0.296344 0.520674 0.004543 -0.306972 0.52681 0.016815 -0.321907 0.535433 0.014872 -0.329904 0.54005 0.000177 -0.287925 0.573549 -0.001895 --0.174828 0.17273 -0.118268 --0.21939 0.249914 -0.133983 --0.258577 0.317788 -0.088734 --0.258577 0.317788 0.081348 --0.21939 0.249914 0.126597 --0.174828 0.17273 0.110883 -0.225687 0.403018 0.110841 -0.181125 0.480201 0.126556 -0.141938 0.548075 0.081307 -0.141353 0.54909 -0.08865 -0.18054 0.481216 -0.1339 -0.225101 0.404032 -0.118185 -numsurf 80 -SURF 0x10 -mat 0 -refs 3 -9 0.885816395283 0.017615377903 -17 0.940894424915 0.017615377903 -16 0.983086585999 0.0884221643209 -SURF 0x10 -mat 0 -refs 3 -9 0.885816395283 0.017615377903 -16 0.983086585999 0.0884221643209 -15 0.992650866508 0.196904525161 -SURF 0x10 -mat 0 -refs 3 -10 0.843624353409 0.0884223431349 -9 0.885816395283 0.017615377903 -15 0.992650866508 0.196904525161 -SURF 0x10 -mat 0 -refs 3 -10 0.843624353409 0.0884223431349 -15 0.992650866508 0.196904525161 -14 0.965111851692 0.29230222106 -SURF 0x10 -mat 0 -refs 3 -11 0.834060192108 0.196904614568 -10 0.843624353409 0.0884223431349 -14 0.965111851692 0.29230222106 -SURF 0x10 -mat 0 -refs 3 -11 0.834060192108 0.196904614568 -14 0.965111851692 0.29230222106 -13 0.913355529308 0.32997789979 -SURF 0x10 -mat 0 -refs 3 -12 0.861599266529 0.292302280664 -11 0.834060192108 0.196904614568 -13 0.913355529308 0.32997789979 -SURF 0x10 -mat 0 -refs 3 -17 0.921875 0.875 -0 0.99609375 0.84375 -8 0.99609375 0.90625 -SURF 0x10 -mat 0 -refs 3 -9 0.921875 0.8125 -0 0.99609375 0.84375 -17 0.921875 0.875 -SURF 0x10 -mat 0 -refs 3 -7 0.99609375 0.9609375 -16 0.921875 0.921875 -8 0.99609375 0.90625 -SURF 0x10 -mat 0 -refs 3 -16 0.921875 0.921875 -17 0.921875 0.875 -8 0.99609375 0.90625 -SURF 0x10 -mat 0 -refs 3 -6 0.99609375 0.453125 -15 0.921875 0.421875 -7 0.99609375 0.390625 -SURF 0x10 -mat 0 -refs 3 -15 0.921875 0.421875 -16 0.921875 0.3515625 -7 0.99609375 0.390625 -SURF 0x10 -mat 0 -refs 3 -5 0.99609375 0.515625 -14 0.921875 0.484375 -6 0.99609375 0.453125 -SURF 0x10 -mat 0 -refs 3 -14 0.921875 0.484375 -15 0.921875 0.421875 -6 0.99609375 0.453125 -SURF 0x10 -mat 0 -refs 3 -4 0.99609375 0.5859375 -13 0.921875 0.5546875 -5 0.99609375 0.515625 -SURF 0x10 -mat 0 -refs 3 -13 0.921875 0.5546875 -14 0.921875 0.484375 -5 0.99609375 0.515625 -SURF 0x10 -mat 0 -refs 3 -3 0.99609375 0.6484375 -12 0.921875 0.609375 -4 0.99609375 0.5859375 -SURF 0x10 -mat 0 -refs 3 -12 0.921875 0.609375 -13 0.921875 0.5546875 -4 0.99609375 0.5859375 -SURF 0x10 -mat 0 -refs 3 -2 0.99609375 0.71875 -11 0.921875 0.6796875 -3 0.99609375 0.6484375 -SURF 0x10 -mat 0 -refs 3 -11 0.921875 0.6796875 -12 0.921875 0.609375 -3 0.99609375 0.6484375 -SURF 0x10 -mat 0 -refs 3 -1 0.99609375 0.7734375 -10 0.921875 0.7421875 -2 0.99609375 0.71875 -SURF 0x10 -mat 0 -refs 3 -10 0.921875 0.7421875 -11 0.921875 0.6796875 -2 0.99609375 0.71875 -SURF 0x10 -mat 0 -refs 3 -0 0.99609375 0.84375 -9 0.921875 0.8125 -1 0.99609375 0.7734375 -SURF 0x10 -mat 0 -refs 3 -9 0.921875 0.8125 -10 0.921875 0.7421875 -1 0.99609375 0.7734375 -SURF 0x10 -mat 0 -refs 3 -24 0.802644848824 0.00980581343174 -31 0.820613920689 0.319767445326 -25 0.774310052395 0.319767445326 -SURF 0x10 -mat 0 -refs 3 -24 0.802644848824 0.00980581343174 -25 0.774310052395 0.319767445326 -18 0.756210446358 0.00980581343174 -SURF 0x10 -mat 0 -refs 3 -23 0.523637294769 0.00980581343174 -30 0.541547477245 0.319767445326 -31 0.495466113091 0.319767445326 -SURF 0x10 -mat 0 -refs 3 -23 0.523637294769 0.00980581343174 -31 0.495466113091 0.319767445326 -24 0.477497041225 0.00980581343174 -SURF 0x10 -mat 0 -refs 3 -22 0.56971514225 0.00980605185032 -29 0.587679922581 0.319767445326 -30 0.541547477245 0.319767445326 -SURF 0x10 -mat 0 -refs 3 -22 0.56971514225 0.00980605185032 -30 0.541547477245 0.319767445326 -23 0.523637294769 0.00980581343174 -SURF 0x10 -mat 0 -refs 3 -21 0.616006195545 0.00980605185032 -28 0.634100437164 0.319767445326 -29 0.587679922581 0.319767445326 -SURF 0x10 -mat 0 -refs 3 -21 0.616006195545 0.00980605185032 -29 0.587679922581 0.319767445326 -22 0.56971514225 0.00980605185032 -SURF 0x10 -mat 0 -refs 3 -20 0.6626329422 0.00980605185032 -27 0.680835723877 0.319767445326 -28 0.634100437164 0.319767445326 -SURF 0x10 -mat 0 -refs 3 -20 0.6626329422 0.00980605185032 -28 0.634100437164 0.319767445326 -21 0.616006195545 0.00980605185032 -SURF 0x10 -mat 0 -refs 3 -19 0.709465503693 0.00980605185032 -26 0.727670907974 0.319767445326 -27 0.680835723877 0.319767445326 -SURF 0x10 -mat 0 -refs 3 -19 0.709465503693 0.00980605185032 -27 0.680835723877 0.319767445326 -20 0.6626329422 0.00980605185032 -SURF 0x10 -mat 0 -refs 3 -18 0.756210446358 0.00980581343174 -25 0.774310052395 0.319767445326 -26 0.727670907974 0.319767445326 -SURF 0x10 -mat 0 -refs 3 -18 0.756210446358 0.00980581343174 -26 0.727670907974 0.319767445326 -19 0.709465503693 0.00980605185032 -SURF 0x10 -mat 0 -refs 3 -4 0.861599266529 0.292302280664 -5 0.913355529308 0.32997789979 -3 0.834060192108 0.196904614568 -SURF 0x10 -mat 0 -refs 3 -3 0.834060192108 0.196904614568 -5 0.913355529308 0.32997789979 -6 0.965111851692 0.29230222106 -SURF 0x10 -mat 0 -refs 3 -3 0.834060192108 0.196904614568 -6 0.965111851692 0.29230222106 -2 0.843624353409 0.0884223431349 -SURF 0x10 -mat 0 -refs 3 -2 0.843624353409 0.0884223431349 -6 0.965111851692 0.29230222106 -7 0.992650866508 0.196904525161 -SURF 0x10 -mat 0 -refs 3 -2 0.843624353409 0.0884223431349 -7 0.992650866508 0.196904525161 -1 0.885816395283 0.017615377903 -SURF 0x10 -mat 0 -refs 3 -1 0.885816395283 0.017615377903 -7 0.992650866508 0.196904525161 -8 0.983086585999 0.0884221643209 -SURF 0x10 -mat 0 -refs 3 -8 0.983086585999 0.0884221643209 -0 0.940894424915 0.017615377903 -1 0.885816395283 0.017615377903 -SURF 0x00 -mat 0 -refs 3 -26 0.13671875 0.1640625 -25 0.1171875 0.2421875 -31 0.07421875 0.265625 -SURF 0x00 -mat 0 -refs 3 -26 0.13671875 0.1640625 -31 0.07421875 0.265625 -30 0.0390625 0.2109375 -SURF 0x00 -mat 0 -refs 3 -27 0.1171875 0.0859375 -26 0.13671875 0.1640625 -30 0.0390625 0.2109375 -SURF 0x00 -mat 0 -refs 3 -27 0.1171875 0.0859375 -30 0.0390625 0.2109375 -29 0.0390625 0.1171875 -SURF 0x00 -mat 0 -refs 3 -28 0.07421875 0.0625 -27 0.1171875 0.0859375 -29 0.0390625 0.1171875 -SURF 0x10 -mat 0 -refs 3 -46 0.078805424273 0.163940280676 -32 0.00363153964281 0.21570892632 -33 0.0116978883743 0.0786713585258 -SURF 0x10 -mat 0 -refs 3 -46 0.078805424273 0.163940280676 -33 0.0116978883743 0.0786713585258 -34 0.0702976882458 0.00584210455418 -SURF 0x10 -mat 0 -refs 3 -46 0.078805424273 0.163940280676 -34 0.0702976882458 0.00584210455418 -35 0.135303914547 0.0520648509264 -SURF 0x10 -mat 0 -refs 3 -46 0.078805424273 0.163940280676 -35 0.135303914547 0.0520648509264 -36 0.157765716314 0.182531937957 -SURF 0x10 -mat 0 -refs 3 -46 0.078805424273 0.163940280676 -36 0.157765716314 0.182531937957 -37 0.120768755674 0.298998832703 -SURF 0x10 -mat 0 -refs 3 -46 0.078805424273 0.163940280676 -37 0.120768755674 0.298998832703 -38 0.0521726161242 0.313764333725 -SURF 0x10 -mat 0 -refs 3 -46 0.078805424273 0.163940280676 -38 0.0521726161242 0.313764333725 -32 0.00363153964281 0.21570892632 -SURF 0x10 -mat 0 -refs 3 -38 0.383910685778 0.319846689701 -45 0.365535438061 0.00860934518278 -39 0.40285000205 0.00860934518278 -SURF 0x10 -mat 0 -refs 3 -38 0.383910685778 0.319846689701 -39 0.40285000205 0.00860934518278 -32 0.420989334583 0.319846689701 -SURF 0x10 -mat 0 -refs 3 -37 0.347033381462 0.319846689701 -44 0.328119903803 0.00860934518278 -45 0.365535438061 0.00860934518278 -SURF 0x10 -mat 0 -refs 3 -37 0.347033381462 0.319846689701 -45 0.365535438061 0.00860934518278 -38 0.383910685778 0.319846689701 -SURF 0x10 -mat 0 -refs 3 -36 0.310159862041 0.319846689701 -43 0.290811926126 0.00860934518278 -44 0.328119903803 0.00860934518278 -SURF 0x10 -mat 0 -refs 3 -36 0.310159862041 0.319846689701 -44 0.328119903803 0.00860934518278 -37 0.347033381462 0.319846689701 -SURF 0x10 -mat 0 -refs 3 -35 0.273089557886 0.319846689701 -42 0.253735005856 0.00860934518278 -43 0.290811926126 0.00860934518278 -SURF 0x10 -mat 0 -refs 3 -35 0.273089557886 0.319846689701 -43 0.290811926126 0.00860934518278 -36 0.310159862041 0.319846689701 -SURF 0x10 -mat 0 -refs 3 -34 0.235764443874 0.319846689701 -41 0.216836720705 0.00860934518278 -42 0.253735005856 0.00860934518278 -SURF 0x10 -mat 0 -refs 3 -34 0.235764443874 0.319846689701 -42 0.253735005856 0.00860934518278 -35 0.273089557886 0.319846689701 -SURF 0x10 -mat 0 -refs 3 -33 0.198320925236 0.319846689701 -40 0.17993491888 0.00860934518278 -41 0.216836720705 0.00860934518278 -SURF 0x10 -mat 0 -refs 3 -33 0.198320925236 0.319846689701 -41 0.216836720705 0.00860934518278 -34 0.235764443874 0.319846689701 -SURF 0x10 -mat 0 -refs 3 -32 0.420989334583 0.319846689701 -39 0.40285000205 0.00860934518278 -40 0.439934879541 0.00860934518278 -SURF 0x10 -mat 0 -refs 3 -32 0.420989334583 0.319846689701 -40 0.439934879541 0.00860934518278 -33 0.458320945501 0.319846689701 -SURF 0x10 -mat 0 -refs 3 -52 0.00390625 0.34375 -53 0.87890625 0.34375 -54 0.87890625 0.671875 -SURF 0x10 -mat 0 -refs 3 -51 0.00390625 0.6796875 -54 0.87890625 0.671875 -55 0.87890625 0.9921875 -SURF 0x10 -mat 0 -refs 3 -51 0.00390625 0.6796875 -52 0.00390625 0.34375 -54 0.87890625 0.671875 -SURF 0x10 -mat 0 -refs 3 -50 0.00390625 0.9921875 -51 0.00390625 0.6796875 -55 0.87890625 0.9921875 -SURF 0x10 -mat 0 -refs 3 -48 0.87890625 0.6796875 -56 0.00390625 0.9921875 -57 0.00390625 0.6796875 -SURF 0x10 -mat 0 -refs 3 -48 0.87890625 0.6796875 -49 0.87890625 0.9921875 -56 0.00390625 0.9921875 -SURF 0x10 -mat 0 -refs 3 -47 0.87890625 0.34375 -57 0.00390625 0.6796875 -58 0.00390625 0.34375 -SURF 0x10 -mat 0 -refs 3 -47 0.87890625 0.34375 -48 0.87890625 0.6796875 -57 0.00390625 0.6796875 -kids 0 -OBJECT poly -name "SmallTank_1" -data 9 -SmallTank -texture "tank-cyan.png" -texrep 1 1 -crease 70.000000 -numvert 46 -0.237347 0.360822 -0.066754 -0.204335 0.418001 -0.122155 -0.16124 0.492643 -0.122155 -0.128228 0.549822 -0.066754 -0.120745 0.562784 0.018126 -0.142292 0.525463 0.092768 -0.182787 0.455322 0.122246 -0.223283 0.385182 0.092768 -0.24483 0.347861 0.018126 --0.276524 0.188492 0.002144 --0.27564 0.215235 -0.058378 --0.29211 0.243761 -0.030738 --0.295843 0.250228 0.011608 --0.285093 0.231608 0.048846 --0.26489 0.196616 0.063553 --0.244687 0.161623 0.048846 --0.233937 0.143004 0.011608 --0.25414 0.177997 -0.058378 --0.237671 0.14947 -0.030738 --0.136334 0.128056 -0.025594 --0.143817 0.141018 0.059286 --0.176829 0.198197 0.114687 --0.219924 0.272839 0.114687 --0.252936 0.330018 0.059286 --0.260419 0.342979 -0.025594 --0.238872 0.305658 -0.100236 --0.198377 0.235518 -0.129714 --0.157881 0.165377 -0.100236 --0.247536 0.128714 -0.081082 --0.205945 0.104627 -0.065474 --0.238958 0.161806 -0.120875 --0.281208 0.187035 -0.105593 --0.31488 0.245357 -0.081082 --0.282052 0.236448 -0.120875 --0.315064 0.293627 -0.065474 --0.332796 0.276389 -0.019017 --0.326574 0.265611 0.051559 --0.322548 0.306588 0.019406 --0.301 0.269267 0.094048 --0.299124 0.218068 0.097625 --0.263291 0.156003 0.097625 --0.260505 0.199127 0.123526 --0.220009 0.128987 0.094048 --0.235842 0.10846 0.051559 --0.22962 0.097682 -0.019017 --0.198462 0.091666 0.019406 -numsurf 81 -SURF 0x10 -mat 0 -refs 3 -28 0.0 0.0 -18 1.0 0.0 -17 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -28 0.0 0.0 -44 1.0 0.0 -18 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -44 0.0 0.0 -16 1.0 0.0 -18 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -44 0.0 0.0 -43 1.0 0.0 -16 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -43 0.0 0.0 -15 1.0 0.0 -16 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -43 0.0 0.0 -40 1.0 0.0 -15 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -40 0.0 0.0 -14 1.0 0.0 -15 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -40 0.0 0.0 -39 1.0 0.0 -14 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -39 0.0 0.0 -13 1.0 0.0 -14 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -39 0.0 0.0 -36 1.0 0.0 -13 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -36 0.0 0.0 -12 1.0 0.0 -13 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -36 0.0 0.0 -35 1.0 0.0 -12 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -35 0.0 0.0 -11 1.0 0.0 -12 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -35 0.0 0.0 -32 1.0 0.0 -11 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -32 0.0 0.0 -10 1.0 0.0 -11 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -32 0.0 0.0 -31 1.0 0.0 -10 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -31 0.0 0.0 -17 1.0 0.0 -10 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -31 0.0 0.0 -28 1.0 0.0 -17 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -10 0.0 0.0 -17 1.0 0.0 -9 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -11 0.0 0.0 -10 1.0 0.0 -9 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -12 0.0 0.0 -11 1.0 0.0 -9 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -13 0.0 0.0 -12 1.0 0.0 -9 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -14 0.0 0.0 -13 1.0 0.0 -9 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -15 0.0 0.0 -14 1.0 0.0 -9 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -16 0.0 0.0 -15 1.0 0.0 -9 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -18 0.0 0.0 -16 1.0 0.0 -9 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -17 0.0 0.0 -18 1.0 0.0 -9 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -19 0.0 0.0 -45 1.0 0.0 -29 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -29 0.0 0.0 -27 1.0 0.0 -19 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -42 0.0 0.0 -21 1.0 0.0 -41 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -42 0.0 0.0 -20 1.0 0.0 -21 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -41 0.0 0.0 -22 1.0 0.0 -38 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -41 0.0 0.0 -21 1.0 0.0 -22 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -45 0.0 0.0 -20 1.0 0.0 -42 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -45 0.0 0.0 -19 1.0 0.0 -20 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -38 0.0 0.0 -23 1.0 0.0 -37 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -38 0.0 0.0 -22 1.0 0.0 -23 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -37 0.0 0.0 -24 1.0 0.0 -34 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -37 0.0 0.0 -23 1.0 0.0 -24 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -34 0.0 0.0 -25 1.0 0.0 -33 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -34 0.0 0.0 -24 1.0 0.0 -25 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -33 0.0 0.0 -26 1.0 0.0 -30 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -33 0.0 0.0 -25 1.0 0.0 -26 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -30 0.0 0.0 -27 1.0 0.0 -29 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -30 0.0 0.0 -26 1.0 0.0 -27 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -45 0.0 0.0 -43 1.0 0.0 -44 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -45 0.0 0.0 -42 1.0 0.0 -43 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -40 0.0 0.0 -42 1.0 0.0 -41 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -40 0.0 0.0 -43 1.0 0.0 -42 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -39 0.0 0.0 -41 1.0 0.0 -38 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -39 0.0 0.0 -40 1.0 0.0 -41 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -36 0.0 0.0 -38 1.0 0.0 -37 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -36 0.0 0.0 -39 1.0 0.0 -38 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -35 0.0 0.0 -37 1.0 0.0 -34 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -35 0.0 0.0 -36 1.0 0.0 -37 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -32 0.0 0.0 -34 1.0 0.0 -33 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -32 0.0 0.0 -35 1.0 0.0 -34 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -31 0.0 0.0 -33 1.0 0.0 -30 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -31 0.0 0.0 -32 1.0 0.0 -33 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -28 0.0 0.0 -30 1.0 0.0 -29 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -28 0.0 0.0 -31 1.0 0.0 -30 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -29 0.0 0.0 -44 1.0 0.0 -28 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -29 0.0 0.0 -45 1.0 0.0 -44 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -27 0.0 0.0 -26 1.0 0.0 -1 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -27 0.0 0.0 -1 1.0 0.0 -0 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -26 0.0 0.0 -25 1.0 0.0 -2 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -26 0.0 0.0 -2 1.0 0.0 -1 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -25 0.0 0.0 -24 1.0 0.0 -3 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -25 0.0 0.0 -3 1.0 0.0 -2 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -24 0.0 0.0 -23 1.0 0.0 -4 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -24 0.0 0.0 -4 1.0 0.0 -3 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -23 0.0 0.0 -22 1.0 0.0 -5 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -23 0.0 0.0 -5 1.0 0.0 -4 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -22 0.0 0.0 -21 1.0 0.0 -6 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -22 0.0 0.0 -6 1.0 0.0 -5 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -21 0.0 0.0 -20 1.0 0.0 -7 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -21 0.0 0.0 -7 1.0 0.0 -6 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -20 0.0 0.0 -19 1.0 0.0 -8 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -20 0.0 0.0 -8 1.0 0.0 -7 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -19 0.0 0.0 -27 1.0 0.0 -0 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -19 0.0 0.0 -0 1.0 0.0 -8 1.0 1.0 -kids 0 -OBJECT poly -name "SmallTank_2" -data 9 -SmallTank -texture "tank-blue.png" -texrep 1 1 -crease 70.000000 -numvert 37 -0.291907 0.518322 -0.002434 -0.237347 0.360822 -0.066754 -0.261959 0.41463 -0.091609 -0.298526 0.433048 -0.048301 -0.299097 0.486685 -0.039371 -0.2836 0.513527 -0.050652 -0.275183 0.47348 -0.087476 -0.224546 0.479431 -0.118843 -0.204335 0.418001 -0.122155 -0.16124 0.492643 -0.122155 -0.187132 0.544233 -0.091609 -0.24471 0.52626 -0.087476 -0.268103 0.540368 -0.039371 -0.259858 0.55465 -0.010807 -0.221367 0.566692 -0.048301 -0.167225 0.578713 -0.022648 -0.128228 0.549822 -0.066754 -0.120745 0.562784 0.018126 -0.174139 0.566738 0.05577 -0.216075 0.575857 0.011718 -0.262721 0.54969 0.021675 -0.275355 0.527809 0.042876 -0.231312 0.549467 0.064497 -0.204638 0.513912 0.106954 -0.142292 0.525463 0.092768 -0.182787 0.455322 0.122246 -0.244453 0.444951 0.106954 -0.259946 0.49987 0.085342 -0.291846 0.499245 0.042876 -0.304479 0.477363 0.021675 -0.288581 0.450273 0.064497 -0.274952 0.392125 0.05577 -0.223283 0.385182 0.092768 -0.24483 0.347861 0.018126 -0.281866 0.38015 -0.022648 -0.303817 0.423883 0.011718 -0.307343 0.472403 -0.010807 -numsurf 63 -SURF 0x10 -mat 0 -refs 3 -4 0.0 0.0 -0 1.0 0.0 -36 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -5 0.0 0.0 -0 1.0 0.0 -4 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -12 0.0 0.0 -0 1.0 0.0 -5 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -13 0.0 0.0 -0 1.0 0.0 -12 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -20 0.0 0.0 -0 1.0 0.0 -13 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -21 0.0 0.0 -0 1.0 0.0 -20 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -28 0.0 0.0 -0 1.0 0.0 -21 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -29 0.0 0.0 -0 1.0 0.0 -28 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -36 0.0 0.0 -0 1.0 0.0 -29 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -30 0.0 0.0 -35 1.0 0.0 -29 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -35 0.0 0.0 -36 1.0 0.0 -29 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -31 0.0 0.0 -34 1.0 0.0 -35 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -31 0.0 0.0 -35 1.0 0.0 -30 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -32 0.0 0.0 -33 1.0 0.0 -31 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -33 0.0 0.0 -34 1.0 0.0 -31 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -25 0.0 0.0 -32 1.0 0.0 -26 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -32 0.0 0.0 -31 1.0 0.0 -26 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -26 0.0 0.0 -31 1.0 0.0 -30 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -26 0.0 0.0 -30 1.0 0.0 -27 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -27 0.0 0.0 -30 1.0 0.0 -28 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -30 0.0 0.0 -29 1.0 0.0 -28 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -22 0.0 0.0 -27 1.0 0.0 -21 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -27 0.0 0.0 -28 1.0 0.0 -21 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -23 0.0 0.0 -26 1.0 0.0 -27 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -23 0.0 0.0 -27 1.0 0.0 -22 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -24 0.0 0.0 -25 1.0 0.0 -23 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -25 0.0 0.0 -26 1.0 0.0 -23 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -17 0.0 0.0 -24 1.0 0.0 -18 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -24 0.0 0.0 -23 1.0 0.0 -18 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -18 0.0 0.0 -23 1.0 0.0 -22 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -18 0.0 0.0 -22 1.0 0.0 -19 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -19 0.0 0.0 -22 1.0 0.0 -20 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -22 0.0 0.0 -21 1.0 0.0 -20 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -14 0.0 0.0 -19 1.0 0.0 -13 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -19 0.0 0.0 -20 1.0 0.0 -13 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -15 0.0 0.0 -18 1.0 0.0 -19 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -15 0.0 0.0 -19 1.0 0.0 -14 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -16 0.0 0.0 -17 1.0 0.0 -15 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -17 0.0 0.0 -18 1.0 0.0 -15 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -9 0.0 0.0 -16 1.0 0.0 -10 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -16 0.0 0.0 -15 1.0 0.0 -10 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -10 0.0 0.0 -15 1.0 0.0 -14 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -10 0.0 0.0 -14 1.0 0.0 -11 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -11 0.0 0.0 -14 1.0 0.0 -12 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -14 0.0 0.0 -13 1.0 0.0 -12 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -6 0.0 0.0 -11 1.0 0.0 -5 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -11 0.0 0.0 -12 1.0 0.0 -5 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -7 0.0 0.0 -10 1.0 0.0 -11 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -7 0.0 0.0 -11 1.0 0.0 -6 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -8 0.0 0.0 -9 1.0 0.0 -7 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -9 0.0 0.0 -10 1.0 0.0 -7 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -1 0.0 0.0 -8 1.0 0.0 -2 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -8 0.0 0.0 -7 1.0 0.0 -2 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -2 0.0 0.0 -7 1.0 0.0 -6 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -2 0.0 0.0 -6 1.0 0.0 -3 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -3 0.0 0.0 -6 1.0 0.0 -4 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -6 0.0 0.0 -5 1.0 0.0 -4 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -35 0.0 0.0 -3 1.0 0.0 -36 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -3 0.0 0.0 -4 1.0 0.0 -36 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -34 0.0 0.0 -2 1.0 0.0 -3 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -34 0.0 0.0 -3 1.0 0.0 -35 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -33 0.0 0.0 -1 1.0 0.0 -34 1.0 1.0 -SURF 0x10 -mat 0 -refs 3 -1 0.0 0.0 -2 1.0 0.0 -34 1.0 1.0 -kids 0 diff --git a/data/items/warning.ac b/data/items/warning.ac deleted file mode 100644 index 10dedc601..000000000 --- a/data/items/warning.ac +++ /dev/null @@ -1,65 +0,0 @@ -AC3Db -MATERIAL "DefaultWhite" rgb 1 1 1 amb 1 1 1 emis 0 0 0 spec 0.5 0.5 0.5 shi 64 trans 0 -OBJECT world -kids 1 -OBJECT group -name "Cube" -kids 2 -OBJECT poly -name "Cube_0" -data 8 -Cube.001 -crease 30.000000 -numvert 4 --0.999999 -0.093969 -1.005491 --0.999999 -0.093969 0.994509 -1.000001 -0.09397 -1.00549 -1.000001 -0.093969 0.994509 -numsurf 1 -SURF 0x00 -mat 0 -refs 4 -0 0.0 1.0 -2 0.0 0.0 -3 1.0 0.0 -1 1.0 1.0 -kids 0 -OBJECT poly -name "Cube_1" -data 8 -Cube.001 -texture "warning.rgb" -texrep 1 1 -crease 30.000000 -numvert 5 -1e-06 1.68782 -0.005491 --0.999999 -0.093969 -1.005491 --0.999999 -0.093969 0.994509 -1.000001 -0.09397 -1.00549 -1.000001 -0.093969 0.994509 -numsurf 4 -SURF 0x00 -mat 0 -refs 3 -0 0.500428617001 1.05236625671 -1 -0.0732927918434 -0.0399777889252 -2 1.07500839233 -0.0399777889252 -SURF 0x00 -mat 0 -refs 3 -0 0.500428617001 1.05236625671 -4 -0.0733415484428 -0.0373720526695 -3 1.07505702972 -0.0373719930649 -SURF 0x00 -mat 0 -refs 3 -0 0.500428617001 1.05236625671 -3 -0.0720784068108 -0.0382475778461 -1 1.07207846642 -0.0382474064827 -SURF 0x00 -mat 0 -refs 3 -4 1.07383799553 -0.0373327732086 -0 0.500428617001 1.05236625671 -2 -0.0738379955292 -0.03733259812 -kids 0 diff --git a/data/items/warning.b3d b/data/items/warning.b3d new file mode 100755 index 0000000000000000000000000000000000000000..0364480cf1f7756a8ebde87fcaec59071681288f GIT binary patch literal 861 zcmZ>AGIj}NW?*1sU|ldGcbTK1A|jgXmC7` z2I+N4O-n4zDGATWEJ@WfFfalN!4$%1h(e$Q!+#)fDk?3`0ID>^s}iKz&)>y$6VMGo z{{A5#J`#W#4WkiKAWix}uA{G$Czk<29L$0#htUXWkha4>u5)QpYCLXjjVz}2APm#! z>l*CQ1LS}_78Vo|90QdAg$yM08unXmY1l8+d|)p`s$oAcfcE!Jud|1Uft>;pvqx12 zQr%#Wsty=aL7u@f5Q7+ikq5N{62Krn2!Om&4Riq5E1*zD1~8vDfW3k46&Ij3m{4EEex+knodL<|u${&Lgya$Q%p1qBT(7$#eF+RrMN0gJ(c zVb;t}dzd& og4zV=Kal^~fS3h{L4X5@xquiX&I-hwKn#j%b|3~t0XGl>0OPa3hX4Qo literal 0 HcmV?d00001 diff --git a/data/items/warning.png b/data/items/warning.png new file mode 100644 index 0000000000000000000000000000000000000000..fe231ede0c7e45b93987cb2484e6382fd986d585 GIT binary patch literal 41347 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 literal 0 HcmV?d00001 From 26bf230a6908058cab8c6e874a1490d1137cba6e Mon Sep 17 00:00:00 2001 From: hikerstk Date: Fri, 13 Mar 2009 01:56:44 +0000 Subject: [PATCH 0016/1008] Converted models to .b3d, added texture to this directory (temporary solution). git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3253 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- data/models/anchor.png | Bin 0 -> 223796 bytes data/models/anvil.ac | 2 +- data/models/anvil.b3d | Bin 0 -> 27600 bytes data/models/bomb.ac | 2 +- data/models/bomb.b3d | Bin 0 -> 19431 bytes data/models/candy_stripe.png | Bin 0 -> 160 bytes data/models/parachute.b3d | Bin 0 -> 2665 bytes data/models/plunger.ac | 2 +- data/models/plunger.b3d | Bin 0 -> 15874 bytes data/models/plunger.png | Bin 0 -> 65937 bytes data/models/roadcone.b3d | Bin 0 -> 2104 bytes data/models/tnt-bomb.png | Bin 0 -> 78211 bytes data/models/zipper.ac | 2 +- data/models/zipper.b3d | Bin 0 -> 528 bytes data/models/zipper.png | Bin 0 -> 171 bytes 15 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 data/models/anchor.png create mode 100755 data/models/anvil.b3d create mode 100755 data/models/bomb.b3d create mode 100644 data/models/candy_stripe.png create mode 100755 data/models/parachute.b3d create mode 100755 data/models/plunger.b3d create mode 100644 data/models/plunger.png create mode 100755 data/models/roadcone.b3d create mode 100644 data/models/tnt-bomb.png create mode 100755 data/models/zipper.b3d create mode 100644 data/models/zipper.png diff --git a/data/models/anchor.png b/data/models/anchor.png new file mode 100644 index 0000000000000000000000000000000000000000..d1351ad7440bb73bc361460855733466625956c5 GIT binary patch literal 223796 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 A-2eap literal 0 HcmV?d00001 diff --git a/data/models/anvil.ac b/data/models/anvil.ac index d060eb826..a466d57b6 100644 --- a/data/models/anvil.ac +++ b/data/models/anvil.ac @@ -6,7 +6,7 @@ OBJECT poly name "Anchor" data 6 Anchor -texture "anchor.rgb" +texture "anchor.png" texrep 1 1 crease 80.000000 numvert 247 diff --git a/data/models/anvil.b3d b/data/models/anvil.b3d new file mode 100755 index 0000000000000000000000000000000000000000..e11f6e9808d1255e1df071deaf29cf1e346fc4ff GIT binary patch literal 27600 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 ZHjP{4vV$=E_wRpsg`Eza&HVH4e*h}MUWEVv literal 0 HcmV?d00001 diff --git a/data/models/bomb.ac b/data/models/bomb.ac index beca94498..003301d45 100644 --- a/data/models/bomb.ac +++ b/data/models/bomb.ac @@ -6,7 +6,7 @@ OBJECT poly name "TNT Bomb" data 8 TNT Bomb -texture "tnt-bomb.rgb" +texture "tnt-bomb.png" texrep 1 1 crease 45.000000 numvert 158 diff --git a/data/models/bomb.b3d b/data/models/bomb.b3d new file mode 100755 index 0000000000000000000000000000000000000000..e6606e5513b63871e7e1ab0d76a7f8a761b2246a GIT binary patch literal 19431 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 literal 0 HcmV?d00001 diff --git a/data/models/candy_stripe.png b/data/models/candy_stripe.png new file mode 100644 index 0000000000000000000000000000000000000000..1b657c4d3105676dfe6bd520f711f46ae52fdbf8 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^3Lq@N1SHpV7(M_}oCO|{#X#BvjNMLV+W{Fto-U3d z5r^O2ILHZ9&3sVf+x;S)L&u9YMLV`tbFABzYrM^uU%&x@Dsp}6S|{`CDKz*o%w@1* rEMa=Va$)X~dPPPiHT8x(n+HtRYj{lcBo`b7n$FgTe~DWM4fRE8`2 literal 0 HcmV?d00001 diff --git a/data/models/parachute.b3d b/data/models/parachute.b3d new file mode 100755 index 0000000000000000000000000000000000000000..2cc2b2fd24902de766d82daee20b80c72c696610 GIT binary patch literal 2665 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

tsvvjX}4M@Y~Cxz3;$RgoyNKO zt`D=c<9dkM(P{MMV`Uh*%iHu1xps6KV{2KsEA1FBa_#6e=CAGZBWVZU_)W`uzf@!H z)p|S+uBX#@=E^_b1Nx`ac;+fz-UG&~(*~2b4L5)MzJ;UHnA7Xi5ACn>V=~W+O?PCT z%hf#5$A+5QkqgXly>c}A;@ag*&ixn7^)F}AXU;8G_#>;O9fo(Rzdb^*MJq8aQ4)nE^30X1MR*audF{onvt0}g^ipce2U z<-6zshrtF=2abYv;0MQweYU#+FZgi~DE8U5KoFb&A;3P{9pEH51^C{w&$a>jKqu%b h_Sxwqe}mJBUZSEj+7RDa;3OqzW}idee3`L literal 0 HcmV?d00001 diff --git a/data/models/tnt-bomb.png b/data/models/tnt-bomb.png new file mode 100644 index 0000000000000000000000000000000000000000..807eccbae2560707448d83628ab18e08d5d14eb9 GIT binary patch literal 78211 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 z%0A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 literal 0 HcmV?d00001 From dba91ef34e6d032a457220599b09c234047fd742 Mon Sep 17 00:00:00 2001 From: hikerstk Date: Fri, 13 Mar 2009 02:51:29 +0000 Subject: [PATCH 0017/1008] Updated items to use b3d and png. git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3254 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- data/anvil.collectable | 4 ++-- data/bubblegum.xml | 4 ++-- data/cake.projectile | 1 - data/magnet.collectable | 2 +- data/models/cake.ac | 2 +- data/models/cake.b3d | Bin 0 -> 23800 bytes data/models/cake.png | Bin 0 -> 107217 bytes data/parachute.collectable | 4 ++-- data/zipper.collectable | 3 +-- 9 files changed, 9 insertions(+), 11 deletions(-) create mode 100755 data/models/cake.b3d create mode 100644 data/models/cake.png diff --git a/data/anvil.collectable b/data/anvil.collectable index c007ad183..12198a562 100644 --- a/data/anvil.collectable +++ b/data/anvil.collectable @@ -2,8 +2,8 @@ (tuxkart-collectable (name "anvil") - (model "anvil.ac") - (icon "anchor-icon.rgb") + (mesh "anvil.b3d") + (icon "anchor-icon.png") ) ;; EOF ;; diff --git a/data/bubblegum.xml b/data/bubblegum.xml index 32b7aa201..b503dde70 100644 --- a/data/bubblegum.xml +++ b/data/bubblegum.xml @@ -2,8 +2,8 @@ (tuxkart-collectable (name "Bubble Gum") - (model "../items/bubblegum.ac") - (icon "bubblegum-icon.rgb") + (mesh "../items/bubblegum.b3d") + (icon "bubblegum-icon.png") (speed 50.0) (min-height 0.3) (max-height 1.0) diff --git a/data/cake.projectile b/data/cake.projectile index 0b99e552b..2450a931c 100644 --- a/data/cake.projectile +++ b/data/cake.projectile @@ -2,7 +2,6 @@ (tuxkart-collectable (name "cake") - (model "cake.ac") (mesh "cake.b3d") (icon "cake-icon.rgb") (speed 50.0) diff --git a/data/magnet.collectable b/data/magnet.collectable index b98e047e8..fa1dd6610 100644 --- a/data/magnet.collectable +++ b/data/magnet.collectable @@ -3,7 +3,7 @@ (tuxkart-collectable (name "magnet") (model "magnet.ac") - (icon "magnet.rgb") + (icon "magnet.png") ) ;; EOF ;; diff --git a/data/models/cake.ac b/data/models/cake.ac index 679ff00de..ac5ac9126 100644 --- a/data/models/cake.ac +++ b/data/models/cake.ac @@ -6,7 +6,7 @@ OBJECT poly name "Cake" data 4 Cake -texture "cake.rgb" +texture "cake.png" texrep 1 1 crease 30.000000 numvert 164 diff --git a/data/models/cake.b3d b/data/models/cake.b3d new file mode 100755 index 0000000000000000000000000000000000000000..94598677c5dfabf82d9a7413d39c7b90cb217d45 GIT binary patch literal 23800 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 XyRSd)rZhH=onz(8QPo(HXRGypyuGgY literal 0 HcmV?d00001 diff --git a/data/models/cake.png b/data/models/cake.png new file mode 100644 index 0000000000000000000000000000000000000000..89953f4516b07e1ea26a459b6e405cd42823578d GIT binary patch literal 107217 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

vu!1l*>sz++mF_?Cb$8r_+dK*_|6BrGE10 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μ?yq|CKtKsy<%Z=#@Ea)*gHX;`-$O2{ef&m}46^YN(22ZTj}JDC15cfG2A1J?tJPfwfj zuXI@ZdTATr3OVCIAb-=T4Ph!E_8mFt<&1N|pw_-&7K*E{*X3o$!DKSzJ)Pq0SAanp z4$Y$P9ch!8+#etn4vvQ%eh@)&qCM5m)7)@m$+73m1K7&jE&V)jI;7CJKHtl8B&44t zEJ%5lKMax$6V)_0&_aCF8L=OqdOXU3g}o1{&U;^n_U!kp1n1bukM@r}wd2-DxO|S^ zGk`)T^au)Ni=Kvuq2^qA76awXnL9S=P3MHvA@{+MB#>GV2L~Lw4|3MoSO)#T^|Ra> zdB?z_KOAt?Dh3b=pF12~B3_?k=i@EMISeY1k~}M%_cXA5*`XbY+6To?&OTRriF|TS zjnKMtq|OK6|xgCLSmelygC~ z9u`3-BBN~0q!0a0L`j`B&qHJf10RPdp{O(?_Au=bW&};D0go0aowA?f5s1%@NNYxP zZf=xwLvSI*h*qOWj_Qas%-JA=h%WcfJ<***#^9ymaim=xO0$7KuA3cKIZd*S-me4O zKPUT7ZWd_ubgGIa&qTTj?$vJ6ndDZ_fkTqWPCD*`fphD*-<<1IgfcApb_WD@#+73y zhv_M3t+lqrA)^S!l2F^&WQ zk|FTgCkDF!=RiS&*PVcIHWR01x6||bzUuWI)>+;%W#?3$jXKyGh$(s$Y0C4SL$IWO z^#0{i_lF$tzU@|yf&)aVu6%B?KhJdP*4A>YjaXo3)1JO+Z3ATQ&QP#KQItSxHWcZ> zQr}EN9vlM%5)V>bYQHG!Aa*+(bl_;Pi9izT<4Ky_Q0rPzV9O=-qq^<~AIQU+&G6jZ zm?R;l;gAL{TKK2mg3+(#PYAx*>2<6z3YqVB2CkAc_*Wvq`CN_^{xOOx4+hAA5E&p= zfk~6eY=$F2eQc&|+=;P9D%?Mi9nUu&BVZT>cecv+=arJoWe3d20nfqyrGVNo?H#b% zB9!lPi(ea@YFbhJATWCV*-QsMNrt)a*>5f7C0m&4eaI6E3n<-kmxhi5y5HBC2)=K9 zlRM6t7KB1cgOZ3B4y~@QzszPt7UDw8=i*?vgQVq|7{)c+xj%-0iCh&p7}?55$cDuF zqnH0wQ2Z5xIGN}^a6GaFbf5BK{XiC^e=5|DLhP#&s9JH3zVF%3`p~t+Lv;9F$^dal z5~6om7lBi4f$n;7ki6>P*&%elf!30huYI|{cU`_d<;FW{aJh~hC!d$(Mz|c4Dk?e@ za{g;4J*o^qXzhq6c<%koHPC%lGHtfJ)p_8$I$t27saKGxEK}#)9uAy0@2@@~6V9+9 zo(M9n8-n9dA)k_mOu6JahU0-;;lQj`((mX`^fGn*$(`YDK+^K`OsBM*2Eoz4&t?@t zA@F;ZqGe$)B>6iBTni5ynV!QwNEu1ZW`g`Vpm;>&HkQi@$@2d#&^1?xq9zid(-VR- zpVwR*2Z091jADq1=YKLUJ8KL zs&0)6V#9jrKm!GmBX-BV6nF&O2GU4X8qgjIumOehQFG83{LM!4VeX1^$H+~ti`7F9 zkyb8if<$*{sU{auzo%tNnOO11pfeVoFmMj%=vpXo^el_^1@Ai-Rq%d~cq6&cSBGI$(I~bHE*#&$S-o zvE^U)p`W{*zIU;JB&h3h?$hx}JpgA2liYJU`XNI&o|Lhz*Fx};OTc|yuOf-Ff0+C< z=ya2CXHy)Tnv690wx(ko*wl3c;oa{c^9r-VA>{nIAro?BihOS$xX%nJcvY+Lz(y320;JK=kB~lE)a!~3d@a3EDjiaau7bA z*@GBG>ReYES`K(NJiwt~L8a(0a3*cw@v2-*KYYxOlTosU??myYO>T}?h$myjb zkmOb}Cnd6nkcazwB_l9U^SO@7dY$PNAFwnC39V&|Uk*qrW&geQ{$_3P4AmUQhSv(c zb{s@#V8izcfafr4TFDo42~t|}RXbc^Xm&fPYC8xr&^#v&Sydap9=TTx9`nL+U=If= zMhp|3!>9@w4q@L@w@iZ_cZ9>BNU^yA2N7Dzci#!l`!Bgbel{C>#g}51)31}cq|voTq5ST%Rnrb*Xwqx>W(!0{apAS;zdr3FzEcd;8j?Bze?O zeRC^dnaan1m{v6EdKC|o)vyV|s zJ#{{NW=x*@*$hOiR(}`?$AR(;oz&aCldiL-^`S8qh*j_{T2 zI9k{j?x&{^wlaA^8;r@s0&q~*R4SLJ7lh&eecMM$SV~To;V9@c4m!SX%I3V z%g|r17<}^j?vXAiFKZlVE{kv45droV;xQ|M! za&9uqW71)u%Nz;@2TcC71pp7wWqBNYPrpkR>fs;(;eZc^l)H)aguy4*$6XWM`EzwW z`yS^gQVci|h^Sg>VX0?^{G=kt$6i3r0a)H=64U7W}FI0`Q-UXNl-RLe+?XB_o{c}W6ryt2R5@i-N7wNgP#yC5g!iPX5;t69ycNc zS=np{tv@L~DO3#PYNh0e$ybtO5CbHWHRfDhE((DNBq+n)M9YATgZnd zMN7f!34oqiMI3o|a77;b>2o+{HA1x`1R2_hgG$yEz(LZ5+d?%Fju-3YYAPIWxAd)n z6XoJHhn{_8L7;?m)$>hjYbC545NHs2QT-`cr!RLfM1wV3`ZLafZWJiNk z3+J9xYRYxu3t9u0RZ?c0`W_Ak*ME2b0pzsSK+p)AxJ`5uIG@!~mvu&8bD%PogTiq9Xc;KQbY=FXruSk zT9{Nle5+MaMvDDY@LP5WOa}wfFb2|`7p3YvO$~*o_gyY(baXgqS|76yoO09m(hq=V zAB`%+PuXKe+NrNRWwR=93}7N=AR1I-c~)zSJ(B3_CYx8P;(AIcrw-DiicV+&pM6AmN)cpwp_;0 zvhHd><@Ez1ha}4`@^`oX&F&)R_T?Y9E&uV$c$*z=JV}lY*cdSuS;e=%0_GGK;%L zDA_}q4N6FHFpv+UhNI4voBeOa2n$))gY69zQy(}}4Wtfoj4V0w>6F%;9#VneN?;s8 zVHmF0)|N|qgh|F@7!94gNF`vR(oE)o&w5ohTSD2fza zR)yhl22~LZ<$FEyQgic;SM@HSMNh7t5ftC<9DQqofHSpbWQ_($>{G4l zuXvn)CVM*-g&k{iJTRIf6_g%=gsAHhNoKG9yeyBVEH`6yBf;5)~4d@xgk{jxAkIvnvp!Z}K1fPYX zEGu(q5@-((N~FN#MsGNROQaUG)AzacE(V|9v&@i= zh?L#YxCYU&0k#rEPZ&h@69mB?tf#(F?#I68KALUn>VW(n3>%Ils?`mI(x=Ww z99k!k9v`Sm`r^gDS>e_1;lA9ML@s4UcnQ@W4mFqTPGMA)7}>(0B$Vu`kct%8!R7O{ z+|(@X|EIlojkWx|&imHBU(Pvm=0*-V6e)_LL{YMw$dYVXmaJNi4BL{0+D@7#u@NV+ z9oIg+$5H5#d0Lkx|otEiV}yH;c#Zo zoU`w@et7iLv)=d2$dW~wbIAPy!_9Nf-v9mozn67+*0a_^!6UB9ESPRr`wjLu*G4el zku4T9qoS*$LS1;~WWgZNX;#8IFb3-KN*%GS_s^!XYk=TMN1%d&K`Uh%{U;kiCRmMgg{WR~-AIx@*m zKkNORCs#1UaP{@_x#{)Llg{VQ^3cuIKtd%CeO?tBa0m*6T6zwHpgo&m%Q@zfp}9`S z-HUW!uye~S0kgAIX1E_C<&mFHnXfim2LBLeb@d}3Y*y`XqAr;BrmV$GqJZr33f zLW}wN*iRU0$XV}a$Z^ycVczlJ%k$3uF`3u%njI3)kFM_~Pmqzz_Pj=v%JkoyXjnQd z`YWLgSGp|I1Q~>~`8OWx$;{FE3IaTzOTo8Vf>Lv7-|Sg9y#iJ}kP8U~WqJ`mvv7{F zAq-q#LC|u!u{tm&uH!rMOt=8~64o zMO!Mg%z8#p=LO9r8*@wykBM)!!VGt;IY+dC|B1l1%`#8cN5Q@1y7w3%x=nQJ6tzI+ZjS$uWj(Dxvsyz zPUFgmRgM|fK`U7C>ov41xC&Oq+S=o&WbEP@s`EYs_g`rAAfHuLK4c+Tp z3K`EKL!{%eK0h2fYez^59s&l55jA4oc*MGI2{gBfH94;g1wcLm39$i*;LXUA&ku+K zWYMcvpMTyVwG5H+xjg@nWnKE#UHr0uMUGIPA(K{lS4Jeco=K1xTF!6Bl+TK@_Iz1K z8wO_IN91}9Zf}$28VF0?7iI~0oty_>8r1AJ_9>x2kd#(SJAwAZkO4ENiv5S0!ZFGa zKS4Mf-dU>4A@Rv}Xai5$@&WyzC*<#(d#-2)jBh6->~obBFnR@~(+0P*&$0pR63V)6 zuh;2_Kv;(8Kx}dWA(|R&tVzy>GW5~cE z8INTulx1!F4V;61-w8{m2b#py?c#B1pUmej?W0hUyK{(*=q2;q)#F6d466Y zTjn|gd0!&L-K#+&dNgt=to+mn&_-ji7>xv-s*|AJO*$l@F%X}_LzV1ipObz_I__p8 z51n*S&S$Q7f+0&tC$Bg6n)|csdx*`;KxDmA#8Zj8)7=P##^=F-qPWHcC%y}{{ceiagSZ;h`QLTpkN4ojBJOvN`t^%e-W zVs#_gV&?Z5g3N+X-P2twJU0^o;>fXh`Y0Rf#uLL(0lLw>xFQ%oXAs&k*;A*)_Xg7T zf|J*&_tWOMW|aaFvlzV|q$oUcbp!18<&z#B9v+ql2#=lq=j45x<*9k6KoFskGA*l4 zgJQ!oZ)HT?@8`Y|0NfEVHuk_`A+UTh(H0zyl%YBt(i>iMsP$R~!e%3bfj;b%Y}MTA z;HX{jatXpf4+I2=*4Z9g-fKYKxxY92hW#PMO8OZ{gZ2-VCfV=Id#T# zsEx6@0FcS0Wtth+-QCrBn9U>*3GpHL-070SG^5eckq!8roib(&IS@sdJzVvkP+Mv^ z2=<1Y-o?7Y(a3@r4;JNNlCHlkhhEGzDMNmBfg{W^hZJy7==*Mu90W#ee@eoZ#&8{L zHbQ2@Jck6>=h;&SB4!=g*Q)GlIiDRW45dt_W!~~Ruz^`34#v?+$e-`ZC2={=nS<22(l@1A4dfPo_56< z(F9q`hJe#(ZFuE#>T~U^FIss^pX>hHDD0cPW|p}tE!n~c`pM9vW5iU5D?Ju&(Cpt* za8IXF<+(Bv2Tk9Npu@w$hX%?k1$c%`vjD~uNAa_;4oT>GDD>r08wJZARWumLh6aKs z3xW-c2aYA0=ShmdmfvO*vAdhM@o|I0_u&0^*WizWLhp4i|JGwUrKDfp3iL z(5qFK`8-bMsY!B<-RXCD);l|J07`a#UC3uP(>tstG8&d^?3W7DX^3U_GGejQsTGP8 zoYKaIL#dXW|6hJzd46mbdw+B~g2uaDXN71F_*}Y;DCv;oLzkQnLLQ_|(Zq=m6N=IX zMcIwcp&ddiCD)|Un9pZ3t+z^9m+4g$ZsPoo$7)+lC?F$o8JU9I3?k`0U<3?dn`5r7 zhk&5RQzrjh>*u_D6thE<*9#m_e4j!jWrA!D`C=$YsapPMeF*6|>x%u6A#5W7WT}+Rcvh>j@Dg*7 zOG9rqLXP;J>|n9Jx!GKfne*MW=_RxWqMR!?vfel-q>Zz#+BaeyjK``3yI#{K*r8GO z1LS;t9zBR7XhfaRvA8{=Z+1HEw%Ve%+x@T=H zgV+%pDQMY`eOPppSIv$z)b`{uza02)9%S zt^|ldKupq=^RnPWVZ$oVtkC>D)K|GSUig+F!Npw;<(qu{?WwX~gs4@U#cu?Zhu{Q}EYLo+| zqHxUCb%nX?xp4=~EAu!Ql!z1WwIPZjP}UN6;TaTxYpG|&$9@3`;9%F>7lvcbE=QF; z3{yNyGN26uuXCs4_QpWY+?i{ZJNqLe2Y3*)Y3_DqARFk^U9<0UAs{?h?klS`o^>{x zOs3P!36em|o)~w_x}!i)kFcDXhYa=O5!PKH>kua0*XnEpBaGzd<5+-DmFk){-Odgw z4fHx~nf*XPA(J}G%96~V>xz`wQXmo-N`zo|htmPeu$&z-pWlqcj>j^=Z3JuQ`utF# zu1w!^!8Z!Lxh@KIQnI2ZR70gm8&0LXcPOQFTrnJ3W!B56HHN339#6b(BMkRsvxzu5 z5}g#%toIp(rCfhRAvqzPtCjRC&4|Whnwp^#*MN`76hZadX?!0v0L$ceS*v^O0*34EtVYJRZjDHuchT-Jej z847o`lE^1r(`lHrVfI1H2NvkjBuYF0r>A8_>DZphH`&m@BXO+Xq(Cai0VV2y$b+LI z*jGs>UuA6QevXb*a~lE1zTto&xCaA6aO<@_F9aN(EP23Xug2UYqx8V-QG32~IxHgI zg;r{VKnI<6o)%E${Gp)hn(sFw&1Q(tyS79;>X<6`gn^TVdlq;(-BR5?#iHqUWw>`b z7zlc8G=#M=2f3fPo=4}6%6cd+3OO+&AWA^J%meq&e680yUsN#6rNXnp$EYAn*Tt z?wrm{Ixlj(te@d@$1+%#E7QW6;+zt)%Il1Qg5H4SOLhq%WjHgFiL*wsp5q+3QY)dk zOpmsnV4v4*$xRZLoN&`9LSzaG9v#i+qfzdfSrU)i#GK6LEMqz~3D6T)zGleg_^~h~ zSijbmTHQs7zd;(w9t|Wy1V#3Qu`o%WBW(!JlntAq**wv8S_x0Y=XFgB#7wTjB2yl| zgj>Ha0Xv)N@BO|+&f(#FKA&5V4hC4ru&>LFQCB)N2g2-i-c5)G0hFP^e7O0%He!wp z=B|TmUMc)s!7D?pW+5A5%@8RHs@K!cdwaA~)qP|nAPXkQPQ1_G?*b$2*NmjF4{|rZ zENC!LS}kJAs{MbQgjgahWnjUI3vanr4|#uO0n5k*hVWcu=;;l*zyuuW=ezzt8(fM`CYruFAB&+#CggsB@vplbg+YJ(+l(7Yn7^ z{~!Tp`KfbBEZggb zXJ2~YuA@-y8_pGlXNdJ8x5ygO^AY00NS#b5RSq|UG*GS7(UF1%C|;W4aJQVZ!GQf_ zxswe|9En_4u{5CF+(`4!xiP}WbC-skC? z$S?PYSsD#*D6WlSE9J6v-6pGY+xZzL`8{-uLmZ4?@y4%#c35B3dR~pQQ zQAS`&n5RsWVeOdzdcEDxyyPC_wPRhm?+8KWZ0LNzN$0XTP|mXv6V_eV$!&Gn$n|<^ z?aOwnykck&v$MJ6>t)Y8XE9`hhC9!KEnmm`8&A?{W4Wmo2+?q8L`ctPL6M&m!yJWf z7#;%+1fh&kVz80->o(Eue#knP0z~&c7|0;7;ai?-=O>pW+gcFUA-?(CO;!jcwA(VA z+?mfkHt3$1dk16#hWp1LqOJtyMMn7YzQ!Qn{m2=1nzMZ{2yR}$%IU6kC>v!y zEHjOCmPi-eCk$KmRc(;^9NIASJ4?x%FLi#Yh^4lCS1{&pZ%%adrZV*7F0> zmamg3o9x+qpM0M6CMOMrpciF&^ z0cr!f)B`4$ngDFXjZlh1m1XEKH-AJ;T8sbyfB;EEK~&RzGO|+YX8qr6CT`YrDn#I` z2qY6@(w|wxK;s!gDgh%~QMo;6CPw7~D1PW1%Xaew(zL`PhfPlHa6KX_ z2N2kJ3^bEl`FKkk+SeWDif!e6(^Lq^(-0pUD&HT-10E=`Js?1{%t;q14Gvp`SeV?G zz7w*K6?SPMo57(O%55z%AP}^hjq|&$_UysspEGKZHzuJ8ex|;kD~y!}ppS7WATS82 zlt!pzI8>;|>~llg9E9vC^XihFW>+&WAW8CsO3R&jbU~ZCbc+qDY}un23{9FeDDn*? zCWmGaSlIxaPGvgjcP10D*6vrX-?7hmJ`@ZwXkw{U`m0N4XM-7Tk317f!j@2L?aAbd zhFnP@hGw(d^*n%-aKb>w1e4yZ4uVYVZZIz*RCFJ}Xp=XTmA-v>Bf zLclKkQ-*SwcjO22oe|5t|1)<;A-EEe%nnt)j**!1eMqoO^2~COfQ%u0KV3EjbFFyx ze_nUwPVPC7W75pO4QQ9>&PV`*bBV#hdBq^1wDxA>EF40oIg~-#G%S0QcggcF)4uIg zl}*1ez*rv~nq1*k?*~z&k}MSg-IhHYl-vgfKt?nrm&=NxuwCkO-8v)zqEu&t&=bK3 zhMxK0U@{qxg>WpF5sA5IGGE@9wg6eM(g4Vnm$E?5khug>SxS+Om<69U34PfqOhXqq zJ+Q^EOF8E6ah|T;mp3p%21_iHGAQ(e#mPo=esZ>tGh|zm7pbg=0HFORq&Ex+@`g?B zGHU>gKy$x0Ltm&>7T9Sm9Qd-7FB_^(PqU|@`KGNZ!_a$)2;?-X{CjuVE4!1`rWx#XfGG9a z>8LIR9*gb)6iTD|7N5=c^y*80k66o+hjd_mQ); zw7=mrxD>hOpHk@{Y@AaYu6)1FDRPwaR&p@hTcljK5*4)EWMAaEC|Q2z((Z!jAq8`- zGL71fUYVtaoXV9RbBGiqme(?A)aPkF7e}iqH=1K5Wga$yq2$VX*rUKwvH`$ENpLYy zC8-Oj(-0a0odZ}xSuQ*w%aEGgxdwIl;8?b0Gz~+Cv<$=z1_73DzFsEVjmIjH+UeLs z1zIMJLmr5(zX zab7q`fCOmW<`gath8&d}LE_kZc%}S*&hCgP^U_I&)$bib$qK{9VTq_vqMXW=#j z!f!Z@7yu|>hn#ed^$nvDaz~CtuV)h>he$CnaBQf>VX14WRvOgwF7Q6ciidMz0}4YQ z&WYzCBeN#6dEaEcfv4`@QbOMpD8XW+lAS+iNSf$!GJD&&dXIiP!DWDLl4s30~*LkhEQWtHBGqg|tbyqfoMeB-A2s#OZ!5}NZ<0W@X zhz=I2p;EVRW&;@f$+2Z0*mAu}UPoQ&3jv8BVwZr6fL|na!f!A&; zZ=FyQ2Qb$d%mPm9-|tH>tX5Qv)XE$lx&W49|C)#0UG0x%Qvw482A3ss0dh=~c_uw6 z*D}}rl!%^L+a}dYP~mZwrN13=DIwyFu&^)lj-oz9#Ckm%nPu)e4)n&*ceUH}V|0n$ z3_+V*S2EbSUu1?I5t;_!K(NnUd!Fk{uoLntLp8MHtwSP>h6FOPaw9pVp$%7v{mlGf z0FKA7{{2i^Ck!H=@+?nsC@ve=e4e~?0x}>><^=e8m|q-15G$U8=gJC(^GKl`Hx*)E zVhFipv_9v;J{b|AIT)TZ=W{lLGLu|0g5mGD=51a)*Tm)iM6y6yOsJK@a z)ZlYeLPN<>!3jang1SjYi8R#hVL1pHZs*#nw=B;LD9GfHGA6|5n6FIAL*tk3OrFWlW6xPvrQ#P57Y8mk?P2b+0=MOlr!R{Z%h?722d)&1J3HcwW8wGvPJ?7V zbWo^xSk4EZ%ONDv{_=X&-N|a!JO5m`28HQ%syVKoOO7%Fl-^Z#hgPoN*G%H6uzwjQ zcd<`Ua1?MUJ?)wtif1;NNNw^t;B^oIBQ=~~=SgR1*VQTP5oEzrSI(@nQur&7eod0& z*>h}C_qABeX7Y6AbNwuGlA(M(7m%(DLrQn&u5|hP_|CdkJA^~ph+7d0fuXmC+i90b zC%q)NuR0C11g?EOu9NFgAXnM1+6!e@)w;0K^J!+II18E_H5$GKU@v*`q(otP8k6wF8vhf*e}Q z^-${h%E(;pc;+ssgeE||vLQil6+*&B0E_@Vq%0fEGQ@3wv+jAl_&mr%uHPdg zNfknU&Z>pC=Oasji8TQ37*0NbY%JbO`bnJ*l`FB8>}{u;v0?J{%{JFju%O`q4Z-TQ ztcA}4@^{0W<$-m!gEvmz&}Off90?2uJd1YQ>2k35bIgetJO>;5n^<@zRiP-epvyu- z_fZxca$PqRUa3%PgCUcC_*_ zaMaL!j=2d*Qb7-=MHyMau&STCR)G0^l(Ka@X2`Mb{+CN&1HnlsyO5Cus)2BYaCG3^ zue>Ccff#|f(DPw5qFbj8bdU+=D?_L`t3#elNqVK3is8>PeTwt!tR2q_hFji`HR)?Q zola!{P$?1;CNWX3cQ)|-7mQRCs3B6wTeS7g3dx*zr=#Wbm z6R?aB@ejnM4$amcFaK;{lt@xelf%%-Ax_d=L7LDnAk84z+yMqrCRgW>Sk9WtTmrIW zm=6jpSw|v&L1fBwb{lG?UgQ-+pZ8(l=dc4I=xoR^Fu1$jR;%09x$O6~Ufr(Ju8Voi z7GT~OnLL;Co3n-JWh(P%Yr&r1#}R}rX@Ljy~ zUm{Q(6qUCuNvOO}2T6yG{bWOm3XcS{ykG29n~j|JZx-0u0A&6k^W<{_w}iC=#`CX z<@qm{%cV*{X+U1I2Ma`8k|U3^$?h_}&;`%U!uKp&{(#J)pdm}==aK>`p?!dB6n33emF2q5 z4~o(i5c3Ja@PPE@dNW+l_pk4xlBai8MyxWjP|6Ps7_ys;5posX4@f0XY9uJj$<3y8 z?CN?o=n>Z0rGv}RhYcKuzOtcXN4fOyYh(hs;PX{hcFj7G{Y`0ZomW3+4vB#9H@&HW ztjhxo3%K?)sX)aS+Y&Cj92uf@3C?nXN{g<}$IgX_^7os(r$>Z!-0P9YT$VC*jsCK! zNbND(^C`QnwcA2OIvo{K00Jg9#lfiaVqKckP}XfTL}~?Q4>^0v z8NSW}&E8X)CWT>xLf{orCD(&R4OB|H5uS=Y5?4SZ79{~pT3cD*gjf~xfhBLt9m9!( zjK?bx>E==;LXc~kXEu3ed28>N9%@;V)LAla z2deW@=AZjOGv6R%wV`N*l?{va6cDux@7f z8xbpK+sLKoPzqhoOG)+dSoh;LzB!RIuPcrY^7DAML7pEwBBev_ItG?ItXI1o(Z;sO zZCq)_lVe7@NEz#8fer54GcyF~3TpY)$I4xkvfwu)RYFxPg~?{bqJi8XG17M&Vvv!I zEb#Hf9BZ+4R$6Qnb|KA)CMb%nP}$F{RRn5TL5oorHbGJ0rM275CM<6m21>tT!;D63 z5IiDS?y|UD$fK`=G0H< z_vu4lc7G(~fB`ug>GN(Et@jx+wj$kZ+%+viwfs>#R953&ju*_}6$`vHOd+vic;phz z^gvLT!}2^q(qo^4_>4wn+L_yfmX-c;EpQ-vj<^JmgKQ`W&6oNeGLQI>xdb$ZMBbOo zbB0Vce0 zKk5Chn5Z?f$IW%wmpU&XOu8;v2G$!U|7Ce<2pqbK{ zIWZ|`v(;)okLdLz*yi)qN~s_vlrSDE19vpi>wK;R1`b-pdX3NPII(WH)5#N3mYU_D z(~i;}mJNi}Dq?3xv2_G7mLLL`pB)o438+jv%!^Qx5Mfv2spt0~*am}kTLp_;$%&1K zCAry%-JPK^e=pDLx(D(UF~rzlA~m@WyP^E-(Utznancm5cl%=;>k=9r4t4ZvZIi;z_|ScFY%u8Ux1#rgCV)O-B4z zg@nr5{CtKG3_=pmi}}Mq%#q8COgVO27A!##X6QVxAA*>^bI$t~*^kPW6dD>1X*RUk z(4>gFLUrINa^G1I&*z$FcL!7#MSjjb2R0iw;X)yB-^>Tk?cO5DB^T~uRajRPSiVp8 zzYTwrc6B~*SW51Wn|IMI6jpoLlYn*O960TjW?rRZkkjD^No9prBSm$sehhaP3=@gc zy-rF*00%IWlIwGx&oAqP!67N)d2!P#lM?fO<(;mGmy4rigaHG;M2O4{!O(LWB8Zke zcq@|)K;@}1(J0K!s^viDg8}L1ct2=7X>$l9h|R_? z1tA3*Ovcgg$*^j6NCQX*9+pbI%EzP`Out_u81#)MWa8MB^L8DNcZj6Zkw7Oz(Ch-)&DFGtU;kS@l9-96HiG3uDK;LpfO7mx>nYg@I1#+nTKFIuCxDtSF3N zI&?;CTl+&KUK9w1gAv^lNg%}L(5CA<=oRuRa>6c%Pyq~A(t2rvqw{aH)yPNoblDFW zv^gZk^Png6b4ezro2vH_2C2#HITVCG1R3TW0O8}Pc^{L`TYCPiZ|=b;`9~US$!TMS z_~%NNq&=1e?bv_JTixB1b894m^yiX1-J~ExuH=?CCL?z*%ZymQjJB=gu@n~q6GiW- zbpeEIG3646Sumo2yz$-54x1(`G}8Wf9+T2avY|N+20=4Rx<(#&PCn;e1}2wDK$P9D zfNF?c<;u=l7^m-WAb}Kx9LQG&*>KFf?4M0OaVAS)sdJz}RESZ7oGccqe?U_rrDw^r zWj$A`%|_%cAw+a*!{e<>9ecHHI7qO#HhzRHQ>St2Q><5x<)Z-dyc?+Hxy$r5R(Ckm z`hX~4sL^(spXp-AJo9`vZb!0O-l$#mEnX&<9;-PeoRkj9MCQe2(9SVZelMzXo`wn3MeS^Hz`&0OzA$}A+Gv@3icWcb&8H3r|2iGmEBdd~ig^zI6**WU33d?R4zSPI-<*q#jJe`pS*zci2yn2n z!XnuOzBB9F9HMjKI4q~V%o|;6H zQx!NEOeASgg4FTQ%QO!Q8V)iQ@jOkrjiO^F2sX!Tv8-~s5K26EtwSN?g+>8eKmsXi zA<1WF0O>KobZO$A&F(H066|d7f*f;V!{mi?6Cm2v@<|S+AtfKr<7q>+C*_zg^Hx%x?)QNVvxmgNoFk8axvM2u1B$-DON4K{y(5fXP0<1A`R}dbS4gFr7wQ?%4HJXYSpq10V%~ak@Gh6iMNyR@ zCy*v9yd3-}o7&*z>iPAJ7!r=TI~2tAwN9KHRpMlyZ|6V`hIJ-nJBy~23*0Z~H`hhU*&}smA(P>C-q6HWEm?Z&((&Oa-;BPgX zlo*B-N5wNN(Gu|}@thnpDw{Ord}PRLv|Se0LxSAB9bBq7XAw}+nCo^rs_nknxKdX3 zAUIkmN)7@BLyhRv>7Hh_XWt>Wk##633t*F7U2|RnQ#*lBO)1U{ftDQJ%sPiuWku_g zVMs4G+sar$E@Q&a5}IX<8IO|eg?h!Q$3RS$^~ibP+*RI(&a&~(^4Lo52Wu+tv%{c%6YN2hU;hMd9i zoX1~!$Z!bUM%k~-6!(py$@;(?h_Y9L4Fy74B~r!-S;@Z0KGFB z;VOQm!e>cE)5ZcS&Z3Q<+<)2vrqPh4uN%?PIeT_6&;!*THY69P1rp1vAvz%M4ABy! zZ8S`h%dz#SG8xZa zA2Ic^q8SH(ECmD{yxwkC>05bQXG5zVIejX><}|*nNJ$TcMT~#|S*lH<+!h!?lNFEC z!F04JfU{W4W=^rRV8es&_q7t;u0+_*j#ktPKy?W47|5o;SI1DGTNp+!1~mq)0QM3_ z#h}dsCZDHlFnZsW&0kngo*s`kH|xrOZ#2vu5CS0Illlt$4Z%+-TJGCi9?lttG=`=< zHTFeD6xrX@-*Bi*>y9T5>D5T5EjaFW5;4xc< zEIE?%@cDc8)!kzR>7nP!y;1VHG;#x3H5c6VYi?hj6=W_r#NYG!1EKT1d|!=JvcKHh zphVo9He0q&H-~_3who+UL)->Ui3D+-qa!MLfIyaM=#XdIZp&M;+e`b))`kUeo%4vr z2PA`{*EOg;zrXK;mN%}+Q)PEQv!`{#^f}+z!4QyYn@ngIEKFjtD9Ln?wf6UQw5QX> zqSuR1s{};6^Y9l7L$%uQWfwj?QkrG(FE@k98^|R_@%*)PM@J~+GHnisvDHG+l%-|a zK;-#OCK4sYBs(1-F&i3L;DFrFy$h}b0?4t(vJi!v4ndwX*-i6i4~-h@K-{{X`>$s< zer-r0(D8J*FBB`Kc}Y#pB&Hlx!b5Vij541bh@I;hdNmsx%U%kG+Vco%(x42PX92JX1Kr>n4aEpCh%xjCY}JTW4yk2> zzy(k+{Kzvd75HW&IKvbhfC=43^N93lOaP>&64Gk0|Vj6^qx>BC++elVcIGN>+0V~M9vSOr$EvA*&!ve18i88VYD(Wka{G9R(WNAVvyosxS$(y6oV6a z?n$7LO0Ti;%5Jrh8A)Q!;ykkMtJM}!nKdLAJ6MfuNUgfxWcXXYew{VolY^- zjJS6?e!kUey>7RqFQ?OpCIW(3eYT1<;ibUjAh}B(?{oTJK03SyXwH^!2_;g^h{2#N zJxZrZm1o4HrShzEKA5Xcr_op}M1sqq2=)UpX7&pnrsaYS83{PO|KLDrqSvph%h_}a zxzp*udQNk3I2XF#GB4aAIvI*69s;F? z2=bGkTi;677RX%Qw|SoG-X1u5Ilo>A9VO<=?w)pBN<$4pfmiOw6&N*NghF|q+&(z3 z1M(Kcko0R1K^x9wn;CiK>`OmV!rYZwStk%cVTE7WFZ%LaB2pJZP`h~yf`~L3TfTWh zb7|cy6mnZ%SxQpnZg=Qr5GXv@v^kw@XGbM!b4k!Vk(dO;$e9?r{BdxOEB4aT$D*rA zWfX96MJ7mcEUcrqC2UthP<0v*9`oLw42I!Q3pgBlo-+9{Lz3nCl(A2jAlAA8nYyGW zO;EH(Cf8ZylZRf$ByI8Q`OA{5PS?`LMuBk z5Hyds5B`NUI`)P=x^S?bzgJ0`!)9k zLzVrkdn^0i*9HXp@OY_W3)V)%as>mObUZvo$Z{@OYr_ab41_1|Z{z`nw(Fi4so^~4 zw6fYjb~aUMAUKT;!_{ekR!Es$1%e7!ro^GV?;HYh12?U&(-XNry`OrO=IhJA#IUk~qjTdJ zJ|Pud%LYkyRPz1-%>;?c^GNm`1|yCh>&~@6Y&V;dbf3EvHX2H2j)-U@eAyIOgobY1 zL?p+$fK;<*g@P{yFAB~-XC}DYK9+4g&4zbgc`iMRK+l48vxyKB!3Px2oQ1-pz?0b7 zDbtWl(kqw!W?k>HO1B4G)|PhqB3-Y5uuTpr<9yCqz+yxo4(H1u<|s6@rFB zINX0Gk(uOEmcn(U>NuIEv|w$JWse0z$*fpn=mN*cXLXF)9!W-&a+;_F9+k@6O;4|y zPkLF*=hVV-C9E7<$8$jNP+FF}d6zgQT?&?U2{Dru07qhP4@Ii`-PwUe1dE7qJp25)nsli-^FBg=BEVeo7y*W% zhJgfGt1RGTc>p2-sg|VQ60(>7pJS_fmkXxo{vAuTeBgO=mcwA6b;c0koI)D4VF3cC zpWR+o*M)21ym9^Bq&bFuPbd+N6$XI~Wh?Y7Zy0qmth%zF+ajYNUGE_yQy{NLM<5l1 zh^+_m`CG5yK+wZN_c0uHyX&=L(b<4Uu6SPSf;-3^helT`8T?dqMa~e)((}O`bLnq= zzC;YsGnr$7oMt_cQyKHkrI3*a%%9fVBvK4_957uUu96isKZ8Jm5EGin2A@kImq;&i z7^J1#6@K1~AmBJ{HW6)8+{(fhY|XkBvYU+%QCWy4Gq%%;&IK zwG|NLc#x|VP)S*07({^th~;uJ$p?Uq$9;OE)e66C%3?^n1fg;ok|3aRgCkJ+`S6f5 zIs-6yp85avS~NkIT_)D0=UXhM(`M70iqS~dqritNfibUAXcz`SRW-ulYy+*^;UR{E z=ZhWyH3XUs35vaxz0B;f8E&9friS@C;L z^FBtHuue9FFq9A|?0?(a?2GKtaaAK*wMS?Om3hgp%v$bJm!SOj`z6nSfo2l8Uh(`{N2fXC`ReD~+e7o? zHtxns%Ct{A9Xc9q z6rH~ZL#o%)Np`7WBUaisWnBUcVhVDpYD?~6Aj2bPljVJZf%jE(9zk7l6?1_Z9*|f_ z$h7$AV9rLn*#QZ{H<26I2tfSN6Y&O*j4OA$vgKM#y1CR{@(nSrWmF;t_ z$V7%*EXr7JZP4a)9COyfhf8gW$A57r^0j zCB$v=kqTiMk}kOk-fuiN>zMB=_akR;Ed*IsBtYj*zq0zzh5@B#nRiH}Sw(?V|A-XItXgFUbO>h9YxXWqy8#0%{&b2@Rv5 zbDwwmU=y3p>y3cnc|jZy)I1k`wD~3s!*(04gB5yKJg}Fu$DCR6DEwSPH4EAtv;e}> z{74`%4<=JOUpvP#2`zEJc^bziOGD02i%*6}m+vOC<6UVkdlo2sV*73)RFXoE8|-Ds z!VyiNTN$c#esUJvd4BS9A@JD;gfN6$!4aSWBy|I1;%qibJagAPT{owl604{6Gm1T* zPqGng_~bbEafR=uNTotTfFp`?9SJK{pP5WnEs4Y0k4_)0i(ug?TT$ixVg=^*>E->E ziX0>e`3hoasJV2skPkaMLIC#mXro+nT#%=AQzDRH9Jeyh-x&nD!+u{#q&@nQl#Cp8 zuLUdaEQy(8=8M)}o_DwB%?3rTw3_!lh5)3@I?IIFCKLu)GB?f2@5?QHG9p2Uz|DA! zke5hv8N%TlIb`ZO1Cq;no}C>b->x9(&}udqynnxvRtu}T*_3D?PoH#>ud)S`BFht- z+g@f!Hs|wZg@*u8;n^%W+^$z1!F;ZFNbwtDGO0=vUs_`0v0_emNU(bAigop2rXUIT z3pC~KYW84sS6Y};rwrZj931d`p9)AAvU1^&5@JLUk!H8E1N7#KbqE4J2Qngyoei$P z4hF9HrTa(Gl?NxYiSu=xmSa*{vl+3wtKz2pzI@lshWvK12tWid9N?C?Tbex_<{={q z2iBlp67C@bRUqUP6zUyA;_%AIS6Dn0B?dY97llk`Cbo}t&h0KO(K~Nhgx4k zF`iQlOGDZ^UuC~?v&L->$-^x3#cKn3I4leKIFwV85KFwHtXP%>F$Q6?DR#qbrjy01 zLoX&5vF|vS7~~*1^2ABw(mBQuz#}3JaW(_Yw5N+9kfCNP1nwWXQdZ#ac7@GNr)8;R zXQx@zX&kx-0ry{alBr48$Tvvm?jZt_Q|@;g zUS;<~)qoKq%e-JP5RxhtwLNauE2jhq;MAT(kwgwuxeKBEAT4g9Yl0FE7*y)Da|ZhJuPbg83%ed)1sh$y_m1M%S9F0lz6 z8GD$vi^~PYda~dz6|AlMtXN@_!p4P7?0i@@xJi6$pu8YvAD1ivEN4pC)*IU1Gy;cG ztfhj=$|75|H8ku38>NTurX`+>e56bw)8})I`0OcW&lABQ#pgNz`nwUEEKF#N3`^af zg4;!BlA8|z&skRV%J@holR9KW6OoeDU9O%_|-cKmV86|dzGD1Ybn%q@U3fbq4m~)m3C~gEi=iVNCT>`swI3Q)BxKN}u z2^YoeLN`WYwdYM{&PYPenyT-cbDc4$T)+zh1-T=`&LPF@0Fa$ilWpCe8@B-Y&3-3u z-mHz|!L8#4KkG|uzUJ)YihZm{_SkP$--4CSj)=3+Kmb8D;VzZU?I2YW`a&LB2D_&O z$Y6F9jK*+|IZt2FrwD%H!IS`og`K;6AqZe=BapI1=>rNhPu{Q7De{A=Yw>aRq7Nw^ zv)jIAL2H3qlG$vTIu;WVvA36#sIrHIq9pGYkKJi$UesLaj{7Q?-RV_UP1-yaMj4CNE*A#IbG>Uuq! z(GHoefFMHoNwc@b{pL`K4H^rkJV!2(d2>U`bq(}9ATZ;x(q8aHIfy)GuXpn_rCdP~ zBqs0c8#l`LyC*|g-v9-ZOGcZpBtJBJ5;h>&7o|rIIgStoh6(pkCK+1r=4MHFXq;t@EOu1Co}_$f{5iQ z0{QX&$wVyW^;+{X7+7`ax%7N^Qubs>YiYN29eZ$DF_4CWXM~_}OwjE^XxpskG?c~j z=61r3Ms3hhLfP*VoTvE)Y9Ej1^KLhy+wJ$Yj%ts*T&gL@c&wlXg@F**KvXC*x<=*$ zoE4A_Qd{;l1f5??CP5Z3W&2Xroqpa3JfK%fXYTAsAfSM{-Hh_&%8(Z5*1v zRdq%(dOf9s8LA{b5Ko!n*g6l?R$r}Tf@hos11*zAosCh4Lfky24x!}t+i(DKbx03^ zsaLo}<{D&0P#5H>5gM1!H3vY3r}mrEef7+{yM#)u1~PKz-NyMT+q|0Np5IwkDCDf< z>+l@R{br*st2lg={$>BWwmv1H%e2wl%q`zf?db6QARrDAfQ*%n6y(5~%i+@C$e=QP zlPAUrsVlY;E+mU2r*GDZUi%@NTsDmA`8VQR)}_enU`ddX)-qU|xm;PU)f}vhJb*;$ zIdp!$`u={Ogef*IR$6qz@=A+9VCUAc}JyAMvi(efzmmKkAT*f-L@YDUi<{(VADFdGY0jElL$*knmSgz8ETodjPW(Mrw5!Q$ zhF~4L0>aORBLE$0{}ir+QobzLfg<=lNWphkV*@OCfbS@*#UYsa6+KDWUCrnseB}(6kNE z9NNr=80RFj-7yp>u|1#DtHcIx$ucjIPG?J$+!lMyIu{PLaX!iljP3!qlNsLLl-*FsA0{6>p~E^^tsIP7bMT* zKag4NOFK+*Y%=7Y*Eu7kD0@70tr?y@X?;dg>;0hnm3*LJo3kcLLyhM}Zc|Z}`^FG- zlOwXwgj|+YQGC7$jYGoZIYuKH&>$*CikaW9$Y7V!ElCm+C+D)!sys3Uo|t5>HFy0mQ;9JN4qXZf|4m<=VE-yYFlog^BxFLzsBC8=f3pqB1J!}q8L~a6t#ba*< zg_bu^U85P#i?kRlD(-^p1wQY*X#+0VLWHzItUMpUj3Ag?m&Ju+$r%yJ2AE$T6F0-UO6${tXRc(IVDN1-PS z0}2pv-%eL^_p5S$U>QsCBN*^-bI$_JPZ?7NQb*8put`UA?S06IgdECz`&!T;Ky2W; zRCN}C2%_VVWl5IB_^8tyneY1iW`&UrIz#9s$=mTxa;f2m1qb%8D%2JRg6htlDc)far&VHjO3uTnDJ!gk46%QCUrmy;Azg;F>YfVppx~@Id*$ZbGs`j81;{b^ zOd2fDbt%DJIng9a(%Q3JH8NY4WJcjrnG$5pBuETIcEHU)N7e&Kx%bgm$fv&T5?a6m zA@9)uzc*TrEgT(LFzd!j#YVaof)(~B1_%pm(qEZp&-*|GGL)7TSl&$eKAgVdbeX*I z`+cPi@i{iyV8F%#vNAiEi3RdOn9I`@*fSjJwcXYyYiNj(pDS-D)*&~|$j~(ly|Y8M zLn*LkGtw>d_RJ+MOXL8>W@Ln}ew1j%b1VCP=f3RgwF`AHAFY-kThhZIhqc=>2uS}N z4s}NuPW1uJ^PG1shA2cTJQX0!MgtZ;v2!XZ8lkBbWcIYJ5M`j`lES$;&w4FGMoI_c zpk%z~>*e!=2crfy#+q_$HG)^YZR5qpc^SQ(^ z^JsS`%a>dNJin3-h=E|z9}2omZ>G7C)o7hPV$aklz;Tv)CfgYe%nHc$TR@YONazkN?ws+${y7jnO9t%| zt!tYDPHk|L$jXJw5JUcItbX^aFG(KcyPrO-#=C}?&3*(L7MszY7E4G&iflk2>@q|r zgM|%4&2=C>CfmxP7&Gn-4gaVQ8?jq3Sfe^#o+0jOu&uJ1O#enAvNSNcT z?))Z!)o!c6L-vd(6W4^tvk{bR#e>JhJjzN0Y6gnO2!SGTGL#Z zMfXPxe>{eq<@-ZXf{Y+A@_}?LEw_EK!NB)nfYc$Ay6_GMxY>jiTUPdRXu=9Gd)y|) zmFtfs&8Usd8oF}{Rjykajz%C#@)jW;$dBEw)+K*$2~oT0Qbs}u)u1432$Vf9%&^dX z!PPmQ9a47rMDgO$=d6?Rc@*lIOcaxJsZv*PBvy-uA~^xe+*}>x5sHj+ih{!fm7(Bn z7CCJ%voLf$dOIK-ON5Ocr>1MV=K*pqE2Nr)$2@X3+0fE`+fmB<(FJ&1QLqfraNRQB zocn}RLbeLBh7!j7GvcJryU>q@6*`81xf{93ly|Q=34~6|{RG*R65ra1H212rh6vd( zpFAaGUCwS@kSaI#;+*ju`J9hNrDNsx#ztWBIpF-&F?sY~uje#I_8a>mr&BtlQ&uX> z;o7`E?BSQ`n55m`>T}#h&icsT-^LT#*^z>F_ahg)(MBVW)Fd5jOnK0CzGodB=jLu6 zslwtT{f_HG#=&r4BjQ=NTFqv+s|lRX_4iy8eLSXF1?g~u|J=zj4SvtVNp>!wS$YDb&XmslS@2Xv_QEfEvv z-NO|iT~615TtX8j46)o@F3&TsZZ~SrBMV-W@gVh-`+x#V9O2xeT7`dLjl*g$>kPOA zu-<0{4q{QJbGk55*+nm}c{T{~bPRhM;LM&unQZ6xO{XOy<8(Qn5A82v@(N{;4U!9} zWDKEh4{L}Xj)p{7zi&7+lV@{CE*nIyR97l~}`;hAqpddZa#A}aNS%Hlk#$i)9c|_e>NbDq?L#gWVgDD zq`$i~xayDv$ejyCc^|QFv<`%B9Wuo8&Cgp`JVhQ8OmTNX=-n4*I4#1 zh6&s_5Qn;HU0tVv`GPd)o)|a(T&cCZeq^aNiP2*@JC_(T7A1LIc!mj=LN&xjj3Xa( z6b_2W2!j601R$7Uo!^SIzynY_AA`bVic-PhL3X>^B8>(faih`cNPy*7G#RRz#E9Kp zMgQAvk&n7vl_ZU5Go_0;vtT`giMsPg~8B*d_kjH%7V<|ZWz8@@p1N(fB*1NRy$uh7& za=K53baO}{doZx}Dd0o;tXp#9;J%=yhjjFwl8HXwq$z z>>es4y15s~O;&Uc`?xLvX`t)1LPy#2$3V&F$WkpUD?HkavzR2DITk>tdA~aL?9b(M z;q!)oFGDu$57ZV2DisrvyOhoz4&D0%1SZQB*B>c8S`;o7UdiS-UaOu^f)QZOA?GSP zN10QU4QS*U=gH?$pCgpQZ(K;LH0%fk`(${=v@T`3Ud|q3KV}E24yhSwavErsi_BYH zC@!~iha8N)D?o9Q|j0vKEz53b`%jR+!qJqfMN#%VJdGPZ?Vayn|r(giDy9{`}p z^;%H26cSLc1knDzS;={eBQ!EuhmCG^lCw%2^UObE*kXVhp|bkQf)<58nV_ijxxKwI zo5JKJe{V)!GDkuGg)~OLd9C+)-D=Hdnal~4SVG^fAjtkM(?9EZVxDth9}a#NSe*ai zP%FG#Y9EhAI&aM;WIdTY%_hHRUxLh$j)bC;LY~c3%DLTE-@VmJCBB=@&1N?9I=MFm z+!pfVOF@Qd;L@tJ?-k<1I`aO(K+i=bPSS6)L7ewXHq0^-!aj1rrsFtC`Yl8KUQKUTf6ixg}lf$DMKP=dX?q_4ieA7Iw6gapCDk|KL)vbwV2e( z&&ui$vX1`YIh@s@=b_0EbqyS1;e3|`!nhOmG1)SFj{9>HIhTy*d-D9YcXvg8Bi2l8 zr`wf^#QpNe z8xlN;;U%|w&4SBNHI|&21!FKw za@Q~B&22%;$_yN6H;r-uj8c%-tb9m7G5{9~6jSNRF?cpZixxuV`#_*Fwb7)^UQdXD z$!MN97VO!tb2!W) zDaS&~`T`X8a@K^Kc;)rZBtM-Kw8SI7;*|!>xj6E)jnwSe zDO8t)?YSSLO5FyR!(plnH%aCE`TQ;HC4%@eZQN}Y9;JaigLVd3YKkIpS$p!%Uvo4& zF=ujTv7*UeT#ZP>{*`$oM~0yzmj$ghyAp%FCGgE>|1)Z|8MbFvpT$h%MmAYpB9qpaI;(qqzr9lOHHGav&!wnY0r`63diYx&y;9^ zH|aNi)+aa$MSC~Fm<<<>z{H4Vm|l~Tu<*^|7j-IVFQ5INyq7rlt@H5 zMNNtI0NgB8ZkxegQDn$1*JOIPf0MbdfWgXz!eL3}0qp~o6xIbAI}WBI4#DS*b%7nf zA)TTK{NS@65g}@LUAY+7)6>z{UER$%=9D-YZ~?~eMtiF()f6;$W3|!ujcYBZl+H$g7X&DRmcTA!~Xnx*!nuPl!&s zn9i=K0VBw<z3 z|KAVEt{TvrFDW}W!Nxhe#hROt=TGWD{@(t2P_a6nAn}hYwCLTI3hHZmv?`>I`r4GY?9(^08WYYa@Qq6G)(MAyd%)I;0CmK6VcTyEr9{pUtO4F5z`#?G}o(N zk!W~-qWU>lUs*FFQ#l*;Kb=S}83p)}tOV23S}n~yTuPlC?ZA@3IPC-8g|mMV=ARLd zQdDjN5A?KH1+ZCSRC*%z_g#=@a$d2nR1wMpV`WlF+wpAWnVk<>t5k%V;o6I z|K1)Q@ywxUECCy91CsE;7GwJe63NX3dx(>4YCuTTTe~#iAiKk5q<-d$o$XdqU#E%j zxPT#tOrg@EP-0B3sT(D6Lj@VMMqBnR7~5=`1ZVZ&V9@@D2k?B4JH0-{r?-dBq9FeU z$vAe_ti?fB%sYmW5f6VHi@+e)_HaMsul1n75-39Y^N7$8n7w;T&FrX*=z9M(KqVf2 zzcKbrdG~w^bS8o9QuM|SQ(jZd=3|%gpRQqf7hOPu7YTo4o_%IDq6DwDd!FW=akSdP zq~_u!95@eofZV&uUxLKW*b?qq^tOHQ(r!#g9(ZMfWdmQ&non=E67RO-X$x>g2u2c7 zpE#X&SR|!*knd=rHn38(O}~Cvui8IU6KzU5K zvep9ulDfy8Hxn$(tf6bY54eMC1E@C*)$&q-t2a?ou(28EBtTbb%*CE_8QeL7zlAbgw-M~q z(oXiG^m&7-scxhCf0b6_;Mc(0=f8)ONy8C_RVrMrTJX;G|HbSP*`%;r(rT3 zi!9c&0d$t z$8X4br2h%S)^gHG4Y8%DHS{gJza|H>N~;Gj41Q9nLVU$#=< z&<3`tV_IOB12y70O7(# zIA+dH2jN69*iD=sbY$qzDMU9_na;x{eV?e1!%on}Qt=OvVE(T8IUmYYH-3yX9POQX zu>$PY{OtgO_$m{Y>y7X-=oUXfE)s=tc%(+68K<`Lg1IiKDW=%YR%9%=ALL~P8m|G3 zdnO@){b3*D9_5+UChfk;hXCK3Zf(in*&`y@JX zXFTV@hGA5<0j8shMTh)JFuiI1>^`U(5{-zc-jY0OP0(C6C1=PbO-fpjlyvq}tJPAs zsgjUc0USbIbp89t3**CruW(v(O51*EFGHgydzqVTR^fq%l`x&(u z{FwqOWW27(R6!k@nmEf{|)TKL~>8!fHdao#@CDr+_EAX zf#OdewQJlChWo%sy(*II(x|siL^h^Q<0twH)-KUFv+VIpdi+pHyM}*+HZe=nyeCPlw-)FZr{I>=&Gbn zFq{gSk1(iA5+U->+edHqZ$_c!@lblD5An=@Acri(;W4%+0XwXfwpLjW z(GYy}WO6y7T+Ika#mJZG9s(j%hCvVa_EUmL%PZl+l(ok04IlNW202ysj3?R3^e%0J zoyTKu>nr3$TZW%&aWg+63To%o=A@nRFaR2zNu7?%JS+a?I5e)@MNo4!q@fs0#Q_0l z!(ZO9QkX>aS4YJ1$$%vo8Mbeoq_iQ1b$IFDInqlBp6NLpB+5ZM#On2MdH8DAO65Wh z4w{DQbzqrg7KOzU`4~y%xvjr3HmF;3NyjAuA6(5k@js> z@D0>qN1bG9a?0r_LN9s@lD*XFB}FO_+FCKg__?%x-b1A|;U z#i>}(iLSY*Y1i5ID%61#44!%Dx_=pv2=FY>XQ}KKXVY<)KH#lD=~;${!)p}S?N-d` zq9m-g9MF+RD&RVe=(r0!)nyyru{Vq$7bQF;3Zmm68qeKdc0++GItCP?j1|);_SeXI z@0`*1ki{rlm6*jzT+Ev6C$(w}eozc4gLXiol!V>gK%c`PV8tEp?#Cuz`b@XSzI@h+d`dx|_50e^+$*(a29AwM``f5uxw{wTD& zyOr6L4Mk(-ZTjS}U}I#{`%G{}+ew&uq3mlPJwFa54ko0s(yDDR`g-Kjhv&{<`=B^y z^&;RHhz2eB%jC6YfJ1sO7rHo&JNQls05PUFJ)nv`h_2VYhn;JzIPFF0i(Ko)2TWMv z%}8=6`klIef<>DUM#t4f0Ic7-U1+O*X6(+n!KH3o;xifpCVsq$@X8;mxY*k1SAAe` zqqn9Pf9WH!F{W>>0O*QP;24>Oy76q+*!2#|MO7C4XWm)KjM|FdHa6t4nJ&7iIm}I#H;$%rkJ4`GMi$GU zRi7!W5B_fNdfTZRFa1wKUvG+xphp2Qh)pZBqb~d3s8#&$t+R)4cNGN%ReI}2?%I3|5Qcihgu*fr{cN<&E~ zj7H8aykt*UxPqvSHfEiawu`)8Ek62R^0T2>IeR zY$HkI_@d*LN%S2IaKK$#J@zYBOrP&@;J_3 z_MU1oB$FGS@8qvA!8YLXy73!#BgwP0$pjJ&~1Ge2~Jp%cukQ@QdvDAt6 z$B@UKcK7?>hB1$X$V23!jsRBNPs7JyHSg`s_yHAO9}0-Y2&&Yr0_;rZiN1T5GjM9< z^q9W$Pxzhr+j{ti(OtEw^%{hi<~ z3i<%|MLn}9)wi9nkJn!`0;SV5`PTqSgZ61Ocxj3#0a-bYjM$2_$n)%NeEbpK)?DX> zP#{2zjAbl>?cFy-;&)z4r#{nTR`kd`D|O&`H)8grA?Fal4l8aeo@81O?@R}SCy?dd zCf{uwin85`c*b4D?PA20`LWG9<0`||WDfx#db?UP{q>y8En{fi=tq(2G9vQy=R{9e zfR-~UvoVDZ0(j60;0$X;k5c^WHxgU#9Ge)+Y;{C_^la`~71t?Uhy)&gXi!3rGK3H{2Q9_LYuVm?ozQE->xn{~{t8SerlGf%;d`g<>e+7KH{`nP>L;0Ge;;H}yO&+}3;Ib} zF4%Nwq@sP`R`KFNibmig>hu&u^82lt2P(%B0XEQXL5NU<7{G4ElwB=JAq2Vb&KOq|+MNRCuo z!BHBCq?S~;SXisWGY_#gsvg4{?j3M$(S%s}fUm3dnt@3AJA{+|Bh3TI)^c4N+(@X= zWy~*EZzEsPkv+|pPws+bS02>m>y0MlmoMar0{TwnxAWm}Z8Hm4MkaQx8Ks7fSv!KF zC7hwPA!o+ENsK%q)cNgreHfE}5EEqvdQyOYCRGsTIdfISV0J8(rdZy?SOdq{LEG{V zaAy#)ActyLkuYar4bVWrKyf0y=67b28zF~cF1)`21C>)JXRi3vXg1T;$H>+w>CF|$ zl=rWTP#*OSQ9aGQBp5)SuxnR?bv_$w4NC(<74NfkLRpn3P9W_v*X$QKTlZo}NuX~n zQlmD@OHx7tz&;Y1Xsw_HQ|wPM^4}%A_RK0neyI*`bcW{RL&rX zbjss--JsLchW3}BYZjf9i%X=MBmaqhth6RPQ`8Nhj z*|f!tQiaYN-4+&(EpTy%wuGy^ir-xqt6D75wf`J+<9qjn`8DXq$(I5d(K;-n5stjs zQ5G;Z`b-(^gelYh)7%=w#u}S)AiROPe*MK`02Vb7XAAgBPBd9P!&IFj;SV1xQ?{&f zlM1pkfAD@sfg>3ev-nM>>B#U#`LKF*=^?_}6OZ7BohCPF5beDfB%_3RxCa;1{WLghW5SUTc>X+RYTAbgcASiBZ(Qy{`_ zVE!i3A%JDb{yd}Q%PGPiEfj_d(;W5nqL0fhN=EIa=OD-+I$a3=j?4vgo-T9?#`xF4 zR!W6qu-Qbd%<5>Ih&m0`fhU(J3zSlAGbZU#n6fEXXr1__Ct_b3KD7H1i!$ZINr{4; z%jGArd8|O&MqwvUGGy9dhag;Nz}McK{dXUElP+J^Iqnx2q_!q#AKikqT-hjAq|ao2To~{ysbIB7Ia* zYd+Oa2w)s|PaVLSc?307AX8gITl~Zl>vCxF0P(e=1A7pRxc}tZV-3}d*MD) z8_hpBr#Ydry*t~5s~>xUvgFs!zJEbR&!T)tWjSHz%Y9mR8Uf7(S%F0ggLIZj{Q@63y_}h&?m1cGG+aY5xp$- zU*;Ez!DQFXBq7d9|MUxlM%=v*2YSyYDnR50tlgh3gZ@U8gFC54|OO`Gn|&B!$`|=kUKx%MqD} zo^#)(V2csmw_CpFA--pYk(rs-*Kh9$&$jixBbm%hf2_(Ivn3mukDVs1IWgijbvC+% z)8QW%_{?V_3Q)F0w#F-wdi1A_;bE^6c;1^+;c~=`+DJR(bAXw23k$Zo%(#WhKAE;P zX6xj(uCr!GCq<$E9rYWzOh?GD5>nz!`|;bWT1@oUClk%&7RvK7$H4N}1=@E+3~a(H|Puj?GQO2CmSGFgGh$SG?Mkzpl_4*7H2e4nzr172#I@M(+VaP3x2TtC-- zg}>k!3iIKN6kPIiXEZ^q_h|M7bn*6@K=*c4`m);px^?*X}a^qfravw-EzO9iv*OA85H1M)w*8{c4KAvVQm&DE#O&%6$K= zxVg|A%U-iDnS0B{TjE%2$d}L2mx>hXs7^$cRHoISAOjr#fx>tGo0zO`gld13hgpundLwo@Xo2yM13b{ii5FQ ze^EbY{yljXwPzdo_Y#vWeru~*0U;lS3E0tHft(txa{MHfu=M5d3#-Q zBl!X1jTny@xaBs9=#`_8Z;=f`BTr`kP>h^Od)K#MEi%4BO*}*9B|wFBH`OWSl<1n* z=?G^AjO?^f7)edFyN?#{EKyNMVzG;4Qhnc8$rSjE_ieI;DvibYo0-=b4H>U_5Bb&R z!|Rgn%kO^5E19huCb{cqIrgf_4ap3|0r{$B=`*Y=VXsq?76wgKtc+)k1*8p>VeNMs zIU-eD!F>a;5Lv}jk;wv7&o(-mImzBgu00<@p5}9*2gDWcBiZp2S797n$27Swqtx#@ zXjCxjSi}*C-^s=?t47gd?=we!w1z;ikU1>)eJg>1`$d&3H3j?cgaSl{e}hW4klU)kmBUgB8b!ihRG=>aj}*=?n^z2=EmJqr@>Yo*F?;{qm!5fh2^?@BZQBd1umaa=u2cFKPP$o9e?ud25lK8#TTWfZPt0EO=oq ze3%-9t#m8s$M{9@^x>~Kg~dn&1&5v0&Ss~`+S=+3x5eZ^ksRN{$-eg^ei5~Tn1rJ# zm#Txn)C^mF*Qs5R`VC8z1iV33j8SKhV;ciU`M3LOORWYgO}@7&!WX+9 z15*P?&qtx#S)2#56M1wkH_|>I?dzvm;%JbUyesH6hv!eGLIdSA2y6(-@_a z>xQA&5w0+B8pB)v*oru0>HW8G+?V)%f>Ap6G8H^M0hl_R!9?QtkDvAn*I?k5YnJMn z_pw181qHy9H}^xJwD5ghp*@H~Yn;%_384xdg#eWGpe!159nwq-F2!MJ%jx3trp)8J zXER5^5$#kf;wwz0XrDX)$yhr6ColOEiDy5xaX^CKd7fc4WM*S+z`0X`SgSyI7ByoB z>Ak&CBrbqc>j196g^`TQdZyaZ;7{o&I*=~ncgbI-u{U+%7%kukvd{n3Q=uv`d*VAH zG)ql8;{b1OOG$Ni6GCP`c6zK>5XwCd%U!*bgJu$L!FuJMD&=k!uYA+)eY!pn!e*S! z$q}w&g^rLle<6u)1)=E(GAAKezyFibMlc7_tgVkTy3A|U1Gf-$j47E|4|ZjxyU4+r z3S6zgj0FL~3qVQ{-H?yPD>J_9s3~(vF+Vgn!Mk48rPM^@fi2XGK+@jU^xM}dziFBp z{i0O%ReEqzDurD%(Hg5Zs$$vis3|pj=`P{cK9ge%H9U9di(8X(D`Oj*?hF`F?F){s zV)c|}YA;ctGI0OST1SvE7Revi7dzDzoY6GXE2!(1@gbwDC)I%q66%Ulqa`;nuCRK^ zytm-GtnHVa;c?DCb=~9LSFQE@oUdFw8|^7vSRYtSxWp?~aZ)79GoQaGM$(;|h;o}~ zYBSmpj4ZhiUo7R1XFAYWK`ez z{^kBkn#anJ#G-%;Y@53u6!ZN{ z+fclmexv3B>FVDf!8H_By7}Gh<720M|4GnC*+x(Z&Z0$V;;wm&qXmjOT}${6(h?Xi z_}hz@J!piio`@FeC#at23JLY0Mn~Of^U=%*pz&9?c>f87OQwnI9YKX0XNn|3C3j9& zy&>m4LOX2X*ZolU*X6CGfL*GsyT*=Qp1$q*IG+QPRCNvvLETK-P*ZtGwUCmbLW2>| zo<*dlnnCX~J%2ej{Z?){3-?S>PA-o{=B&n`MFpWzRtx~%UO`b}<(p%p>YFEk@&C>>wvXJw5w0|zlr;BDVs5PnHpKV_fxlF9=zJhd#nP>A!kgGD` ze7DY=FY~ClPU3C$ghffv$^pVh`?g|pAvwjp`+CjEf>0M5I%wZ*2|JgW23Jgh7BpLsN|=~n%g%}rl$MW_I43y7#wA^#zo#i&ggo-$}IigS&( z@g-Bk37@G3DffsLW{j-@;&1+I>fqwE0R~dWASG_h4-uv*#xyW zW+(S)?P5-oWM7IQ0HC!M0_O26uDyf&0YQSM9K+-I+H#PG90uz~CTzr|au;(i$>GT| z^LO4@0uD_V9x@UOL|vD)5h1sH-}Ok0@}SX54+=6dD+}&3E}`g-cvumzg1DT#9>qCU zjYhEq_Z7*~!{lZF-ZwP{hy+61nSE30&>&pEJ(nr}%*jvmuc05~p82OoD?gE zK)i+jm)P^y&a%>%a{Zh2OTgq$O` zjOx2w&ClsYdqDUW<75sYI=do^uo&1`=qZejAZ!M!Bqf9ES2@8gs8v*EG_pQn9fy_9 z#~Xe9mZ8RBH&?giV!i8SaR?srs~ zyqWyhb3pW)J^31TbuaD?=nPsIj3`0M(a8_}Ts02^+#EMXgApmZt_eOL=8fd6WS{)K ztRUt>ODY-IGtfvqx#6`p4;opO0b^}`+9=m5v=YP-bR3LBy(UE-LPJZ!m(XXlZ`4hn zg~FF4FblYlaw`r72>7?9QfmkW`_(v!y;bzI(UxKAwz0`a=Xt!ov(nc|)&=`TcRGn$ z-3H$eNF>tA4}bRi2?y{tcqcYT|431(!tVGGEkA;cFa3NujIY`Q+hDwVS(Ss`cl7V` z5T5zv&pfcveC8S!ByIWdjRPl%7$X)}leS`<(Xw`mH(vYH&B$H|jWq&Zd_T{pmjT4S za1=U{2mKb)W$kJTE1d|s|FN1(vEWsDvEU^oy%+2o&W>TzJwwIIGd~EJ+;(7ZADSzx zql_AD5$bi9C4(k@RVG$&Zr3U9+Qr)#bcKIu%2<57tOB{L$=>SaLeMx8OAWDTRYcYYmZ7LqZnRXu7OF>VKij=Yw@!n72&k?aKG4hGvvSTf3=#$Vr5F;Jxg&Rfjp@WsW0 zUXQXg+JE^qyxfMOwvQ{teJe`&LUz&rRvyn7_6iB#CVL%w z6WDo%cArc7^IBfc|3U^JtaE;L6E^6-EU+^c+ugq57A9D?VMrhpL_yCN#_ZxMFX^)2 zAnodtr$+i4je}+wwY_u85`6dpfI=}>R@VO%JkB+PT+2c^Ovy@s}K)>B!D*J_)O}<_CgpX{?ApzZjOiG4s`vDRSkLJ(n$}Gr!R<~ z6%;`=3LJQMGv@QHEAP8?a43U6V93_=e|pI`o=KBI!;w70=BVACb8aIi$Q#0Nh~E_? zirQ%(`en-^W8kgyx5~CSfZLayeijK03qoQS8_=N`NjfqWzl=S;;PwEEQbI@GKtIdQ zo?$j>;{tv!BNdF}uDZ(eVdp3-rjbAQfx5Qe7VXthLEjN6Ix%H#{z%;%JAHpZ<3zTH zR#0|dujl~1S(^W|@t+WL)`%6L_CHwU6B>mTnT=j9W1G#C8YWtHTk)SQ;K>y0c!|H8 zS7s@`8>SbIE_L)^dG*3zEs0-ae|orICLaSwPNv(};iSD9h{o#nL?C^m=3r>v`{6K0 zI&9OW*RsUa#s4PVzBS}raQUa~!vag!tR1rkU|7tgN^wIsVBK4=6Z7y+AI$QhYo%Xy z=i<5e<5Tt9OL*F!wY9CSjTHA)r-vX;l1>wFrLges>#D(e0YAMcOa#al@y|**hrqm- zq31}#2=L`eDv61TU4qsA%Xh=t^AhwCXFvZ}2l_Mk5HlYg3(lb}z}MW7NGJ&JH0bT; zPpu3St#4%4EPhg#*I{MHU_d_m8S--wKptaT`DJvwoW}z1HUNi45B<+)@%)Z$4}K4= zf{bzEdWK?;@NjR@B<7eKitHm)l{W*6CxpnI&?6Bp z+s2b6T9z#sKj-N)yh~S0!yaLT{Yg;jpql^WEBUEcI{^@zQ)FqJlQFS3I(6*-g0k{# z%wdluvyFW$+1)+74e!o&gu}YGUe5hhi{!#*Wggbwc|P6J_^$^#!ke^5i#58cKHVQ? zHFHY>Y(U8YxASRXxBg*lI}6pSbT5ahOeG=L<7}lN1{U;enF&XRv0n?O=bfbeE>bI* zSR9Haf1gcc`3G6xkx)q3gbzA<7TQYNm;9-*h~uB*8L_@RD zc{Q#p8Kf|7{1d07cJUIYr3_%tF#b#UHrk5UH23W1fRi*M_B0VU+5Uzv{dYz7XyL1*837bCe%GLVghrQ8B) zTX}{Av50~xlWg-D6q46dV(*?-a97sCF6ck6MCjfBx8L5(ULgjkvyt5<%q`AGKH_W5 zSh9!)P|w+eq9Icth&SV5Qe3axkV6v*u5;V^>gP0PE8o8I0+JUn_sb`Oilw-I{+(`ZN zE=TReEn`jZ`z{`5LykxJWAO2tEM>$K9@*aZa>JpDQ zpYHfVIT&qP$Wy4-{P$(jOIBPsS#ns?zJ0V-N+zIZ>Dd<6|D=jFUtK(DihQi>NuUuK zB2${_h|q=LqYWNi=cZsaYGY?4)-kl)jf5fH3i*@q5 z39pMhhx~!B0pCA8D2)}U;yEA?}l1u3fx;v^V4Hex1L1f>cx}lslk}~1}PtKTO zo=#PN(o(ZxcYge8h2kb4?rFhx;r#d@ew|G2)kAh;1$EYr?3S<YWoA-7%2-T=s!D#~O zNIQkgE;rj{uM>SfUsN-tKc21YqL@07xpxPFdcS9l&tpucwr1~qNWtN998Ac2g}Z>< zbNt&Qo$7k{8`b9J0J8L#wND*uOWe@1Fv-c77mn6H-XKOPgeoukr*85!aU!m3c>~$;B#hNOGAImke@;5Pv1+ zJaRve-2tu!ow;Tts~z?giPpj9#k5#8zWgdwEq_n+7b9sr0*gaWEba++W@rL65ujHV zaZr!dCL`VNE1DIoFtCp3%igvEmh^&or?oY~KW${D$^21NvXN_hTb_uG48a%vhF3W@hQzw0(1f35Vtj>?jZjV&X?Oy=mIly?=;kni5XC%wNkkkN6ZnX?@;x? z_M%ZIga|CQ0ZQZy;3St`BOECO4An;PAy&mwL&Q=I#H`7z!BRKe_=T+Xqh8Sy-VicW zLVpCLm$8UMLzTvl6e%C|t;`(Xan(nXvscG8T$&gASp4KmJ*u(N9_(`68<80;b`l(C zQw%^eFB`w(6n3vF%+#!;VC{v|Nc+GcwhuiJ$FKwUmxcuY-jlJg)3Na9(ao0*+W&Q5 zOVQy|pK1|WTFc%bc&JvDy>5EDiN;Y{;40a_|MG&jTX)6^VbnD9Bm*uH@>O+t z)gK+?4+Dc_e%k|Xcu3EADrdVRXyjBMpM2S)gAgwQ#y&oO2|sI6?snh*dHQ$@pND3AFa^5Zyt~6Tohk4MC z0#>jzo>lT#F8;LIPI#ba*+7PrBzl{8f1kAeZImh#J+*gs{tnik7s@1Hn!x&6MMv~k zZ<{MOYbNj*gpODr6pK9p@frV2MmsU9E`x*)YZT<|S?PZeHgysf>7?i61RA;qlYKSFwxqZyh|BS=$F5X@~K943qN`jBSv6Uw0O;=%g1s^B0`YW@JwSPFS zI6{(H`UeS~JjUU5{ThVDPD)HojX*52fti-Mye`ef1ee}zS17(nWdL4CiA`5 zdc(r~u@>} zt#b#L;n_duzU^1U=C>Dv=aSh>{-0d1VCPgaB<(<@^lxiz?MV1? zo&|lDSe|l8mFQNW*%P8bQB|#I(XKK0FW;=}MSPeS`A4c$`FG$M50B_QSdf>7d}Im%sgwWP~4IugUr@ zS7*BzKb?maa4A(xnLF#P_*ctwc;qg#plSQdE1+g<17Y+e72t@@BP7YvNq~p*aZ}m` zUIqeGAZn90BNpU_Fq$&;QGmt}tL zqhwSSRjwJ5dx9($sfWgD*3sSOeQY=aPtX0&xpYr+UwX0oq5seB*BGW;S4&=|uZ#0e zf{BkiWO8@kbi*Zgkm(-xKfeA?Bz!vJ3x|IB=yOV)rmr#ID||QR8Oq{;G9u-?AF9o>dLJTbcR{t`6ovJ%tWGEPF3!lfy!lw~o>mF6tH# zAB;OnEt^vE4?%F!u7Au`aSOk0Nh9kqjTL_ZMyx#k=cTXod^-Eu^mg)g6|S`Izom#T z^L+WG7uNUxTi!RWpX=(EXu^@fR`NJ3_qY}T;IhjiU?Jvh;Ha$ z;sT;#xDd(cSN2w<6Q2JZ%@rG>Axw9!;}WKAF~ndnk&>%0N=^{GzYz|t3|3>$y864) zcckqe>M~-sc?}=&LgnbL;>3Dh&fpUtcmN9C{`J3EB;yO(XkWp( ztsMdaqqe$|yrD_L{fet-;SK1(w>K3&p6r9s2GH-6$8X;M^zVC*^+t1%&4*#lF%XIC6zB7If&i=|4 z9Z7(26w^z4hke`o(szvyAi^jfP#*vwAeQa%ts{xKEWqeOF1!0-a04H&=-%>6q2r~= z;=af0pc@ENQ17;fcu0%?Wa*|;{~xhtnza_1wJQU}vvK`Z`*KU;F)uj>*o+IxKu zeGk1CDV+gVk?5AtiG!;eTb*tCwz1OKaO!k1#Q~h!@6JscT~^;C9W?| z%v!{DnTbqnCNX1qHv?)c8uGM%N8QQWW7=DB|Bc);KB0T?8oZiV+d7AagHjt1|JUpq zVeq@L#r6L&`5Btv@V?KxNsRjZRH;bHAD*H%sji-HbfvGLv#Qeff9PJfnbMS~sik43 z?{zULOt_1_qJ!}7B~S0ewzz{{8y`EQ&#A;%GtGesJ{{{uVnbjAIaooX8Bme5ifIM{ z?*ZTF)?f)(B`-C&|FYe98;n$onyfBB!9`O*_|TwIxt8M89@HBqxAQB7O03Z`1^zyw z4SQ^GPw9Mnb%*_2=@Z?Vk>WEK_vhVN`X+VJt~z zf{Xb7JsACZ)S~AGYy{x&dBVjbc;Tc!5)cv)0Do!(gm`$o1dX_g7Sqxw!%wrDCifaJ z0+D;0PlLDE$gf8E!VZMOZ&jn7_i5g7mX!>wICQ*cqeo&MI`d&VZPBe!AdOSZM=)e| z6;-yZ7r{VHt{p))l0UR*XM`gktX`=paO_lzWM#-t&s9z@N@cpcsaigadj!q~zfOFF za)q<(OuL6YbZjlvsh({wQYe~Xcy zyP_22NMW&Tvs)XaHLrF`BX=jcd~z_?k=#CbK_YXVpcbbqP3U=)0gQ%}hQ9`;6X4^q zW+uRAnI$xMOb0hqV!w71R<(R_9EAQ)Q&$2G<=XxSSyHx;eXk@T`!c|ifVK;61N*a8guK0nQQC2Pt&Q5jbJ+lj``|% zV-s=Yrik@QoZ|TIAjmdhv@XSQ`W)DQC~}goj*$$faA1{9hVq^N-rUj9{!LEt^p!e^at-^v?)v(k%B>PLdy5uEbYwxvZ5tvwD{LvgEX z4cj9_<7jj%6-Bh8KXlm*ACFv>o{a~uLylZX{_lp=lIrv>*A=%4(DP%4tc+m0+?u3= zcYcE;61YGNV_DgBeLbziK4R)|V!5*b|Es=43W>T^Pe?2(ii_*W1~>AXm(k_fMsMvY z;B)}2(|E$;6aWbcDFz6?aOZS%`2g9tmF*gOv7gCg#Z`tZFogcegwWocybtqP}d zFhp(b9A2&(2lN)=R-r~uF5oXwSz%+*V>Xi^wr3J%e13`*%{lgSS*nG9d+u91dM8-6 zILKA)^7$Xgxv-Ih+D5j!s?B#7diM%-CARg=bPK^FAoItCG3rG<%Ln`%rWeCx^#jK~ z1&4|RhlYmgND`0*$AsHvys^UprfI;?jaLn#1|K!A)T}r4+~0e~!x zYxdZbDDvgoot?*~0CKI5rc9W{Yx4^zF~1PEcQE*{&IfbF$*z-~-g5K_Z{hVtXZQMz zMQ7{xu43vNNTGxT^mf8f)>mmEKvr_z{3E7|7bFnu8EG|K>^y-E0l_Ch4Al zn6)^$ZL`+#f}iBO5nU!#(YIRbLO{y#%Tp*@gEfj)ebdrw!JFyDR-G2!4UFl^-aO>A)UJoER7T9Fm6Y|FEx4~S_TV%NuzS65ed zXj(N{d|Y9-Qh3I`%SRN7z@}RzAPHa%Q|dw&I@|}BgzfT7r1moE^%P*S%gZ2sTSaeS zK`M{}Z*4c-qT#z9y5Y7q6ZiwO9omasD+Ewyx_hOF2I5v5$f&3|b1OW0^%~f6SPBgf zlZJ!b!kx9023uX~ms$&xLCkaW1DvBba4+2ej{J!;loj2I+0pKtt3~6UgDw&PVAo$W zWrSMc7~9kC+ZL@1s$Hp=y0|2sU|q3&>XLCjd|DWjXnd8bi;vO)Z@F)dU4I3>$8^!$9>);FwE^X zXrqetrtFZau7lXxTD=$+uTx;kn91xi1y>$2`~8EzkPz~ERs0X#TnjKc;Aj3QG0ngT zNiqgyt5Rxe)3hC9+d5Djk42?|BoN-oC|dLamJ(#(*Q%<@ogCK)LhfntOWw z9~7Im+khP=8lZNUhn>zno47H-dE?RQA;+zypm+IO*3@pkr4xLy*h8BCPrJ2k@m!7{3#Yx7D ziFv)A<_z5P-Inlz`Y#ub6**X8RRlCFyvn_W*~lc=el9Wy74+aIa$PZ6Ju%{G?Vg*C z-AkY>%DPqvoY(avgQ%^G802zwVhAaQOf}uAPV}byo-KC{xjp?nYEG|}eoWEh!*g2_ zC9!#;w*cSbf#%cFXGyB)?@NL0qqhcS%Dn8aTJyNu2+)QiTUP`SMO&l_BQ zWE$-E%v?7VhAH>I^pKwc65$LFO@g|hL!j8V&)NnmMLz?7jrQTgqN-oGXN$0Wj|4vC z=UKSC8-#F%fA8-Ph-v(uUQuz`Ym?FsQ_J$VC*)V17;4e zJ=|zPAdMk2#+6MA-3}zhBZX#6_caXG{Gr|NmxX&w?Hhg30|>izxio{2IXQY9i^58F zISII4f`#GKuh|kE6&8#j^1z|ynPnLWL3)-!~LfA;n>8)W;3qJ6BVz$ zjkzFQC>(ae|KUsTo7#^o^Ou~?m3V0i>E#aiRokO?GVcf9v6j`pNH=WU^gbE$6-77A zWE?&aIYRo00&mk}1hf*uSs-bZ!V6Wq$;muEpYmXKpc-wMK6d4`vLxTZORJj(+2;v- zn>umLV)$+F+~S%q+My;m06pLXqvdp2Ny{+e@oP+~^$%|`4YvlDKLjXDYW`xu^G{<_#h2BZo4$yO@dWSRy>M7MwG@aF(XQf?_2!nz~|xAs-XV2F)wJ# zJ0y%I&munD=#4-~y9{g5oqk$FAoSHKzNezMpB^PRre$m7ZFQ<57r4D-E3C~J;Lp9_MYKL$j#AOe5C*}>y- zjB}9lk=s}M@yEi#`W^n>7B?cx@09GG?+dFL@cW>(|KPc$;^gOTV}UpUed$=9$EPFH zS1B?XCM}toi{Dd{H<5aolgjJFrTvHJE;}`l?gu+s$kl!y<>np^@Qtc>gRvT7v~#|m zDzH5r_5*_-fR0xd%|)L&mGJCb6g~CHh+VF22k#5z*}7WGqB&;2LhOLe8M{03pVS|v z_eQPm#KE?UU{74Cs;6vPi+ zG7AhM_p7kZ*IIf|t{yJnw#tyTSvfB~W3yGs+VO7C{c1 z{o{5SpHu<1GIPB%RapK|N6*5kjM*}iSKe3xeC?*gq~-$IwR;qGL&%cd>tuFr=RFC{ zoW$9BH_OAq5;c9p0l%TBB2kLl@_j{U(|GE@q=cTN7Gz(>S_J?XJ9?O?Oszf;1Ku0ymzgN9wAtZax(M;QHp*kni!QH!dC$z?;IR zB)11>_EqAFiVEK)9*Z9gmDzH`G5Rk$S6YGa2v~{7c2;kPFf2OB)Ta%t%@J$!qE2L8 zABVBaV>5f)2DN98jFVrb;IL+fk9i<(yAye4o8ZatDfZZi06ku|w?oQGbExtRzSvxq zK%tpd&Tfi7Bm3ORnL}*mLgTBvvAA-o4^AyE3|oDZTX|m^zAt0@jp)RRGz~vM8ES;? zqP92$%Q7@1AcxY8jh`#S-KZxGYNxkk5yzLE3Ke2jsc15l*@u1t;Hfw{dUt~2;RE0B zZg#lIjoS*bw%ml#i?!y0`WUDRJwG3mNj##<4x>dpSyN9E4WLki#IFkMBhpJ!qWA9T z%)H>^(t^sr{^B3X^I|By_OO%c2b0Hu{u~}nS8!WN!1X* zJ3Q5Xr=Lk3{E4ZeFzp`9ca=XK^8esk0XQQmeSU%PFt7PBMD{p>l#etCx1Cx(k`4{h zJr#Yg@d=L#lit+HrKQU5YW{~&G`r7y{NcRO^$Lkv$I#(e)m)F)R>&%9PnzlPGp*6; zoJP`qa`{F_<2y|4Ia3mOF3*&ojnO*@#M4oFe~I4WX?~)8!;+1IeJ6P`mg}W;f*^Rs zCwY9hFd@DPfo45cEiDEETo!1U5~x+r!cA0sHO77`Uit05{l=AedJVLk!g_oGblxB>67wR8OGdVTx0W1I~?$!#)F;t5T#?heWrn*x7#z_eHIqOuWgQ9LSjK{OW^XKR$z>8WJ($qn*+4L@-^1&0?s^kWsu_T2 z5qsF;bHC*YPk?VmG`aGmg0vO{AfQfB5sHW%URD`PS#DE>&v zJ_c9e?3~e)>L_{h6~X9uiL*-RK@MGp=AjjtQq&;%-0G9DA>YL0>qElxVFL{n1IUe@ zt{6QJY#nIYTQxS-Kp-dd{U-_xI9|wx6H)6^0mp8Te$OU$WMfbt!NXJ+OCns?J>aLO zw1?I-X*sh)Rb&<7;>QUD0szLG%5kfXeHh&8uIqz>KZouff3|d1#uzMMGo#~rxh897 zt)aX97b%gg*07P4Jyg7L{4OX+8fMj&HXEt%hJ_2()?ym)C|*%!|9*PF-n}9Nb>j0K*3m z+Z^R$=@wP#aFR~}03nq|R^sARoxwPRHrKRNH`+*o+}5TR_k$rZnndmN97p`Kp$@d_ zx9Z#!5$IQYJZmfjc-E8IGd+C)){SP%lW`&wJ=vRjd1nrEj32#!O6TUyEOLvPnR&MK zv#UA!^p8V*n6&;lbbbtLZFGo00qeU zRs5zDUNgt)8o*a}L3L9V*=Z?IF(gC;Of9{|efN*55XauX7XL;?a7%pVRAW7^2O$Pe zEoK!8j`O*~!1IST4LAz!29yb(2Te3{~y~ zFEtyvHAJjW`MW8}uQO@aAtiHQ2v}-l!H@gwzldNFQa(lR0Q?4YY0S@q3fwy8h({fr z#l#coonXXNl^bfcE^&ByvkE;erBvyT9>R??Rud=fY55443QuhcsB0e12 z7!P>k_~!fP(|~ST?mX6Q_$XEw&N-Y^5hNhX0TCcBgcavI#@ZaYX2JVP_1@}6)U@p^ zBXeLXHen%^cXoiF83gBQP!obUpG8hqr6{&2d9lZ=aRb)(a8e?9x3U(0{mw-aC62?K z2pX6d`h0%Qy#JiZ`33bl{sC=y80+&oea8dV5k_BE!ZOdTCZOF< zc!($*?cKz_u{Nrx>X9GpGBvNBF2v3JS!r2jw&{6~2T~l{wV?cg^?~jFeRH1s_DD5W9RqNY(MRk)rnW37>0+HxXO{f+x(ZA{Q_|X+ZdK$!x#Abk z#e-60Xi}G+ptV>3)1H=wAU4IBk+vlT#Z^L>{4OB!dq#ikJY+uAc-o^J8eWF#27< z+Y3PNc9{rK>Y$73f9|qv>JRaX=)tbBL0Ka$q)d9#R=nj{bDgaLQmUD)4N`yV+xEMRKu=iK(Kf-}M?Lb-4`3ID;1D*(@6EmJiUX0$U1#X#J zHUdN{coAS5a82hn6~n?5!EilDkmnN7siQvhWd7Zp zYd&i#;6mH2b$y-i83geA#XATiEl5G+95;H+g#6e={c1(tihV-8`~3KSv@$^L<<{>o zv|EL}^8AA6)a#5`=|h4WtVjCL4g1!Ca@dw9@NKIKnvyCbsS5Ahh89rA!%lGip?+q$ z0N;0zrwn7h5d3Msh5Desf+#iz%9?fLM0;zaXeH+aVDyQ&J+0V89Cdu@J?twQ!E;23 zJu-$_{9i^E+<3jf(_u*l1zWC4Z274+Fi*ksG{7ngn1r$zLPF@RuBJ&op~eCaDmLdJ z#Dc?dPH5?a2oq@{evr%XdKz&lYS6#QniqwQ+`6K>F2sGK?$Ys_T0&u`WY0~ewHFsH z(Y{R6$avZ+h>ApNliaSt<=-L}@@*IljmysZQ4NV@@ro7rAEIt0q6eNonBvj#I;!rR7gi+@RiwZXy9-HbTi^Ip zq@?oGT6U)nL+d~rdKl2-U=cGJiB3!5XsQ5H9x$0eLp+xQYO6gy#aCyJ()O1qX9(}h z)v7?d3zd*Db|Ut9w{9+Q$<59F?oj|xE$RV~VHFzHie%g&Zq*N+4mEl}ci13QKF_`R z>&AR+bVE1dU;1Wmt2UG=sYXBv^%C}hho7q6;H}Y5karIUWTPZscCSpzzi1qM8Vo*( zkoPb}&*k_JDH`Q#pccLv|){C1@OhkNU~8UUk)6S=zjD#ontlSLCE_O_mh`u zqO0u->z9Vysr3LD_Rv8tT_tY3N=!_UMXvZ){ED2d+m1Al<_{0QBN$!2NYH^76%_%Z z(hKorbdTf&pX{HXt{naRHY<=5RrHG#l0i9^`E6$YxQC8pN@}XeYcZ>;U(wfH^__Wt z97X4LO6m6>;prs;0PVC+?sWAOt*9qLy2p2eMhLXRMovE9-7dR*1$&lyIhZ$)bHztX ziN|bC?=vEzaF~^>#{LiO4XkLfOmwtD1wpPs(2Dcku)WC`az*pBXy=6qO|Xe^L+`X7v)=1gn)a1{SPH!*g2TIzDBuHl*! z9-t&4y=%|Tm5vT@u}wSiJY>$jZ@sD#5cBg+{pHVJ3sAP6Ke#OU5z*!U)mHsV6*lyX zQ^3w)NhyDIa(#|o#oYeLp=j@pe>CARhD;MR;9?8EtR%AIbMTQE_BP=^LJx49i61Aj zoEHfObYIABb|V|;LjZqfs=6gP(#6}*gvq_U8dWVCWAd*OYR@8y;ZE-i%jIi_uUEYN zrOlpxV7*@!eaC(t*VIG<`z$Qzf0lhV&6SP#qo_-FdkM)tT*T^2?m_?mZ=Ky%rg{*5 zX3|q|ESXMX;ZY_#u!UcekUdevo-U$B+C6A@@*JXJpIP!hk9+UuHvIox_)3Jte+3D9 lhiFOvs}THK(0j{(iGGstoFq0T#e{%$_Oz{4rNxa0{|9uUUeEvl literal 0 HcmV?d00001 diff --git a/data/parachute.collectable b/data/parachute.collectable index 50ed5266c..a4f1373e3 100644 --- a/data/parachute.collectable +++ b/data/parachute.collectable @@ -2,8 +2,8 @@ (tuxkart-collectable (name "parachute") - (model "parachute.ac") - (icon "parachute.rgb") + (mesh "parachute.b3d") + (icon "parachute.png") ) ;; EOF ;; diff --git a/data/zipper.collectable b/data/zipper.collectable index a344f2c3e..6d2f45cd3 100644 --- a/data/zipper.collectable +++ b/data/zipper.collectable @@ -2,9 +2,8 @@ (tuxkart-collectable (name "zipper") - (model "zipper.ac") (mesh "zipper.b3d") - (icon "zipper_collect.rgb") + (icon "zipper_collect.png") ) ;; EOF ;; From 4a85118dbd0dd8c03a433689d25f86c550684614 Mon Sep 17 00:00:00 2001 From: hikerstk Date: Fri, 13 Mar 2009 08:32:19 +0000 Subject: [PATCH 0018/1008] Removed many warnings, mostly caused by texture that were not found. git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3255 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- data/bowling.projectile | 2 +- data/bubblegum.projectile | 2 +- data/cake.projectile | 2 +- data/plunger.projectile | 2 +- src/io/file_manager.cpp | 4 ++++ src/items/item_manager.cpp | 3 +-- src/material.cpp | 6 +++++- src/tracks/track.cpp | 5 +++-- 8 files changed, 17 insertions(+), 9 deletions(-) diff --git a/data/bowling.projectile b/data/bowling.projectile index f3dba811f..b8f041578 100644 --- a/data/bowling.projectile +++ b/data/bowling.projectile @@ -4,7 +4,7 @@ (name "Bowling") (model "bowling.ac") (mesh "bowling.b3d") - (icon "bowling-icon.rgb") + (icon "bowling-icon.png") (speed 4.0) (min-height 0.2) ; height above terrain below which a ball is ; started to be pulled up diff --git a/data/bubblegum.projectile b/data/bubblegum.projectile index 32b7aa201..76e33d2e3 100644 --- a/data/bubblegum.projectile +++ b/data/bubblegum.projectile @@ -3,7 +3,7 @@ (tuxkart-collectable (name "Bubble Gum") (model "../items/bubblegum.ac") - (icon "bubblegum-icon.rgb") + (icon "bubblegum-icon.png") (speed 50.0) (min-height 0.3) (max-height 1.0) diff --git a/data/cake.projectile b/data/cake.projectile index 2450a931c..57bc8f203 100644 --- a/data/cake.projectile +++ b/data/cake.projectile @@ -3,7 +3,7 @@ (tuxkart-collectable (name "cake") (mesh "cake.b3d") - (icon "cake-icon.rgb") + (icon "cake-icon.png") (speed 50.0) (min-height 0.2) (max-height 1.0) diff --git a/data/plunger.projectile b/data/plunger.projectile index f8b26f4df..9692eda32 100644 --- a/data/plunger.projectile +++ b/data/plunger.projectile @@ -4,7 +4,7 @@ (name "Plunger") (model "plunger.ac") (mesh "plunger.b3d") - (icon "plunger-icon.rgb") + (icon "plunger-icon.png") (speed 35.0) (min-height 0.2) ; height above terrain below which a plunger is ; started to be pulled up diff --git a/src/io/file_manager.cpp b/src/io/file_manager.cpp index 9be052e41..565c7baa2 100644 --- a/src/io/file_manager.cpp +++ b/src/io/file_manager.cpp @@ -233,6 +233,10 @@ bool FileManager::findFile(std::string& full_path, std::string FileManager::getTextureFile(const std::string& FNAME) const { std::string path; + // FIXME: work around when loading and converting tracks: FNAME + // (which is based on an irrlicht return value) contains the + // full path + //if(m_file_system->existFile(FNAME.c_str())) return FNAME; findFile(path, FNAME, m_texture_search_path); return path; } // makeTexturePath diff --git a/src/items/item_manager.cpp b/src/items/item_manager.cpp index 73ce1e8b1..22a95ee63 100644 --- a/src/items/item_manager.cpp +++ b/src/items/item_manager.cpp @@ -136,8 +136,7 @@ void ItemManager::loadDefaultItems() for(std::set::iterator i = files.begin(); i != files.end(); ++i) { - // FIXME: We should try to check the extension, - // i.e. load only .3ds files + if(StringUtils::extension(*i)!="b3d") continue; scene::IMesh *mesh = irr_driver->getAnimatedMesh(*i); if(!mesh) continue; std::string shortName = StringUtils::basename(StringUtils::without_extension(*i)); diff --git a/src/material.cpp b/src/material.cpp index b84381ed2..a34831496 100644 --- a/src/material.cpp +++ b/src/material.cpp @@ -113,7 +113,11 @@ void Material::init(unsigned int index) void Material::install(bool is_full_path) { #ifdef HAVE_IRRLICHT - m_texture = irr_driver->getTexture(file_manager->getTextureFile(m_texname)); + if(m_texname!="") + { + // Avoid irrlicht warning about not being able to load texture. + m_texture = irr_driver->getTexture(file_manager->getTextureFile(m_texname)); + } #else if ( isSphereMap () ) { diff --git a/src/tracks/track.cpp b/src/tracks/track.cpp index 6aca8d5ec..f6562ad67 100644 --- a/src/tracks/track.cpp +++ b/src/tracks/track.cpp @@ -1127,11 +1127,12 @@ void Track::convertTrackToBullet(const scene::IMesh *mesh) } video::SMaterial irrMaterial=mb->getMaterial(); video::ITexture* t=irrMaterial.getTexture(0); - // FIXME: if no material is given, perhaps define a default? + const Material* material=0; TriangleMesh *tmesh = m_track_mesh; if(t) { - material=material_manager->getMaterial(std::string(t->getName().c_str())); + std::string image = std::string(t->getName().c_str()); + material=material_manager->getMaterial(StringUtils::basename(image)); if(material->isZipper()) tmesh = m_non_collision_mesh; } From 4acc6fc7c8b08fd96dc4ed8b3bcd15d63114ca61 Mon Sep 17 00:00:00 2001 From: auria Date: Fri, 13 Mar 2009 13:50:24 +0000 Subject: [PATCH 0019/1008] first introduction of new GUI code. It does *not* work, consider this a backup (and the removal of the old UI) git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3256 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- src/gui/base_gui.cpp | 149 -- src/gui/base_gui.hpp | 59 - src/gui/challenges_menu.cpp | 93 - src/gui/challenges_menu.hpp | 40 - src/gui/char_sel.cpp | 585 ----- src/gui/char_sel.hpp | 63 - src/gui/config_controls.cpp | 77 - src/gui/config_controls.hpp | 34 - src/gui/config_display.cpp | 436 ---- src/gui/config_display.hpp | 60 - src/gui/config_sound.cpp | 115 - src/gui/config_sound.hpp | 38 - src/gui/credits_menu.cpp | 102 - src/gui/credits_menu.hpp | 34 - src/gui/display_res_confirm.cpp | 173 -- src/gui/display_res_confirm.hpp | 47 - src/gui/engine.cpp | 110 + src/gui/engine.hpp | 34 + src/gui/feature_unlocked.cpp | 74 - src/gui/feature_unlocked.hpp | 38 - src/gui/font.cpp | 22 +- src/gui/font.hpp | 15 +- src/gui/game_mode.cpp | 218 -- src/gui/game_mode.hpp | 34 - src/gui/grand_prix_ending.cpp | 228 -- src/gui/grand_prix_ending.hpp | 49 - src/gui/grand_prix_select.cpp | 192 -- src/gui/grand_prix_select.hpp | 43 - src/gui/help_page_one.cpp | 248 -- src/gui/help_page_one.hpp | 47 - src/gui/help_page_three.cpp | 117 - src/gui/help_page_three.hpp | 34 - src/gui/help_page_two.cpp | 175 -- src/gui/help_page_two.hpp | 34 - src/gui/main_menu.cpp | 155 -- src/gui/main_menu.hpp | 36 - src/gui/menu_manager.cpp | 345 --- src/gui/menu_manager.hpp | 109 - src/gui/my_button.cpp | 500 ++++ src/gui/my_button.hpp | 121 + src/gui/network_gui.cpp | 304 --- src/gui/network_gui.hpp | 49 - src/gui/num_players.cpp | 82 - src/gui/num_players.hpp | 34 - src/gui/options.cpp | 104 - src/gui/options.hpp | 36 - src/gui/player_controls.cpp | 325 --- src/gui/player_controls.hpp | 57 - src/gui/ptr_vector.hpp | 213 ++ src/gui/race_gui.cpp | 28 +- src/gui/race_gui.hpp | 6 +- src/gui/race_menu.cpp | 134 - src/gui/race_menu.hpp | 35 - src/gui/race_options.cpp | 332 --- src/gui/race_options.hpp | 41 - src/gui/race_results_gui.cpp | 342 --- src/gui/race_results_gui.hpp | 65 - src/gui/screen.cpp | 460 ++++ src/gui/screen.hpp | 54 + src/gui/screen_loader.cpp | 162 ++ src/gui/skin.cpp | 270 ++ src/gui/skin.hpp | 70 + src/gui/start_race_feedback.cpp | 103 - src/gui/start_race_feedback.hpp | 44 - src/gui/track_sel.cpp | 444 ---- src/gui/track_sel.hpp | 48 - src/gui/widget.cpp | 1750 ++++++------- src/gui/widget.hpp | 517 ++-- src/gui/widget_manager.cpp | 2178 ----------------- src/gui/widget_manager.hpp | 382 --- .../Xcode/STK_XCode.xcodeproj/project.pbxproj | 587 +++-- src/io/file_manager.cpp | 22 +- src/karts/kart.cpp | 3 +- src/karts/player_kart.cpp | 6 +- src/main.cpp | 18 +- src/main_loop.cpp | 10 +- src/modes/follow_the_leader.cpp | 2 +- src/modes/linear_world.cpp | 16 +- src/modes/standard_race.cpp | 1 - src/modes/world.cpp | 10 +- src/modes/world.hpp | 2 +- src/network/network_manager.cpp | 17 +- src/race_manager.cpp | 7 +- src/sdldrv.cpp | 28 +- 84 files changed, 3704 insertions(+), 10777 deletions(-) delete mode 100644 src/gui/base_gui.cpp delete mode 100644 src/gui/base_gui.hpp delete mode 100644 src/gui/challenges_menu.cpp delete mode 100644 src/gui/challenges_menu.hpp delete mode 100644 src/gui/char_sel.cpp delete mode 100644 src/gui/char_sel.hpp delete mode 100644 src/gui/config_controls.cpp delete mode 100644 src/gui/config_controls.hpp delete mode 100644 src/gui/config_display.cpp delete mode 100644 src/gui/config_display.hpp delete mode 100644 src/gui/config_sound.cpp delete mode 100644 src/gui/config_sound.hpp delete mode 100644 src/gui/credits_menu.cpp delete mode 100644 src/gui/credits_menu.hpp delete mode 100644 src/gui/display_res_confirm.cpp delete mode 100644 src/gui/display_res_confirm.hpp create mode 100644 src/gui/engine.cpp create mode 100644 src/gui/engine.hpp delete mode 100644 src/gui/feature_unlocked.cpp delete mode 100644 src/gui/feature_unlocked.hpp delete mode 100644 src/gui/game_mode.cpp delete mode 100644 src/gui/game_mode.hpp delete mode 100644 src/gui/grand_prix_ending.cpp delete mode 100644 src/gui/grand_prix_ending.hpp delete mode 100644 src/gui/grand_prix_select.cpp delete mode 100644 src/gui/grand_prix_select.hpp delete mode 100644 src/gui/help_page_one.cpp delete mode 100644 src/gui/help_page_one.hpp delete mode 100644 src/gui/help_page_three.cpp delete mode 100644 src/gui/help_page_three.hpp delete mode 100644 src/gui/help_page_two.cpp delete mode 100644 src/gui/help_page_two.hpp delete mode 100644 src/gui/main_menu.cpp delete mode 100644 src/gui/main_menu.hpp delete mode 100644 src/gui/menu_manager.cpp delete mode 100644 src/gui/menu_manager.hpp create mode 100644 src/gui/my_button.cpp create mode 100644 src/gui/my_button.hpp delete mode 100644 src/gui/network_gui.cpp delete mode 100644 src/gui/network_gui.hpp delete mode 100644 src/gui/num_players.cpp delete mode 100644 src/gui/num_players.hpp delete mode 100644 src/gui/options.cpp delete mode 100644 src/gui/options.hpp delete mode 100644 src/gui/player_controls.cpp delete mode 100644 src/gui/player_controls.hpp create mode 100644 src/gui/ptr_vector.hpp delete mode 100644 src/gui/race_menu.cpp delete mode 100644 src/gui/race_menu.hpp delete mode 100644 src/gui/race_options.cpp delete mode 100644 src/gui/race_options.hpp delete mode 100644 src/gui/race_results_gui.cpp delete mode 100644 src/gui/race_results_gui.hpp create mode 100644 src/gui/screen.cpp create mode 100644 src/gui/screen.hpp create mode 100644 src/gui/screen_loader.cpp create mode 100644 src/gui/skin.cpp create mode 100644 src/gui/skin.hpp delete mode 100644 src/gui/start_race_feedback.cpp delete mode 100644 src/gui/start_race_feedback.hpp delete mode 100644 src/gui/track_sel.cpp delete mode 100644 src/gui/track_sel.hpp delete mode 100644 src/gui/widget_manager.cpp delete mode 100644 src/gui/widget_manager.hpp diff --git a/src/gui/base_gui.cpp b/src/gui/base_gui.cpp deleted file mode 100644 index 6614fbbac..000000000 --- a/src/gui/base_gui.cpp +++ /dev/null @@ -1,149 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include - -#include "base_gui.hpp" -#include "widget_manager.hpp" -#include "menu_manager.hpp" -void -BaseGUI::animateWidget(const int PREV_SELECTED_WGT, const int SELECTED_WGT) -{ - if( SELECTED_WGT != WidgetManager::WGT_NONE ) - { - if( PREV_SELECTED_WGT != WidgetManager::WGT_NONE ) - { - widget_manager->darkenWgtColor( PREV_SELECTED_WGT ); - } - - widget_manager->lightenWgtColor( SELECTED_WGT ); - widget_manager->pulseWgt( SELECTED_WGT ); - } -} - -//----------------------------------------------------------------------------- -void -BaseGUI::handle(GameAction action, int value) -{ - if( m_locked ) return; - - // Skip on keypress, act on keyrelease only. - if (value) return; - - int previous = widget_manager->getSelectedWgt(); - - switch ( action ) - { - case GA_CURSOR_LEFT: - animateWidget(previous, - widget_manager->handleLeft()); - - break; - case GA_CURSOR_RIGHT: - animateWidget(previous, - widget_manager->handleRight()); - break; - case GA_CURSOR_UP: - animateWidget(previous, - widget_manager->handleUp()); - break; - case GA_CURSOR_DOWN: - animateWidget(previous, - widget_manager->handleDown()); - break; - case GA_INC_SCROLL_SPEED: - widget_manager->increaseScrollSpeed(); - break; - case GA_INC_SCROLL_SPEED_FAST: - widget_manager->increaseScrollSpeed(true); - break; - case GA_DEC_SCROLL_SPEED: - widget_manager->decreaseScrollSpeed(); - break; - case GA_DEC_SCROLL_SPEED_FAST: - widget_manager->decreaseScrollSpeed(true); - break; - case GA_ENTER: - select(); - break; - case GA_LEAVE: - if (menu_manager->getMenuStackSize() > 1) - { - if(menu_manager->isCurrentMenu(MENUID_RACEMENU)) - RaceManager::getWorld()->unpause(); - - menu_manager->popMenu(); - } - break; - - default: - break; - } // switch -} // handle -//----------------------------------------------------------------------------- -void -BaseGUI::inputPointer(int x, int y) -{ - if( m_locked ) return; - - const int PREV_SELECTED_WGT = widget_manager->getSelectedWgt(); - const int SELECTED_WGT = widget_manager->handlePointer( x, y ); - - if( SELECTED_WGT != WidgetManager::WGT_NONE ) - { - if( PREV_SELECTED_WGT != WidgetManager::WGT_NONE ) - { - widget_manager->darkenWgtColor( PREV_SELECTED_WGT ); - } - - widget_manager->lightenWgtColor( SELECTED_WGT ); - widget_manager->pulseWgt( SELECTED_WGT ); - } -} - -//----------------------------------------------------------------------------- -void -BaseGUI::update(float dt) -{ - widget_manager->update(dt); -} // update - -//----------------------------------------------------------------------------- -void -BaseGUI::TimeToString(const double TIME, char *s) const -{ - int min = (int) floor ( TIME / 60.0 ) ; - int sec = (int) floor ( TIME - (double) ( 60 * min ) ) ; - int tenths = (int) floor ( 10.0f * (TIME - (double)(sec + 60* min))); - sprintf ( s, "%d:%02d:%d", min, sec, tenths ) ; -} // TimeToString -//----------------------------------------------------------------------------- -void -BaseGUI::inputKeyboard(SDLKey, int) -{ - // This method is not supposed to be called since BaseGUI does not - // handle low-level keyboard input. - assert(false); -} - -//----------------------------------------------------------------------------- -void BaseGUI::countdown() -{ -} -/* EOF */ diff --git a/src/gui/base_gui.hpp b/src/gui/base_gui.hpp deleted file mode 100644 index ec3960ea0..000000000 --- a/src/gui/base_gui.hpp +++ /dev/null @@ -1,59 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef HEADER_BASE_GUI_HPP -#define HEADER_BASE_GUI_HPP - -#include -#include "input.hpp" - -class BaseGUI -{ - void animateWidget(const int, const int); - -public: - BaseGUI() : m_locked(false) {} - virtual ~BaseGUI() {} - - virtual void update(float dt); - virtual void select() = 0; - - virtual void handle(GameAction, int); - - virtual void inputKeyboard(SDLKey, int); - - virtual void countdown(); - - void inputPointer(int x, int y); - - //At times, we want to make sure that we won't be getting any kind of - //input to the gui, for example, during transitions from one screen - //to another. At those times, it's best to lock the input and unlock it - //afterwards. - void lockInput() { m_locked = true; } - void unlockInput() { m_locked = false; } - - void TimeToString(const double time, char *s) const; -protected: - - bool m_locked; - int m_menu_id; -}; - -#endif // HEADER_BASEGUI_H diff --git a/src/gui/challenges_menu.cpp b/src/gui/challenges_menu.cpp deleted file mode 100644 index 5f4523a90..000000000 --- a/src/gui/challenges_menu.cpp +++ /dev/null @@ -1,93 +0,0 @@ -// $Id: challenges_menu.cpp 1305 2007-11-26 14:28:15Z hiker $ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2008 Joerg Henrichs -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "widget_manager.hpp" -#include "menu_manager.hpp" -#include "challenges/unlock_manager.hpp" -#include "gui/challenges_menu.hpp" -#include "network/network_manager.hpp" -#include "utils/translation.hpp" - -enum WidgetTokens -{ - WTOK_TITLE, - WTOK_BACK, - WTOK_DESCRIPTION, - WTOK_CHALLENGES -}; - -ChallengesMenu::ChallengesMenu() -{ - widget_manager->addTitleWgt( WTOK_TITLE, 60, 10, _("Active Challenges")); - widget_manager->hideWgtRect(WTOK_TITLE); - widget_manager->breakLine(); - - m_all_challenges=unlock_manager->getActiveChallenges(); - for(int i=0; i<(int)m_all_challenges.size(); i++) - { - widget_manager->addTextButtonWgt(WTOK_CHALLENGES+i, 60, 10, - _(m_all_challenges[i]->getName().c_str()) ); - widget_manager->breakLine(); - } - - widget_manager->addTextButtonWgt( WTOK_DESCRIPTION, 60, 30, ""); - widget_manager->deactivateWgt(WTOK_DESCRIPTION); - widget_manager->hideWgtRect(WTOK_DESCRIPTION); - widget_manager->breakLine(); - - widget_manager->addTextButtonWgt(WTOK_BACK, 50, 7, - _("Go back to the main menu")); - - widget_manager->layout(WGT_AREA_ALL); -} // ChallengesMenu - -//----------------------------------------------------------------------------- -ChallengesMenu::~ChallengesMenu() -{ - widget_manager->reset(); -} // ~ChallengesMenu - -//----------------------------------------------------------------------------- -void ChallengesMenu::update(float dt) -{ - const int challenge= widget_manager->getSelectedWgt() - WTOK_CHALLENGES; - if(challenge>=0 && challenge<(int)m_all_challenges.size()) - { - widget_manager->setWgtText(WTOK_DESCRIPTION, - m_all_challenges[challenge]->getChallengeDescription()); - } - widget_manager->update(dt); -} // update - -//----------------------------------------------------------------------------- -void ChallengesMenu::select() -{ - if(widget_manager->getSelectedWgt()==WTOK_BACK) - { - menu_manager->popMenu(); - return; - } - int n=widget_manager->getSelectedWgt()-WTOK_CHALLENGES; - if(n>=0 && n<(int)m_all_challenges.size()) - { - network_manager->initCharacterDataStructures(); - m_all_challenges[n]->setRace(); - menu_manager->pushMenu(MENUID_START_RACE_FEEDBACK); - } -} // select diff --git a/src/gui/challenges_menu.hpp b/src/gui/challenges_menu.hpp deleted file mode 100644 index 6041c36ba..000000000 --- a/src/gui/challenges_menu.hpp +++ /dev/null @@ -1,40 +0,0 @@ -// $Id: challenges.hpp 1305 2007-11-26 14:28:15Z hiker $ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2008 Joerg Henrichs -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef HEADER_CHALLENGES_H -#define HEADER_CHALLENGES_H - -#include -#include "challenges/challenge.hpp" -#include "base_gui.hpp" - -class ChallengesMenu: public BaseGUI -{ -private: - std::vector m_all_challenges; - -public: - ChallengesMenu(); - ~ChallengesMenu(); - void select (); - void update (float dt); - -}; // ChallengesMenu - -#endif diff --git a/src/gui/char_sel.cpp b/src/gui/char_sel.cpp deleted file mode 100644 index 8e6fba7b5..000000000 --- a/src/gui/char_sel.cpp +++ /dev/null @@ -1,585 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include -#include - -#include "char_sel.hpp" -#include "widget_manager.hpp" -#include "race_manager.hpp" -#include "user_config.hpp" -#include "material_manager.hpp" -#include "material.hpp" -#include "challenges/unlock_manager.hpp" -#include "gui/menu_manager.hpp" -#include "karts/kart_model.hpp" -#include "karts/kart_properties.hpp" -#include "karts/kart_properties_manager.hpp" -#include "network/network_manager.hpp" -#include "utils/translation.hpp" -#include "utils/string_utils.hpp" - -enum WidgetTokens -{ - WTOK_EMPTY_DOWN, - WTOK_EMPTY_UP, - WTOK_TITLE, - WTOK_UP, - WTOK_DOWN, - WTOK_MESSAGE, - WTOK_QUIT, - WTOK_EMPTY0 = 10, - WTOK_NAME0 = 2000, - WTOK_RACER0 = 3000 -}; - -CharSel::CharSel(int whichPlayer) - : m_kart(0), m_player_index(whichPlayer) -{ - // First time this is called --> switch client and server - // to character barrier mode - // initCharacter ... must be called to clean the kart_info - // in the server (even when NW_NONE), otherwise ghost karts - // etc. can appear. - m_first_frame = true; - if(network_manager->getState()==NetworkManager::NS_MAIN_MENU || - network_manager->getMode()==NetworkManager::NW_NONE) - network_manager->initCharacterDataStructures(); - - // For some strange reasons plib calls makeCurrent() in ssgContext - // constructor, so we have to save the old one here and restore it - ssgContext* oldContext = ssgGetCurrentContext(); - m_context = new ssgContext; - oldContext->makeCurrent(); - - // If m_player_index is 0 then this is a single player game or the first - // player of a multiplayer game so we need to ensure that all karts are available. - // If m_player_index is less than the number of elements in selected_karts then - // the user is moving back through the menus and the last value in the vector - // needs to be made available again. - if (m_player_index == 0) - kart_properties_manager->clearAllSelectedKarts(); - - // Determine the list of all groups to display. A call to - // kart_properties_manager->getAllGroups() will return even groups without - // karts in it (e.g. because all karts are locked), so in this case we - // don't want to display this list. - m_all_groups = kart_properties_manager->getAllGroups(); - std::vector::iterator it = m_all_groups.begin(); - while(it!=m_all_groups.end()) - { - const std::vector &kig=kart_properties_manager->getKartsInGroup(*it); - bool can_be_deleted=true; - for(unsigned int i=0; igetKartById(kig[i]); - if(!unlock_manager->isLocked(k->getIdent())) - { - can_be_deleted=false; - break; - } // if isLocked - } // for igetNumSelectedKarts()) - kart_properties_manager->removeLastSelectedKart(); - - std::string heading = StringUtils::insert_values( _("Player %d, choose a driver"), - m_player_index + 1); - widget_manager->addTitleWgt( WTOK_TITLE, 100, 10, heading ); - widget_manager->hideWgtRect(WTOK_TITLE); - widget_manager->breakLine(); - - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 1, 2); - widget_manager->breakLine(); - - const int HEIGHT = 10; - widget_manager->addEmptyWgt(WTOK_EMPTY_UP, computeIndent(0), HEIGHT/2); - widget_manager->addTextButtonWgt(WTOK_UP, 20, HEIGHT/2, "^"); - widget_manager->breakLine(); - - for (unsigned int i = 0; i < m_max_entries; i++) - { - // Depending on previously selected kart indx here might be a group, - // i.e. indx is negative, and kp is not defined. To avoid this, - // all widgets are _initialised_ with kart 0 (which surely exists), - // before later calling switchCharacter, which will define the - // proper icons and texts. - const KartProperties* kp = kart_properties_manager->getKartById(0); - widget_manager->addEmptyWgt(WTOK_EMPTY0+i, computeIndent(i), HEIGHT ); - widget_manager->addImgButtonWgt(WTOK_RACER0 + i, 8, HEIGHT, - kp->getIconFile() ); - widget_manager->addTextButtonWgt(WTOK_NAME0+i, 30, HEIGHT, ""); - widget_manager->setWgtTextSize(WTOK_NAME0+i, WGT_FNT_SML); - widget_manager->breakLine(); - } - - widget_manager->addEmptyWgt(WTOK_EMPTY_DOWN, computeIndent(m_max_entries), HEIGHT/2); - widget_manager->addTextButtonWgt(WTOK_DOWN, 20, HEIGHT/2, "v"); - - switchGroup(); // select all karts from the currently selected group - - Widget *w=widget_manager->addTextWgt(WTOK_MESSAGE, 30, 7, ""); - w->setPosition(WGT_DIR_CENTER, 0, WGT_DIR_CENTER, 0); - if(network_manager->getMode()==NetworkManager::NW_CLIENT) - widget_manager->setWgtText(WTOK_MESSAGE, _("Waiting for server")); - else - widget_manager->setWgtText(WTOK_MESSAGE, _("Waiting for clients")); - - widget_manager->layout(WGT_AREA_RGT); - - m_current_kart = -1; - - const int LAST_KART = user_config->m_player[m_player_index].getLastKartId(); - if( LAST_KART != -1 && kart_properties_manager->kartAvailable(LAST_KART))// is LAST_KART not in vector of selected karts - { - int local_index = computeOffset(); - widget_manager->setSelectedWgt(WTOK_NAME0 +(m_max_entries-1)/2); - switchCharacter(local_index); - } - else - { - m_offset = 0; - switchCharacter(0); - } - if(network_manager->getState()==NetworkManager::NS_WAIT_FOR_AVAILABLE_CHARACTERS) - { - widget_manager->hideWgt(WTOK_TITLE, WTOK_DOWN); - // Hide all widgets except the message widget - for (unsigned int i = 0; i < m_max_entries; i++) - { - widget_manager->hideWgt(WTOK_NAME0+i); - widget_manager->hideWgt(WTOK_RACER0+i); - } - } - else - { - widget_manager->hideWgt(WTOK_MESSAGE); - updateScrollPosition(); - } - - m_clock = 0; - -} // CharSel - -//----------------------------------------------------------------------------- -CharSel::~CharSel() -{ - widget_manager->reset(); - ssgDeRefDelete(m_kart); - - delete m_context; -} // ~CharSel - -//----------------------------------------------------------------------------- -void CharSel::updateScrollPosition() -{ - // Handle the special case of less karts (plus groups) than widgets. - // Some of the widgets then need to be disabled. - unsigned int start = 0, end=m_max_entries; - if(m_index_avail_karts.size()end) - { - widget_manager->hideWgt (WTOK_NAME0 +i); - widget_manager->hideWgtRect (WTOK_RACER0+i); - widget_manager->hideWgtTexture(WTOK_RACER0+i); - continue; - } - - // Otherwise enable the widgets again (just in case that they - // had been disabled before) - widget_manager->showWgt(WTOK_NAME0 +i); - - int indx = (i+m_offset)%m_index_avail_karts.size(); - indx = m_index_avail_karts[indx]; - if(indx>=0) // It's a kart, not a group - { - const KartProperties* kp= kart_properties_manager->getKartById(indx); - - if(unlock_manager->isLocked(kp->getIdent())) continue; - widget_manager->setWgtText(WTOK_NAME0 + i, kp->getName()); - widget_manager->setWgtTexture(WTOK_RACER0 + i, kp->getIconFile() ); - widget_manager->showWgtTexture(WTOK_RACER0 + i); - widget_manager->showWgtRect(WTOK_RACER0 + i); - } - else - { - widget_manager->setWgtText(WTOK_NAME0+i, m_all_groups[-indx-1]); - widget_manager->hideWgtTexture(WTOK_RACER0 + i); - widget_manager->hideWgtRect(WTOK_RACER0 + i); - } - } // for i - // set the 'selection changed' flag in the widget_manager, since update - // scroll position (when called on action up/down) will change the kart - // to display, even though it's the same widget - widget_manager->setSelectionChanged(); -} // updateScrollPosition - -//----------------------------------------------------------------------------- -void CharSel::switchGroup() -{ - m_index_avail_karts.clear(); - bool group_exist = - kart_properties_manager->getKartsInGroup(user_config->m_kart_group).size()>0; - if(!group_exist) user_config->m_kart_group = "standard"; - - const std::vector &karts = - kart_properties_manager->getKartsInGroup(user_config->m_kart_group); - - for(unsigned int i=0; ikartAvailable(karts[i])) - { - m_index_avail_karts.push_back(karts[i]); - kart_properties_manager->getKartById(karts[i])->getKartModel()->resetWheels(); - } - } - - // Now add the groups, indicated by a negative number as kart index - // ---------------------------------------------------------------- - for(int i =0; i<(int)m_all_groups.size(); i++) - { - // Only add groups other than the current one - if(m_all_groups[i]!=user_config->m_kart_group) m_index_avail_karts.push_back(-i-1); - } - if(m_index_avail_karts.size()>=m_max_entries) - { - m_offset = 0; - widget_manager->showWgtRect(WTOK_DOWN); - widget_manager->showWgtText(WTOK_DOWN); - widget_manager->showWgtRect(WTOK_UP); - widget_manager->showWgtText(WTOK_UP); - } - else - { - // Less entries than maximum -> set m_offset to a negative number, so - // that the actual existing entries are displayed - m_offset = - (int)(m_max_entries-m_index_avail_karts.size())/2-1; - widget_manager->hideWgtRect(WTOK_DOWN); - widget_manager->hideWgtText(WTOK_DOWN); - widget_manager->hideWgtRect(WTOK_UP); - widget_manager->hideWgtText(WTOK_UP); - } - -} // switchGroup - -//----------------------------------------------------------------------------- -/** This forces a re-display of the available characters. It is used from the - * network manager when a character confirm message is received from the - * server. - */ -void CharSel::updateAvailableCharacters() -{ - // This call computes the available characters (even though in this case - // the group hasn't changed. - switchGroup(); - - // This re-displays the characters (even though the scroll position has - // not changed, one character might have been deleted). - updateScrollPosition(); - // Forces a redraw of the model. - m_current_kart = -1; -} // updateAvailableCharacters - -//----------------------------------------------------------------------------- - -void CharSel::switchCharacter(int n) -{ - int indx=m_index_avail_karts[n]; - // if a group is hovered about, don't do anything - if(indx<0) - { - m_current_kart = -1; - ssgDeRefDelete(m_kart); - m_kart = NULL; - return; - } - - const KartProperties* kp= kart_properties_manager->getKartById(indx); - if (m_current_kart != n && kp != NULL) - { - m_current_kart = n; - ssgDeRefDelete(m_kart); - m_kart = new ssgTransform; - m_kart->ref(); - KartModel* kartentity = kp->getKartModel(); -#ifdef HAVE_IRRLICHT -#else - m_kart->addKid(kartentity->getRoot()); -#endif - } -} // switchCharacter - -//----------------------------------------------------------------------------- -void CharSel::update(float dt) -{ - // If we are still waiting in the barrier, don't do anything - if(network_manager->getState()==NetworkManager::NS_WAIT_FOR_AVAILABLE_CHARACTERS) - { - widget_manager->update(dt); - return; - } - - // Are we still waiting for a confirmation? - if(network_manager->getState()==NetworkManager::NS_WAIT_FOR_KART_CONFIRMATION) - { - widget_manager->update(dt); - return; - } - - // The selection was confirmed, proceed: - if(network_manager->getState()==NetworkManager::NS_KART_CONFIRMED) - { - nextMenu(); - return; - } - - if(m_first_frame) - { - // Switch group will update the list of selected karts, i.e. use the - // information about kart availability just received from the server - switchGroup(); - - // Now try to select the previously selected kart again (in network - // karts might be removed if they are not available on all computers, - // so we have to recompute offset) - computeOffset(); - - // Now hide the message window and display the widgets: - widget_manager->hideWgt(WTOK_MESSAGE); - widget_manager->showWgt(WTOK_TITLE, WTOK_DOWN); - // Hide all widgets except the message widget - for (unsigned int i = 0; i < m_max_entries; i++) - { - widget_manager->showWgt(WTOK_NAME0+i); - widget_manager->showWgt(WTOK_RACER0+i); - } - m_first_frame = false; - updateScrollPosition(); - return; - } - - m_clock += dt * 40.0f; - - if( widget_manager->selectionChanged() ) - { - int token = widget_manager->getSelectedWgt() - WTOK_RACER0; - if(token<0 || token>(int)m_index_avail_karts.size()) - token = widget_manager->getSelectedWgt() - WTOK_NAME0; - switchCharacter((token+m_offset)%m_index_avail_karts.size()); - } - - if (m_kart != NULL) - { - ssgContext* oldContext = ssgGetCurrentContext(); - m_context -> makeCurrent(); - - glClear(GL_DEPTH_BUFFER_BIT); - - // Puts the character in the center. Scaling is done by - // applying a big camera FOV. - int w = user_config->m_width; - int h = user_config->m_height; - glViewport ( 0, h*1/4, (int)(0.7f*w), (int)(0.7f*h)); - - m_context -> setFOV ( 65.0f, 65.0f * h/w ) ; - m_context -> setNearFar ( 0.05f, 1000.0f ) ; - - sgCoord cam_pos; - sgSetCoord(&cam_pos, 0.5f, 0, 0.4f, 0, 0, 0); - m_context -> setCamera ( &cam_pos ) ; - - glEnable (GL_DEPTH_TEST); - sgCoord trans; - sgSetCoord(&trans, 0, 3, -.4f, m_clock, 0, 0); - m_kart->setTransform (&trans) ; - //glShadeModel(GL_SMOOTH); - ssgCullAndDraw ( m_kart ) ; - glViewport ( 0, 0, user_config->m_width, user_config->m_height ) ; - - glDisable (GL_DEPTH_TEST); - oldContext->makeCurrent(); - } - - widget_manager->update(dt); -} // update - -//---------------------------------------------------------------------------- -/** This computes m_offset so that the previously selected kart is selected - * by default. - */ -int CharSel::computeOffset() -{ - int local_index = 0; - int last_kart = user_config->m_player[m_player_index].getLastKartId(); - for(unsigned int i=0; igetNumLocalPlayers() > 1 && - menu_manager->isCurrentMenu(MENUID_CHARSEL_P1)) - { - menu_manager->pushMenu(MENUID_CHARSEL_P2); - return; - } - - if(race_manager->getNumLocalPlayers() > 2 && - menu_manager->isCurrentMenu(MENUID_CHARSEL_P2)) - { - menu_manager->pushMenu(MENUID_CHARSEL_P3); - return; - } - - if (race_manager->getNumLocalPlayers() > 3 && - menu_manager->isCurrentMenu(MENUID_CHARSEL_P3)) - { - menu_manager->pushMenu(MENUID_CHARSEL_P4); - return; - } - - // Last character selected - if(network_manager->getMode()==NetworkManager::NW_CLIENT) - { - // Switch state to wait for race information - network_manager->waitForRaceInformation(); - menu_manager->pushMenu(MENUID_START_RACE_FEEDBACK); - } - else - { - - // The state of the server does not change now (so that it can keep - // on handling client selections). Waiting for all client infos - // happens in the start_race_feedback menu (which then triggers - // sending the race info). - if (race_manager->getMajorMode() == RaceManager::MAJOR_MODE_GRAND_PRIX) - menu_manager->pushMenu(MENUID_GRANDPRIXSELECT); - else - menu_manager->pushMenu(MENUID_TRACKSEL); - } -} // nextMenu - -// ---------------------------------------------------------------------------- -/** Handles widget selection. - */ -void CharSel::select() -{ - int wgt = widget_manager->getSelectedWgt(); - if(wgt==WTOK_UP) - { - m_offset--; - if(m_offset < 0) m_offset = (int)m_index_avail_karts.size() - 1; - updateScrollPosition(); - return; - } - if(wgt==WTOK_DOWN) - { - m_offset++; - if( m_offset >= (int)m_index_avail_karts.size() ) m_offset=0; - updateScrollPosition(); - return; - } - - // Now it must be a character selection: - // ------------------------------------- - int token = widget_manager->getSelectedWgt() - WTOK_RACER0; - if(token<0 || token>(int)m_index_avail_karts.size()) - { - token = widget_manager->getSelectedWgt() - WTOK_NAME0; - } - - token = (token+m_offset) % (int)m_index_avail_karts.size(); - int kart_id = m_index_avail_karts[token]; - if(kart_id < 0) // group selected - { - user_config->m_kart_group = m_all_groups[-kart_id-1]; - switchGroup(); - // forces redraw of the model, otherwise (if m_current_kart=0) the new - // model would not be displayed. - m_current_kart = -1; - switchCharacter(0); - updateScrollPosition(); - return; - } - const KartProperties* KP = kart_properties_manager->getKartById(kart_id); - if (!KP) return; - - race_manager->setLocalKartInfo(m_player_index, KP->getIdent()); - user_config->m_player[m_player_index].setLastKartId(kart_id); - // Send the confirmation message to all clients. - network_manager->sendCharacterSelected(m_player_index, - KP->getIdent()); - // In non-network more or on the server add selected kart (token) to - // selected karts vector so it cannot be selected again - if(network_manager->getMode()!=NetworkManager::NW_CLIENT) - { - kart_properties_manager->selectKart(kart_id); - nextMenu(); - } -} // select - -//---------------------------------------------------------------------------- -void CharSel::handle(GameAction action, int value) -{ - // Forward keypresses to basegui - if(value) return BaseGUI::handle(action, value); - - if(action==GA_CURSOR_UP) - { - m_offset--; - if(m_offset < 0) m_offset = (int)m_index_avail_karts.size() - 1; - updateScrollPosition(); - return; - - } // if cursor up - if(action ==GA_CURSOR_DOWN) - { - m_offset++; - if( m_offset >= (int)m_index_avail_karts.size() ) m_offset=0; - updateScrollPosition(); - return; - } // if cursor down - BaseGUI::handle(action, value); -} // handle diff --git a/src/gui/char_sel.hpp b/src/gui/char_sel.hpp deleted file mode 100644 index cb2c14151..000000000 --- a/src/gui/char_sel.hpp +++ /dev/null @@ -1,63 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef HEADER_CHAR_SEL_HPP -#define HEADER_CHAR_SEL_HPP - -#include -#include "base_gui.hpp" - -class ssgTransform; -class ssgContext; - -class CharSel: public BaseGUI -{ -private: - ssgContext *m_context; - ssgTransform *m_kart; - int m_current_kart; - float m_clock; - int m_player_index; - int m_offset; // index of first racer displayed - unsigned int m_num_entries; // number of entries to display - /** Helps to switch off the displayed text once only. */ - bool m_first_frame; - std::vector m_index_avail_karts; - /** List of all groups, but excluding empty groups (e.g. groups with all - * karts still locked. */ - std::vector m_all_groups; - static const unsigned int m_max_entries=7; - - void updateScrollPosition(); - int computeIndent(int n) {return 40+abs((int)(m_max_entries-1)/2 - n)*3;} - void switchGroup(); - void nextMenu(); - void switchCharacter(int n); - int computeOffset(); -public: - CharSel(int which_player); - ~CharSel(); - - void update(float dt); - void select(); - void updateAvailableCharacters(); - virtual void handle(GameAction, int); -}; - -#endif diff --git a/src/gui/config_controls.cpp b/src/gui/config_controls.cpp deleted file mode 100644 index bd70aab74..000000000 --- a/src/gui/config_controls.cpp +++ /dev/null @@ -1,77 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "config_controls.hpp" - -#include "gui/menu_manager.hpp" -#include "gui/widget_manager.hpp" -#include "utils/translation.hpp" - -enum WidgetTokens -{ - WTOK_TITLE, - - WTOK_PLYR1, - WTOK_PLYR2, - WTOK_PLYR3, - WTOK_PLYR4, - - WTOK_QUIT -}; - -ConfigControls::ConfigControls() -{ - widget_manager->switchOrder(); - widget_manager->addTitleWgt( WTOK_TITLE, 60, 7, _("Edit controls for who?")); - widget_manager->hideWgtRect(WTOK_TITLE); - - widget_manager->addTextButtonWgt( WTOK_PLYR1 , 60, 7, _("Player 1")); - widget_manager->addTextButtonWgt( WTOK_PLYR2 , 60, 7, _("Player 2")); - widget_manager->addTextButtonWgt( WTOK_PLYR3 , 60, 7, _("Player 3")); - widget_manager->addTextButtonWgt( WTOK_PLYR4 , 60, 7, _("Player 4")); - - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 60, 5); - - widget_manager->addTextButtonWgt( WTOK_QUIT , 60, 7, _("Press to go back")); - widget_manager->setWgtTextSize( WTOK_QUIT, WGT_FNT_SML ); - - widget_manager->layout( WGT_AREA_ALL ); -} - -//----------------------------------------------------------------------------- -ConfigControls::~ConfigControls() -{ - widget_manager->reset(); -} - -//----------------------------------------------------------------------------- -void ConfigControls::select() -{ - switch ( widget_manager->getSelectedWgt() ) - { - case WTOK_PLYR1: menu_manager->pushMenu(MENUID_CONFIG_P1); break; - case WTOK_PLYR2: menu_manager->pushMenu(MENUID_CONFIG_P2); break; - case WTOK_PLYR3: menu_manager->pushMenu(MENUID_CONFIG_P3); break; - case WTOK_PLYR4: menu_manager->pushMenu(MENUID_CONFIG_P4); break; - case WTOK_QUIT: menu_manager->popMenu(); break; - } -} - - - diff --git a/src/gui/config_controls.hpp b/src/gui/config_controls.hpp deleted file mode 100644 index 26019f440..000000000 --- a/src/gui/config_controls.hpp +++ /dev/null @@ -1,34 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef HEADER_CONFIGCONTROLS_H -#define HEADER_CONFIGCONTROLS_H - -#include "base_gui.hpp" - -class ConfigControls: public BaseGUI -{ -public: - ConfigControls(); - ~ConfigControls(); - - void select(); -}; - -#endif diff --git a/src/gui/config_display.cpp b/src/gui/config_display.cpp deleted file mode 100644 index ce144d46b..000000000 --- a/src/gui/config_display.cpp +++ /dev/null @@ -1,436 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "config_display.hpp" - -#include - -#include "main_loop.hpp" -#include "sdldrv.hpp" -#include "user_config.hpp" -#include "menu_manager.hpp" -#include "gui/widget_manager.hpp" -#include "utils/translation.hpp" -#include "utils/string_utils.hpp" - -enum WidgetTokens -{ - WTOK_TITLE, - - WTOK_FULLSCREEN, - WTOK_NEXT_BACKGROUND, - WTOK_INCR_RES, - WTOK_DECR_RES, - WTOK_CURRENT_RES, - WTOK_APPLY_RES, - WTOK_CLEAR_BLACKLIST, - - WTOK_QUIT -}; - -ConfigDisplay::ConfigDisplay() -{ - getScreenModes(); //Fill the vector m_sizes with possible resolutions - - m_curr_width = m_sizes[m_curr_res].first; - m_curr_height = m_sizes[m_curr_res].second; - - widget_manager->switchOrder(); - widget_manager->addTitleWgt( WTOK_TITLE, 60, 7, _("Display Settings")); - widget_manager->hideWgtRect(WTOK_TITLE); - - if( isBlacklisted( m_curr_width, m_curr_height )) - { - widget_manager->addEmptyWgt( WTOK_FULLSCREEN, 1, 7); - - if (user_config->m_fullscreen) - { - std::cerr << "Warning: current screen mode is blacklisted.\n"; - } - } - else - { - if(user_config->m_fullscreen) - { - widget_manager->addTextButtonWgt( WTOK_FULLSCREEN, 60, 7, - _("Window mode")); - } - else - { - widget_manager->addTextButtonWgt( WTOK_FULLSCREEN, 60, 7, - _("Fullscreen mode")); - } - } - - widget_manager->addTextButtonWgt(WTOK_NEXT_BACKGROUND, 60, 7, _("Next background")); - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 60, 2 ); - - //I18N: displays current resolution - std::string msg = StringUtils::insert_values(_("Current: %dx%d"), - m_curr_width, m_curr_height); - widget_manager->addTextWgt( WTOK_CURRENT_RES, 60, 7, msg); - widget_manager->hideWgtRect(WTOK_CURRENT_RES); - - widget_manager->addTextButtonWgt( WTOK_INCR_RES, 60, 7, - _("Increase Resolution")); - widget_manager->addTextButtonWgt( WTOK_DECR_RES, 60, 7, - _("Decrease Resolution")); - - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 1, 2 ); - widget_manager->addTextButtonWgt( WTOK_APPLY_RES, 60, 7, _("Apply ")); - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 1, 2 ); - - widget_manager->addEmptyWgt( WTOK_CLEAR_BLACKLIST, 60, 7); - widget_manager->setWgtText( WTOK_CLEAR_BLACKLIST, - _("Clear from Blacklist") ); - - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 1, 2 ); - - widget_manager->addTextButtonWgt( WTOK_QUIT, 60, 7, _("Press to go back")); - widget_manager->setWgtTextSize( WTOK_QUIT, WGT_FNT_SML ); - - widget_manager->layout( WGT_AREA_ALL ); -} - -//----------------------------------------------------------------------------- -ConfigDisplay::~ConfigDisplay() -{ - widget_manager->reset(); -} - -//----------------------------------------------------------------------------- -void ConfigDisplay::select() -{ - switch ( widget_manager->getSelectedWgt() ) - { - case WTOK_FULLSCREEN: - inputDriver->toggleFullscreen(); - if( user_config->m_fullscreen ) - { - menu_manager->pushMenu( MENUID_RESOLUTION_CONFIRM_WIN ); - } - else - { -#if defined(WIN32) ||defined(__CYGWIN__) - // Problem: on windows the textures etc. are deleted - // so we have to reload this object again (since all display - // lists in the widget were deleted). So we force to re-create - // this object by first pushing it from the menu stack, and - // then adding it again. - menu_manager->popMenu(); - menu_manager->pushMenu(MENUID_CONFIG_DISPLAY); - return; -#else - //FIXME: maybe instead of 'Fullscreen mode' something like - //'Switch to fullscreen mode' would be more user friendly? - widget_manager->setWgtText(WTOK_FULLSCREEN, _("Fullscreen mode")); -#endif - } - changeApplyButton(); - break; - case WTOK_NEXT_BACKGROUND: - user_config->nextBackgroundIndex(); - main_loop->loadBackgroundImages(); - break; - case WTOK_INCR_RES: - { - const int NUM_RES = (int)m_sizes.size(); - m_curr_res = std::min(NUM_RES - 1, m_curr_res + 1); - - if ( user_config->m_fullscreen && - isBlacklisted( m_curr_width, m_curr_height )) - { - showBlacklistButtons(); - } - else changeApplyButton(); - } - break; - - case WTOK_DECR_RES: - m_curr_res = std::max(0,m_curr_res-1); - if ( user_config->m_fullscreen && - isBlacklisted( m_curr_width, m_curr_height )) - { - showBlacklistButtons(); - } - else changeApplyButton(); - break; - - case WTOK_APPLY_RES: - if (m_curr_width != m_sizes[m_curr_res].first || - m_curr_height != m_sizes[m_curr_res].second) - { - changeResolution(m_sizes[m_curr_res].first,m_sizes[m_curr_res].second/*, false*/); - - if (user_config->m_fullscreen) - { - menu_manager->pushMenu(MENUID_RESOLUTION_CONFIRM_FS); - } - else - { - //I18N: displays current resolution - std::string s = StringUtils::insert_values(_("Current: %dx%d"), - user_config->m_width, - user_config->m_height); - widget_manager->setWgtText(WTOK_CURRENT_RES, s); - - if ( isBlacklisted( user_config->m_width, - user_config->m_height )) - { - widget_manager->hideWgtText(WTOK_FULLSCREEN); - widget_manager->hideWgtRect(WTOK_FULLSCREEN); - widget_manager->deactivateWgt(WTOK_FULLSCREEN); - } - else - { - widget_manager->setWgtText(WTOK_FULLSCREEN, _("Fullscreen mode")); - widget_manager->showWgtText(WTOK_FULLSCREEN); - widget_manager->showWgtRect(WTOK_FULLSCREEN); - widget_manager->activateWgt(WTOK_FULLSCREEN); - } - widget_manager->layout(); - - user_config->m_prev_width = m_curr_width = user_config->m_width; - user_config->m_prev_height = m_curr_height = user_config->m_height; - } - } - break; - - case WTOK_CLEAR_BLACKLIST: - { - const int NUM_BLACKLISTED = (int)user_config->m_blacklist_res.size(); - int black_width, black_height = 0; - int id = -1; - - for ( int i = 0; i < NUM_BLACKLISTED; ++i ) - { - sscanf(user_config->m_blacklist_res[i].c_str(), - "%dx%d",& black_width, & black_height); - - if ( m_sizes[m_curr_res].first == black_width && - m_sizes[m_curr_res].second == black_height ) - { - id = i; - break; - } - } - - if( id != -1 ) - { - user_config->m_blacklist_res.erase( - user_config->m_blacklist_res.begin() + id ); - } - else - { - std::cerr << "Warning: tried to erase a resolution that " << - "is not blacklisted.\n"; - } - } - - changeApplyButton(); - widget_manager->layout(); - break; - - case WTOK_QUIT: - menu_manager->popMenu(); - break; - - default: break; - } -} - -//----------------------------------------------------------------------------- -void ConfigDisplay::changeResolution(int width, int height/*, bool reverse*/) -{ - if (/*!reverse && */user_config->m_fullscreen ) - { - //store previous width and height - user_config->m_prev_width = user_config->m_width; - user_config->m_prev_height = user_config->m_height; - } - - //change to new height and width - user_config->m_width = width; - user_config->m_height = height; - -#if 0 - // if returning to prev res, change m_crashed to false as we didn't crash and save config - if (reverse && user_config->m_fullscreen) - { - user_config->m_crashed = false; - user_config->saveConfig(); - } -#endif - - if (/*!reverse && */user_config->m_fullscreen ) - { - // Store settings in user config file in case new video mode - // causes a crash - user_config->m_crashed = true; - user_config->saveConfig(); - } - - inputDriver->setVideoMode(); - glViewport(0,0,user_config->m_width, user_config->m_height); -} - -/**This gets the available screen resolutions available on the hardware and - * populates a vector with them. - */ -void ConfigDisplay::getScreenModes() -{ - SDL_Rect **modes = SDL_ListModes( NULL, SDL_OPENGL | SDL_FULLSCREEN | SDL_HWSURFACE ); - - if (modes == NULL) - { - std::cerr << "No fullscreen modes available.\n"; - - loadDefaultModes(); - - //FIXME: blacklist all resolutions - - } - else if (modes == (SDL_Rect **)-1) //Any screen size can be used - { - loadDefaultModes(); - } - else - { - //modes[i] is used as the breaking condition because that's how SDL's - //docs use it in their examples. - for (int i = 0; modes[i]; ++i) - { - m_sizes.push_back (std::pair (modes[i]->w, - modes[i]->h)); - } - - std::sort (m_sizes.begin(), m_sizes.end()); - - //Prevent use of very small resolutions - const int MIN_WIDTH = 640; - const int MIN_HEIGHT = 480; - const int NUM_RES = (int)m_sizes.size(); - - for (int i = NUM_RES - 1; i >= 0; --i) - { - if ( m_sizes[i].first < MIN_WIDTH ) - { - //Remove the resolutions with a width smaller than MIN_WIDTH - m_sizes.erase( m_sizes.begin(), m_sizes.begin() + i + 1 ); - break; - } - else if ( m_sizes[i].first == MIN_WIDTH && - m_sizes[i].second < MIN_HEIGHT ) - { - m_sizes.erase( m_sizes.begin(), m_sizes.begin() + i + 1 ); - break; - } - } - } - - //Set the same resolution as the one in the config file; if it's not - //found, set it to the lowest resolution available as a sane default. - m_curr_res = -1; - const int NUM_RES = (int)m_sizes.size(); - - for (int i = 0; i < NUM_RES; ++i) - { - if (m_sizes[i].first == user_config->m_width - && m_sizes[i].second == user_config->m_height) - { - m_curr_res = i; - return; - } - } - - m_curr_res = 0; -} - -//----------------------------------------------------------------------------- -void ConfigDisplay::changeApplyButton() -{ - // change Apply button text - std::string msg = StringUtils::insert_values(_("Apply %dx%d"), - m_sizes[m_curr_res].first, - m_sizes[m_curr_res].second); - widget_manager->setWgtText(WTOK_APPLY_RES, msg); - widget_manager->activateWgt(WTOK_APPLY_RES); - - // hide Remove from blacklist button - widget_manager->hideWgtRect(WTOK_CLEAR_BLACKLIST); - widget_manager->hideWgtText(WTOK_CLEAR_BLACKLIST); - widget_manager->deactivateWgt(WTOK_CLEAR_BLACKLIST); -} - -//----------------------------------------------------------------------------- -bool ConfigDisplay::isBlacklisted(int width, int height) -{ - int black_width, black_height; - const int NUM_BLACKLISTED = (int)user_config->m_blacklist_res.size(); - - for (int i = 0; i < NUM_BLACKLISTED; ++i) - { - sscanf(user_config->m_blacklist_res[i].c_str(), - "%dx%d", &black_width, &black_height ); - - if (width == black_width && height == black_height) return true; - } - - return false; - -} - -//----------------------------------------------------------------------------- -void ConfigDisplay::showBlacklistButtons() -{ - //change Apply button to Blacklisted button - std::string msg = StringUtils::insert_values(_("%dx%d Blacklisted"), - m_sizes[m_curr_res].first, - m_sizes[m_curr_res].second); - widget_manager->setWgtText(WTOK_APPLY_RES, msg); - widget_manager->deactivateWgt(WTOK_APPLY_RES); - - //show Remove from blacklist button - widget_manager->showWgtRect( WTOK_CLEAR_BLACKLIST); - widget_manager->showWgtText( WTOK_CLEAR_BLACKLIST); - widget_manager->activateWgt( WTOK_CLEAR_BLACKLIST); -} - -/** loadDefaultModes() populates our list of resolutios manually, sorted from - * smallest to biggest, first on the width, then the height. Useful when - * no fullscreen resolutions are available or when any resolution is - * available. The list of resolutions is taken from - * http://www.tamingthebeast.net/blog/web-development/screen-resolution-statistics-0907.htm - */ -void ConfigDisplay::loadDefaultModes() -{ - m_sizes.clear(); - - m_sizes.push_back( std::pair (800, 600) ); // 4:3 - m_sizes.push_back( std::pair (1024, 768) ); // 4:3 - m_sizes.push_back( std::pair (1152, 864) ); // 4:3 - m_sizes.push_back( std::pair (1280, 768) ); // 5:3 - m_sizes.push_back( std::pair (1280, 800) ); // 8:5 - m_sizes.push_back( std::pair (1280, 960) ); // 4:3 - m_sizes.push_back( std::pair (1280, 1024) );// 5:4 - m_sizes.push_back( std::pair (1440, 900) ); // 8:5 - m_sizes.push_back( std::pair (1680, 1050) );// 8:5 - m_sizes.push_back( std::pair (1920, 1200) );// 8:5 -}; - diff --git a/src/gui/config_display.hpp b/src/gui/config_display.hpp deleted file mode 100644 index c97aa6916..000000000 --- a/src/gui/config_display.hpp +++ /dev/null @@ -1,60 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef HEADER_CONFIG_DISPLAY_HPP -#define HEADER_CONFIG_DISPLAY_HPP - -#include - -#include "gui/base_gui.hpp" -#include "gui/display_res_confirm.hpp" - -class ConfigDisplay: public BaseGUI -{ -public: - ConfigDisplay(); - ~ConfigDisplay(); - - void select(); - -private: - std::vector< std::pair > m_sizes; - int m_curr_res; - - int m_curr_width; - int m_curr_height; - - // changeResolution() reverse param is set true when changing to a previous resolution, - // thought it is disabled for now. - void changeResolution(int width, int height/*, bool reverse*/); - void getScreenModes(); - void changeApplyButton(); - -#if 0 - // isBlacklisted() returns the index of the resolution in the blacklist - // or -1 if not in the blacklist - int isBlacklisted(); -#endif - bool isBlacklisted(int width, int height); - void showBlacklistButtons(); - - void loadDefaultModes(); -}; - -#endif diff --git a/src/gui/config_sound.cpp b/src/gui/config_sound.cpp deleted file mode 100644 index 7f9012a96..000000000 --- a/src/gui/config_sound.cpp +++ /dev/null @@ -1,115 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "user_config.hpp" -#include "gui/config_sound.hpp" -#include "gui/menu_manager.hpp" -#include "gui/widget_manager.hpp" -#include "audio/sound_manager.hpp" -#include "utils/translation.hpp" - -enum WidgetTokens -{ - WTOK_TITLE, - - WTOK_MUSIC, - WTOK_SFX, - - WTOK_QUIT, -}; - -ConfigSound::ConfigSound() -{ - widget_manager->switchOrder(); - widget_manager->addTitleWgt(WTOK_TITLE, 50, 7, _("Sound Settings")); - widget_manager->hideWgtRect(WTOK_TITLE); - - widget_manager->setInitialActivationState(true); - if( user_config->doMusic() ) - { - widget_manager->addTextButtonWgt( WTOK_MUSIC, 50, 7, _("Turn off music")); - } - else - { - widget_manager->addTextButtonWgt( WTOK_MUSIC, 50, 7, _("Turn on music")); - } - - if( user_config->doSFX() ) - { - widget_manager->addTextButtonWgt( WTOK_SFX, 50, 7, _("Turn off sound effects")); - } - else - { - widget_manager->addTextButtonWgt( WTOK_SFX, 50, 7, _("Turn on sound effects")); - } - - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 1, 5); - - widget_manager->addTextButtonWgt(WTOK_QUIT, 50, 7,_("Press to go back")); - widget_manager->setWgtTextSize(WTOK_QUIT, WGT_FNT_SML); - - widget_manager->layout(WGT_AREA_ALL); -} - -//----------------------------------------------------------------------------- -ConfigSound::~ConfigSound() -{ - widget_manager->reset(); -} - -//----------------------------------------------------------------------------- -void ConfigSound::select() -{ - switch ( widget_manager->getSelectedWgt()) - { - case WTOK_MUSIC: - if(user_config->doMusic()) - { - user_config->setMusic(UserConfig::UC_DISABLE); - widget_manager->setWgtText(WTOK_MUSIC, _("Turn on music")); - sound_manager->stopMusic(); - } - else - { - user_config->setMusic(UserConfig::UC_ENABLE); - widget_manager->setWgtText(WTOK_MUSIC, _("Turn off music")); - sound_manager->startMusic(sound_manager->getCurrentMusic()); - } - break; - case WTOK_SFX: - if(user_config->doSFX()) - { - user_config->setSFX(UserConfig::UC_DISABLE); - widget_manager->setWgtText(WTOK_SFX, _("Turn on sound effects")); - } - else - { - user_config->setSFX(UserConfig::UC_ENABLE); - widget_manager->setWgtText(WTOK_SFX, _("Turn off sound effects")); - } - break; - case WTOK_QUIT: - menu_manager->popMenu(); - break; - default: break; - } -} - - - diff --git a/src/gui/config_sound.hpp b/src/gui/config_sound.hpp deleted file mode 100644 index 93c599d38..000000000 --- a/src/gui/config_sound.hpp +++ /dev/null @@ -1,38 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef HEADER_CONFIGSOUND_H -#define HEADER_CONFIGSOUND_H - -#include "base_gui.hpp" - -class ConfigSound: public BaseGUI -{ -public: - ConfigSound(); - ~ConfigSound(); - - void select(); - -private: - int m_music_menu_id; - int m_sfx_menu_id; -}; - -#endif diff --git a/src/gui/credits_menu.cpp b/src/gui/credits_menu.cpp deleted file mode 100644 index 7503f546f..000000000 --- a/src/gui/credits_menu.cpp +++ /dev/null @@ -1,102 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "gui/credits_menu.hpp" - -#include -#include -#include - -#include "gui/menu_manager.hpp" -#include "gui/widget_manager.hpp" -#include "io/file_manager.hpp" -#include "utils/translation.hpp" - -enum WidgetTokens -{ - WTOK_CREDITS, - WTOK_QUIT -}; - - -CreditsMenu::CreditsMenu() -{ - std::string filename; - std::string line; - std::string credits_text; - - filename = file_manager->getConfigFile("CREDITS"); - std::ifstream file(filename.c_str()); - - if( file.is_open() ) - { - while( !file.eof() ) - { - getline(file, line); - credits_text.append(line); - credits_text.push_back('\n'); - } // while - file.close(); - } - else - { - printf("Couldn't load '%s'\n",filename.c_str()); - credits_text.append("CREDIT file was not installed properly!!\n"); - credits_text.append("Please check 'data/CREDITS'!!"); - } - - - widget_manager->addTextWgt( WTOK_CREDITS, 100, 93, "" ); - widget_manager->setWgtTextSize( WTOK_CREDITS, WGT_FNT_SML ); - //FIXME: maybe I should make scroll names more consistent - widget_manager->enableWgtScroll( WTOK_CREDITS ); - widget_manager->setWgtYScrollPos( WTOK_CREDITS, WGT_SCROLL_START_BOTTOM ); - widget_manager->setWgtCornerRadius( WTOK_CREDITS, 1); - widget_manager->showWgtBorder( WTOK_CREDITS ); - widget_manager->setWgtBorderColor( WTOK_CREDITS, WGT_TRANS_GREEN ); - widget_manager->setWgtBorderPercentage( WTOK_CREDITS, 2); - widget_manager->setWgtYScrollSpeed( WTOK_CREDITS, -80 ); - widget_manager->breakLine(); - - widget_manager->addTextButtonWgt( WTOK_QUIT, 40, 7, - _("Go back to the main menu")); - - widget_manager->layout( WGT_AREA_TOP ); - - //This is done after layout so the widget doesn't gets resized. - widget_manager->setWgtText( WTOK_CREDITS, credits_text ); -} // CreditsMenu - -//----------------------------------------------------------------------------- -CreditsMenu::~CreditsMenu() -{ - widget_manager->reset() ; -} // ~CreditsMenu - -//----------------------------------------------------------------------------- -void CreditsMenu::select() -{ - switch( widget_manager->getSelectedWgt() ) - { - case WTOK_QUIT: - menu_manager->popMenu(); - break; - } -} -/* EOF */ diff --git a/src/gui/credits_menu.hpp b/src/gui/credits_menu.hpp deleted file mode 100644 index 7ef45ce3d..000000000 --- a/src/gui/credits_menu.hpp +++ /dev/null @@ -1,34 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef HEADER_CREDITSMENU_H -#define HEADER_CREDITSMENU_H - -#include "base_gui.hpp" - -class CreditsMenu: public BaseGUI -{ -public: - CreditsMenu(); - ~CreditsMenu(); - - void select (); -}; - -#endif diff --git a/src/gui/display_res_confirm.cpp b/src/gui/display_res_confirm.cpp deleted file mode 100644 index 8000eb454..000000000 --- a/src/gui/display_res_confirm.cpp +++ /dev/null @@ -1,173 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2008 Paul Elms -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include -#include - -#include "user_config.hpp" -#include "sdldrv.hpp" -#include "gui/display_res_confirm.hpp" -#include "gui/menu_manager.hpp" -#include "gui/widget_manager.hpp" -#include "utils/translation.hpp" -#include "utils/string_utils.hpp" - -enum WidgetTokens -{ - WTOK_TITLE, - WTOK_APPLY_RES, - - WTOK_QUIT -}; - - -DisplayResConfirm::DisplayResConfirm( const bool FROM_WINDOW_ ) : - FROM_WINDOW (FROM_WINDOW_) -{ - m_counter = 5; // Number of seconds in which to confirm - - widget_manager->switchOrder(); - widget_manager->addTitleWgt( WTOK_TITLE, 70, 7, - _("Confirm Resolution Within 5 Seconds")); - widget_manager->hideWgtRect(WTOK_TITLE); - - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 40, 2); - - widget_manager->addTextButtonWgt( WTOK_APPLY_RES, 40, 7, _("Confirm Resolution") ); - - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 40, 2); - - widget_manager->addTextButtonWgt( WTOK_QUIT, 40, 7, _("Press to Cancel") ); - widget_manager->setWgtTextSize( WTOK_QUIT, WGT_FNT_SML ); - - widget_manager->layout( WGT_AREA_ALL ); - - m_timer = SDL_AddTimer(1000,timeout,NULL); - if (m_timer == NULL) - { - std::cerr << "Warning: Timer could not be initialised!\n"; - } -} - -//----------------------------------------------------------------------------- -DisplayResConfirm::~DisplayResConfirm() -{ - widget_manager->reset(); -} - -//----------------------------------------------------------------------------- -void DisplayResConfirm::select() -{ - switch ( widget_manager->getSelectedWgt()) - { - case WTOK_APPLY_RES: - user_config->m_prev_width = user_config->m_width; - user_config->m_prev_height = user_config->m_height; - - SDL_RemoveTimer(m_timer); - menu_manager->popMenu(); - break; - case WTOK_QUIT: - SDL_RemoveTimer(m_timer); - if (FROM_WINDOW) - { - inputDriver->toggleFullscreen(); - user_config->m_crashed = false; - user_config->saveConfig(); - } - menu_manager->popMenu(); - break; - default: break; - } -} - -//----------------------------------------------------------------------------- -void DisplayResConfirm::countdown() -{ - if (m_counter > 1) - { - m_counter--; - m_count = StringUtils::insert_values(_("Confirm Resolution Within %d Seconds"), - m_counter); - widget_manager->setWgtText( WTOK_TITLE, m_count ); - } - else - { - SDL_RemoveTimer(m_timer); - - // blacklist the resolution - std::ostringstream o; - o << user_config->m_width << "x" << user_config->m_height; - user_config->m_blacklist_res.push_back (o.str()); - - if( FROM_WINDOW ) - { - inputDriver->toggleFullscreen(); - user_config->m_prev_windowed = false; - user_config->m_crashed = false; - user_config->saveConfig(); - } - - - menu_manager->popMenu(); - } -} -//----------------------------------------------------------------------------- -void DisplayResConfirm::handle(GameAction ga, int value) -{ - switch ( ga ) - { - case GA_LEAVE: - if (value) - break; - SDL_RemoveTimer(m_timer); - if (FROM_WINDOW) - { - inputDriver->toggleFullscreen(); - user_config->m_crashed = false; - user_config->saveConfig(); - } - menu_manager->popMenu(); - break; - - default: - BaseGUI::handle(ga, value); - break; - } -} - -//============================================================================= -Uint32 timeout(Uint32 interval, void *param) -{ - SDL_Event event; - SDL_UserEvent userevent; - - userevent.type = SDL_USEREVENT; - userevent.code = 0; - userevent.data1 = NULL; - userevent.data2 = NULL; - - event.type = SDL_USEREVENT; - event.user = userevent; - - SDL_PushEvent(&event); - - return (interval); -} - diff --git a/src/gui/display_res_confirm.hpp b/src/gui/display_res_confirm.hpp deleted file mode 100644 index b5eb6dff4..000000000 --- a/src/gui/display_res_confirm.hpp +++ /dev/null @@ -1,47 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2008 Paul Elms -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef HEADER_DISPLAY_RES_CONFIRM_HPP -#define HEADER_DISPLAY_RES_CONFIRM_HPP - -#include "base_gui.hpp" - -#include - -class DisplayResConfirm: public BaseGUI -{ -public: - DisplayResConfirm( const bool FROM_WINDOW_ ); - ~DisplayResConfirm(); - - void select(); - void countdown(); - void handle(GameAction ga, int value); - -private: - std::string m_count; - int m_counter; - const bool FROM_WINDOW; - - SDL_TimerID m_timer; -}; - -Uint32 timeout(Uint32 interval, void *param); - -#endif diff --git a/src/gui/engine.cpp b/src/gui/engine.cpp new file mode 100644 index 000000000..4647e373a --- /dev/null +++ b/src/gui/engine.cpp @@ -0,0 +1,110 @@ +#include "gui/engine.hpp" +#include "gui/screen.hpp" +#include "gui/skin.hpp" +#include "gui/widget.hpp" +#include + +namespace GUIEngine +{ + +IGUIEnvironment* g_env; +IGUISkin* g_skin; +IGUIFont* g_font; +IrrlichtDevice* g_device; +irr::video::IVideoDriver* g_driver; + +// ----------------------------------------------------------------------------- +IrrlichtDevice* getDevice() +{ + return g_device; +} +// ----------------------------------------------------------------------------- +IGUIFont* getFont() +{ + return g_font; +} +// ----------------------------------------------------------------------------- +IVideoDriver* getDriver() +{ + return g_driver; +} +// ----------------------------------------------------------------------------- +IGUIEnvironment* getGUIEnv() +{ + return g_env; +} +// ----------------------------------------------------------------------------- + +std::vector g_loaded_screens; +Screen* g_current_screen = NULL; + +void switchToScreen(const char* screen_name) +{ + // clean what was left by the previous screen + g_env->clear(); + g_current_screen = NULL; + Widget::resetIDCounters(); + + // check if we already loaded this screen + const int screen_amount = g_loaded_screens.size(); + for(int n=0; naddWidgets(); +} +// ----------------------------------------------------------------------------- +Screen* getCurrentScreen() +{ + assert(g_current_screen != NULL); + return g_current_screen; +} +// ----------------------------------------------------------------------------- +void (*g_event_callback)(Widget* widget, std::string& name); +void init(IrrlichtDevice* device_a, IVideoDriver* driver_a, void (*eventCallback)(Widget* widget, std::string& name) ) +{ + g_env = device_a->getGUIEnvironment(); + g_device = device_a; + g_driver = driver_a; + g_event_callback = eventCallback; + + /* + To make the g_font a little bit nicer, we load an external g_font + and set it as the new default g_font in the g_skin. + To keep the standard g_font for tool tip text, we set it to + the built-in g_font. + */ + g_skin = new Skin(g_env->getSkin()); + g_env->setSkin(g_skin); + //g_skin = g_env->getSkin(); + g_font = g_env->getFont("fonthaettenschweiler.bmp"); + if (g_font) g_skin->setFont(g_font); + + //g_skin->setFont(g_env->getBuiltInFont(), EGDF_TOOLTIP); +} +// ----------------------------------------------------------------------------- +void transmitEvent(Widget* widget, std::string& name) +{ + assert(g_event_callback != NULL); + g_event_callback(widget, name); +} +// ----------------------------------------------------------------------------- +void render() +{ + g_env->drawAll(); +} + +} diff --git a/src/gui/engine.hpp b/src/gui/engine.hpp new file mode 100644 index 000000000..5d731bc1e --- /dev/null +++ b/src/gui/engine.hpp @@ -0,0 +1,34 @@ +#ifndef HEADER_ENGINE_HPP +#define HEADER_ENGINE_HPP + +#include +#include + +using namespace irr; +using namespace core; +using namespace scene; +using namespace video; +using namespace io; +using namespace gui; + + +namespace GUIEngine +{ + class Screen; + class Widget; + + extern IrrlichtDevice* getDevice(); + extern IGUIEnvironment* getGUIEnv(); + extern IVideoDriver* getDriver(); + extern IGUIFont* getFont(); + + void init(irr::IrrlichtDevice* device, irr::video::IVideoDriver* driver, void (*eventCallback)(Widget* widget, std::string& name) ); + void switchToScreen(const char* ); + Screen* getCurrentScreen(); + + void render(); + void transmitEvent(Widget* widget, std::string& name); + +} + +#endif \ No newline at end of file diff --git a/src/gui/feature_unlocked.cpp b/src/gui/feature_unlocked.cpp deleted file mode 100644 index 99d199d1b..000000000 --- a/src/gui/feature_unlocked.cpp +++ /dev/null @@ -1,74 +0,0 @@ -// $Id: feature_unlocked.cpp 1305 2007-11-26 14:28:15Z hiker $ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2008 Joerg Henrichs -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "gui/feature_unlocked.hpp" - -#include "challenges/unlock_manager.hpp" -#include "gui/menu_manager.hpp" -#include "gui/widget_manager.hpp" -#include "utils/translation.hpp" - -enum WidgetTokens -{ - WTOK_TITLE, - WTOK_CONTINUE, - WTOK_DESCRIPTION -}; - -FeatureUnlocked::FeatureUnlocked() -{ - widget_manager->switchOrder(); - widget_manager->addTitleWgt( WTOK_TITLE, 60, 10, - _("New Feature Unlocked")); - widget_manager->hideWgtRect(WTOK_TITLE); - - m_new_features=unlock_manager->getUnlockedFeatures(); - assert(m_new_features.size()>0); - unlock_manager->clearUnlocked(); - - widget_manager->addTextWgt( WTOK_DESCRIPTION, 60, 30, - m_new_features[0]->getUnlockedMessage()); - - widget_manager->addTextButtonWgt(WTOK_CONTINUE, 50, 7, - _("Continue")); - - widget_manager->layout(WGT_AREA_ALL); -} // FeatureUnlocked - -//----------------------------------------------------------------------------- -FeatureUnlocked::~FeatureUnlocked() -{ - widget_manager->reset(); -} // ~FeatureUnlocked - -//----------------------------------------------------------------------------- - -void FeatureUnlocked::select() -{ - assert(widget_manager->getSelectedWgt()==WTOK_CONTINUE); - m_new_features.erase(m_new_features.begin()); - if(m_new_features.size()>0) - { - widget_manager->setWgtText( WTOK_DESCRIPTION, m_new_features[0]->getUnlockedMessage() ); - } - else - { - menu_manager->popMenu(); - } -} // select diff --git a/src/gui/feature_unlocked.hpp b/src/gui/feature_unlocked.hpp deleted file mode 100644 index 5bdd106d2..000000000 --- a/src/gui/feature_unlocked.hpp +++ /dev/null @@ -1,38 +0,0 @@ -// $Id: feature_unlocked.hpp 1305 2007-11-26 14:28:15Z hiker $ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2008 Joerg Henrichs -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef HEADER_FEATURE_UNLOCKED_H -#define HEADER_FEATURE_UNLOCKED_H - -#include -#include "challenges/challenge.hpp" -#include "base_gui.hpp" - -class FeatureUnlocked: public BaseGUI -{ -private: - std::vector m_new_features; - -public: - FeatureUnlocked(); - ~FeatureUnlocked(); - void select (); -}; // FeatureUnlocked - -#endif diff --git a/src/gui/font.cpp b/src/gui/font.cpp index 4a0ecc62e..0927e68e0 100644 --- a/src/gui/font.cpp +++ b/src/gui/font.cpp @@ -1,4 +1,4 @@ -// $Id: font.hpp 907 2007-02-04 01:38:54Z coz $ +// $Id$ // // SuperTuxKart - a fun racing game with go-kart // Copyright (C) 2006 Joerg Henrichs @@ -19,9 +19,9 @@ #include +#include "file_manager.hpp" #include "user_config.hpp" #include "gui/font.hpp" -#include "io/file_manager.hpp" #include "utils/string_utils.hpp" Font* font_gui; @@ -67,7 +67,7 @@ Font::~Font() void Font::Print(const char *text, int size, int x, int y, - const GLfloat* color, + const float* color, float scale_x, float scale_y, int left, int right, int top, int bottom, bool doShadow) { @@ -102,11 +102,11 @@ void Font::Print(const char *text, int size, m_text_out->setPointSize((float)sz); if(doShadow) { - m_text_out->start2f((GLfloat)x-2, (GLfloat)y-2); + m_text_out->start2f((float)x-2, (float)y-2); glColor4ub(0, 0, 0, 100); m_text_out->puts(text); } - m_text_out->start2f((GLfloat)x, (GLfloat)y); + m_text_out->start2f((float)x, (float)y); if( color == NULL ) { @@ -123,7 +123,7 @@ void Font::Print(const char *text, int size, // ----------------------------------------------------------------------------- void Font::PrintBold(const std::string &text, int size, int x, int y, - const GLfloat* color, float scale_x, float scale_y, + const float* color, float scale_x, float scale_y, int left, int right, int top, int bottom ) { // Only scale for lower resolution @@ -159,8 +159,8 @@ void Font::PrintBold(const std::string &text, int size, int x, int y, // print shadow // ------------ glColor4f(0.0f,0.0f,0.0f,1.0f); - float xf=(GLfloat)x+2; - float yf=(GLfloat)y-2; + float xf=(float)x+2; + float yf=(float)y-2; for(float r=-1; r<=0; r+=0.5) { m_text_out->start2f(xf-r, yf-r); @@ -175,8 +175,8 @@ void Font::PrintBold(const std::string &text, int size, int x, int y, { glColor4fv(color); } - xf=(GLfloat)x; - yf=(GLfloat)y; + xf=(float)x; + yf=(float)y; for(float r=-1.0f; r<=0.0f; r+=0.5f) { // This kind of simulates an outline, but it's not too good @@ -185,7 +185,7 @@ void Font::PrintBold(const std::string &text, int size, int x, int y, //else // glColor4f(1.0f,1.0f,1.0f,1.0f); - m_text_out->start2f((GLfloat)x+r, (GLfloat)y+r); + m_text_out->start2f((float)x+r, (float)y+r); m_text_out->puts(text.c_str()); } m_text_out->end(); diff --git a/src/gui/font.hpp b/src/gui/font.hpp index bd3820316..6dd8865e7 100644 --- a/src/gui/font.hpp +++ b/src/gui/font.hpp @@ -1,4 +1,4 @@ -// $Id: font.hpp 907 2007-02-04 01:38:54Z coz $ +// $Id$ // // SuperTuxKart - a fun racing game with go-kart // Copyright (C) 2006 Joerg Henrichs @@ -22,14 +22,9 @@ #include -#include class Font { -private: - fntTexFont *m_fnt; - fntRenderer *m_text_out; - public: //CENTER_OF_SCREEN has to be bigger or smaller than Widget::MAX_SCROLL const static int CENTER_OF_SCREEN=-1000001; @@ -46,13 +41,13 @@ public: // ---------------------------------------------- void Print( const char *text, int size, int x, int y, - const GLfloat* color = NULL, + const float* color = NULL, float scale_x=1.0f, float scale_y=1.0f, int left=-1, int right=-1, int top=-1, int bottom=-1, bool doShadow=false); void Print( std::string const &text, int size, int x, int y, - const GLfloat* color = NULL, + const float* color = NULL, float scale_x=1.0f, float scale_y=1.0f, int left=-1, int right=-1, int top=-1, int bottom=-1, bool doShadow=false) @@ -64,7 +59,7 @@ public: void PrintShadow(const char *text, int size, int x, int y, - const GLfloat* color = NULL, + const float* color = NULL, float scale_x=1.0f, float scale_y=1.0f, int left=-1, int right=-1, int top=-1, int bottom=-1) { @@ -74,7 +69,7 @@ public: } void PrintBold( std::string const &text, int size, int x, int y, - const GLfloat* color = NULL, + const float* color = NULL, float scale_x=1.0f, float scale_y=1.0f, int left=-1, int right=-1, int top=-1, int bottom=-1); }; diff --git a/src/gui/game_mode.cpp b/src/gui/game_mode.cpp deleted file mode 100644 index 5ee799355..000000000 --- a/src/gui/game_mode.cpp +++ /dev/null @@ -1,218 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "game_mode.hpp" - -#include "race_manager.hpp" -#include "material_manager.hpp" -#include "user_config.hpp" -#include "challenges/unlock_manager.hpp" -#include "gui/menu_manager.hpp" -#include "gui/widget_manager.hpp" -#include "network/network_manager.hpp" -#include "utils/translation.hpp" - -enum WidgetTokens -{ - WTOK_TITLE_SINGLE, - WTOK_QUICK_RACE_SINGLE, - WTOK_TIMETRIAL_SINGLE, - WTOK_FOLLOW_LEADER_SINGLE, - WTOK_3_STRIKES_SINGLE, - - WTOK_TITLE_GP, - WTOK_QUICK_RACE_GP, - WTOK_TIMETRIAL_GP, - WTOK_FOLLOW_LEADER_GP, - - WTOK_HELP, - WTOK_QUIT -}; - -GameMode::GameMode() -{ - const int HEIGHT = 7; - const int WIDTH = 5; - - const WidgetDirection column_1_dir = WGT_DIR_FROM_LEFT; - const float column_1_loc = 0.1f; - - const WidgetDirection column_2_dir = WGT_DIR_FROM_RIGHT; - const float column_2_loc = 0.1f; - - // First the single race events - // ============================ - Widget *w=widget_manager->addTextWgt(WTOK_TITLE_SINGLE, WIDTH, - HEIGHT, _("Single Race")); - widget_manager->hideWgtRect(WTOK_TITLE_SINGLE); - w->setPosition(column_1_dir, column_1_loc, NULL, - WGT_DIR_FROM_TOP, 0.2f, NULL); - Widget *w_prev=w; - w=widget_manager->addTextButtonWgt(WTOK_QUICK_RACE_SINGLE, WIDTH, HEIGHT, - _("Quick Race")); - w->setPosition(column_1_dir, column_1_loc, NULL, - WGT_DIR_UNDER_WIDGET, 0.0f, w_prev); - w_prev=w; - w=widget_manager->addTextButtonWgt(WTOK_TIMETRIAL_SINGLE, WIDTH, HEIGHT, - _("Time Trial")); - w->setPosition(column_1_dir, column_1_loc, NULL, - WGT_DIR_UNDER_WIDGET, 0.0f, w_prev); - w_prev=w; - w=widget_manager->addTextButtonWgt(WTOK_FOLLOW_LEADER_SINGLE, WIDTH, HEIGHT, - _("Follow the Leader")); - w->setPosition(column_1_dir, column_1_loc, NULL, - WGT_DIR_UNDER_WIDGET, 0.0f, w_prev); - w_prev=w; - - // don't activate battle mode in single-player mode - if(race_manager->getNumLocalPlayers()>1 || - network_manager->getMode()!=NetworkManager::NW_NONE) - { - w=widget_manager->addTextButtonWgt(WTOK_3_STRIKES_SINGLE, WIDTH, HEIGHT, - _("3 Strikes Battle")); - w->setPosition(column_1_dir, column_1_loc, NULL, - WGT_DIR_UNDER_WIDGET, 0.0f, w_prev); - w_prev=w; - widget_manager->sameWidth(WTOK_TITLE_SINGLE, WTOK_3_STRIKES_SINGLE); - } - else - widget_manager->sameWidth(WTOK_TITLE_SINGLE, WTOK_FOLLOW_LEADER_SINGLE); - - // Then the GPs - // ============ - w=widget_manager->addTextWgt(WTOK_TITLE_GP, WIDTH, - HEIGHT, _("Grand Prix")); - widget_manager->hideWgtRect(WTOK_TITLE_GP); - w->setPosition(column_2_dir, column_2_loc, NULL, - WGT_DIR_FROM_TOP, 0.2f, NULL); - w_prev=w; - w=widget_manager->addTextButtonWgt(WTOK_QUICK_RACE_GP, WIDTH, HEIGHT, - _("Quick Race")); - w->setPosition(column_2_dir, column_2_loc, NULL, - WGT_DIR_UNDER_WIDGET, 0.0f, w_prev); - w_prev=w; - w=widget_manager->addTextButtonWgt(WTOK_TIMETRIAL_GP, WIDTH, HEIGHT, - _("Time Trial")); - w->setPosition(column_2_dir, column_2_loc, NULL, - WGT_DIR_UNDER_WIDGET, 0.0f, w_prev); - w_prev=w; - w=widget_manager->addTextButtonWgt(WTOK_FOLLOW_LEADER_GP, WIDTH, HEIGHT, - _("Follow the Leader")); - w->setPosition(column_2_dir, column_2_loc, NULL, - WGT_DIR_UNDER_WIDGET, 0.0f, w_prev); - w_prev=w; - widget_manager->sameWidth(WTOK_TITLE_GP, WTOK_FOLLOW_LEADER_GP); - - if(unlock_manager->isLocked("grandprix")) - { - for(int i=WTOK_QUICK_RACE_GP; i<=WTOK_FOLLOW_LEADER_GP; i++) - { - widget_manager->hideWgtText(i); - widget_manager->deactivateWgt(i); - - widget_manager->setWgtColor(i, WGT_WHITE); - widget_manager->setWgtLockTexture(i); - widget_manager->showWgtTexture(i); - } - } - - if(unlock_manager->isLocked("followtheleader")) - { - widget_manager->hideWgtText(WTOK_FOLLOW_LEADER_SINGLE); - widget_manager->deactivateWgt(WTOK_FOLLOW_LEADER_SINGLE); - widget_manager->setWgtLockTexture(WTOK_FOLLOW_LEADER_SINGLE); - widget_manager->showWgtTexture(WTOK_FOLLOW_LEADER_SINGLE); - //widget_manager->setWgtText(WTOK_FOLLOW_LEADER_SINGLE, - // _("Fulfil challenge to unlock")); - widget_manager->hideWgtText(WTOK_FOLLOW_LEADER_GP); - widget_manager->deactivateWgt(WTOK_FOLLOW_LEADER_GP); - widget_manager->setWgtLockTexture(WTOK_FOLLOW_LEADER_GP); - widget_manager->showWgtTexture(WTOK_FOLLOW_LEADER_GP); - //widget_manager->setWgtText(WTOK_FOLLOW_LEADER_GP, - // _("Fulfil challenge to unlock")); - } - - - // help - w=widget_manager->addTextButtonWgt( WTOK_HELP, WIDTH, HEIGHT, _("Game mode help")); - widget_manager->setWgtTextSize( WTOK_HELP, WGT_FNT_SML ); - w->setPosition(WGT_DIR_CENTER, 0.0f, NULL, WGT_DIR_UNDER_WIDGET, 0.1f, w_prev); - w_prev=w; - - // return button - w=widget_manager->addTextButtonWgt(WTOK_QUIT, WIDTH, HEIGHT, _("Press to go back")); - widget_manager->setWgtTextSize( WTOK_QUIT, WGT_FNT_SML ); - w->setPosition(WGT_DIR_CENTER, 0.0f, NULL, WGT_DIR_FROM_BOTTOM, 0.0f, w_prev); - - widget_manager->layout(WGT_AREA_ALL); -} - -//----------------------------------------------------------------------------- -GameMode::~GameMode() -{ - widget_manager->reset(); -} - -//----------------------------------------------------------------------------- -void GameMode::select() -{ - int mode = widget_manager->getSelectedWgt(); - switch (mode) - { - case WTOK_QUICK_RACE_SINGLE: - race_manager->setMajorMode(RaceManager::MAJOR_MODE_SINGLE); - race_manager->setMinorMode(RaceManager::MINOR_MODE_QUICK_RACE); - break; - case WTOK_TIMETRIAL_SINGLE: - race_manager->setMajorMode(RaceManager::MAJOR_MODE_SINGLE); - race_manager->setMinorMode(RaceManager::MINOR_MODE_TIME_TRIAL); - break; - case WTOK_FOLLOW_LEADER_SINGLE: - race_manager->setMajorMode(RaceManager::MAJOR_MODE_SINGLE); - race_manager->setMinorMode(RaceManager::MINOR_MODE_FOLLOW_LEADER); - break; - case WTOK_3_STRIKES_SINGLE: - race_manager->setMajorMode(RaceManager::MAJOR_MODE_SINGLE); - race_manager->setMinorMode(RaceManager::MINOR_MODE_3_STRIKES); - break; - case WTOK_QUICK_RACE_GP: - race_manager->setMajorMode(RaceManager::MAJOR_MODE_GRAND_PRIX); - race_manager->setMinorMode(RaceManager::MINOR_MODE_QUICK_RACE); - break; - case WTOK_TIMETRIAL_GP: - race_manager->setMajorMode(RaceManager::MAJOR_MODE_GRAND_PRIX); - race_manager->setMinorMode(RaceManager::MINOR_MODE_TIME_TRIAL); - break; - case WTOK_FOLLOW_LEADER_GP: - race_manager->setMajorMode(RaceManager::MAJOR_MODE_GRAND_PRIX); - race_manager->setMinorMode(RaceManager::MINOR_MODE_FOLLOW_LEADER); - break; - case WTOK_HELP: - menu_manager->pushMenu(MENUID_HELP3); - return; - case WTOK_QUIT: - menu_manager->popMenu(); - return; - default: break; - } - menu_manager->pushMenu(MENUID_CHARSEL_P1); -} - - - diff --git a/src/gui/game_mode.hpp b/src/gui/game_mode.hpp deleted file mode 100644 index 1215da6fe..000000000 --- a/src/gui/game_mode.hpp +++ /dev/null @@ -1,34 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef HEADER_GAMEMODE_H -#define HEADER_GAMEMODE_H - -#include "base_gui.hpp" - -class GameMode: public BaseGUI -{ -public: - GameMode(); - ~GameMode(); - - void select(); -}; - -#endif diff --git a/src/gui/grand_prix_ending.cpp b/src/gui/grand_prix_ending.cpp deleted file mode 100644 index e60c2d26e..000000000 --- a/src/gui/grand_prix_ending.cpp +++ /dev/null @@ -1,228 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Eduardo Hernandez Munoz -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "gui/grand_prix_ending.hpp" - -#include -#include - -#include - -#include "loader.hpp" -#include "race_manager.hpp" -#include "user_config.hpp" -#include "audio/sfx_manager.hpp" -#include "audio/sfx_base.hpp" -#include "challenges/unlock_manager.hpp" -#include "graphics/scene.hpp" -#include "gui/menu_manager.hpp" -#include "gui/widget_manager.hpp" -#include "karts/kart.hpp" -#include "karts/kart_model.hpp" -#include "karts/kart_properties.hpp" -#include "karts/kart_properties_manager.hpp" -#include "utils/translation.hpp" -#include "utils/string_utils.hpp" - -enum WidgetTokens -{ - WTOK_TITLE, - WTOK_QUIT, - - WTOK_FIRSTKART -}; - -// ---------------------------------------------------------------------------- -GrandPrixEnd::GrandPrixEnd() - : m_kart(0) -{ - m_winner_sound = sfx_manager->newSFX(SFXManager::SOUND_WINNER); - // for some strange reasons plib calls makeCurrent() in ssgContext - // constructor, so we have to save the old one here and restore it - ssgContext* oldContext = ssgGetCurrentContext(); - m_context = new ssgContext; - oldContext->makeCurrent(); - - const unsigned int MAX_STR_LEN = 60; - const unsigned int NUM_KARTS = race_manager->getNumKarts(); - - // Ignore the first kart if it's a follow-the-leader race. - int start=(race_manager->getMinorMode()==RaceManager::MINOR_MODE_FOLLOW_LEADER) ? 1 : 0; - - - int winner_kart_id = -1; - // find which kart ended at rank '0' - for(unsigned int j=start; j < NUM_KARTS; ++j) - { - if( race_manager->getKartFinalGPRank(j) == 0 ) - { - winner_kart_id = j; - break; - } - } - - std::string output = StringUtils::insert_values(_("The winner is %s!"), - race_manager->getKartName(winner_kart_id)); - widget_manager->addWgt( WTOK_TITLE, 60, 10); - widget_manager->showWgtRect(WTOK_TITLE); - widget_manager->showWgtText(WTOK_TITLE); - widget_manager->setWgtText(WTOK_TITLE, output); - widget_manager->setWgtTextSize(WTOK_TITLE, WGT_FNT_LRG); - widget_manager->breakLine(); - - m_score = new char[MAX_STR_LEN*NUM_KARTS]; - - for(unsigned int i=start; i < NUM_KARTS; ++i) - { - // char sTime[20];sTime[0]=0; - // if(RaceManager::isLinearRaceMode(race_manager->getMinorMode()) && - // RaceManager::modeHasLaps(race_manager->getMinorMode()) ) - // TimeToString(race_time[i], sTime); - - int this_kart_id = -1; - // find which kart ended at rank 'i' - for(unsigned int j=start; j < NUM_KARTS; ++j) - { - if( (int)race_manager->getKartFinalGPRank(j) == (int)(i-start) ) - { - this_kart_id = j; - break; - } - } - - sprintf((char*)(m_score + MAX_STR_LEN * i), "#%d (%d) : %s", - i-start + 1 /* add 1 because, while the inner ranks start at 0, users expect them to start at 1 */, - race_manager->getKartScore(this_kart_id), - race_manager->getKartName(this_kart_id).c_str() ); - - widget_manager->addWgt(WTOK_FIRSTKART + i, 40, 5); - widget_manager->showWgtRect(WTOK_FIRSTKART + i); - widget_manager->showWgtText(WTOK_FIRSTKART + i); - widget_manager->setWgtText(WTOK_FIRSTKART + i, - (char*)(m_score + MAX_STR_LEN * i)); - widget_manager->setWgtTextSize(WTOK_FIRSTKART + i, WGT_FNT_SML); - widget_manager->breakLine(); - } - const std::string WINNER_KART_NAME = race_manager->getKartName(winner_kart_id); - const KartProperties* WINNING_KART = kart_properties_manager->getKart(WINNER_KART_NAME); - - widget_manager->addWgt(WTOK_QUIT, 50, 7); - widget_manager->activateWgt(WTOK_QUIT); - widget_manager->showWgtRect(WTOK_QUIT); - widget_manager->showWgtText(WTOK_QUIT); - if(unlock_manager->getUnlockedFeatures().size()>0) - { - widget_manager->setWgtText(WTOK_QUIT, _("Continue")); - } - else - { - widget_manager->setWgtText(WTOK_QUIT, _("Back to the main menu")); - } - - widget_manager->layout(WGT_AREA_TOP); - - m_kart = new ssgTransform; - m_kart->ref(); - KartModel* kartentity = WINNING_KART->getKartModel(); -#ifdef HAVE_IRRLICHT -#else - m_kart->addKid(kartentity->getRoot()); -#endif - - m_winner_sound->play(); - - m_clock = 0; - - //FIXME: this is taken from RaceMode::exit_race, - //this should be organized better. - stk_scene->clear(); - RaceManager::setWorld(NULL); - race_manager->m_active_race = false; - -} - -//----------------------------------------------------------------------------- -GrandPrixEnd::~GrandPrixEnd() -{ - sfx_manager->deleteSFX(m_winner_sound); - widget_manager->reset(); - ssgDeRefDelete(m_kart); - - delete m_context; - delete[] m_score; - - //The next line prevents textures like the background of the main menu from - //going white after finishing the grandprix - // FIXME: I think this is not necessary anymore after the - // texture bug fix (r733) - but I can't currently test this. - loader->shared_textures.removeAll(); -} - -//----------------------------------------------------------------------------- - -void GrandPrixEnd::update(float dt) -{ - m_clock += dt * 40.0f; - - glClearColor (0.1f, 0.1f, 0.1f, 1.0f); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - ssgContext* oldContext = ssgGetCurrentContext(); - m_context -> makeCurrent(); - - // FIXME: A bit hackish... - glViewport ( 0, 0, 800, 320); - - m_context -> setFOV ( 45.0f, 45.0f * 320.0f/800.0f ) ; - m_context -> setNearFar ( 0.05f, 1000.0f ) ; - - sgCoord cam_pos; - sgSetCoord(&cam_pos, 0, 0, 0, 0, 0, 0); - m_context -> setCamera ( &cam_pos ) ; - - glEnable (GL_DEPTH_TEST); - sgCoord trans; - sgSetCoord(&trans, 0, 3, -.4f, m_clock, 0, 0); - m_kart->setTransform (&trans) ; - //glShadeModel(GL_SMOOTH); - ssgCullAndDraw ( m_kart ) ; - glViewport ( 0, 0, user_config->m_width, user_config->m_height ) ; - - glDisable (GL_DEPTH_TEST); - oldContext->makeCurrent(); - BaseGUI::update(dt); -} - -//----------------------------------------------------------------------------- -void GrandPrixEnd::select() -{ - // If a new feature was unlocked, display the new feature first - // before returning to the main menu - if(unlock_manager->getUnlockedFeatures().size()>0) - { - // This removes this menu from the stack, and adds the main menu. - // Then we push the new feature menu on top, so that it will be - // displayed next, and on return the main menu is shown. - menu_manager->switchToMainMenu(); - menu_manager->pushMenu(MENUID_UNLOCKED_FEATURE); - return; - } - - menu_manager->switchToMainMenu(); -} diff --git a/src/gui/grand_prix_ending.hpp b/src/gui/grand_prix_ending.hpp deleted file mode 100644 index 0bd028028..000000000 --- a/src/gui/grand_prix_ending.hpp +++ /dev/null @@ -1,49 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Eduardo Hernandez Munoz -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef HEADER_GRAND_PRIX_ENDING_H -#define HEADER_GRAND_PRIX_ENDING_H - -#include "base_gui.hpp" - -class ssgBranch; -class ssgTransform; -class ssgContext; -class SFXBase; - -class GrandPrixEnd: public BaseGUI -{ -private: - ssgContext *m_context; - ssgTransform *m_kart; - int m_current_kart; - int m_kart_name_label; - char *m_score; - float m_clock; - SFXBase *m_winner_sound; - - -public: - GrandPrixEnd(); - ~GrandPrixEnd(); - void update(float dt); - void select(); -}; - -#endif diff --git a/src/gui/grand_prix_select.cpp b/src/gui/grand_prix_select.cpp deleted file mode 100644 index 8f9499cee..000000000 --- a/src/gui/grand_prix_select.cpp +++ /dev/null @@ -1,192 +0,0 @@ -// $Id: track_sel.cpp 694 2006-08-29 07:42:36Z hiker $ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include -#include "grand_prix_select.hpp" -#include "race_manager.hpp" -#include "material_manager.hpp" -#include "grand_prix_manager.hpp" -#include "challenges/unlock_manager.hpp" -#include "gui/menu_manager.hpp" -#include "gui/widget_manager.hpp" -#include "tracks/track_manager.hpp" -#include "tracks/track.hpp" -#include "utils/translation.hpp" - -enum WidgetTokens -{ - WTOK_TITLE, - - //FIXME: finish the tokens - - WTOK_DESCRIPTION, - WTOK_TRACKS, - WTOK_IMG, - WTOK_QUIT, - - WTOK_FIRSTPRIX -}; - -GrandPrixSelect::GrandPrixSelect() : m_curr_track_img(0), m_clock(0.0f) -{ - widget_manager->switchOrder(); - widget_manager->addEmptyWgt(WTOK_TITLE, 60, 7); - - int nId=0; - m_gp_index.clear(); - for(unsigned int i=0; igetNumberOfGrandPrix(); i++) - { - const GrandPrixData *gp = grand_prix_manager->getGrandPrix(i); - if(unlock_manager->isLocked(gp->getId())) continue; - widget_manager->addTextButtonWgt(WTOK_FIRSTPRIX + nId, 60, 7, gp->getName() ); - m_gp_index.push_back(i); - nId++; - } // for i - - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 100, 1 ); - - widget_manager->addTextWgt( WTOK_DESCRIPTION, 80, 7, _("No Grand Prix selected") ); - widget_manager->setWgtTextSize(WTOK_DESCRIPTION, WGT_FNT_SML); - widget_manager->hideWgtRect(WTOK_DESCRIPTION); - widget_manager->breakLine(); - widget_manager->breakLine(); - - widget_manager->addTextWgt( WTOK_TRACKS, 60, 40, _("No Grand Prix selected")); - widget_manager->enableWgtScroll( WTOK_TRACKS ); - widget_manager->setWgtYScrollSpeed( WTOK_TRACKS, -60 ); - - widget_manager->addImgWgt( WTOK_IMG, 40, 40, 0 ); - widget_manager->setWgtColor( WTOK_IMG, WGT_BLACK ); - widget_manager->breakLine(); - - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 100, 1 ); - widget_manager->breakLine(); - - widget_manager->addTextButtonWgt(WTOK_QUIT, 40, 7, _("Press to go back") ); - widget_manager->setWgtTextSize(WTOK_QUIT, WGT_FNT_SML); - - widget_manager->layout(WGT_AREA_ALL); -} // GrandPrixSelect - -//----------------------------------------------------------------------------- -GrandPrixSelect::~GrandPrixSelect() -{ - widget_manager->reset(); -} // GrandPrixSelect - -//----------------------------------------------------------------------------- -void GrandPrixSelect::update(float dt) -{ - const int SELECTED_TOKEN = widget_manager->getSelectedWgt(); - - if( widget_manager->selectionChanged() && - !( SELECTED_TOKEN < WTOK_FIRSTPRIX )) - { - const int NUM = m_gp_index[SELECTED_TOKEN - WTOK_FIRSTPRIX]; - const GrandPrixData *gp = grand_prix_manager->getGrandPrix(NUM); - const int NUM_TRACKS = gp->getTrackCount(); - - widget_manager->setWgtText(WTOK_DESCRIPTION, gp->getDescription()); - - - std::string track_list; - m_gp_tracks = gp->getTracks(); - - for( int i = 0; i < NUM_TRACKS; ++i ) - { - track_list.append( track_manager->getTrack( m_gp_tracks[i] )->getName() ); - track_list.push_back('\n'); - } - widget_manager->setWgtText( WTOK_TRACKS, track_list ); - - - std::string img_filename; - Material *mat; - - m_track_imgs.clear(); - - for( int i = 0; i < NUM_TRACKS; ++i ) - { - img_filename = track_manager->getTrack( m_gp_tracks[i] )->getTopviewFile(); - if( img_filename.empty() ) - { - img_filename = track_manager->getTrack( m_gp_tracks[i] )->getScreenshotFile(); - if( img_filename.empty() ) continue; - } - - mat = material_manager->getMaterial( img_filename, true ); -#ifndef HAVE_IRRLICHT - m_track_imgs.push_back(mat->getState()->getTextureHandle()); -#endif - } - - if( !m_track_imgs.empty() ) - { - m_clock = 0.0f; - m_curr_track_img = 0; - - widget_manager->showWgtTexture( WTOK_IMG ); - widget_manager->setWgtTexture( WTOK_IMG, - m_track_imgs[ m_curr_track_img ] ); - widget_manager->setWgtColor( WTOK_IMG, WGT_WHITE ); - } - else - { - widget_manager->hideWgtTexture( WTOK_IMG ); - widget_manager->setWgtColor( WTOK_IMG, WGT_BLACK ); - } - } - - if( !m_track_imgs.empty() ) - { - m_clock += dt; - - if( m_clock > 1.0f ) - { - m_clock = 0.0f; - - ++m_curr_track_img; - if( m_curr_track_img >= m_track_imgs.size() ) m_curr_track_img = 0; - - widget_manager->setWgtTexture(WTOK_IMG, - m_track_imgs[ m_curr_track_img ] ); - } - } - - widget_manager->update(dt); - - return; -} - -//----------------------------------------------------------------------------- -//FIXME:Should select() be renamed for 'click()' or 'enter()' or something? -void GrandPrixSelect::select() -{ - const int CLICKED_TOKEN = widget_manager->getSelectedWgt(); - if(CLICKED_TOKEN == WTOK_QUIT) - { - menu_manager->popMenu(); - return; - } - const GrandPrixData *gp=grand_prix_manager->getGrandPrix(m_gp_index[CLICKED_TOKEN-WTOK_FIRSTPRIX]); - race_manager->setGrandPrix(*gp); - menu_manager->pushMenu(MENUID_RACE_OPTIONS); -} // select - -/* EOF */ diff --git a/src/gui/grand_prix_select.hpp b/src/gui/grand_prix_select.hpp deleted file mode 100644 index 24158b2b0..000000000 --- a/src/gui/grand_prix_select.hpp +++ /dev/null @@ -1,43 +0,0 @@ -// $Id: track_sel.hpp 694 2006-08-29 07:42:36Z hiker $ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef HEADER_GRAND_PRIX_SELECT_H -#define HEADER_GRAND_PRIX_SELECT_H - -#include -#include "base_gui.hpp" -#include "grand_prix_data.hpp" - -class GrandPrixSelect: public BaseGUI -{ -private: - std::vector m_gp_tracks; - std::vector m_track_imgs; - std::vector m_gp_index; - unsigned int m_curr_track_img; - float m_clock; -public: - GrandPrixSelect(); - ~GrandPrixSelect(); - - void update(float dt); - void select(); -}; - -#endif diff --git a/src/gui/help_page_one.cpp b/src/gui/help_page_one.cpp deleted file mode 100644 index f83eb6a50..000000000 --- a/src/gui/help_page_one.cpp +++ /dev/null @@ -1,248 +0,0 @@ -// $Id: help_menu.cpp 812 2006-10-07 11:43:57Z hiker $ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "gui/help_page_one.hpp" - -#include "user_config.hpp" -#include "gui/menu_manager.hpp" -#include "gui/widget_manager.hpp" -#include "items/item_manager.hpp" -#include "utils/translation.hpp" - -enum WidgetTokens -{ - WTOK_MSG1, - WTOK_MSG2, - WTOK_MSG3, - WTOK_MSG4, - WTOK_MSG5, - WTOK_MSG6, - WTOK_MSG7, - WTOK_MSG8, - - WTOK_LOCK, - - WTOK_SECOND_PAGE, - WTOK_QUIT -}; - -HelpPageOne::HelpPageOne() -{ - //The ssgContext constructor calls makeCurrent(), it has to be restored - ssgContext* oldContext = ssgGetCurrentContext(); - m_context = new ssgContext; - oldContext->makeCurrent(); - - m_box = 0; - m_silver_coin = 0; - m_gold_coin = 0; - m_banana = 0; - - m_clock = 0; - - //FIXME: instead of using setInitialTextState, the gui & widget manager macros should improve it's design - widget_manager->setInitialTextState - ( - false, - "", - WGT_FNT_SML, - WGT_FONT_GUI, - WGT_WHITE, - true - ); - widget_manager->addTextWgt( WTOK_MSG1, 50, 7, - _("Force your rivals bite *your* dust!") ); - widget_manager->breakLine(); - - widget_manager->addTextWgt( WTOK_MSG2, 60, 7, - _("Grab blue boxes and nitro") ); - widget_manager->addTextWgt( WTOK_MSG3, 30, 7, _("Avoid bananas") ); - widget_manager->breakLine(); - - /*Rotating 3D models*/ -#ifdef HAVE_IRRLICHT -#else - ssgEntity* hm = item_manager->getItemModel(Item::ITEM_BONUS_BOX); - ssgDeRefDelete(m_box); - m_box = new ssgTransform; - m_box->ref(); - m_box->addKid(hm); - hm = item_manager->getItemModel(Item::ITEM_SILVER_COIN); - ssgDeRefDelete(m_silver_coin); - - m_silver_coin = new ssgTransform; - m_silver_coin->ref(); - m_silver_coin->addKid(hm); - - hm = item_manager->getItemModel(Item::ITEM_GOLD_COIN); - ssgDeRefDelete(m_gold_coin); - m_gold_coin = new ssgTransform; - m_gold_coin->ref(); - m_gold_coin->addKid(hm); - - hm = item_manager->getItemModel(Item::ITEM_BANANA); - ssgDeRefDelete(m_banana); - m_banana = new ssgTransform; - m_banana->ref(); - m_banana->addKid(hm); -#endif - - /*Empty widget to cover the space for the 3D models*/ - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 100, 15); - widget_manager->breakLine(); -/* - widget_manager->addTextWgt(WTOK_MSG4, 100, 13, -//Next line starts at column 0 to avoid spaces in the GUI -_("At high speeds wheelies drive you faster, but you can't steer. If you\n\ -get stuck or fall too far, use the rescue button to get back on track.")); - widget_manager->setWgtResizeToText( WTOK_MSG4, false ); - widget_manager->breakLine();*/ - - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 100, 1); - widget_manager->breakLine(); - - widget_manager->addTextWgt(WTOK_MSG5, 80, 10, - _("The current key bindings can be seen/changed in the\nOptions->Player Config menu.")); - widget_manager->breakLine(); - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 100, 1); - widget_manager->breakLine(); - - widget_manager->addTextWgt(WTOK_MSG6, 100, 17, -_("Collecting nitro allows you to get speed boosts whenever you\nwish by pressing the appropriate key. You can see your\ncurrent level of nitro in the bar at the right of the game screen.")); - widget_manager->setWgtResizeToText( WTOK_MSG6, false); - widget_manager->breakLine(); - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 100, 1); - widget_manager->breakLine(); - - widget_manager->addTextWgt(WTOK_MSG7, 87, 8, -_("If you see a button with a lock like the one to the right,\n\ -you need to complete a challenge to unlock it.")); - - widget_manager->addImgWgt(WTOK_LOCK, 20, 8, 0); - widget_manager->setWgtLockTexture(WTOK_LOCK); - widget_manager->breakLine(); - - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 100, 1); - widget_manager->breakLine(); - - - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 100, 1); - widget_manager->breakLine(); - - widget_manager->addTextWgt(WTOK_MSG8, 87, 8, - _("The 'sharp turn' key allows you to do sharp turns\nand have better control in tight curves")); - widget_manager->breakLine(); - - /*Buttons at the bottom*/ - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 100, 16); - widget_manager->breakLine(); - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 30, 7); - widget_manager->addTextButtonWgt(WTOK_QUIT, 40, 7, - _("Back to the menu")); - - widget_manager->addTextButtonWgt(WTOK_SECOND_PAGE, 30, 7, - _("Next >")); - - widget_manager->layout( WGT_AREA_TOP ); -} // HelpPageOne - -//----------------------------------------------------------------------------- -HelpPageOne::~HelpPageOne() -{ - widget_manager->reset(); - - if (m_box != NULL && m_silver_coin != NULL && m_gold_coin != NULL - && m_banana != NULL ) - { - ssgDeRefDelete(m_box); - ssgDeRefDelete(m_silver_coin); - ssgDeRefDelete(m_gold_coin); - ssgDeRefDelete(m_banana); - } - - delete m_context; - -} // ~HelpPageOne - -//----------------------------------------------------------------------------- -void HelpPageOne::update(float dt) -{ - m_clock += dt * 40.0f; - - if (m_box != NULL && m_silver_coin != NULL && m_gold_coin != NULL - && m_banana != NULL ) - { - ssgContext* oldContext = ssgGetCurrentContext(); - m_context -> makeCurrent(); - - glClear(GL_DEPTH_BUFFER_BIT); - - sgCoord cam_pos; - sgSetCoord(&cam_pos, 0, 0, 0, 0, 0, 0); - m_context -> setCamera ( &cam_pos ) ; - - glEnable (GL_DEPTH_TEST); - sgCoord trans; - sgSetCoord(&trans, -4, 10, 1.85f, m_clock, 0, 0); - m_box->setTransform (&trans); - - sgSetCoord(&trans, -2, 8, 1.5f, m_clock, 0, 0); - m_silver_coin->setTransform (&trans); - - sgSetCoord(&trans, -1, 8, 1.5f, m_clock, 0, 0); - m_gold_coin->setTransform (&trans); - - sgSetCoord(&trans, 5, 15, 3, m_clock, 0, 0); - m_banana->setTransform (&trans); - - //glShadeModel(GL_SMOOTH); - ssgCullAndDraw ( m_box ) ; - ssgCullAndDraw ( m_silver_coin ) ; - ssgCullAndDraw ( m_gold_coin ) ; - ssgCullAndDraw ( m_banana ) ; - glViewport ( 0, 0, user_config->m_width, user_config->m_height ) ; - - glDisable (GL_DEPTH_TEST); - oldContext->makeCurrent(); - } - - widget_manager->update(dt); -} - -//----------------------------------------------------------------------------- -void HelpPageOne::select() -{ - switch ( widget_manager->getSelectedWgt() ) - { - case WTOK_SECOND_PAGE: - //This switches the first page with the second page, so they - //are not stacked by the menu manager, and the menu that called - //this help is the one that gets called back when the next page - //is popped. - menu_manager->popMenu(); - menu_manager->pushMenu(MENUID_HELP2); - break; - - case WTOK_QUIT: - menu_manager->popMenu(); - break; - } -} // select - -/* EOF */ diff --git a/src/gui/help_page_one.hpp b/src/gui/help_page_one.hpp deleted file mode 100644 index 9e5fdeb78..000000000 --- a/src/gui/help_page_one.hpp +++ /dev/null @@ -1,47 +0,0 @@ -// $Id: help_menu.hpp 694 2006-08-29 07:42:36Z hiker $ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef HEADER_HELPPAGEONE_H -#define HEADER_HELPPAGEONE_H - -#include -#include "base_gui.hpp" - -class ssgTransform; -class ssgContext; - -class HelpPageOne: public BaseGUI -{ -private: - ssgContext* m_context; - ssgTransform* m_box; - ssgTransform* m_banana; - ssgTransform* m_silver_coin; - ssgTransform* m_gold_coin; - float m_clock; - -public: - HelpPageOne(); - ~HelpPageOne(); - void select (); - - void update(float dt); -}; - -#endif diff --git a/src/gui/help_page_three.cpp b/src/gui/help_page_three.cpp deleted file mode 100644 index 895c90edd..000000000 --- a/src/gui/help_page_three.cpp +++ /dev/null @@ -1,117 +0,0 @@ -// $Id: help_menu.cpp 812 2006-10-07 11:43:57Z hiker $ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "gui/help_page_three.hpp" - -#include "challenges/unlock_manager.hpp" -#include "gui/menu_manager.hpp" -#include "gui/widget_manager.hpp" -#include "utils/translation.hpp" - -enum WidgetTokens -{ - WTOK_TITLE, - - WTOK_TXT1, - WTOK_TXT2, - WTOK_TXT3, - WTOK_TXT4, - WTOK_TXT5, - - WTOK_SECOND_PAGE, - WTOK_QUIT -}; - -HelpPageThree::HelpPageThree() -{ - widget_manager->switchOrder(); - widget_manager->addTitleWgt( WTOK_TITLE, 100, 8, _("Game modes")); - - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 100, 2 ); - - if(!unlock_manager->isLocked("grandprix")) - { - widget_manager->addTextWgt( WTOK_TXT1, 100, 15, - _("Grand Prix: Win victory points \n\ -by racing through a group of tracks, \n\ -most points wins (shortest time in case of a tie!) ")); - widget_manager->setWgtTextSize( WTOK_TXT1, WGT_FNT_SML ); - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 100, 1 ); - } - - widget_manager->addTextWgt( WTOK_TXT2, 100, 15, - _("Quick race: Pick a single track, shortest time wins. ")); - widget_manager->setWgtTextSize( WTOK_TXT2, WGT_FNT_SML ); - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 100, 1 ); - - widget_manager->addTextWgt( WTOK_TXT3, 100, 15, - _("Time Trial: Contains no powerups, so only your driving skills matter!")); - widget_manager->setWgtTextSize( WTOK_TXT3, WGT_FNT_SML ); - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 100, 1 ); - - if(!unlock_manager->isLocked("followleader")) - { - widget_manager->addTextWgt( WTOK_TXT4, 100, 15, - _("Follow the leader: run for second place, as the last kart\nwill be disqualified every time the counter hits zero.\n Beware : going in front of the leader will get you eliminated too!")); - widget_manager->setWgtTextSize( WTOK_TXT4, WGT_FNT_SML ); - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 100, 1 ); - } - widget_manager->addTextWgt( WTOK_TXT5, 100, 15, - _("3 Strikes Battle : only in multiplayer games.\nHit others with weapons until they lose all their lives.")); - widget_manager->setWgtTextSize( WTOK_TXT5, WGT_FNT_SML ); - - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 100, 4 ); - - /*Buttons at the bottom*/ - widget_manager->switchOrder(); - widget_manager->addTextButtonWgt( WTOK_SECOND_PAGE, 30, 7, - _("< Back")); - widget_manager->setWgtTextSize( WTOK_SECOND_PAGE, WGT_FNT_SML ); - - widget_manager->addTextButtonWgt( WTOK_QUIT, 40, 7, - _("Back to the menu")); - widget_manager->setWgtTextSize( WTOK_QUIT, WGT_FNT_SML ); - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 30, 7); - - widget_manager->layout( WGT_AREA_TOP ); -} // HelpMenu - -//----------------------------------------------------------------------------- -HelpPageThree::~HelpPageThree() -{ - widget_manager->reset(); -} // ~HelpMenu - -//----------------------------------------------------------------------------- -void HelpPageThree::select() -{ - switch ( widget_manager->getSelectedWgt() ) - { - case WTOK_SECOND_PAGE: - menu_manager->popMenu(); - menu_manager->pushMenu(MENUID_HELP2); - break; - - case WTOK_QUIT: - menu_manager->popMenu(); - break; - } -} // select - -/* EOF */ diff --git a/src/gui/help_page_three.hpp b/src/gui/help_page_three.hpp deleted file mode 100644 index 8a7d4c83f..000000000 --- a/src/gui/help_page_three.hpp +++ /dev/null @@ -1,34 +0,0 @@ -// $Id: help_menu.hpp 694 2006-08-29 07:42:36Z hiker $ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef HEADER_HELPPAGETHREE_H -#define HEADER_HELPPAGETHREE_H - -#include -#include "base_gui.hpp" - -class HelpPageThree: public BaseGUI -{ -public: - HelpPageThree(); - ~HelpPageThree(); - void select (); -}; - -#endif diff --git a/src/gui/help_page_two.cpp b/src/gui/help_page_two.cpp deleted file mode 100644 index 3314c5117..000000000 --- a/src/gui/help_page_two.cpp +++ /dev/null @@ -1,175 +0,0 @@ -// $Id: help_menu.cpp 812 2006-10-07 11:43:57Z hiker $ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "gui/help_page_two.hpp" - -#include "gui/menu_manager.hpp" -#include "gui/widget_manager.hpp" -#include "utils/translation.hpp" - -enum WidgetTokens -{ - WTOK_MSG, - - WTOK_IMG1, WTOK_TXT1, - WTOK_IMG2, WTOK_TXT2, - WTOK_IMG3, WTOK_TXT3, - WTOK_IMG4, WTOK_TXT4, - WTOK_IMG5, WTOK_TXT5, - WTOK_IMG6, WTOK_TXT6, - WTOK_IMG7, WTOK_TXT7, - - WTOK_FIRST_PAGE, - WTOK_THIRD_PAGE, - WTOK_QUIT - -}; - -HelpPageTwo::HelpPageTwo() -{ - //FIXME: instead of using setInitialTextState, the gui & widget manager macros should improve it's design - widget_manager->setInitialTextState - ( - false, - "", - WGT_FNT_SML, - WGT_FONT_GUI, - WGT_WHITE, - false - ); - - widget_manager->addTextWgt( WTOK_MSG, 100, 7, - _("To help you win, there are certain powerups you can grab:")); - widget_manager->breakLine(); - - // ------ bubble gum ----- -#ifndef HAVE_IRRLICHT - widget_manager->addImgWgt( WTOK_IMG1, 10, 12, - powerup_manager->getIcon(POWERUP_BUBBLEGUM)->getState()->getTextureHandle()); -#endif - widget_manager->addTextWgt( WTOK_TXT1, 90, 12, - _("BubbleGum - leave a sticky pink puddle behind you")); - widget_manager->setWgtRoundCorners( WTOK_TXT1, WGT_AREA_RGT ); - widget_manager->breakLine(); - - // ------ cakes ----- -#ifndef HAVE_IRRLICHT - widget_manager->addImgWgt(WTOK_IMG2, 10, 12, - powerup_manager->getIcon(POWERUP_CAKE)->getState()->getTextureHandle()); -#endif - widget_manager->addTextWgt(WTOK_TXT2, 90, 12, - _("Cake - thrown at the closest rival,\nbest on short ranges and long straights")); - widget_manager->setWgtRoundCorners( WTOK_TXT2, WGT_AREA_RGT ); - widget_manager->breakLine(); - - // ------ bowling balls ----- -#ifndef HAVE_IRRLICHT - widget_manager->addImgWgt(WTOK_IMG3, 10, 12, - powerup_manager->getIcon(POWERUP_BOWLING)->getState()->getTextureHandle()); -#endif - widget_manager->addTextWgt(WTOK_TXT3, 90, 12, - _("Bowling Ball - bounces off walls. If you are looking back,\nit will be thrown backwards.")); - widget_manager->setWgtRoundCorners( WTOK_TXT3, WGT_AREA_RGT ); - widget_manager->breakLine(); - - // ------ zipper ----- -#ifndef HAVE_IRRLICHT - widget_manager->addImgWgt(WTOK_IMG4, 10, 12, - powerup_manager->getIcon(POWERUP_ZIPPER)->getState()->getTextureHandle()); -#endif - widget_manager->addTextWgt(WTOK_TXT4, 90, 12, - _("Zipper - speed boost")); - widget_manager->setWgtRoundCorners(WTOK_TXT4, WGT_AREA_RGT); - widget_manager->breakLine(); - - // ------ parachute ----- -#ifndef HAVE_IRRLICHT - widget_manager->addImgWgt(WTOK_IMG5, 10, 12, - powerup_manager->getIcon(POWERUP_PARACHUTE)->getState()->getTextureHandle()); -#endif - - widget_manager->addTextWgt(WTOK_TXT5, 90, 12, - _("Parachute - slows down all karts in a better position!")); - widget_manager->setWgtRoundCorners(WTOK_TXT5, WGT_AREA_RGT); - widget_manager->breakLine(); - - // ------ anvil ----- -#ifndef HAVE_IRRLICHT - widget_manager->addImgWgt(WTOK_IMG6, 10, 12, - powerup_manager->getIcon(POWERUP_ANVIL)->getState()->getTextureHandle()); -#endif - - widget_manager->addTextWgt(WTOK_TXT6, 90, 12, - _("Anvil - slows down greatly the kart in the first position")); - widget_manager->setWgtRoundCorners(WTOK_TXT6, WGT_AREA_RGT); - widget_manager->breakLine(); - - // ------ plunger ----- -#ifndef HAVE_IRRLICHT - widget_manager->addImgWgt(WTOK_IMG7, 10, 12, - powerup_manager->getIcon(POWERUP_PLUNGER)->getState()->getTextureHandle()); -#endif - widget_manager->addTextWgt(WTOK_TXT7, 90, 12, - _("Plunger - throw straight to pull an opponent back,\nor throw while looking back to make one lose sight!")); - widget_manager->setWgtRoundCorners( WTOK_TXT7, WGT_AREA_RGT ); - widget_manager->breakLine(); - - /*Buttons at the bottom*/ - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 100, 2); - widget_manager->breakLine(); - widget_manager->addTextButtonWgt(WTOK_FIRST_PAGE, 30, 7, - _("< Back")); - - widget_manager->addTextButtonWgt(WTOK_QUIT, 40, 7, - _("Back to the menu")); - - widget_manager->addTextButtonWgt(WTOK_THIRD_PAGE, 30, 7, - _("Next >")); - - widget_manager->layout( WGT_AREA_TOP ); -} // HelpMenu - -//----------------------------------------------------------------------------- -HelpPageTwo::~HelpPageTwo() -{ - widget_manager->reset(); -} // ~HelpMenu - -//----------------------------------------------------------------------------- -void HelpPageTwo::select() -{ - switch ( widget_manager->getSelectedWgt() ) - { - case WTOK_FIRST_PAGE: - menu_manager->popMenu(); - menu_manager->pushMenu(MENUID_HELP1); - break; - - case WTOK_THIRD_PAGE: - menu_manager->popMenu(); - menu_manager->pushMenu(MENUID_HELP3); - break; - - case WTOK_QUIT: - menu_manager->popMenu(); - break; - } -} // select - -/* EOF */ diff --git a/src/gui/help_page_two.hpp b/src/gui/help_page_two.hpp deleted file mode 100644 index 01abe29e9..000000000 --- a/src/gui/help_page_two.hpp +++ /dev/null @@ -1,34 +0,0 @@ -// $Id: help_menu.hpp 694 2006-08-29 07:42:36Z hiker $ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef HEADER_HELPPAGETWO_H -#define HEADER_HELPPAGETWO_H - -#include -#include "base_gui.hpp" - -class HelpPageTwo: public BaseGUI -{ -public: - HelpPageTwo(); - ~HelpPageTwo(); - void select (); -}; - -#endif diff --git a/src/gui/main_menu.cpp b/src/gui/main_menu.cpp deleted file mode 100644 index 4fac3ad31..000000000 --- a/src/gui/main_menu.cpp +++ /dev/null @@ -1,155 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "gui/main_menu.hpp" - -#include - -#include "race_manager.hpp" -#include "user_config.hpp" -#include "challenges/unlock_manager.hpp" -#include "gui/menu_manager.hpp" -#include "gui/widget_manager.hpp" -#include "network/network_manager.hpp" -#include "utils/translation.hpp" - -enum WidgetTokens -{ - WTOK_SINGLE, - WTOK_MULTI, - WTOK_NETWORK, - WTOK_CHALLENGES, - WTOK_OPTIONS, - WTOK_QUIT, - WTOK_HELP, - WTOK_CREDITS, - WTOK_WARNING -}; - -MainMenu::MainMenu() -{ - widget_manager->switchOrder(); - - // Only allow challenges if not networking for now! - std::vector all_challenges=unlock_manager->getActiveChallenges(); - const bool challenges_active = all_challenges.size()>0 && network_manager->getMode()==NetworkManager::NW_NONE; - - const int WIDTH=30; - widget_manager->addTextButtonWgt( WTOK_SINGLE, WIDTH, 7, _("Single Player") ); - widget_manager->addTextButtonWgt( WTOK_MULTI, WIDTH, 7, _("Splitscreen") ); - - // Only display the networking entry when not already connected (and networking is enabled) - if(network_manager->getMode()==NetworkManager::NW_NONE && stk_config->m_enable_networking) - widget_manager->addTextButtonWgt( WTOK_NETWORK, WIDTH, 7, _("Networking") ); - - if(challenges_active) - widget_manager->addTextButtonWgt( WTOK_CHALLENGES, WIDTH, 7, _("Challenges") ); - - widget_manager->addTextButtonWgt( WTOK_OPTIONS, WIDTH, 7, _("Options") ); - widget_manager->addTextButtonWgt( WTOK_QUIT, WIDTH, 7, _("Quit") ); - - if(user_config->getWarning()!="") - { - widget_manager->addTextWgt( WTOK_WARNING, 80, 6, user_config->getWarning().c_str() ); - widget_manager->setWgtTextSize( WTOK_WARNING, WGT_FNT_SML ); - widget_manager->hideWgtRect(WTOK_WARNING); - } - else - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, WIDTH, 6 ); - - widget_manager->addTextButtonWgt( WTOK_HELP, WIDTH, 7, _("Help") ); - widget_manager->setWgtTextSize( WTOK_HELP, WGT_FNT_SML ); - - widget_manager->addTextButtonWgt( WTOK_CREDITS, WIDTH, 7, _("Credits") ); - widget_manager->setWgtTextSize( WTOK_CREDITS, WGT_FNT_SML ); - - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, WIDTH, 15 ); - - widget_manager->activateWgt(WTOK_SINGLE); - widget_manager->layout(WGT_AREA_ALL); -} - -//----------------------------------------------------------------------------- -MainMenu::~MainMenu() -{ - widget_manager->reset(); - user_config->resetWarning(); -} - -//----------------------------------------------------------------------------- -void MainMenu::select() -{ - switch ( widget_manager->getSelectedWgt() ) - { - case WTOK_SINGLE: - race_manager->setNumLocalPlayers(1); - race_manager->setNumPlayers(1); // reset since this is used to determine the minimum number of players - // The clients do not do any mode selection, they go immediately - // to the character selection screen. - if(network_manager->getMode()==NetworkManager::NW_CLIENT) - { - menu_manager->pushMenu(MENUID_CHARSEL_P1); - } - else - { - menu_manager->pushMenu(MENUID_GAMEMODE); - } - break; - case WTOK_MULTI: - menu_manager->pushMenu(MENUID_NUMPLAYERS); - break; - case WTOK_NETWORK: - menu_manager->pushMenu(MENUID_NETWORK_GUI); - break; - case WTOK_CHALLENGES: - menu_manager->pushMenu(MENUID_CHALLENGES); - break; - case WTOK_OPTIONS: - menu_manager->pushMenu(MENUID_OPTIONS); - break; - - case WTOK_QUIT: - menu_manager->pushMenu(MENUID_EXITGAME); - break; - case WTOK_HELP: - menu_manager->pushMenu(MENUID_HELP1); - break; - case WTOK_CREDITS: - menu_manager->pushMenu(MENUID_CREDITS); - break; - } -} - -//----------------------------------------------------------------------------- -void MainMenu::handle(GameAction ga, int value) -{ - switch ( ga ) - { - case GA_LEAVE: - if(!value) break; - menu_manager->pushMenu(MENUID_EXITGAME); - break; - - default: - BaseGUI::handle(ga, value); - break; - } -} - -/* EOF */ diff --git a/src/gui/main_menu.hpp b/src/gui/main_menu.hpp deleted file mode 100644 index ae2741089..000000000 --- a/src/gui/main_menu.hpp +++ /dev/null @@ -1,36 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef HEADER_MAINMENU_H -#define HEADER_MAINMENU_H - -#include "base_gui.hpp" - -class MainMenu: public BaseGUI -{ -public: - MainMenu(); - ~MainMenu(); - - void select(); - void handle(GameAction, int); - -}; - -#endif diff --git a/src/gui/menu_manager.cpp b/src/gui/menu_manager.cpp deleted file mode 100644 index 04e49532e..000000000 --- a/src/gui/menu_manager.cpp +++ /dev/null @@ -1,345 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Patrick Ammann -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include - -//This is needed in various platforms, but not all -# include - -#include "gui/menu_manager.hpp" -#include "gui/main_menu.hpp" -#include "gui/char_sel.hpp" -#include "gui/game_mode.hpp" -#include "gui/race_options.hpp" -#include "gui/options.hpp" -#include "gui/track_sel.hpp" -#include "gui/num_players.hpp" -#include "gui/config_controls.hpp" -#include "gui/config_display.hpp" -#include "gui/display_res_confirm.hpp" -#include "gui/config_sound.hpp" -#include "gui/player_controls.hpp" -#include "gui/race_gui.hpp" -#include "gui/race_results_gui.hpp" -#include "gui/grand_prix_ending.hpp" -#include "gui/race_menu.hpp" -#include "gui/help_page_one.hpp" -#include "gui/help_page_two.hpp" -#include "gui/help_page_three.hpp" -#include "gui/credits_menu.hpp" -#include "gui/grand_prix_select.hpp" -#include "gui/widget_manager.hpp" -#include "gui/challenges_menu.hpp" -#include "gui/feature_unlocked.hpp" -#include "gui/start_race_feedback.hpp" -#include "gui/network_gui.hpp" -#include "audio/sfx_manager.hpp" -#include "audio/sfx_base.hpp" -#include "race_manager.hpp" -#include "sdldrv.hpp" -#include "main_loop.hpp" -#include "user_config.hpp" -#include "network/network_manager.hpp" - -using namespace std; - -MenuManager* menu_manager = 0; - -/** Initialises the menu manager and creates the SFX objects. - */ -MenuManager::MenuManager() -{ - m_current_menu = NULL; - m_RaceGUI = NULL; - m_change_menu = false; - m_select_sound = sfx_manager->newSFX(SFXManager::SOUND_SELECT_MENU); - m_back_sound = sfx_manager->newSFX(SFXManager::SOUND_BACK_MENU); -} // MenuManager - -//----------------------------------------------------------------------------- -/** Destroys the menu manager and frees any allocated memory. - */ -MenuManager::~MenuManager() -{ - delete m_current_menu; - sfx_manager->deleteSFX(m_back_sound); - sfx_manager->deleteSFX(m_select_sound); -} - -//----------------------------------------------------------------------------- -/** Puts the given menu into the menu stack and saves the widgetToken of - * the last selected widget for later reactivation. - */ -void MenuManager::pushMenu(MenuManagerIDs id) -{ - // If we store the selected widget when we have send the order to change - // the menu but haven't done it, we would change the previous menu, not - // the current menu. - if ( m_menu_stack.size() && m_change_menu != true ) - { - m_menu_stack.back().second = widget_manager->getSelectedWgt(); - } - - // used to suppress select-sound on startup - static bool is_startup = true; - - if( MENUID_EXITGAME == id ) - { - m_back_sound->play(); - } - else - { - if(!is_startup) m_select_sound->play(); - else is_startup = false; - } - - // Creates a new entry for the to be displayed menu. - pair element; - element.first = id; - element.second = WidgetManager::WGT_NONE; - - m_menu_stack.push_back(element); - - if( m_current_menu) m_current_menu->lockInput(); - m_change_menu = true; -} - -//----------------------------------------------------------------------------- -const bool MenuManager::isMainMenuActive() const -{ - return m_menu_stack[ m_menu_stack.size()-1 ].first == MENUID_MAINMENU; -} - -//----------------------------------------------------------------------------- -void MenuManager::popMenu() -{ - m_back_sound->play(); - - m_menu_stack.pop_back(); - if( m_current_menu ) m_current_menu->lockInput(); - m_change_menu = true; -} - -//----------------------------------------------------------------------------- -void MenuManager::update() -{ - - if ( m_change_menu ) - { - m_change_menu = false; - - if (m_RaceGUI - && m_current_menu == m_RaceGUI) - { - m_RaceGUI = 0; - inputDriver->setMode(SDLDriver::MENU); - } - - delete m_current_menu; - m_current_menu= NULL; - - if (!m_menu_stack.empty()) - { - pair saved = m_menu_stack.back(); - MenuManagerIDs id = saved.first; - int saved_widget = saved.second; - - switch (id) - { - case MENUID_MAINMENU: - m_current_menu= new MainMenu(); - // in this case the network entry can be removed, resulting - // in warnings etc. if the widget manager then tries to select - // the widget again. To avoid this, set the saved widget to NONE. - if(network_manager->getMode()!=NetworkManager::NW_NONE) - saved_widget=WidgetManager::WGT_NONE; - break; - case MENUID_CHALLENGES: - m_current_menu= new ChallengesMenu(); - break; - case MENUID_CHARSEL_P1: - case MENUID_CHARSEL_P2: - case MENUID_CHARSEL_P3: - case MENUID_CHARSEL_P4: - m_current_menu= new CharSel(id - MENUID_CHARSEL_P1); - break; - case MENUID_RACE_OPTIONS: - m_current_menu= new RaceOptions(); - break; - case MENUID_GAMEMODE: - m_current_menu= new GameMode(); - break; - case MENUID_OPTIONS: - m_current_menu= new Options(); - break; - case MENUID_TRACKSEL: - m_current_menu= new TrackSel(); - break; - case MENUID_UNLOCKED_FEATURE: - m_current_menu = new FeatureUnlocked(); - break; - case MENUID_NUMPLAYERS: - m_current_menu= new NumPlayers(); - break; - case MENUID_RACE: - inputDriver->setMode(SDLDriver::INGAME); - m_current_menu = new RaceGUI(); - m_RaceGUI = m_current_menu; - break; - case MENUID_RACERESULT: - m_current_menu= new RaceResultsGUI(); - break; - case MENUID_GRANDPRIXEND: - m_current_menu= new GrandPrixEnd(); - break; - case MENUID_GRANDPRIXSELECT: - m_current_menu= new GrandPrixSelect(); - break; - case MENUID_RACEMENU: - m_current_menu= new RaceMenu(); - break; - case MENUID_EXITGAME: - m_menu_stack.clear(); - main_loop->abort(); - break; - - case MENUID_CONFIG_CONTROLS: - m_current_menu= new ConfigControls(); - break; - case MENUID_CONFIG_P1: - case MENUID_CONFIG_P2: - case MENUID_CONFIG_P3: - case MENUID_CONFIG_P4: - m_current_menu= new PlayerControls(id - MENUID_CONFIG_P1); - break; - case MENUID_CONFIG_DISPLAY: - m_current_menu= new ConfigDisplay(); - break; - case MENUID_RESOLUTION_CONFIRM_FS: - { - const bool FROM_FULLSCREEN = false; - m_current_menu= new DisplayResConfirm( FROM_FULLSCREEN ); - } - break; - case MENUID_RESOLUTION_CONFIRM_WIN: - { - const bool FROM_WINDOW = true; - m_current_menu= new DisplayResConfirm( FROM_WINDOW ); - } - break; - case MENUID_CONFIG_SOUND: - m_current_menu= new ConfigSound(); - break; - case MENUID_HELP1: - m_current_menu = new HelpPageOne(); - break; - case MENUID_HELP2: - m_current_menu = new HelpPageTwo(); - break; - case MENUID_HELP3: - m_current_menu = new HelpPageThree(); - break; - case MENUID_CREDITS: - m_current_menu = new CreditsMenu(); - break; - case MENUID_START_RACE_FEEDBACK: - m_current_menu = new StartRaceFeedback(); - break; - case MENUID_NETWORK_GUI: - m_current_menu = new NetworkGUI(); - break; - default: - break; - } // switch - - - if( id != MENUID_EXITGAME ) - { - // Restores the previously selected widget if there was one. - if (saved_widget != WidgetManager::WGT_NONE) - { - widget_manager->lightenWgtColor( saved_widget ); - widget_manager->pulseWgt( saved_widget ); - widget_manager->setSelectedWgt(saved_widget); - } else if( widget_manager->getSelectedWgt() != WidgetManager::WGT_NONE ) - { - widget_manager->lightenWgtColor ( - widget_manager->getSelectedWgt() ); - } - } - } - } - - static ulClock now = ulClock(); - now.update(); - - if (m_current_menu != NULL) - { - m_current_menu->update((float)now.getDeltaTime()); - } -} // update - -//----------k------------------------------------------------------------------- -void MenuManager::switchToGrandPrixEnding() -{ - if (m_current_menu != NULL) - { - if(m_current_menu==m_RaceGUI) m_RaceGUI=0; - delete m_current_menu; - m_current_menu= NULL; - } - - m_menu_stack.clear(); - pushMenu(MENUID_GRANDPRIXEND); -} - -//----------------------------------------------------------------------------- -void MenuManager::switchToRace() -{ - m_menu_stack.clear(); - pushMenu(MENUID_RACE); -} - -//----------------------------------------------------------------------------- -// Returns true if the id is somewhere on the stack. This can be used to detect -// if the config_display menu was called from the race_gui, or main_menu -bool MenuManager::isSomewhereOnStack(MenuManagerIDs id) -{ - for(vector >::iterator i = m_menu_stack.begin(); i != m_menu_stack.end(); i++) - { - if ((*i).first == id) - return true; - } - - return false; -} // isSomewhereOnStack - -// ----------------------------------------------------------------------------- -void MenuManager::switchToMainMenu() -{ - if (m_current_menu != NULL) - { - if(m_current_menu == m_RaceGUI) m_RaceGUI = 0; - delete m_current_menu; - m_current_menu= NULL; - } - - m_menu_stack.clear(); - pushMenu(MENUID_MAINMENU); -} diff --git a/src/gui/menu_manager.hpp b/src/gui/menu_manager.hpp deleted file mode 100644 index 7541a846a..000000000 --- a/src/gui/menu_manager.hpp +++ /dev/null @@ -1,109 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Patrick Ammann -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef HEADER_MENUMANAGER_H -#define HEADER_MENUMANAGER_H - -#include -#include "gui/race_gui.hpp" -#include "gui/base_gui.hpp" - -class SFXBase; - -enum MenuManagerIDs -{ - // menu - MENUID_MAINMENU, - MENUID_CHARSEL_P1, - MENUID_CHARSEL_P2, - MENUID_CHARSEL_P3, - MENUID_CHARSEL_P4, - MENUID_CHALLENGES, - MENUID_RACE_OPTIONS, - MENUID_GAMEMODE, - MENUID_RACERESULT, - MENUID_GRANDPRIXEND, - MENUID_RACEMENU, - MENUID_TRACKSEL, - MENUID_NUMPLAYERS, - MENUID_OPTIONS, - MENUID_EXITGAME, - MENUID_GRANDPRIXSELECT, - MENUID_UNLOCKED_FEATURE, - MENUID_START_RACE_FEEDBACK, // 'loading' - MENUID_NETWORK_GUI, - MENUID_NETWORK_INFO, // wait for clients to connect - - // menu configuration - MENUID_CONFIG_DISPLAY, - MENUID_RESOLUTION_CONFIRM_FS, - MENUID_RESOLUTION_CONFIRM_WIN, - MENUID_CONFIG_SOUND, - MENUID_CONFIG_CONTROLS, - MENUID_CONFIG_P1, - MENUID_CONFIG_P2, - MENUID_CONFIG_P3, - MENUID_CONFIG_P4, - - // help and credit menu - MENUID_HELP1, - MENUID_HELP2, - MENUID_HELP3, - MENUID_CREDITS, - - // race gui - MENUID_RACE, -}; - -class MenuManager -{ -public: - MenuManager(); - virtual ~MenuManager(); - - // general functions - void switchToGrandPrixEnding(); - void switchToRace(); - void switchToMainMenu(); - - // use this function within menu classes - void pushMenu(MenuManagerIDs); - void popMenu(); - int getMenuStackSize() {return (int)m_menu_stack.size();} - bool isSomewhereOnStack(MenuManagerIDs id); - bool isCurrentMenu(MenuManagerIDs id) - {return (m_menu_stack.back().first == id);} - BaseGUI* getCurrentMenu() const {return m_current_menu;} - RaceGUI* getRaceMenu () const {return (RaceGUI*)m_RaceGUI;} - void update(); - const bool isMainMenuActive() const; - -private: - std::vector< std::pair > - m_menu_stack; - BaseGUI* m_current_menu; - BaseGUI* m_RaceGUI; - bool m_change_menu; - SFXBase *m_back_sound; - SFXBase *m_select_sound; -}; - -extern MenuManager* menu_manager; - -#endif // HEADER_MENUMANAGER_H diff --git a/src/gui/my_button.cpp b/src/gui/my_button.cpp new file mode 100644 index 000000000..7e2129d4b --- /dev/null +++ b/src/gui/my_button.cpp @@ -0,0 +1,500 @@ +// The contents of CGUIButtom.cpp from irrLicht sources, but with a patch applied. +// Copyright (C) 2002-2008 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#include +#include "gui/my_button.hpp" + +using namespace GUIEngine; + +//! constructor +MyGUIButton::MyGUIButton(IGUIEnvironment* environment, IGUIElement* parent, + s32 id, core::rect rectangle, bool noclip) +: IGUIButton(environment, parent, id, rectangle), Pressed(false), +IsPushButton(false), UseAlphaChannel(false), Border(true), +ClickTime(0), SpriteBank(0), OverrideFont(0), Image(0), PressedImage(0) +{ +#ifdef _DEBUG + setDebugName("MyGUIButton"); +#endif + setNotClipped(noclip); + + // Initialize the sprites. + for (u32 i=0; idrop(); + + if (Image) + Image->drop(); + + if (PressedImage) + PressedImage->drop(); + + if (SpriteBank) + SpriteBank->drop(); +} + + +//! Sets if the button should use the skin to draw its border +void MyGUIButton::setDrawBorder(bool border) +{ + Border = border; +} + + +void MyGUIButton::setSpriteBank(IGUISpriteBank* sprites) +{ + if (sprites) + sprites->grab(); + + if (SpriteBank) + SpriteBank->drop(); + + SpriteBank = sprites; +} + + +void MyGUIButton::setSprite(EGUI_BUTTON_STATE state, s32 index, video::SColor color, bool loop) +{ + if (SpriteBank) + { + ButtonSprites[(u32)state].Index = index; + ButtonSprites[(u32)state].Color = color; + ButtonSprites[(u32)state].Loop = loop; + } + else + { + ButtonSprites[(u32)state].Index = -1; + } +} + + +//! called if an event happened. +bool MyGUIButton::OnEvent(const SEvent& event) +{ + if (!IsEnabled) + return IGUIElement::OnEvent(event); + + switch(event.EventType) + { + case EET_KEY_INPUT_EVENT: + if (event.KeyInput.PressedDown && + (event.KeyInput.Key == KEY_RETURN || + event.KeyInput.Key == KEY_SPACE)) + { + if (!IsPushButton) + setPressed(true); + else + setPressed(!Pressed); + + return true; + } + if (Pressed && !IsPushButton && event.KeyInput.PressedDown && event.KeyInput.Key == KEY_ESCAPE) + { + setPressed(false); + return true; + } + else + if (!event.KeyInput.PressedDown && Pressed && + (event.KeyInput.Key == KEY_RETURN || + event.KeyInput.Key == KEY_SPACE)) + { + //Environment->removeFocus(this); + + if (!IsPushButton) + setPressed(false); + + if (Parent) + { + SEvent newEvent; + newEvent.EventType = EET_GUI_EVENT; + newEvent.GUIEvent.Caller = this; + newEvent.GUIEvent.Element = 0; + newEvent.GUIEvent.EventType = EGET_BUTTON_CLICKED; + Parent->OnEvent(newEvent); + } + return true; + } + break; + case EET_GUI_EVENT: + if (event.GUIEvent.EventType == EGET_ELEMENT_FOCUS_LOST) + { + if (event.GUIEvent.Caller == this && !IsPushButton) + setPressed(false); + } + break; + case EET_MOUSE_INPUT_EVENT: + if (event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN) + { + if (Environment->hasFocus(this) && + !AbsoluteClippingRect.isPointInside(core::position2d(event.MouseInput.X, event.MouseInput.Y))) + { + Environment->removeFocus(this); + return false; + } + + if (!IsPushButton) + setPressed(true); + + Environment->setFocus(this); + return true; + } + else + if (event.MouseInput.Event == EMIE_LMOUSE_LEFT_UP) + { + bool wasPressed = Pressed; + //Environment->removeFocus(this); + + if ( !AbsoluteClippingRect.isPointInside( core::position2d(event.MouseInput.X, event.MouseInput.Y ) ) ) + { + if (!IsPushButton) + setPressed(false); + return true; + } + + if (!IsPushButton) + setPressed(false); + else + { + setPressed(!Pressed); + } + + if ((!IsPushButton && wasPressed && Parent) || + (IsPushButton && wasPressed != Pressed)) + { + SEvent newEvent; + newEvent.EventType = EET_GUI_EVENT; + newEvent.GUIEvent.Caller = this; + newEvent.GUIEvent.Element = 0; + newEvent.GUIEvent.EventType = EGET_BUTTON_CLICKED; + Parent->OnEvent(newEvent); + } + + return true; + } + break; + default: + break; + } + + return Parent ? Parent->OnEvent(event) : false; +} + +#define AutoScale true + +//! draws the element and its children +void MyGUIButton::draw() +{ + if (!IsVisible) + return; + + IGUISkin* skin = Environment->getSkin(); + video::IVideoDriver* driver = Environment->getVideoDriver(); + + IGUIFont* font = OverrideFont; + if (!OverrideFont) + font = skin->getFont(EGDF_BUTTON); + + core::rect rect = AbsoluteRect; + + // todo: move sprite up and text down if the pressed state has a sprite + // draw sprites for focused and mouse-over + core::position2di spritePos = AbsoluteRect.getCenter(); + + if (!Pressed) + { + if (Border) + skin->draw3DButtonPaneStandard(this, rect, &AbsoluteClippingRect); + + if (Image) + { + if(!AutoScale) + { + core::position2d pos = AbsoluteRect.getCenter(); + pos.X -= ImageRect.getWidth() / 2; + pos.Y -= ImageRect.getHeight() / 2; + + driver->draw2DImage(Image, pos, ImageRect, &AbsoluteClippingRect, + video::SColor(255,255,255,255), UseAlphaChannel); + } + else + { + driver->draw2DImage(Image, AbsoluteRect, ImageRect, + &AbsoluteClippingRect, 0, UseAlphaChannel); + } + /* + core::position2d pos = AbsoluteRect.getCenter(); + pos.X -= ImageRect.getWidth() / 2; + pos.Y -= ImageRect.getHeight() / 2; + + driver->draw2DImage(Image, pos, ImageRect, &AbsoluteClippingRect, + video::SColor(255,255,255,255), UseAlphaChannel); + */ + } + if (SpriteBank && ButtonSprites[EGBS_BUTTON_UP].Index != -1) + { + // draw pressed sprite + /* + SpriteBank->draw2DSprite(ButtonSprites[EGBS_BUTTON_UP].Index, spritePos, + &AbsoluteClippingRect, ButtonSprites[EGBS_BUTTON_UP].Color, ClickTime, os::Timer::getTime(), + ButtonSprites[EGBS_BUTTON_UP].Loop, true); + */ + printf("Sorry, sprite support for buttons was disabled in order to avoid os-specific timing stuff\n"); + } + } + else + { + if (Border) + skin->draw3DButtonPanePressed(this, rect, &AbsoluteClippingRect); + + if (PressedImage) + { + + + if(!AutoScale) + { + core::position2d pos = AbsoluteRect.getCenter(); + pos.X -= PressedImageRect.getWidth() / 2; + pos.Y -= PressedImageRect.getHeight() / 2; + // patch by Alan Tyndall/Jonas Petersen + if (Image == PressedImage && PressedImageRect == ImageRect) + { + pos.X += 1; + pos.Y += 1; + } + + driver->draw2DImage(Image, pos, ImageRect, &AbsoluteClippingRect, + video::SColor(255,255,255,255), UseAlphaChannel); + } + else + { + driver->draw2DImage(Image, AbsoluteRect, ImageRect, + &AbsoluteClippingRect, 0, UseAlphaChannel); + } + + } + + if (SpriteBank && ButtonSprites[EGBS_BUTTON_DOWN].Index != -1) + { + /* + // draw sprite + SpriteBank->draw2DSprite(ButtonSprites[EGBS_BUTTON_DOWN].Index, spritePos, + &AbsoluteClippingRect, ButtonSprites[EGBS_BUTTON_DOWN].Color, ClickTime, os::Timer::getTime(), + ButtonSprites[EGBS_BUTTON_DOWN].Loop, true); + */ + printf("Sorry, sprite support for buttons was disabled in order to avoid os-specific timing stuff\n"); + } + + } + + if (Text.size()) + { + rect = AbsoluteRect; + if (Pressed) + rect.UpperLeftCorner.Y += 2; + + if (font) + font->draw(Text.c_str(), rect, + skin->getColor(IsEnabled ? EGDC_BUTTON_TEXT : EGDC_GRAY_TEXT), true, true, + &AbsoluteClippingRect); + } + + IGUIElement::draw(); +} + + +//! sets another skin independent font. if this is set to zero, the button uses the font of the skin. +void MyGUIButton::setOverrideFont(IGUIFont* font) +{ + if (OverrideFont) + OverrideFont->drop(); + + OverrideFont = font; + + if (OverrideFont) + OverrideFont->grab(); +} + + +//! Sets an image which should be displayed on the button when it is in normal state. +void MyGUIButton::setImage(video::ITexture* image) +{ + if (Image) + Image->drop(); + + Image = image; + if (image) + ImageRect = core::rect(core::position2d(0,0), image->getOriginalSize()); + + if (Image) + Image->grab(); + + if (!PressedImage) + setPressedImage(Image); +} + + +//! Sets the image which should be displayed on the button when it is in its normal state. +void MyGUIButton::setImage(video::ITexture* image, const core::rect& pos) +{ + if (Image) + Image->drop(); + + Image = image; + ImageRect = pos; + + if (Image) + Image->grab(); + + if (!PressedImage) + setPressedImage(Image, pos); +} + + +//! Sets an image which should be displayed on the button when it is in pressed state. +void MyGUIButton::setPressedImage(video::ITexture* image) +{ + if (PressedImage) + PressedImage->drop(); + + PressedImage = image; + if (image) + PressedImageRect = core::rect(core::position2d(0,0), image->getOriginalSize()); + + if (PressedImage) + PressedImage->grab(); +} + + +//! Sets the image which should be displayed on the button when it is in its pressed state. +void MyGUIButton::setPressedImage(video::ITexture* image, const core::rect& pos) +{ + if (PressedImage) + PressedImage->drop(); + + PressedImage = image; + PressedImageRect = pos; + + if (PressedImage) + PressedImage->grab(); +} + + +//! Sets if the button should behave like a push button. Which means it +//! can be in two states: Normal or Pressed. With a click on the button, +//! the user can change the state of the button. +void MyGUIButton::setIsPushButton(bool isPushButton) +{ + IsPushButton = isPushButton; +} + + +//! Returns if the button is currently pressed +bool MyGUIButton::isPressed() const +{ + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return Pressed; +} + + +//! Sets the pressed state of the button if this is a pushbutton +void MyGUIButton::setPressed(bool pressed) +{ + if (Pressed != pressed) + { + //ClickTime = os::Timer::getTime(); + Pressed = pressed; + } +} + + +//! Returns whether the button is a push button +bool MyGUIButton::isPushButton() const +{ + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return IsPushButton; +} + + +//! Sets if the alpha channel should be used for drawing images on the button (default is false) +void MyGUIButton::setUseAlphaChannel(bool useAlphaChannel) +{ + UseAlphaChannel = useAlphaChannel; +} + + +//! Returns if the alpha channel should be used for drawing images on the button +bool MyGUIButton::isAlphaChannelUsed() const +{ + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return UseAlphaChannel; +} + + +bool MyGUIButton::isDrawingBorder() const +{ + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return Border; +} + + +//! Writes attributes of the element. +void MyGUIButton::serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const +{ + IGUIButton::serializeAttributes(out,options); + + out->addBool ("PushButton", IsPushButton ); + if (IsPushButton) + out->addBool("Pressed", Pressed); + + out->addTexture ("Image", Image); + out->addRect ("ImageRect", ImageRect); + out->addTexture ("PressedImage", PressedImage); + out->addRect ("PressedImageRect", PressedImageRect); + + out->addBool ("Border", Border); + out->addBool ("UseAlphaChannel", UseAlphaChannel); + + // out->addString ("OverrideFont", OverrideFont); +} + + +//! Reads attributes of the element +void MyGUIButton::deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0) +{ + IGUIButton::deserializeAttributes(in,options); + + IsPushButton = in->getAttributeAsBool("PushButton"); + Pressed = IsPushButton ? in->getAttributeAsBool("Pressed") : false; + + core::rect rec = in->getAttributeAsRect("ImageRect"); + if (rec.isValid()) + setImage( in->getAttributeAsTexture("Image"), rec); + else + setImage( in->getAttributeAsTexture("Image") ); + + rec = in->getAttributeAsRect("PressedImageRect"); + if (rec.isValid()) + setPressedImage( in->getAttributeAsTexture("PressedImage"), rec); + else + setPressedImage( in->getAttributeAsTexture("PressedImage") ); + + setDrawBorder(in->getAttributeAsBool("Border")); + UseAlphaChannel = in->getAttributeAsBool("UseAlphaChannel"); + + // setOverrideFont(in->getAttributeAsString("OverrideFont")); + + updateAbsolutePosition(); +} diff --git a/src/gui/my_button.hpp b/src/gui/my_button.hpp new file mode 100644 index 000000000..dae4212d5 --- /dev/null +++ b/src/gui/my_button.hpp @@ -0,0 +1,121 @@ +#ifndef HEADER_MY_BUTTON_HPP +#define HEADER_MY_BUTTON_HPP + +#include + +using namespace irr; +using namespace core; +using namespace scene; +using namespace video; +using namespace io; +using namespace gui; + +namespace GUIEngine +{ + +class MyGUIButton : public IGUIButton + { + public: + + //! constructor + MyGUIButton(IGUIEnvironment* environment, IGUIElement* parent, + s32 id, core::rect rectangle, bool noclip=false); + + //! destructor + virtual ~MyGUIButton(); + + //! called if an event happened. + virtual bool OnEvent(const SEvent& event); + + //! draws the element and its children + virtual void draw(); + + //! sets another skin independent font. if this is set to zero, the button uses the font of the skin. + virtual void setOverrideFont(IGUIFont* font=0); + + //! Sets an image which should be displayed on the button when it is in normal state. + virtual void setImage(video::ITexture* image); + + //! Sets an image which should be displayed on the button when it is in normal state. + virtual void setImage(video::ITexture* image, const core::rect& pos); + + //! Sets an image which should be displayed on the button when it is in pressed state. + virtual void setPressedImage(video::ITexture* image); + + //! Sets an image which should be displayed on the button when it is in pressed state. + virtual void setPressedImage(video::ITexture* image, const core::rect& pos); + + //! Sets the sprite bank used by the button + virtual void setSpriteBank(IGUISpriteBank* bank); + + //! Sets the animated sprite for a specific button state + /** \param index: Number of the sprite within the sprite bank, use -1 for no sprite + \param state: State of the button to set the sprite for + \param index: The sprite number from the current sprite bank + \param color: The color of the sprite + */ + virtual void setSprite(EGUI_BUTTON_STATE state, s32 index, + video::SColor color=video::SColor(255,255,255,255), bool loop=false); + + //! Sets if the button should behave like a push button. Which means it + //! can be in two states: Normal or Pressed. With a click on the button, + //! the user can change the state of the button. + virtual void setIsPushButton(bool isPushButton); + + //! Returns if the button is currently pressed + virtual bool isPressed() const; + + //! Sets the pressed state of the button if this is a pushbutton + virtual void setPressed(bool pressed); + + //! Sets if the button should use the skin to draw its border + virtual void setDrawBorder(bool border); + + //! Sets if the alpha channel should be used for drawing images on the button (default is false) + virtual void setUseAlphaChannel(bool useAlphaChannel); + + //! Returns if the alpha channel should be used for drawing images on the button + virtual bool isAlphaChannelUsed() const; + + //! Returns if the button face and border are being drawn + virtual bool isDrawingBorder() const; + + //! Returns whether the button is a push button + virtual bool isPushButton() const; + + //! Writes attributes of the element. + virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options) const; + + //! Reads attributes of the element + virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options); + + private: + + struct ButtonSprite + { + s32 Index; + video::SColor Color; + bool Loop; + }; + + bool Pressed; + bool IsPushButton; + bool UseAlphaChannel; + + bool Border; + + u32 ClickTime; + + IGUISpriteBank* SpriteBank; + IGUIFont* OverrideFont; + + ButtonSprite ButtonSprites[EGBS_COUNT]; + + video::ITexture* Image; + video::ITexture* PressedImage; + + core::rect ImageRect; + core::rect PressedImageRect; + }; +} +#endif \ No newline at end of file diff --git a/src/gui/network_gui.cpp b/src/gui/network_gui.cpp deleted file mode 100644 index 3d82e92f9..000000000 --- a/src/gui/network_gui.cpp +++ /dev/null @@ -1,304 +0,0 @@ -// $Id: network_gui.cpp 2148 2008-07-03 03:14:27Z hikerstk $ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2008 Joerg Henrichs - -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "gui/network_gui.hpp" - -#include -#include - -#include "sdldrv.hpp" -#include "user_config.hpp" -#include "gui/menu_manager.hpp" -#include "gui/widget_manager.hpp" -#include "network/network_manager.hpp" -#include "utils/string_utils.hpp" -#include "utils/translation.hpp" - -enum WidgetTokens -{ - WTOK_TITLE, - WTOK_CONNECT, - WTOK_SERVER, - WTOK_SERVER_ADDRESS, - WTOK_CONNECTED, - WTOK_MESSAGE, - WTOK_QUIT -}; - -/** Limits the maximum length of the player name. */ -const int NetworkGUI::SERVER_NAME_MAX = 50; - - -NetworkGUI::NetworkGUI() -{ - m_num_clients = 0; - Widget *w=widget_manager->addTitleWgt( WTOK_TITLE, 60, 7, _("Select network mode")); - widget_manager->hideWgtRect(WTOK_TITLE); - w->setPosition(WGT_DIR_CENTER, 0.0, WGT_DIR_FROM_TOP, 0.15f); - - Widget *w_prev=widget_manager->addTextButtonWgt( WTOK_CONNECT, 30, 7, _("Connect to server") ); - widget_manager->resizeWgtToText(WTOK_CONNECT); - w_prev->setPosition(WGT_DIR_FROM_LEFT, 0.05f, WGT_DIR_FROM_TOP, 0.25f); - - w=widget_manager->addTextButtonWgt( WTOK_SERVER, 30, 7, _("Become server") ); - widget_manager->resizeWgtToText(WTOK_SERVER); - w->setPosition(WGT_DIR_FROM_LEFT, 0.05f, NULL, - WGT_DIR_UNDER_WIDGET, 0, w_prev); - widget_manager->sameWidth(WTOK_CONNECT, WTOK_SERVER); - - std::ostringstream s; - s<m_server_address<<":"<m_server_port; - m_server_address=s.str(); - w=widget_manager->addTextButtonWgt(WTOK_SERVER_ADDRESS, 50, 7, m_server_address); - w->setPosition(WGT_DIR_RIGHT_WIDGET, 0.05f, w_prev, - WGT_DIR_FROM_TOP, 0.25f, NULL); - - w=widget_manager->addTextButtonWgt(WTOK_CONNECTED, 50, 20, " "); - w->setPosition(WGT_DIR_RIGHT_WIDGET, 0.05f, w_prev, - WGT_DIR_FROM_TOP, 0.25f, NULL); - widget_manager->hideWgt(WTOK_CONNECTED); - widget_manager->deactivateWgt(WTOK_CONNECTED); - - w=widget_manager->addTextButtonWgt( WTOK_QUIT, 60, 7, _("Press to go back") ); - w->setPosition(WGT_DIR_CENTER, 0, WGT_DIR_FROM_BOTTOM, 0); - - w=widget_manager->addTextWgt(WTOK_MESSAGE, 30, 7, ""); - w->setPosition(WGT_DIR_CENTER, 0, WGT_DIR_CENTER, 0); - widget_manager->hideWgt(WTOK_MESSAGE); - - // This can happen either when going back here, or when a command line - // option was specified causing the connection to already have happened - if(network_manager->getMode()==NetworkManager::NW_SERVER) - switchToWaitForConnectionMode(); - widget_manager->layout(WGT_AREA_ALL); - m_state=NGS_NONE; - -} // NetworkGUI - -//----------------------------------------------------------------------------- -NetworkGUI::~NetworkGUI() -{ - widget_manager->reset(); -} // ~NetworkGUI - -//----------------------------------------------------------------------------- -void NetworkGUI::select() -{ - const int selected = widget_manager->getSelectedWgt(); - switch (selected) - { - case WTOK_SERVER_ADDRESS: - // Switch to typing in the address of the server - widget_manager->setWgtText(WTOK_SERVER_ADDRESS, (m_server_address + "<").c_str()); - inputDriver->setMode(SDLDriver::LOWLEVEL); - break; - case WTOK_CONNECT: - // If we could connect here, no message could be displayed since - // glflush isn't called. So we only set a message for the network - // manager to display, and set the state so that the actual - // connection is done later when updating. - m_state=NGS_CONNECT_DISPLAY; - widget_manager->setWgtText(WTOK_MESSAGE, _("Waiting for server")); - widget_manager->resizeWgtToText(WTOK_MESSAGE); - widget_manager->showWgt(WTOK_MESSAGE); - widget_manager->hideWgt(WTOK_CONNECT, WTOK_SERVER_ADDRESS); - widget_manager->hideWgt(WTOK_QUIT); - break; - case WTOK_SERVER: - network_manager->becomeServer(); - widget_manager->hideWgt(WTOK_MESSAGE); - widget_manager->resizeWgtToText(WTOK_MESSAGE); - widget_manager->showWgt(WTOK_MESSAGE); - // Initialising the server does not block, so we don't have to - // do this in the update loop (to enable updates of the display). - if(!network_manager->initialiseConnections()) - { - fprintf(stderr, "Problems initialising network connections,\n" - "Running in non-network mode.\n"); - } - switchToWaitForConnectionMode(); - break; - case WTOK_QUIT: - // Disable accepting of clients - if(network_manager->getMode()==NetworkManager::NW_SERVER) - network_manager->setState(NetworkManager::NS_MAIN_MENU); - // Don't do networking if no clients are connected - if(network_manager->getNumClients()==0) - network_manager->disableNetworking(); - // Leave menu. - menu_manager->popMenu(); - - break; - } -} // select - -//----------------------------------------------------------------------------- -void NetworkGUI::switchToWaitForConnectionMode() -{ - widget_manager->setWgtText(WTOK_CONNECT, _("Connected:")); - widget_manager->hideWgtRect(WTOK_CONNECT); - widget_manager->deactivateWgt(WTOK_CONNECT); //make it non-selectable - widget_manager->setWgtText(WTOK_QUIT, _("OK")); - widget_manager->hideWgt(WTOK_SERVER_ADDRESS); - widget_manager->showWgt(WTOK_CONNECTED); - widget_manager->hideWgt(WTOK_SERVER); - widget_manager->setWgtText(WTOK_TITLE,_("Waiting for clients")); - widget_manager->hideWgt(WTOK_MESSAGE); - m_num_clients = 0; -} // switchToWaitForConnectionMode - -//----------------------------------------------------------------------------- -void NetworkGUI::update(float dt) -{ - // We need one 'in between' frame (finite state machine goes from - // NGS_CONNECT_DISPLAY to NGS_CONNECT_DOIT) since otherwise the text - // set for the message widget is not displayed (since glFlush isn't - // called before the blocking initialiseConnection call). - if(m_state==NGS_CONNECT_DOIT) - { - network_manager->becomeClient(); - if(!network_manager->initialiseConnections()) - { - widget_manager->setWgtText(WTOK_MESSAGE, _("Can't connect to server")); - widget_manager->resizeWgtToText(WTOK_MESSAGE); - widget_manager->showWgt(WTOK_QUIT); - network_manager->disableNetworking(); - } - else - { - network_manager->sendConnectMessage(); - menu_manager->popMenu(); - } - m_state=NGS_NONE; - } - else if(m_state==NGS_CONNECT_DISPLAY) - m_state=NGS_CONNECT_DOIT; - - widget_manager->update(0.0f); - if(m_num_clients==network_manager->getNumClients()) return; - - // At least one new client has connected: - std::string s=""; - m_num_clients = network_manager->getNumClients(); - for(unsigned int i=1; i<=m_num_clients; i++) - { - s+=network_manager->getClientName(i)+"\n"; - } - widget_manager->setWgtText(WTOK_CONNECTED, s); -} // update - -//----------------------------------------------------------------------------- -void NetworkGUI::inputKeyboard(SDLKey key, int unicode) -{ - switch (key) - { - case SDLK_RSHIFT: - case SDLK_LSHIFT: - // Ignore shift, otherwise shift will disable input - // (making it impossible to enter upper case characters) - case SDLK_SPACE: - // Ignore space to prevent invisible names. - - // Note: This will never happen as long as SPACE has a mapping which - // causes GA_ENTER and therefore finishes the typing. Please leave this - // because I am not sure whether this is good behavior (that SPACE - // cannot reach inputKeyboard()) and with some changes to the input - // driver this code has suddenly a useful effect. - case SDLK_KP_ENTER: - case SDLK_RETURN: - case SDLK_ESCAPE: - // Ignore some control keys. What they could provide is implemented - // in the handle() method. - return; - case SDLK_BACKSPACE: - // Handle backspace. - if (m_server_address.size() >=1) - m_server_address.erase(m_server_address.size()-1, 1); - - widget_manager->setWgtText(WTOK_SERVER_ADDRESS, (m_server_address + "<").c_str()); - break; - break; - default: - // Adds the character to the name. - // For this menu only unicode translation is enabled. - // So we use the unicode character here, since this will - // take care of upper/lower case etc. - if (unicode && (int)m_server_address.size() <= SERVER_NAME_MAX) - m_server_address += (char) unicode; - widget_manager->setWgtText(WTOK_SERVER_ADDRESS, (m_server_address + "<").c_str()); - break; - } - -} -//----------------------------------------------------------------------------- -void NetworkGUI::handle(GameAction ga, int value) -{ - if (value) - return; - - switch (ga) - { - case GA_ENTER: - // If the user is typing her name this will be finished at this - // point. - if (inputDriver->isInMode(SDLDriver::LOWLEVEL)) - { - // Prevents zero-length names. - if (m_server_address.length() == 0) - m_server_address = "localhost:2305"; - std::vector sl=StringUtils::split(m_server_address,':'); - if(sl.size()>1) - { - user_config->m_server_address = sl[0]; - user_config->m_server_port = atoi(sl[1].c_str()); - } - else - { - user_config->m_server_address = m_server_address; - std::ostringstream s; - s<m_server_port; - m_server_address=s.str(); - } - widget_manager->setWgtText(WTOK_SERVER_ADDRESS, m_server_address.c_str()); - - inputDriver->setMode(SDLDriver::MENU); - } - else - select(); - break; - case GA_LEAVE: - // If the user is typing her name this will be cancelled at this - // point. - if (inputDriver->isInMode(SDLDriver::LOWLEVEL)) - { - std::ostringstream s; - s<m_server_address<<":"<m_server_port; - m_server_address=s.str(); - widget_manager->setWgtText(WTOK_SERVER_ADDRESS, m_server_address.c_str()); - - inputDriver->setMode(SDLDriver::MENU); - break; - } - // Fall through to reach the usual GA_LEAVE code (leave menu). - default: - BaseGUI::handle(ga, value); - } - -} diff --git a/src/gui/network_gui.hpp b/src/gui/network_gui.hpp deleted file mode 100644 index 4d00afa41..000000000 --- a/src/gui/network_gui.hpp +++ /dev/null @@ -1,49 +0,0 @@ -// $Id: network_gui.hpp 2128 2008-06-13 00:53:52Z cosmosninja $ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2008 Joerg Henrichs -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef HEADER_NETWORK_GUI_H -#define HEADER_NETWORK_GUI_H - -#include -#include -#include "base_gui.hpp" -#include "player.hpp" - -class NetworkGUI: public BaseGUI -{ -private: - unsigned int m_num_clients; - std::string m_server_address; - enum {NGS_NONE, NGS_CONNECT_DISPLAY, NGS_CONNECT_DOIT} - m_state; - - static const int SERVER_NAME_MAX; - - void switchToWaitForConnectionMode(); -public: - NetworkGUI(); - ~NetworkGUI(); - void select(); - void update(float dt); - void handle(GameAction, int); - void inputKeyboard(SDLKey, int); - -}; - -#endif diff --git a/src/gui/num_players.cpp b/src/gui/num_players.cpp deleted file mode 100644 index acbda1121..000000000 --- a/src/gui/num_players.cpp +++ /dev/null @@ -1,82 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "gui/num_players.hpp" - -#include "race_manager.hpp" -#include "gui/menu_manager.hpp" -#include "gui/widget_manager.hpp" -#include "network/network_manager.hpp" -#include "utils/translation.hpp" - -enum WidgetTokens -{ - WTOK_PLAYER_2 = 2, - WTOK_PLAYER_3, - WTOK_PLAYER_4, - - WTOK_QUIT -}; - -NumPlayers::NumPlayers() -{ - widget_manager->switchOrder(); - widget_manager->addTextButtonWgt( WTOK_PLAYER_2, 35, 7, _("Two Players") ); - widget_manager->addTextButtonWgt( WTOK_PLAYER_3, 35, 7, _("Three Players") ); - widget_manager->addTextButtonWgt( WTOK_PLAYER_4, 35, 7, _("Four Players") ); - - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 35, 7 ); - - widget_manager->addTextButtonWgt( WTOK_QUIT, 35, 7, - _("Press to go back") ); - widget_manager->setWgtTextSize( WTOK_QUIT, WGT_FNT_SML ); - - widget_manager->layout(WGT_AREA_ALL); -} - -// ----------------------------------------------------------------------------- -NumPlayers::~NumPlayers() -{ - widget_manager->reset() ; -} - -// ----------------------------------------------------------------------------- -void NumPlayers::select() -{ - switch ( widget_manager->getSelectedWgt() ) - { - case WTOK_PLAYER_2: - case WTOK_PLAYER_3: - case WTOK_PLAYER_4: - race_manager->setNumLocalPlayers(widget_manager->getSelectedWgt()); - if(network_manager->getMode()==NetworkManager::NW_CLIENT) - menu_manager->pushMenu(MENUID_CHARSEL_P1); - else - menu_manager->pushMenu(MENUID_GAMEMODE); - break; - case WTOK_QUIT: - menu_manager->popMenu(); - break; - default: - break; - } -} - - - diff --git a/src/gui/num_players.hpp b/src/gui/num_players.hpp deleted file mode 100644 index 091db0106..000000000 --- a/src/gui/num_players.hpp +++ /dev/null @@ -1,34 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef HEADER_NUMPLAYERS_H -#define HEADER_NUMPLAYERS_H - -#include "base_gui.hpp" - -class NumPlayers: public BaseGUI -{ -public: - NumPlayers(); - ~NumPlayers(); - - void select(); -}; - -#endif diff --git a/src/gui/options.cpp b/src/gui/options.cpp deleted file mode 100644 index a36accf5c..000000000 --- a/src/gui/options.cpp +++ /dev/null @@ -1,104 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "gui/options.hpp" - -#include "user_config.hpp" -#include "gui/menu_manager.hpp" -#include "gui/widget_manager.hpp" -#include "utils/translation.hpp" - -enum WidgetTokens -{ - WTOK_TITLE, - - WTOK_CONTROLS, - WTOK_DISPLAY, - WTOK_SOUND, - - WTOK_QUIT -}; - -Options::Options() -{ - widget_manager->switchOrder(); - widget_manager->addTitleWgt( WTOK_TITLE, 45, 7, _("Options") ); - widget_manager->hideWgtRect(WTOK_TITLE); - widget_manager->addTextButtonWgt( WTOK_CONTROLS, 45, 7, _("Player Config") ); - - // Don't display the fullscreen menu when called from within the race. - // The fullscreen mode will reload all textures, reload the models, - // ... basically creating a big mess!! (and all of this only thanks - // to windows, who discards all textures, ...) - if(!menu_manager->isSomewhereOnStack( MENUID_RACE )) - { - widget_manager->addTextButtonWgt( WTOK_DISPLAY, 45, 7, _("Display") ); - } - - widget_manager->addTextButtonWgt( WTOK_SOUND, 45, 7, _("Sound") ); - - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 1, 7 ); - - widget_manager->addTextButtonWgt( WTOK_QUIT, 45, 7, - _("Press to go back") ); - widget_manager->setWgtTextSize( WTOK_QUIT, WGT_FNT_SML ); - - widget_manager->layout(WGT_AREA_ALL); -} - -// ----------------------------------------------------------------------------- -Options::~Options() -{ - widget_manager->reset() ; -} - -// ----------------------------------------------------------------------------- -void Options::select() -{ - switch ( widget_manager->getSelectedWgt() ) - { - case WTOK_CONTROLS: - menu_manager->pushMenu(MENUID_CONFIG_CONTROLS); - break; - case WTOK_DISPLAY: - menu_manager->pushMenu(MENUID_CONFIG_DISPLAY); - break; - case WTOK_SOUND: - menu_manager->pushMenu(MENUID_CONFIG_SOUND); - break; - case WTOK_QUIT: - //FIXME: this shouldn't be in this screen - // Make config changes permanent. - user_config->saveConfig(); - - menu_manager->popMenu(); - break; - default: - break; - } // switch -} - -void Options::handle(GameAction action, int value) -{ - // Save config on leave. - if (!value && action == GA_LEAVE) - user_config->saveConfig(); - - BaseGUI::handle(action, value); -} diff --git a/src/gui/options.hpp b/src/gui/options.hpp deleted file mode 100644 index 5ad418528..000000000 --- a/src/gui/options.hpp +++ /dev/null @@ -1,36 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef HEADER_OPTIONS_H -#define HEADER_OPTIONS_H - -#include "base_gui.hpp" - -class Options: public BaseGUI -{ -public: - Options(); - ~Options(); - - void select(); - void handle(GameAction, int); - -}; - -#endif diff --git a/src/gui/player_controls.cpp b/src/gui/player_controls.cpp deleted file mode 100644 index 4e700b007..000000000 --- a/src/gui/player_controls.cpp +++ /dev/null @@ -1,325 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "gui/player_controls.hpp" - -#include - -#include "sdldrv.hpp" -#include "user_config.hpp" -#include "gui/menu_manager.hpp" -#include "gui/widget_manager.hpp" -#include "utils/translation.hpp" -#include "utils/string_utils.hpp" - -enum WidgetTokens -{ - WTOK_TITLE, - WTOK_PLYR_NAME0, - WTOK_PLYR_NAME1, - - WTOK_LEFT, - WTOK_RIGHT, - WTOK_ACCEL, - WTOK_BRAKE, - WTOK_NITRO, - WTOK_DRIFT, - WTOK_RESCUE, - WTOK_FIRE, - WTOK_LOOK_BACK, - - WTOK_KEY0, - WTOK_KEY1, - WTOK_KEY2, - WTOK_KEY3, - WTOK_KEY4, - WTOK_KEY5, - WTOK_KEY6, - WTOK_KEY7, - WTOK_KEY8, - - WTOK_QUIT -}; - -/** Limits the maximum length of the player name. */ -const size_t PlayerControls::PLAYER_NAME_MAX = 10; - - -const char *sKartAction2String[KA_LAST+1] = -{ - //I18N: name of controls - _("Left"), - //I18N: name of controls (here, 'right' is the opposite of 'left' not the opposite of 'wrong') - _("Right"), - //I18N: name of controls - _("Accelerate"), _("Brake"), _("Nitro"), _("Sharp Turn"), _("Rescue"), - //I18N: name of controls, like in "fire missile" - _("Fire"), - //I18N: name of controls - _("Look back") -}; - - -PlayerControls::PlayerControls(int whichPlayer): - m_player_index(whichPlayer), - m_grab_input(false) -{ - std::string s = StringUtils::insert_values( _("Choose your controls, %s"), - user_config->m_player[m_player_index].getName()); - - widget_manager->addTitleWgt( WTOK_TITLE, 60, 7, s); - widget_manager->hideWgtRect(WTOK_TITLE); - widget_manager->breakLine(); - - widget_manager->addTextWgt( WTOK_PLYR_NAME0, 30, 7, _("Player name") ); - - m_name = user_config->m_player[m_player_index].getName(); - widget_manager->addTextButtonWgt( WTOK_PLYR_NAME1, 30, 7, m_name ); - widget_manager->breakLine(); - - widget_manager->switchOrder(); - for(int i = KA_FIRST; i <= KA_LAST; i++) - { - // Note: even though that all strings in sKartAction2Strings above - // are in _(), they are not translated (since gettext is actually - // called at startup (just after loading) of the program, when - // gettext is not yet initialised - so it returns the untranslated - // strings). So we add an additional _() here (and in help_page_one). - widget_manager->addTextWgt( WTOK_KEY0 + i, 30, 7, _(sKartAction2String[i]) ); - } - widget_manager->breakLine(); - - - KartAction control; - widget_manager->switchOrder(); - for(int i = KA_FIRST; i <= KA_LAST; i++) - { - control = (KartAction)i; - m_key_names[control] = user_config->getMappingAsString(m_player_index, control); - - widget_manager->addTextButtonWgt( WTOK_LEFT + i, 30, 7, - m_key_names[control].c_str()); - } - widget_manager->breakLine(); - widget_manager->breakLine(); - - widget_manager->addTextButtonWgt( WTOK_QUIT, 60, 7, _("Press to go back") ); - widget_manager->setWgtTextSize( WTOK_QUIT, WGT_FNT_SML); - - widget_manager->layout(WGT_AREA_ALL); -} // PlayerControls - -//----------------------------------------------------------------------------- -PlayerControls::~PlayerControls() -{ - widget_manager->reset(); - // The unicode translation is not generally needed, so disable it again. -} // ~PlayerControls - -//----------------------------------------------------------------------------- -void -PlayerControls::select() -{ - const int selected = widget_manager->getSelectedWgt(); - switch (selected) - { - case WTOK_PLYR_NAME1: - // Switch to typing in the player's name. - widget_manager->setWgtText(WTOK_PLYR_NAME1, (m_name + "<").c_str()); - - inputDriver->setMode(SDLDriver::LOWLEVEL); - - break; - case WTOK_QUIT: - // Leave menu. - menu_manager->popMenu(); - - break; - default: - // Switch to input sensing. - - // If the only remaining and not yet handled widgets are the ones - // that deal with the kart controls and the values are still in the - // correct order the assertion should hold. If not did something - // bad. - assert (selected >= WTOK_LEFT - && selected <= WTOK_LOOK_BACK); - - - m_edit_action = static_cast(selected - WTOK_LEFT); - widget_manager->setWgtText(selected, _("Press key")); - // Prefer axis (in case of gamepads that deliver two different - // events for buttons, e.g. a digital event and an anlogue one) - // for left/right, in all other cases prefer the button. - inputDriver->setMode( (selected==WTOK_RIGHT||selected==WTOK_LEFT) - ? SDLDriver::INPUT_SENSE_PREFER_AXIS - : SDLDriver::INPUT_SENSE_PREFER_BUTTON ); - - break; - } -} // select -//----------------------------------------------------------------------------- -void -PlayerControls::inputKeyboard(SDLKey key, int unicode) -{ - switch (key) - { - case SDLK_RSHIFT: - case SDLK_LSHIFT: - // Ignore shift, otherwise shift will disable input - // (making it impossible to enter upper case characters) - case SDLK_SPACE: - // Ignore space to prevent invisible names. - - // Note: This will never happen as long as SPACE has a mapping which - // causes GA_ENTER and therefore finishes the typing. Please leave this - // because I am not sure whether this is good behavior (that SPACE - // cannot reach inputKeyboard()) and with some changes to the input - // driver this code has suddenly a useful effect. - case SDLK_KP_ENTER: - case SDLK_RETURN: - case SDLK_ESCAPE: - // Ignore some control keys. What they could provide is implemented - // in the handle() method. - return; - case SDLK_BACKSPACE: - // Handle backspace. - if (m_name.size() >=1) - m_name.erase(m_name.size()-1, 1); - - widget_manager->setWgtText(WTOK_PLYR_NAME1, (m_name + "<").c_str()); - break; - break; - default: - // Adds the character to the name. - // For this menu only unicode translation is enabled. - // So we use the unicode character here, since this will - // take care of upper/lower case etc. - if (unicode && m_name.size() <= PLAYER_NAME_MAX) - m_name += (char) unicode; - widget_manager->setWgtText(WTOK_PLYR_NAME1, (m_name + "<").c_str()); - break; - } - -} -//----------------------------------------------------------------------------- -void -PlayerControls::clearMapping() -{ - const int selected = widget_manager->getSelectedWgt(); - if (selected >= WTOK_LEFT && selected <= WTOK_LOOK_BACK) - { - user_config->clearInput(m_player_index, - (KartAction) (selected - WTOK_LEFT)); - updateAllKeyLabels(); - } -} -//----------------------------------------------------------------------------- -void PlayerControls::handle(GameAction ga, int value) -{ - if (value) - return; - - switch (ga) - { - case GA_CLEAR_MAPPING: - clearMapping(); - - break; - case GA_SENSE_COMPLETE: - { - // Updates the configuration with the newly sensed input. - const Input &new_input = inputDriver->getSensedInput(); - // Don't use reference for old_input, otherwise old_input - // is changed when setInput is called. - const Input old_input = user_config->getInput(m_player_index, - m_edit_action); - user_config->setInput(m_player_index, - m_edit_action, - new_input); - // If left/right is set to a stick motion, and right/left is - // currently set to be something else - if(new_input.type == Input::IT_STICKMOTION && - new_input.id2 != Input::AD_NEUTRAL && - old_input.type != Input::IT_STICKMOTION) - { - Input inp(new_input); - inp.id2 = (inp.id2==Input::AD_NEGATIVE) ? Input::AD_POSITIVE - : Input::AD_NEGATIVE; - user_config->setInput(m_player_index, - m_edit_action==KA_LEFT ? KA_RIGHT - : KA_LEFT, - inp); - } - - // Fall through to recover the widget labels. - } - case GA_SENSE_CANCEL: - inputDriver->setMode(SDLDriver::MENU); - - // Refresh all key labels since they mave changed because of - // conflicting bindings. - updateAllKeyLabels(); - break; - case GA_ENTER: - // If the user is typing her name this will be finished at this - // point. - if (inputDriver->isInMode(SDLDriver::LOWLEVEL)) - { - // Prevents zero-length names. - if (m_name.length() == 0) - //I18N: as in 'Player 2' - m_name = _("Player ") + m_player_index; - user_config->m_player[m_player_index].setName(m_name); - widget_manager->setWgtText(WTOK_PLYR_NAME1, m_name.c_str()); - - inputDriver->setMode(SDLDriver::MENU); - } - else - select(); - break; - case GA_LEAVE: - // If the user is typing her name this will be cancelled at this - // point. - if (inputDriver->isInMode(SDLDriver::LOWLEVEL)) - { - m_name = user_config->m_player[m_player_index].getName(); - widget_manager->setWgtText(WTOK_PLYR_NAME1, m_name.c_str()); - - inputDriver->setMode(SDLDriver::MENU); - break; - } - // Fall through to reach the usual GA_LEAVE code (leave menu). - default: - BaseGUI::handle(ga, value); - } - -} - -//----------------------------------------------------------------------------- -void -PlayerControls::updateAllKeyLabels() -{ - for (int i = KA_FIRST; i <= KA_LAST; i++) - { - m_key_names[i] = user_config->getMappingAsString(m_player_index, - (KartAction) i); - widget_manager->setWgtText(WTOK_LEFT + i, m_key_names[i].c_str()); - } -} diff --git a/src/gui/player_controls.hpp b/src/gui/player_controls.hpp deleted file mode 100644 index 8c74b07ed..000000000 --- a/src/gui/player_controls.hpp +++ /dev/null @@ -1,57 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef HEADER_PLAYER_CONTROLS_HPP -#define HEADER_PLAYER_CONTROLS_HPP - -#include -#include -#include "base_gui.hpp" -#include "player.hpp" - -class PlayerControls: public BaseGUI -{ -public: - PlayerControls(int whichPlayer); - ~PlayerControls(); - - void select(); - void clearMapping(); - - void handle(GameAction, int); - void inputKeyboard(SDLKey, int); - void addKeyLabel(int change_id, KartAction control, bool start); - void setKeyInfoString(KartAction control); - -private: - void updateAllKeyLabels(); - - int m_player_index; - bool m_grab_input; - - /** Stores the KartAction for which the input is being sensed. */ - KartAction m_edit_action; - - std::string m_name; - std::string m_key_names[KC_COUNT]; - - static const size_t PLAYER_NAME_MAX; -}; - -#endif diff --git a/src/gui/ptr_vector.hpp b/src/gui/ptr_vector.hpp new file mode 100644 index 000000000..3aef0ba53 --- /dev/null +++ b/src/gui/ptr_vector.hpp @@ -0,0 +1,213 @@ +/* + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +/* + * I made this class to work like a regular vector, except that contentsVector are placed + * one the heap so third-party contentsVector can keep pointers to them. + */ + +#ifndef HEADER_PTR_VECTOR_HPP +#define HEADER_PTR_VECTOR_HPP + +#include +#include + + +enum VECTOR_TYPE +{ + REF, + HOLD +}; + +template +class ptr_vector +{ + +public: + std::vector contentsVector; + +ptr_vector() +{ +} + +~ptr_vector() +{ + if(type == HOLD) clearAndDeleteAll(); +} + +void push_back(TYPE* t) +{ + contentsVector.push_back(t); +} + +void add(TYPE* t, int index) +{ + contentsVector.insert(contentsVector.begin()+index, t); +} + +void swap(int ID1, int ID2) +{ + assert(ID1 > -1); + assert((unsigned int)ID1 < contentsVector.size()); + assert(ID2 > -1); + assert((unsigned int)ID2 < contentsVector.size()); + + + TYPE* temp = contentsVector[ID2]; + + contentsVector[ID2] = contentsVector[ID1]; + contentsVector[ID1] = temp; +} + +// mark is a way to delete an object without changing the order of the element sin the vector +// it can be useful in a 'for' loop when the loop relies on object IDs and vector size not changing + +void markToBeDeleted(const int ID) // object is removed from vector and deleted +{ + assert(ID > -1); + assert((unsigned int)ID < contentsVector.size()); + + delete ( TYPE *) contentsVector[ID]; + + contentsVector[ID] = 0; + +} +void markToBeRemoved(const int ID) // object is removed from vector but not deleted +{ + assert(ID > -1); + assert((unsigned int)ID < contentsVector.size()); + + contentsVector[ID] = 0; + +} + +bool isMarked(const int ID) const +{ + assert(ID > -1); + assert((unsigned int)ID < contentsVector.size()); + + return (contentsVector[ID] == 0); +} + +void removeMarked() +{ + int size = contentsVector.size(); + for(int n=0; n -1); + assert((unsigned int)ID < contentsVector.size()); + + return contentsVector[ID]; +} + +int size() const +{ + return contentsVector.size(); +} + +void erase(const int ID) +{ + assert(ID > -1); + assert((unsigned int)ID < contentsVector.size()); + + delete ( TYPE *) contentsVector[ID]; + + contentsVector.erase(contentsVector.begin()+ID); +} + +void remove(const int ID) +{ + assert(ID > -1); + assert((unsigned int)ID < contentsVector.size()); + + contentsVector.erase(contentsVector.begin()+ID); +} + +bool contains( TYPE* instance ) const +{ + const unsigned int amount = contentsVector.size(); + for(unsigned int n=0; ngetGUI(); - core::rect pos(user_config->m_width-160, 10, - user_config->m_width, 150); + core::rect pos(user_config->m_width-60, 10, + user_config->m_width, 50); m_time = gui_env->addStaticText(L"", pos); m_time->setOverrideFont(irr_driver->getRaceFont()); - m_time->setOverrideColor(video::SColor(255, 255, 255, 255)); int icon_width=40; int icon_player_width=50; @@ -177,8 +190,11 @@ RaceGUI::handle(GameAction ga, int value) // Fall through to put the game into pause mode. #endif case GA_LEAVE_RACE: + // TODO - show race menu + /* RaceManager::getWorld()->pause(); menu_manager->pushMenu(MENUID_RACEMENU); + */ break; case GA_DEBUG_HISTORY: history->Save(); @@ -195,7 +211,7 @@ void RaceGUI::update(float dt) drawStatusText(dt); cleanupMessages(dt); - BaseGUI::update( dt ); + //BaseGUI::update( dt ); } // update //----------------------------------------------------------------------------- @@ -222,7 +238,7 @@ void RaceGUI::drawTimer () if(!RaceManager::getWorld()->shouldDrawTimer()) return; char str[256]; - TimeToString(RaceManager::getWorld()->getTime(), str); + timeToString(RaceManager::getWorld()->getTime(), str); #ifdef HAVE_IRRLICHT m_time->setText(core::stringw(str).c_str()); #else diff --git a/src/gui/race_gui.hpp b/src/gui/race_gui.hpp index 34052e087..05740703b 100644 --- a/src/gui/race_gui.hpp +++ b/src/gui/race_gui.hpp @@ -29,7 +29,6 @@ using namespace irr; #include #include -#include "base_gui.hpp" #include "material.hpp" #include "player.hpp" #include "race_manager.hpp" @@ -54,7 +53,10 @@ struct KartIconDisplayInfo int lap; }; -class RaceGUI: public BaseGUI +extern RaceGUI* getRaceGUI(); +void timeToString(const double TIME, char *s); + +class RaceGUI { private: class TimedMessage diff --git a/src/gui/race_menu.cpp b/src/gui/race_menu.cpp deleted file mode 100644 index 6ec54a5c2..000000000 --- a/src/gui/race_menu.cpp +++ /dev/null @@ -1,134 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "gui/race_menu.hpp" - -#include - -#include "user_config.hpp" - -#include "race_manager.hpp" -#include "gui/menu_manager.hpp" -#include "gui/widget_manager.hpp" -#include "utils/translation.hpp" - -enum WidgetTokens -{ - WTOK_PAUSE, - WTOK_RETURN_RACE, - WTOK_OPTIONS, - WTOK_HELP, - WTOK_RESTART_RACE, - WTOK_SETUP_NEW_RACE, - WTOK_QUIT, -}; - -RaceMenu::RaceMenu() -{ - widget_manager->switchOrder(); - - widget_manager->addTitleWgt( WTOK_PAUSE, 50, 7, _("Paused") ); - - widget_manager->addTextButtonWgt( WTOK_RETURN_RACE, 50, 7, _("Return To Race")); - widget_manager->addTextButtonWgt( WTOK_OPTIONS, 50, 7, _("Options") ); - widget_manager->addTextButtonWgt( WTOK_HELP, 50, 7, _("Help") ); - widget_manager->addTextButtonWgt( WTOK_RESTART_RACE, 50, 7, _("Restart Race") ); - - if(race_manager->getMinorMode()==RaceManager::MINOR_MODE_QUICK_RACE) - { - widget_manager->addTextButtonWgt( WTOK_SETUP_NEW_RACE, 50, 7, - _("Setup New Race") ); - } - - widget_manager->addTextButtonWgt( WTOK_QUIT, 50, 7, _("Exit Race") ); - - widget_manager->layout(WGT_AREA_ALL); - if(user_config->m_fullscreen) SDL_ShowCursor(SDL_ENABLE); -} - -//----------------------------------------------------------------------------- -RaceMenu::~RaceMenu() -{ - widget_manager->reset(); -} - - -//----------------------------------------------------------------------------- -void RaceMenu::select() -{ - int clicked_token = widget_manager->getSelectedWgt(); - - switch (clicked_token) - { - case WTOK_RETURN_RACE: - RaceManager::getWorld()->unpause(); - menu_manager->popMenu(); - if(user_config->m_fullscreen) SDL_ShowCursor(SDL_DISABLE); - break; - - case WTOK_SETUP_NEW_RACE: - RaceManager::getWorld()->unpause(); - race_manager->exit_race(); - menu_manager->pushMenu(MENUID_CHARSEL_P1); - break; - - case WTOK_RESTART_RACE: - menu_manager->popMenu(); - if(user_config->m_fullscreen) SDL_ShowCursor(SDL_DISABLE); - RaceManager::getWorld()->restartRace(); - break; - - case WTOK_OPTIONS: - menu_manager->pushMenu(MENUID_OPTIONS); - break; - - case WTOK_HELP: - menu_manager->pushMenu(MENUID_HELP1); - break; - - case WTOK_QUIT: - RaceManager::getWorld()->unpause(); - race_manager->exit_race(); - break; - - default: - break; - } -} - -//----------------------------------------------------------------------------- -void RaceMenu::handle(GameAction ga, int value) -{ - switch ( ga ) - { - case GA_LEAVE: - if (value) - break; - - RaceManager::getWorld()->unpause(); - menu_manager->popMenu(); - break; - - default: - BaseGUI::handle(ga, value); - break; - } -} - - diff --git a/src/gui/race_menu.hpp b/src/gui/race_menu.hpp deleted file mode 100644 index 4aca4d5a7..000000000 --- a/src/gui/race_menu.hpp +++ /dev/null @@ -1,35 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef HEADER_RACEMENU_H -#define HEADER_RACEMENU_H - -#include "base_gui.hpp" - -class RaceMenu: public BaseGUI -{ -public: - RaceMenu(); - ~RaceMenu(); - - void select(); - void handle(GameAction ga, int value); -}; - -#endif diff --git a/src/gui/race_options.cpp b/src/gui/race_options.cpp deleted file mode 100644 index dbeb94fa5..000000000 --- a/src/gui/race_options.cpp +++ /dev/null @@ -1,332 +0,0 @@ -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "gui/race_options.hpp" - -#include - -#include "race_manager.hpp" -#include "user_config.hpp" -#include "material_manager.hpp" -#include "gui/menu_manager.hpp" -#include "gui/widget_manager.hpp" -#include "utils/translation.hpp" - -enum WidgetTokens -{ - WTOK_TITLE, - - WTOK_DIFFICULTY_TITLE, - WTOK_DIFFICULTY_UP, - WTOK_DIFFICULTY, - WTOK_DIFFICULTY_DOWN, - - WTOK_KARTS_TITLE, - WTOK_KARTS_UP, - WTOK_KARTS, - WTOK_KARTS_DOWN, - - WTOK_LAPS_TITLE, - WTOK_LAPS_UP, - WTOK_LAPS, - WTOK_LAPS_DOWN, - - WTOK_START, - - WTOK_QUIT -}; - -RaceOptions::RaceOptions() -{ - - m_difficulty=user_config->getDefaultDifficulty(); - m_num_laps=user_config->getDefaultNumLaps(); - // Determine the minimum number of karts - m_min_karts = (int)race_manager->getNumPlayers(); - if(race_manager->getMinorMode() == RaceManager::MINOR_MODE_FOLLOW_LEADER) - { - // if playing follow the leader single mode, there should be at - // least one opponent in addition to the leader - m_min_karts += (race_manager->getNumPlayers()==1 ? 2 : 1); - } - m_num_karts=std::max(user_config->getDefaultNumKarts(), m_min_karts); - - - const int DESC_WIDTH=48; - const int ITEM_WIDTH=35; - - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 10, 20); - widget_manager->breakLine(); - - // Difficulty - // ========== - // if there is no AI, no point asking for its difficulty... - // There's also no point asking the player for the amount of karts - // since tt will always be the same as the number of human players - if(!RaceManager::isBattleMode( race_manager->getMinorMode() )) - { - widget_manager->addTextWgt( WTOK_DIFFICULTY_TITLE, DESC_WIDTH, 7, _("Difficulty") ); - widget_manager->hideWgtRect(WTOK_DIFFICULTY_TITLE); - widget_manager->setWgtTextSize(WTOK_DIFFICULTY_TITLE, WGT_FNT_LRG); - widget_manager->addTextButtonWgt( WTOK_DIFFICULTY_DOWN, 3, 7, " < " ); - - widget_manager->addTextWgt( WTOK_DIFFICULTY, ITEM_WIDTH, 7, getDifficultyString(m_difficulty)); - widget_manager->setWgtBorderPercentage( WTOK_DIFFICULTY, 10 ); - widget_manager->showWgtBorder( WTOK_DIFFICULTY ); - widget_manager->hideWgtRect( WTOK_DIFFICULTY ); - - widget_manager->addTextButtonWgt( WTOK_DIFFICULTY_UP, 3, 7, " > " ); - - widget_manager->breakLine(); - - // Number of karts - // =============== - widget_manager->addTextWgt( WTOK_KARTS_TITLE, DESC_WIDTH, 7, _("Number of karts") ); - widget_manager->hideWgtRect(WTOK_KARTS_TITLE); - widget_manager->setWgtTextSize(WTOK_KARTS_TITLE, WGT_FNT_LRG); - widget_manager->addTextButtonWgt( WTOK_KARTS_DOWN, 3, 7, " < " ); - - std::ostringstream string_num_karts; - string_num_karts << m_num_karts; - widget_manager->addTextWgt( WTOK_KARTS, ITEM_WIDTH, 7, string_num_karts.str() ); - widget_manager->setWgtBorderPercentage( WTOK_KARTS, 10 ); - widget_manager->showWgtBorder( WTOK_KARTS ); - widget_manager->hideWgtRect( WTOK_KARTS ); - - widget_manager->addTextButtonWgt( WTOK_KARTS_UP, 3, 7, " > " ); - - widget_manager->breakLine(); - } - - // Number of laps - // ============== - if( race_manager->getMajorMode() != RaceManager::MAJOR_MODE_GRAND_PRIX && - RaceManager::modeHasLaps( race_manager->getMinorMode() ) ) - { - widget_manager->addTextWgt( WTOK_LAPS_TITLE, DESC_WIDTH, 7, _("Number of laps") ); - widget_manager->hideWgtRect(WTOK_LAPS_TITLE); - widget_manager->setWgtTextSize(WTOK_LAPS_TITLE, WGT_FNT_LRG); - widget_manager->addTextButtonWgt( WTOK_LAPS_DOWN, 3, 7, " < " ); - - std::ostringstream string_num_laps; - string_num_laps << m_num_laps; - widget_manager->addTextWgt( WTOK_LAPS, ITEM_WIDTH, 7, string_num_laps.str() ); - widget_manager->setWgtBorderPercentage( WTOK_LAPS, 10 ); - widget_manager->showWgtBorder( WTOK_LAPS ); - widget_manager->hideWgtRect( WTOK_LAPS ); - - widget_manager->addTextButtonWgt( WTOK_LAPS_UP, 3, 7, " > " ); - } - widget_manager->breakLine(); - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 10, 10 ); - widget_manager->breakLine(); - - // Bottom buttons - // ============== - widget_manager->addTextButtonWgt( WTOK_START, 60, 7, _("Start race") ); - widget_manager->setWgtBorderPercentage( WTOK_START, 20 ); - widget_manager->setWgtBorderColor( WTOK_START, WGT_TRANS_BLUE ); - widget_manager->showWgtBorder( WTOK_START ); - - widget_manager->breakLine(); - - widget_manager->addEmptyWgt( WidgetManager::WGT_NONE, 10, 30); - widget_manager->breakLine(); - - widget_manager->addTextButtonWgt( WTOK_QUIT, 60, 7, _("Press to go back") ); - - widget_manager->layout(WGT_AREA_ALL); - - // Select 'start' by default. - widget_manager->setSelectedWgt( WTOK_START ); - - // hack. in battle mode this screen is totally useless. so I'm calling 'select' - // to select the start button, so the screen is entirely skipped (FIXME - find cleaner way) - if(RaceManager::isBattleMode( race_manager->getMinorMode() )) select(); - -} // RaceOptions - -//----------------------------------------------------------------------------- -RaceOptions::~RaceOptions() -{ - widget_manager->reset(); -} // ~RaceOptions - -//----------------------------------------------------------------------------- -void RaceOptions::update(float dt) -{ - BaseGUI::update(dt); -} // update -//----------------------------------------------------------------------------- -void RaceOptions::select() -{ - switch ( widget_manager->getSelectedWgt() ) - { - case WTOK_DIFFICULTY_UP: - if( m_difficulty == RaceManager::RD_HARD ) - { - m_difficulty = RaceManager::RD_EASY; - } - else if( m_difficulty == RaceManager::RD_MEDIUM ) - { - m_difficulty = RaceManager::RD_HARD; - } - else if( m_difficulty == RaceManager::RD_EASY ) - { - m_difficulty = RaceManager::RD_MEDIUM; - } - widget_manager->setWgtText(WTOK_DIFFICULTY, getDifficultyString(m_difficulty) ); - break; - - case WTOK_DIFFICULTY_DOWN: - if( m_difficulty == RaceManager::RD_HARD ) - { - m_difficulty = RaceManager::RD_MEDIUM; - } - else if( m_difficulty == RaceManager::RD_MEDIUM ) - { - m_difficulty = RaceManager::RD_EASY; - } - else if( m_difficulty == RaceManager::RD_EASY ) - { - m_difficulty = RaceManager::RD_HARD; - } - widget_manager->setWgtText(WTOK_DIFFICULTY, - getDifficultyString(m_difficulty) ); - - break; - - case WTOK_KARTS_UP: - { - m_num_karts = m_num_karts==stk_config->m_max_karts - ? m_min_karts : m_num_karts + 1; - - std::ostringstream label; - label << m_num_karts; - widget_manager->setWgtText(WTOK_KARTS, label.str() ); - } - break; - - case WTOK_KARTS_DOWN: - { - m_num_karts = m_num_karts==m_min_karts - ? stk_config->m_max_karts : m_num_karts-1; - std::ostringstream label; - label << m_num_karts; - widget_manager->setWgtText(WTOK_KARTS, label.str() ); - } - break; - - case WTOK_LAPS_UP: - { - m_num_laps++; - if(m_num_laps>10) m_num_laps=1; - - std::ostringstream label; - label << m_num_laps; - widget_manager->setWgtText(WTOK_LAPS, label.str()); - } - break; - - case WTOK_LAPS_DOWN: - { - m_num_laps--; - if(m_num_laps<1) m_num_laps=10; - - std::ostringstream label; - label << m_num_laps; - widget_manager->setWgtText(WTOK_LAPS, label.str()); - } - break; - - case WTOK_START: - setAllValues(); - menu_manager->pushMenu(MENUID_START_RACE_FEEDBACK); - break; - case WTOK_QUIT: - // Save the current values as a default for later. - setAllValues(); - menu_manager->popMenu(); - break; - default: break; - } // switch -} // select - -// ---------------------------------------------------------------------------- -/** If the user presses a leave key, still save the values as default. */ -void RaceOptions::handle(GameAction ga, int value) -{ - // Attempts to close the menu are silently discarded - // since they do not make sense at this point. - if(ga == GA_LEAVE) - setAllValues(); - BaseGUI::handle(ga, value); -} // handle - -// ---------------------------------------------------------------------------- -/** Stores the selected parameters (#laps etc) in the race manager and in - * user_config, so that they will be available as default next time. - */ -void RaceOptions::setAllValues() -{ - if( m_difficulty >= RaceManager::RD_EASY && - m_difficulty <= RaceManager::RD_HARD) - { - race_manager->setDifficulty((RaceManager::Difficulty)m_difficulty); - user_config->setDefaultNumDifficulty(m_difficulty); - } - else // invalid difficulty - { - race_manager->setDifficulty( RaceManager::RD_EASY ); - user_config->setDefaultNumDifficulty(RaceManager::RD_EASY); - } - - // if there is no AI, there's no point asking the player for the amount of karts. - // It will always be the same as the number of human players - if(RaceManager::isBattleMode( race_manager->getMinorMode() )) - { - race_manager->setNumKarts(race_manager->getNumLocalPlayers()); - // Don't change the default number of karts in user_config - } - else - { - race_manager->setNumKarts(m_num_karts); - user_config->setDefaultNumKarts(race_manager->getNumKarts()); - } - - if( race_manager->getMajorMode() != RaceManager::MAJOR_MODE_GRAND_PRIX && - RaceManager::modeHasLaps( race_manager->getMinorMode() ) ) - { - race_manager->setNumLaps( m_num_laps ); - user_config->setDefaultNumLaps(m_num_laps); - } - // Might still be set from a previous challenge - race_manager->setCoinTarget(0); -} // setAllValues - -// ---------------------------------------------------------------------------- -const char *RaceOptions::getDifficultyString(int difficulty) const -{ - switch(difficulty) - { - case RaceManager::RD_EASY: return _("Novice"); - case RaceManager::RD_MEDIUM: return _("Driver"); - case RaceManager::RD_HARD: return _("Racer" ); - default: return _("Novice"); - - } // switch -} // getDifficultyString diff --git a/src/gui/race_options.hpp b/src/gui/race_options.hpp deleted file mode 100644 index e1373ac51..000000000 --- a/src/gui/race_options.hpp +++ /dev/null @@ -1,41 +0,0 @@ -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef HEADER_RACE_OPTIONS_H -#define HEADER_RACE_OPTIONS_H - -#include "base_gui.hpp" - -class RaceOptions: public BaseGUI -{ -private: - int m_difficulty; - int m_num_karts; - int m_min_karts; // minimum number of karts, depending on mode etc. - int m_num_laps; - const char *getDifficultyString(int) const; - void setAllValues(); -public: - RaceOptions(); - ~RaceOptions(); - - void select(); - void update(float dt); - virtual void handle(GameAction, int); -}; - -#endif diff --git a/src/gui/race_results_gui.cpp b/src/gui/race_results_gui.cpp deleted file mode 100644 index 39ce7e6b8..000000000 --- a/src/gui/race_results_gui.cpp +++ /dev/null @@ -1,342 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Eduardo Hernandez Munoz -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "gui/race_results_gui.hpp" - -#include - -#include "race_manager.hpp" -#include "highscore_manager.hpp" -#include "challenges/unlock_manager.hpp" -#include "gui/menu_manager.hpp" -#include "gui/widget_manager.hpp" -#include "modes/world.hpp" -#include "karts/kart_properties.hpp" -#include "network/network_manager.hpp" -#include "utils/translation.hpp" - -RaceResultsGUI::RaceResultsGUI() -{ - m_first_time = true; - m_selected_widget = WTOK_NONE; - - // Switch to barrier mode: server waits for ack from each client - network_manager->beginRaceResultBarrier(); - Widget *bottom_of_list; - - bottom_of_list = displayRaceResults(); - - // If it's a server, the user can only select 'ok', since the - // server does all the game mode selection etc. - if(network_manager->getMode()==NetworkManager::NW_CLIENT) - { - Widget *w=widget_manager->addTextButtonWgt( WTOK_CONTINUE, 60, 7, _("OK") ); - w->setPosition(WGT_DIR_CENTER, 0, NULL, WGT_DIR_UNDER_WIDGET, 0.1f, bottom_of_list); - } - else - { - // If a new feature was unlocked, only offer 'continue' otherwise add the - // full menu choices. The new feature menu returns to this menu, and will - // then display the whole menu. - if(unlock_manager->getUnlockedFeatures().size()>0) - { - Widget *w=widget_manager->addTextButtonWgt( WTOK_CONTINUE, 60, 7, _("Continue") ); - w->setPosition(WGT_DIR_CENTER, 0, NULL, WGT_DIR_UNDER_WIDGET, 0.1f, bottom_of_list); - } else - { - Widget *w; - if(race_manager->getMajorMode()==RaceManager::MAJOR_MODE_GRAND_PRIX) - { - w=widget_manager->addTextButtonWgt( WTOK_CONTINUE, 60, 7, _("Continue Grand Prix")); - } - else - { - w=widget_manager->addTextButtonWgt( WTOK_CONTINUE, 60, 7, _("Back to the main menu")); - } - w->setPosition(WGT_DIR_CENTER, 0.0, NULL, WGT_DIR_UNDER_WIDGET, 0.1f, bottom_of_list); - Widget *w_prev = w; - w=widget_manager->addTextButtonWgt( WTOK_RESTART_RACE, 60, 7, _("Race in this track again")); - w->setPosition(WGT_DIR_CENTER, 0.0, NULL, WGT_DIR_UNDER_WIDGET, 0, w_prev); - w_prev = w; - if(race_manager->getMajorMode()==RaceManager::MAJOR_MODE_SINGLE) - { - w=widget_manager->addTextButtonWgt( WTOK_SETUP_NEW_RACE, 60, 7, _("Setup New Race")); - w->setPosition(WGT_DIR_CENTER, 0, NULL, WGT_DIR_UNDER_WIDGET, 0, w_prev); - } - } // if !unlock_manager has something unlocked*/ - } // if not server - widget_manager->layout(WGT_AREA_ALL); - -} // RaceResultsGUI - -// ---------------------------------------------------------------------------- - -Widget *RaceResultsGUI::displayRaceResults() -{ - Widget *w_prev=widget_manager->addTextWgt( WTOK_RESULTS, 5, 7, _("Race results") ); - widget_manager->hideWgtRect(WTOK_RESULTS); - w_prev->setPosition(WGT_DIR_FROM_LEFT, 0.01f, NULL, WGT_DIR_FROM_TOP, 0.01f, NULL); - - const unsigned int MAX_STR_LEN = 60; - const unsigned int NUM_KARTS = race_manager->getNumKarts(); - - int* order = new int [NUM_KARTS]; - RaceManager::getWorld()->raceResultOrder( order ); - - unsigned int max_name_len = 1; - - for(unsigned int i=0; i < NUM_KARTS; i++) - { - Kart *k = RaceManager::getKart(i); // Display even for eliminated karts! - const std::string& s = k->getName(); - unsigned int l = (unsigned int)s.size(); - if(l>max_name_len) max_name_len = l; - } // for i - - // save bottom of result list for later - Widget *bottom_of_list=displayKartList(w_prev, order, 0.01f); - - delete[] order; - - const HighscoreEntry *hs = RaceManager::getWorld()->getHighscores(); - if(hs != NULL) - { - w_prev=widget_manager->addTextWgt( WTOK_HIGHSCORES, 5, 7, _("Highscores") ); - widget_manager->hideWgtRect(WTOK_HIGHSCORES); - w_prev->setPosition(WGT_DIR_FROM_RIGHT, 0.01f, NULL, WGT_DIR_FROM_TOP, 0.01f, NULL); - - unsigned int num_scores = hs->getNumberEntries(); - char *highscores = new char[num_scores * MAX_STR_LEN]; - - for(unsigned int i=0; igetEntry(i, kart_name, name, &T); - const int MINS = (int) floor ( T / 60.0 ) ; - const int SECS = (int) floor ( T - (float) ( 60 * MINS ) ) ; - const int TENTHS = (int) floor ( 10.0f * (T - (float)(SECS + 60*MINS))); - sprintf((char*)( highscores + MAX_STR_LEN * i ), - "%s: %3d:%02d.%01d", name.c_str(), MINS, SECS, TENTHS); - - Widget *w=widget_manager->addTextWgt(WTOK_FIRST_HIGHSCORE + i, 5, 7, - (char*)( highscores+MAX_STR_LEN*i ) ); - w->setPosition(WGT_DIR_FROM_RIGHT, 0.05f, NULL, WGT_DIR_UNDER_WIDGET, 0, w_prev); - w_prev=w; - } // next score - - widget_manager->sameWidth(WTOK_HIGHSCORES, WTOK_FIRST_HIGHSCORE+num_scores-1); - - bottom_of_list = (num_scores > NUM_KARTS) ? w_prev : bottom_of_list; - } // end if hs != NULL - - return bottom_of_list; -} // displayRaceResults - -//----------------------------------------------------------------------------- -Widget *RaceResultsGUI::displayKartList(Widget *w_prev, int *order, float horizontal) -{ - const bool display_time = RaceManager::getWorld()->getClockMode() == CHRONO; - const unsigned int NUM_KARTS = race_manager->getNumKarts(); - - const int MAX_STR_LEN=60; - char *score = new char[NUM_KARTS * MAX_STR_LEN]; - int kart_id = 0; // 'i' below is not reliable because some karts (e.g. leader) will be skipped - for(unsigned int i = 0; i < NUM_KARTS; ++i) - { - if(order[i] == -1) continue; - - const Kart *current_kart = RaceManager::getKart(order[i]); - const std::string& kart_name = current_kart->getName(); - char sTime[20];sTime[0]=0; - const float T = current_kart->getFinishTime(); - - if(display_time) - TimeToString(T, sTime); - - //This shows position + driver name + time + points earned + total points - if(race_manager->getMajorMode()==RaceManager::MAJOR_MODE_GRAND_PRIX) - { - const int prev_score = race_manager->getKartPrevScore(order[i]); - const int new_score = race_manager->getKartScore(order[i]); - - sprintf((char*)(score + MAX_STR_LEN * i), "#%d. %s (%d + %d = %d)", - current_kart->getPosition(), kart_name.c_str(),// sTime, - prev_score, (new_score - prev_score), new_score); - } - else - { - sprintf((char*)(score + MAX_STR_LEN * i), "%d. %s %s", - current_kart->getPosition(), kart_name.c_str(), sTime); - } - - Widget *image=widget_manager->addImgButtonWgt(WTOK_FIRST_IMAGE + kart_id, 5, 7, - current_kart->getKartProperties()->getIconFile() ); - widget_manager->deactivateWgt(WTOK_FIRST_IMAGE+kart_id); - - image->setPosition(WGT_DIR_FROM_LEFT, horizontal, NULL, - WGT_DIR_UNDER_WIDGET, 0.0f, w_prev); - Widget *w=widget_manager->addTextWgt(WTOK_FIRST_RESULT + kart_id, 6, 7, - (char*)(score + MAX_STR_LEN * i) ); - w->setPosition(WGT_DIR_RIGHT_WIDGET, 0.0f, image, - WGT_DIR_UNDER_WIDGET, 0.0f, w_prev); - w_prev=w; - - kart_id++; - } - widget_manager->sameWidth(WTOK_FIRST_RESULT, WTOK_FIRST_RESULT+kart_id-1); - return w_prev; -} // displayKartList - -//----------------------------------------------------------------------------- -RaceResultsGUI::~RaceResultsGUI() -{ - widget_manager->reset(); -} // ~RaceResultsGUI - -//----------------------------------------------------------------------------- -/** If an item is selected, store the selection to be handled in the next - * update call. This is necessary for network support so that the right - * action is executed once clients and server are all synchronised. - */ -void RaceResultsGUI::select() -{ - // Push the unlocked-feature menu in for now - if(unlock_manager->getUnlockedFeatures().size()>0) - { - // Push the new feature menu on the stack, from where - // control will be returned to this menu. - menu_manager->pushMenu(MENUID_UNLOCKED_FEATURE); - return; - } - // The selected token is saved here, which triggers a change of the text - // in update(). - m_selected_widget = (WidgetTokens)widget_manager->getSelectedWgt(); - - // Clients send the ack to the server - if(network_manager->getMode()==NetworkManager::NW_CLIENT) - network_manager->sendRaceResultAck(); - -} // select - -//----------------------------------------------------------------------------- -void RaceResultsGUI::handle(GameAction ga, int value) -{ - // Only accept 'esc' when it's the end of a race, otherwise silently - // discard attempts to close the menu with esc. - if (ga == GA_LEAVE) - { - // Don't accept it when a GP is done, or a new feature is unlocked - if(widget_manager && - race_manager->getMajorMode()!=RaceManager::MAJOR_MODE_GRAND_PRIX && - unlock_manager->getUnlockedFeatures().size()==0) - { - RaceManager::getWorld()->unpause(); - widget_manager->setWgtText(WTOK_CONTINUE, _("Loading race...")); - race_manager->next(); - } - return; - } - BaseGUI::handle(ga, value); -} // handle - -//----------------------------------------------------------------------------- -/** Sets the selected token. This is used on the clients to allow the - * NetworkManager to set the widget selected on the server. The clients will - * then be able to select the correct next menu. - * \param token Token to set as being selected. - */ -void RaceResultsGUI::setSelectedWidget(int token) -{ - m_selected_widget = (WidgetTokens)token; -} // setSelectedToken - -//----------------------------------------------------------------------------- -/** This is used on the client and server to display a message while waiting - * in a barrier for clients and server to ack the display. - */ -void RaceResultsGUI::update(float dt) -{ - BaseGUI::update(dt); - // If an item is selected (for the first time), change the text - // so that the user has feedback about his selection. - if(m_selected_widget!=WTOK_NONE && m_first_time) - { - m_first_time = false; - // User feedback on first selection: display message, and on the - // server remove unnecessary widgets. - widget_manager->setWgtText(WTOK_CONTINUE, _("Synchronising.")); - if(network_manager->getMode()==NetworkManager::NW_SERVER) - { - widget_manager->hideWgt(WTOK_RESTART_RACE); - widget_manager->hideWgt(WTOK_SETUP_NEW_RACE); - } - } // m_selected_token defined and not first time - - // Wait till the barrier is finished. On the server this is the case when - // the state ie MAIN_MENU, on the client when it is wait_for_available_characters. - if(network_manager->getMode() !=NetworkManager::NW_NONE && - network_manager->getState()!=NetworkManager::NS_MAIN_MENU && - network_manager->getState()!=NetworkManager::NS_RACE_RESULT_BARRIER_OVER ) - return; - - // Send selected menu to all clients - if(m_selected_widget!=WTOK_NONE && - network_manager->getMode()==NetworkManager::NW_SERVER) - { - network_manager->sendRaceResultAck(m_selected_widget); - } - - switch(m_selected_widget) - { - case WTOK_CONTINUE: - // Gets called when: - // 1) something was unlocked - // 2) a Grand Prix is run - // 3) "back to the main menu" otherwise - RaceManager::getWorld()->unpause(); - widget_manager->setWgtText(WTOK_CONTINUE, _("Loading race...")); - race_manager->next(); - break; - case WTOK_RESTART_RACE: - network_manager->setState(NetworkManager::NS_MAIN_MENU); - RaceManager::getWorld()->unpause(); - menu_manager->popMenu(); - race_manager->rerunRace(); - break; - case WTOK_SETUP_NEW_RACE: - RaceManager::getWorld()->unpause(); - race_manager->exit_race(); - if(network_manager->getMode()==NetworkManager::NW_CLIENT) - { - network_manager->setState(NetworkManager::NS_WAIT_FOR_AVAILABLE_CHARACTERS); - menu_manager->pushMenu(MENUID_CHARSEL_P1); - } - else - { - menu_manager->pushMenu(MENUID_GAMEMODE); - } - break; - - default: - break; - } - -} // update -/* EOF */ diff --git a/src/gui/race_results_gui.hpp b/src/gui/race_results_gui.hpp deleted file mode 100644 index 241658a01..000000000 --- a/src/gui/race_results_gui.hpp +++ /dev/null @@ -1,65 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Eduardo Hernandez Munoz -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef HEADER_RACERESULTSGUI_H -#define HEADER_RACERESULTSGUI_H - -#include - -#include "base_gui.hpp" -#include "widget.hpp" - -/** GUI that shows the RaceResults, times and such */ -class RaceResultsGUI : public BaseGUI -{ -private: - /** Widgets. WTOK_NONE is used for detecting in update when - * a selection was made (see m_selected_token). */ - enum WidgetTokens - { - WTOK_NONE, - WTOK_CONTINUE, - WTOK_RESTART_RACE, - WTOK_SETUP_NEW_RACE, - WTOK_RESULTS, - WTOK_FIRST_RESULT, - WTOK_FIRST_IMAGE = 1000, - WTOK_HIGHSCORES = 2000, - WTOK_FIRST_HIGHSCORE = 2001, - }; -private: - std::vector m_order; - bool m_first_time; - /** The widget selected by the user, so that the right action can be done - * once clients and server are synchronised. */ - WidgetTokens m_selected_widget; - Widget *displayRaceResults(); - Widget *displayKartList(Widget *w_prev, int *order, float horizontal); -public: - RaceResultsGUI(); - ~RaceResultsGUI(); - void handle(GameAction, int); - void select(); - virtual void update(float dt); - void setSelectedWidget(int); -}; - -#endif - -/* EOF */ diff --git a/src/gui/screen.cpp b/src/gui/screen.cpp new file mode 100644 index 000000000..89f35c8f2 --- /dev/null +++ b/src/gui/screen.cpp @@ -0,0 +1,460 @@ +#include "gui/screen.hpp" +#include "gui/engine.hpp" +#include "gui/widget.hpp" +#include +#include +#include +#include + +using namespace irr; + +using namespace core; +using namespace scene; +using namespace video; +using namespace io; +using namespace gui; +using namespace GUIEngine; + +Screen::Screen(const char* file) +{ + m_mouse_x = 0; + m_mouse_y = 0; + this->m_filename = file; + m_loaded = false; + loadFromFile(); +} +// ----------------------------------------------------------------------------- +void Screen::loadFromFile() +{ + IrrXMLReader* xml = irr::io::createIrrXMLReader( m_filename.c_str() ); + parseScreenFileDiv(xml, m_widgets); + m_loaded = true; + calculateLayout(); +} +// ----------------------------------------------------------------------------- +void Screen::addWidgets() +{ + if(!m_loaded) loadFromFile(); + + addWidgetsRecursively( m_widgets ); + + // And tell the device to use our custom event receiver. + GUIEngine::getDevice()->setEventReceiver(this); + + // select the first widget + Widget* w = getFirstWidget(); + if(w != NULL) GUIEngine::getGUIEnv()->setFocus( w->m_element ); +} +// ----------------------------------------------------------------------------- +void Screen::calculateLayout() +{ + // build layout + calculateLayout( m_widgets ); +} +// ----------------------------------------------------------------------------- +void Screen::calculateLayout(ptr_vector& widgets, Widget* parent) +{ + const unsigned short widgets_amount = widgets.size(); + + // ----- read x/y/size parameters + for(unsigned short n=0; nm_properties[PROP_LAYOUT]; + if(layout_name.size() < 1) break; + + bool horizontal = false; + + if (!strcmp("horizontal-row", layout_name.c_str())) + horizontal = true; + else if(!strcmp("vertical-row", layout_name.c_str())) + horizontal = false; + else break; + + const int w = parent->w, h = parent->h; + + // find space left after placing all absolutely-sized widgets in a row + // (the space left will be divided between remaining widgets later) + int left_space = (horizontal ? w : h); + unsigned short total_proportion = 0; + for(int n=0; nx, y = parent->y; + for(int n=0; n> proportion)) + std::cerr << "/!\\ Warning /!\\ : proportion '" << prop.c_str() << "' is not a number in widget " << widgets[n].m_properties[PROP_ID].c_str() << std::endl; + + const float fraction = (float)proportion/(float)total_proportion; + + if(horizontal) + { + widgets[n].x = x; + widgets[n].y = y; + + widgets[n].w = left_space*fraction; + x += widgets[n].w; + } + else + { + widgets[n].h = left_space*fraction; + + std::string align = widgets[n].m_properties[ PROP_ALIGN ]; + if(align.size() < 1 || align == "left") widgets[n].x = x; + else if(align == "center") widgets[n].x = x + w/2 - widgets[n].w/2; + else if(align == "right") widgets[n].x = x + w - widgets[n].w; + else std::cerr << "/!\\ Warning /!\\ : alignment '" << align.c_str() << "' is unknown in widget " << widgets[n].m_properties[PROP_ID].c_str() << std::endl; + widgets[n].y = y; + + y += widgets[n].h; + } + } + else + { + // absolute size + + if(horizontal) + { + widgets[n].x = x; + widgets[n].y = y; + + //widgets[n].w = abs_var; + x += widgets[n].w; + } + else + { + //widgets[n].h = abs_var; + + std::string align = widgets[n].m_properties[ PROP_ALIGN ]; + if(align.size() < 1 || align == "left") widgets[n].x = x; + else if(align == "center") widgets[n].x = x + w/2 - widgets[n].w/2; + else if(align == "right") widgets[n].x = x + w - widgets[n].w; + else std::cerr << "/!\\ Warning /!\\ : alignment '" << align.c_str() << "' is unknown in widget " << widgets[n].m_properties[PROP_ID].c_str() << std::endl; + widgets[n].y = y; + + y += widgets[n].h; + } + } // end if property or absolute size + + } // next widget + + } while(false); + + // ----- also deal with containers' children + for(int n=0; n& widgets, Widget* parent) +{ + const unsigned short widgets_amount = widgets.size(); + + // ------- add widgets + for(int n=0; n* within_vector) +{ + if(within_vector == NULL) within_vector = &m_widgets; + + const unsigned short widgets_amount = within_vector->size(); + + for(int n=0; n* within_vector) +{ + if(within_vector == NULL) within_vector = &m_widgets; + const unsigned short widgets_amount = within_vector->size(); + + for(int n=0; ngetID() == id) return &widget; + + if(widget.m_children.size() > 0) + { + Widget* el = getWidget(id, &(widget.m_children)); + if(el != NULL) return el; + } + } // next + + return NULL; +} +// ----------------------------------------------------------------------------- +bool Screen::OnEvent(const SEvent& event) +{ + assert(transmitEvent != NULL); + //if (event.EventType != EET_GUI_EVENT) return false; + + + if(event.EventType == EET_KEY_INPUT_EVENT && event.KeyInput.PressedDown) + { + const int key = event.KeyInput.Key; + + switch(key) + { + case KEY_SPACE : + break; + case KEY_LEFT: + { + IGUIElement *el = GUIEngine::getGUIEnv()->getFocus(); + if(el == NULL) break; + Widget* w = getWidget( el->getID() ); + if(w == NULL) break; + + Widget* widget_to_call = w; + while(widget_to_call->m_parent != NULL) widget_to_call = widget_to_call->m_parent; // Find topmost parent + + if(widget_to_call->leftPressed()) + transmitEvent(w, w->m_properties[PROP_ID]); + break; + } + + case KEY_RIGHT: + IGUIElement *el = GUIEngine::getGUIEnv()->getFocus(); + if(el == NULL) break; + Widget* w = getWidget( el->getID() ); + if(w == NULL) break; + + Widget* widget_to_call = w; + while(widget_to_call->m_parent != NULL) widget_to_call = widget_to_call->m_parent; // Find topmost parent + + if(widget_to_call->rightPressed()) + transmitEvent(widget_to_call, w->m_properties[PROP_ID]); + break; + + case KEY_UP: + { + IGUIElement *el, *first=NULL, *closest=NULL; + el = GUIEngine::getGUIEnv()->getFocus(); + if(el != NULL && el->getTabGroup() != NULL) + { + if( el->getTabGroup()->getNextElement(el->getTabOrder(), true, false, first, closest) ) + GUIEngine::getGUIEnv()->setFocus(closest); + } + else + { + // select the first widget + Widget* w = getFirstWidget(); + if(w != NULL) GUIEngine::getGUIEnv()->setFocus( w->m_element ); + } + return true; + } + + case KEY_DOWN: + { + IGUIElement *el, *first = NULL, *closest = NULL; + el = GUIEngine::getGUIEnv()->getFocus(); + + if(el != NULL && el->getTabGroup() != NULL && + el->getTabGroup()->getNextElement(el->getTabOrder(), false, false, first, closest)) + { + GUIEngine::getGUIEnv()->setFocus(closest); + } + else + { + // select the first widget + Widget* w = getFirstWidget(); + if(w != NULL) GUIEngine::getGUIEnv()->setFocus( w->m_element ); + } + return true; + } + } + + //std::cout << "key!" << std::endl; + } + else if(event.EventType == EET_MOUSE_INPUT_EVENT) + { + const int type = event.MouseInput.Event; + + if(type == EMIE_MOUSE_MOVED) + { + m_mouse_x = event.MouseInput.X; + m_mouse_y = event.MouseInput.Y; + //const int wheel = event.MouseInput.Wheel; + } + + //if(type == EMIE_LMOUSE_PRESSED_DOWN ) std::cout << "mouse button pressed!" << std::endl; + //if(type == EMIE_LMOUSE_LEFT_UP ) std::cout << "mouse button released!" << std::endl; + /* + EMIE_LMOUSE_PRESSED_DOWN Left mouse button was pressed down. + EMIE_RMOUSE_PRESSED_DOWN Right mouse button was pressed down. + EMIE_MMOUSE_PRESSED_DOWN Middle mouse button was pressed down. + EMIE_LMOUSE_LEFT_UP Left mouse button was left up. + EMIE_RMOUSE_LEFT_UP Right mouse button was left up. + EMIE_MMOUSE_LEFT_UP Middle mouse button was left up. + EMIE_MOUSE_MOVED The mouse cursor changed its position. + EMIE_MOUSE_WHEEL The mouse wheel was moved. Use Wheel value in event data to find out in what direction and how fast. + */ + } + else if(event.EventType == EET_GUI_EVENT) + { + s32 id = event.GUIEvent.Caller->getID(); + + switch(event.GUIEvent.EventType) + { + case EGET_BUTTON_CLICKED: + case EGET_SCROLL_BAR_CHANGED: + case EGET_CHECKBOX_CHANGED: + Widget* w = getWidget(id); + if(w == NULL) break; + + Widget* parent = w->m_parent; + if(w->m_parent != NULL) + { + while(parent->m_parent != NULL) parent = parent->m_parent; // Find topmost parent + + if(parent->transmitEvent(w, w->m_properties[PROP_ID])) + transmitEvent(parent, parent->m_properties[PROP_ID]); + } + else transmitEvent(w, w->m_properties[PROP_ID]); + break; + + case EGET_ELEMENT_HOVERED: + { + Widget* w = getWidget(id); + if(w == NULL) break; + + // select ribbons on hover + if(w->m_parent != NULL && w->m_parent->m_type == WTYPE_RIBBON) + { + RibbonWidget* ribbon = dynamic_cast(w->m_parent); + if(ribbon == NULL) break; + if(ribbon->mouseHovered(w)) + transmitEvent(ribbon, ribbon->m_properties[PROP_ID]); + if(ribbon->m_parent != NULL) ribbon->m_parent->mouseHovered(w); + getGUIEnv()->setFocus(ribbon->m_element); + } + else + { + // focus on hover for other widgets + getGUIEnv()->setFocus(w->m_element); + } + + break; + } + /* + case EGET_ELEMENT_LEFT: + { + Widget* el = getWidget(id); + if(el == NULL) break; + + break; + } + */ + case EGET_ELEMENT_FOCUSED: + { + Widget* el = getWidget(id); + if(el == NULL) break; + + el->focused(); + + break; + } + default: + break; + } // end switch + } + + /* + EGET_BUTTON_CLICKED, EGET_SCROLL_BAR_CHANGED, EGET_CHECKBOX_CHANGED, EGET_TAB_CHANGED, + EGET_MENU_ITEM_SELECTED, EGET_COMBO_BOX_CHANGED, EGET_SPINBOX_CHANGED, EGET_EDITBOX_ENTER, + + EGET_LISTBOX_CHANGED, EGET_LISTBOX_SELECTED_AGAIN, + EGET_FILE_SELECTED, EGET_FILE_CHOOSE_DIALOG_CANCELLED, + EGET_MESSAGEBOX_YES, EGET_MESSAGEBOX_NO, EGET_MESSAGEBOX_OK, EGET_MESSAGEBOX_CANCEL, + EGET_TABLE_CHANGED, EGET_TABLE_HEADER_CHANGED, EGET_TABLE_SELECTED_AGAIN + EGET_ELEMENT_FOCUS_LOST, EGET_ELEMENT_FOCUSED, EGET_ELEMENT_HOVERED, EGET_ELEMENT_LEFT, + EGET_ELEMENT_CLOSED, + */ + return false; +} +// ----------------------------------------------------------------------------- +Widget* Screen::getFirstWidget(ptr_vector* within_vector) +{ + if(within_vector == NULL) within_vector = &m_widgets; + + for(int i = 0; i < within_vector->size(); i++) + { + // if container, also checks children + if(within_vector->get(i)->m_children.size() > 0 && + within_vector->get(i)->m_type != WTYPE_RIBBON && + within_vector->get(i)->m_type != WTYPE_SPINNER) + { + Widget* w = getFirstWidget(&within_vector->get(i)->m_children); + if(w != NULL) return w; + } + + if(within_vector->get(i)->m_element == NULL || within_vector->get(i)->m_element->getTabOrder() == -1) continue; + + return within_vector->get(i); + } + return NULL; +} \ No newline at end of file diff --git a/src/gui/screen.hpp b/src/gui/screen.hpp new file mode 100644 index 000000000..03f97dbcc --- /dev/null +++ b/src/gui/screen.hpp @@ -0,0 +1,54 @@ +#ifndef HEADER_SCREEN_HPP +#define HEADER_SCREEN_HPP + +#include +#include +#include "ptr_vector.hpp" + +#include + +using namespace irr; +using namespace core; +using namespace scene; +using namespace video; +using namespace io; +using namespace gui; + + +namespace GUIEngine +{ + class Widget; + + void parseScreenFileDiv(irr::io::IrrXMLReader* xml, ptr_vector& append_to); + + class Screen : public IEventReceiver + { + bool m_loaded; + std::string m_filename; + ptr_vector m_widgets; + void loadFromFile(); + + static void addWidgetsRecursively(ptr_vector& widgets, Widget* parent=NULL); + void calculateLayout(ptr_vector& widgets, Widget* parent=NULL); + public: + // current mouse position, read-only... + int m_mouse_x, m_mouse_y; + + Screen(const char* filename); + bool operator ==(const char* filename) const { return m_filename == filename; } + + Widget* getWidget(const char* name); + Widget* getWidget(const char* name, ptr_vector* within_vector); + Widget* getWidget(const int id, ptr_vector* within_vector=NULL); + + Widget* getFirstWidget(ptr_vector* within_vector=NULL); + + void addWidgets(); + void calculateLayout(); + + virtual bool OnEvent(const SEvent& event); + }; + +} + +#endif \ No newline at end of file diff --git a/src/gui/screen_loader.cpp b/src/gui/screen_loader.cpp new file mode 100644 index 000000000..a0a6e9720 --- /dev/null +++ b/src/gui/screen_loader.cpp @@ -0,0 +1,162 @@ +#include "gui/screen.hpp" +#include "gui/engine.hpp" +#include "gui/widget.hpp" +#include +#include +#include +#include + +using namespace irr; + +using namespace core; +using namespace scene; +using namespace video; +using namespace io; +using namespace gui; +using namespace GUIEngine; + +namespace GUIEngine +{ + +void parseScreenFileDiv(irr::io::IrrXMLReader* xml, ptr_vector& append_to) +{ + // parse XML file + + while(xml && xml->read()) + { + + switch(xml->getNodeType()) + { + case irr::io::EXN_TEXT: + break; + case irr::io::EXN_ELEMENT: + { + WidgetType type; + + if (!strcmp("div", xml->getNodeName())) + { + type = WTYPE_DIV; + append_to.push_back(new Widget()); + } + else if (!strcmp("ribbon", xml->getNodeName())) + { + type = WTYPE_RIBBON; + append_to.push_back(new RibbonWidget()); + } + else if (!strcmp("buttonbar", xml->getNodeName())) + { + type = WTYPE_RIBBON; + append_to.push_back(new RibbonWidget(RIBBON_TOOLBAR)); + } + else if (!strcmp("tabs", xml->getNodeName())) + { + type = WTYPE_RIBBON; + append_to.push_back(new RibbonWidget(RIBBON_TABS)); + } + else if (!strcmp("spinner", xml->getNodeName())) + { + type = WTYPE_SPINNER; + append_to.push_back(new SpinnerWidget()); + } + else if (!strcmp("button", xml->getNodeName())) + { + type = WTYPE_BUTTON; + append_to.push_back(new ButtonWidget()); + } + else if (!strcmp("gauge", xml->getNodeName())) + { + type = WTYPE_GAUGE; + append_to.push_back(new GaugeWidget()); + } + else if (!strcmp("icon-button", xml->getNodeName())) + { + type = WTYPE_ICON_BUTTON; + append_to.push_back(new IconButtonWidget()); + } + else if (!strcmp("icon", xml->getNodeName())) + { + type = WTYPE_ICON_BUTTON; + append_to.push_back(new IconButtonWidget(false)); + } + else if (!strcmp("checkbox", xml->getNodeName())) + { + type = WTYPE_CHECKBOX; + append_to.push_back(new CheckBoxWidget()); + } + else if (!strcmp("label", xml->getNodeName())) + { + type = WTYPE_LABEL; + append_to.push_back(new LabelWidget()); + } + else if (!strcmp("model", xml->getNodeName())) + { + type = WTYPE_MODEL; + append_to.push_back(new Widget()); // TODO + } + else if (!strcmp("spacer", xml->getNodeName())) + { + type = WTYPE_NONE; + append_to.push_back(new Widget()); + } + else if (!strcmp("ribbon_grid", xml->getNodeName())) + { + type = WTYPE_RIBBON_GRID; + append_to.push_back(new RibbonGridWidget()); + } + else + { + std::cerr << "/!\\ Warning /!\\ : unknown tag found in STK GUI file : '" << xml->getNodeName() << "'" << std::endl; + continue; + } + + Widget& widget = append_to[append_to.size()-1]; + widget.m_type = type; + +#define READ_PROPERTY( prop_name, prop_flag ) const char* prop_name = xml->getAttributeValue( #prop_name ); \ +if(prop_name != NULL) widget.m_properties[prop_flag] = prop_name; else widget.m_properties[prop_flag] = "" + + READ_PROPERTY(id, PROP_ID); + READ_PROPERTY(proportion, PROP_PROPORTION); + READ_PROPERTY(width, PROP_WIDTH); + READ_PROPERTY(height, PROP_HEIGHT); + READ_PROPERTY(child_width, PROP_CHILD_WIDTH); + READ_PROPERTY(child_height, PROP_CHILD_HEIGHT); + READ_PROPERTY(word_wrap, PROP_WORD_WRAP); + READ_PROPERTY(grow_with_text, PROP_GROW_WITH_TEXT); + READ_PROPERTY(x, PROP_X); + READ_PROPERTY(y, PROP_Y); + READ_PROPERTY(layout, PROP_LAYOUT); + READ_PROPERTY(align, PROP_ALIGN); + READ_PROPERTY(text, PROP_TEXT); + READ_PROPERTY(icon, PROP_ICON); + READ_PROPERTY(text_align, PROP_TEXT_ALIGN); + READ_PROPERTY(min_value, PROP_MIN_VALUE); + READ_PROPERTY(max_value, PROP_MAX_VALUE); +#undef READ_PROPERTY + + // new div, continue parsing with this new div as new parent + if( widget.m_type == WTYPE_DIV || widget.m_type == WTYPE_RIBBON) + parseScreenFileDiv( xml, append_to[append_to.size()-1].m_children ); + }// end case EXN_ELEMENT + + break; + case irr::io::EXN_ELEMENT_END: + { + // we're done parsing this 'div', return one step back in the recursive call + if (!strcmp("div", xml->getNodeName())) + return; + + // we're done parsing this 'ribbon', return one step back in the recursive call + if (!strcmp("ribbon", xml->getNodeName()) || + !strcmp("buttonbar", xml->getNodeName()) || + !strcmp("tabs", xml->getNodeName())) + return; + } + break; + + default: break; + }//end switch + } // end while +} // end function + +} // end namespace diff --git a/src/gui/skin.cpp b/src/gui/skin.cpp new file mode 100644 index 000000000..4365423f8 --- /dev/null +++ b/src/gui/skin.cpp @@ -0,0 +1,270 @@ +#include "gui/skin.hpp" +#include "gui/engine.hpp" +#include "gui/screen.hpp" +#include "gui/widget.hpp" +#include +#include + +using namespace GUIEngine; + +Skin::Skin(IGUISkin* fallback_skin) +{ + m_fallback_skin = fallback_skin; + m_fallback_skin->grab(); + assert(fallback_skin != NULL); +} + +Skin::~Skin() +{ + m_fallback_skin->drop(); +} + +/* + driver->draw2DImage(texture, + core::rect(img_x1, img_y1, img_x2, img_y2), + core::rect(0,0,texture_size.Width, texture_size.Height) ); + */ +void Skin::draw2DRectangle (IGUIElement *element, const video::SColor &color, const core::rect< s32 > &pos, const core::rect< s32 > *clip) +{ + + // scrollbar backgound + + //printf("draw rectangle\n"); + GUIEngine::getDriver()->draw2DRectangle( SColor(255, 0, 150, 150), pos ); +} + +void Skin::draw3DButtonPanePressed (IGUIElement *element, const core::rect< s32 > &rect, const core::rect< s32 > *clip) +{ + const bool focused = GUIEngine::getGUIEnv()->hasFocus(element); + + if(focused) + GUIEngine::getDriver()->draw2DRectangle( SColor(255, 100, 0, 0), rect ); + else + GUIEngine::getDriver()->draw2DRectangle( SColor(255, 0, 100, 0), rect ); +} + +void Skin::draw3DButtonPaneStandard (IGUIElement *element, const core::rect< s32 > &rect, const core::rect< s32 > *clip) +{ + //printf("draw 3D button pane\n"); + bool focused = GUIEngine::getGUIEnv()->hasFocus(element); + + bool draw_border = true; + bool mark_selected = false; + + // buttons are used for other uses than plain clickable buttons because irrLicht + // does not have widgets for everything we need. so at render time, we just check + // which type this button represents and set render options accordingly + if(element->getType() == EGUIET_BUTTON) + { + const int id = element->getID(); + if(id != -1) + { + Widget* widget = GUIEngine::getCurrentScreen()->getWidget(id); + + if(widget != NULL) + { + // don't draw border around bitmaps + if(widget->m_type == WTYPE_ICON_BUTTON && !focused) draw_border = false; + + // draw border around ribbon only if focused. + if(widget->m_type == WTYPE_RIBBON && !focused) draw_border = false; + + // check if one of its children has focus (will happen when directly clicking on them) + if(widget->m_type == WTYPE_RIBBON) + { + const int amount = widget->m_children.size(); + for(int n=0; nhasFocus(widget->m_children[n].m_element)) + { + draw_border = true; + focused = true; + break; + } + } + } + + // for ribbon children + if(widget->isSelected()) mark_selected = true; + if(widget->m_parent != NULL && widget->m_parent->m_type == WTYPE_RIBBON && + ((RibbonWidget*)widget->m_parent)->getRibbonType() == RIBBON_TOOLBAR && + !GUIEngine::getGUIEnv()->hasFocus(widget->m_parent->m_element)) mark_selected = false; + } + } + } + + if(!draw_border && !mark_selected) return; + + if(mark_selected) + { + const core::rect< s32 > rect2 = core::rect< s32 >(rect.UpperLeftCorner.X - 5, rect.UpperLeftCorner.Y - 5, + rect.UpperLeftCorner.X + rect.getWidth() + 5, + rect.UpperLeftCorner.Y + rect.getHeight() + 5); + GUIEngine::getDriver()->draw2DRectangle( SColor(2555, 0, 175, 255), rect2 ); + } + else if(focused) + GUIEngine::getDriver()->draw2DRectangle( SColor(255, 150, 0, 0), rect ); + else + GUIEngine::getDriver()->draw2DRectangle( SColor(255, 0, 150, 0), rect ); +} + +void Skin::draw3DMenuPane (IGUIElement *element, const core::rect< s32 > &rect, const core::rect< s32 > *clip) +{ + //printf("draw menu pane\n"); +} + +void Skin::draw3DSunkenPane (IGUIElement *element, video::SColor bgcolor, bool flat, bool fillBackGround, const core::rect< s32 > &rect, const core::rect< s32 > *clip) +{ + // e.g. the checkbox square + //printf("draw sunken pane\n"); + const bool focused = GUIEngine::getGUIEnv()->getFocus() == element; + + if(focused) + GUIEngine::getDriver()->draw2DRectangle( SColor(255, 150, 0, 0), rect ); + else + GUIEngine::getDriver()->draw2DRectangle( SColor(255, 0, 150, 0), rect ); +} + +void Skin::draw3DTabBody (IGUIElement *element, bool border, bool background, const core::rect< s32 > &rect, const core::rect< s32 > *clip, s32 tabHeight, gui::EGUI_ALIGNMENT alignment) +{ + //printf("draw tab body\n"); +} + +void Skin::draw3DTabButton (IGUIElement *element, bool active, const core::rect< s32 > &rect, const core::rect< s32 > *clip, gui::EGUI_ALIGNMENT alignment) +{ + //printf("draw tab button\n"); +} + +void Skin::draw3DToolBar (IGUIElement *element, const core::rect< s32 > &rect, const core::rect< s32 > *clip) +{ + //printf("draw toolbar\n"); +} + +core::rect< s32 > Skin::draw3DWindowBackground (IGUIElement *element, bool drawTitleBar, video::SColor titleBarColor, const core::rect< s32 > &rect, const core::rect< s32 > *clip) +{ + //printf("draw 3d window bg\n"); + return rect; +} + +void Skin::drawIcon (IGUIElement *element, EGUI_DEFAULT_ICON icon, const core::position2di position, u32 starttime, u32 currenttime, bool loop, const core::rect< s32 > *clip) +{ + //printf("draw icon\n"); + m_fallback_skin->drawIcon(element, icon, position, starttime, currenttime, loop, clip); +} + +video::SColor Skin::getColor (EGUI_DEFAULT_COLOR color) const +{ + //printf("getting color\n"); + /* + EGDC_3D_DARK_SHADOW Dark shadow for three-dimensional display elements. + EGDC_3D_SHADOW Shadow color for three-dimensional display elements (for edges facing away from the light source). + EGDC_3D_FACE Face color for three-dimensional display elements and for dialog box backgrounds. + EGDC_3D_HIGH_LIGHT Highlight color for three-dimensional display elements (for edges facing the light source.). + EGDC_3D_LIGHT Light color for three-dimensional display elements (for edges facing the light source.). + EGDC_ACTIVE_BORDER Active window border. + EGDC_ACTIVE_CAPTION Active window title bar text. + EGDC_APP_WORKSPACE Background color of multiple document interface (MDI) applications. + EGDC_BUTTON_TEXT Text on a button. + EGDC_GRAY_TEXT Grayed (disabled) text. + EGDC_HIGH_LIGHT Item(s) selected in a control. + EGDC_HIGH_LIGHT_TEXT Text of item(s) selected in a control. + EGDC_INACTIVE_BORDER Inactive window border. + EGDC_INACTIVE_CAPTION Inactive window caption. + EGDC_TOOLTIP Tool tip text color. + EGDC_TOOLTIP_BACKGROUND Tool tip background color. + EGDC_SCROLLBAR Scrollbar gray area. + EGDC_WINDOW Window background. + EGDC_WINDOW_SYMBOL Window symbols like on close buttons, scroll bars and check boxes. + EGDC_ICON Icons in a list or tree. + EGDC_ICON_HIGH_LIGHT Selected icons in a list or tree. + */ + + switch(color) + { + case EGDC_BUTTON_TEXT: + return SColor(255, 0, 0, 0); + break; + + case EGDC_GRAY_TEXT: + return SColor(255, 80, 80, 80); + break; + + case EGDC_HIGH_LIGHT: + case EGDC_ICON_HIGH_LIGHT: + case EGDC_HIGH_LIGHT_TEXT: + return SColor(255, 0, 150, 0); + + default: + return SColor(255, 255, 255, 255); + } + +} + +const wchar_t* Skin::getDefaultText (EGUI_DEFAULT_TEXT text) const +{ + //printf("getting default text\n"); + return L"SuperTuxKart"; +} + +IGUIFont* Skin::getFont (EGUI_DEFAULT_FONT which) const +{ + //printf("getting font\n"); + return GUIEngine::getFont(); +} + +u32 Skin::getIcon (EGUI_DEFAULT_ICON icon) const +{ + //printf("getting icon\n"); + return m_fallback_skin->getIcon(icon); +} + +s32 Skin::getSize (EGUI_DEFAULT_SIZE size) const +{ + //printf("getting size\n"); + return m_fallback_skin->getSize(size); +} + +IGUISpriteBank* Skin::getSpriteBank () const +{ + //printf("getting bank\n"); + return m_fallback_skin->getSpriteBank(); +} + +//EGUI_SKIN_TYPE getType () const + +void Skin::setColor (EGUI_DEFAULT_COLOR which, video::SColor newColor) +{ + m_fallback_skin->setColor(which, newColor); + //printf("setting color\n"); +} + +void Skin::setDefaultText (EGUI_DEFAULT_TEXT which, const wchar_t *newText) +{ + m_fallback_skin->setDefaultText(which, newText); + //printf("setting default text\n"); +} + +void Skin::setFont (IGUIFont *font, EGUI_DEFAULT_FONT which) +{ + m_fallback_skin->setFont(font, which); + //printf("setting font\n"); +} + +void Skin::setIcon (EGUI_DEFAULT_ICON icon, u32 index) +{ + m_fallback_skin->setIcon(icon, index); + //printf("setting icon\n"); +} + +void Skin::setSize (EGUI_DEFAULT_SIZE which, s32 size) +{ + m_fallback_skin->setSize(which, size); + //printf("setting size\n"); +} + +void Skin::setSpriteBank (IGUISpriteBank *bank) +{ + //printf("setting sprite bank\n"); + m_fallback_skin->setSpriteBank(bank); + //this->m_bank = bank; +} diff --git a/src/gui/skin.hpp b/src/gui/skin.hpp new file mode 100644 index 000000000..a108b652a --- /dev/null +++ b/src/gui/skin.hpp @@ -0,0 +1,70 @@ +#ifndef HEADER_SKIN_HPP +#define HEADER_SKIN_HPP + +#include +using namespace irr; +using namespace core; +using namespace scene; +using namespace video; +using namespace io; +using namespace gui; + +namespace GUIEngine +{ + +class Skin : public IGUISkin +{ + IGUISkin* m_fallback_skin; +public: + Skin(IGUISkin* fallback_skin); + ~Skin(); + + virtual void draw2DRectangle (IGUIElement *element, const video::SColor &color, const core::rect< s32 > &pos, const core::rect< s32 > *clip); + + virtual void draw3DButtonPanePressed (IGUIElement *element, const core::rect< s32 > &rect, const core::rect< s32 > *clip); + + virtual void draw3DButtonPaneStandard (IGUIElement *element, const core::rect< s32 > &rect, const core::rect< s32 > *clip); + + virtual void draw3DMenuPane (IGUIElement *element, const core::rect< s32 > &rect, const core::rect< s32 > *clip); + + virtual void draw3DSunkenPane (IGUIElement *element, video::SColor bgcolor, bool flat, bool fillBackGround, const core::rect< s32 > &rect, const core::rect< s32 > *clip); + + virtual void draw3DTabBody (IGUIElement *element, bool border, bool background, const core::rect< s32 > &rect, const core::rect< s32 > *clip, s32 tabHeight=-1, gui::EGUI_ALIGNMENT alignment=EGUIA_UPPERLEFT); + + virtual void draw3DTabButton (IGUIElement *element, bool active, const core::rect< s32 > &rect, const core::rect< s32 > *clip, gui::EGUI_ALIGNMENT alignment=EGUIA_UPPERLEFT); + + virtual void draw3DToolBar (IGUIElement *element, const core::rect< s32 > &rect, const core::rect< s32 > *clip); + + virtual core::rect< s32 > draw3DWindowBackground (IGUIElement *element, bool drawTitleBar, video::SColor titleBarColor, const core::rect< s32 > &rect, const core::rect< s32 > *clip); + + virtual void drawIcon (IGUIElement *element, EGUI_DEFAULT_ICON icon, const core::position2di position, u32 starttime, u32 currenttime, bool loop=false, const core::rect< s32 > *clip=NULL); + + virtual video::SColor getColor (EGUI_DEFAULT_COLOR color) const; + + virtual const wchar_t * getDefaultText (EGUI_DEFAULT_TEXT text) const; + + virtual IGUIFont * getFont (EGUI_DEFAULT_FONT which=EGDF_DEFAULT) const ; + + virtual u32 getIcon (EGUI_DEFAULT_ICON icon) const ; + + virtual s32 getSize (EGUI_DEFAULT_SIZE size) const ; + + virtual IGUISpriteBank * getSpriteBank () const ; + + //virtual EGUI_SKIN_TYPE getType () const; + + virtual void setColor (EGUI_DEFAULT_COLOR which, video::SColor newColor); + + virtual void setDefaultText (EGUI_DEFAULT_TEXT which, const wchar_t *newText); + + virtual void setFont (IGUIFont *font, EGUI_DEFAULT_FONT which=EGDF_DEFAULT); + + virtual void setIcon (EGUI_DEFAULT_ICON icon, u32 index); + + virtual void setSize (EGUI_DEFAULT_SIZE which, s32 size); + + virtual void setSpriteBank (IGUISpriteBank *bank); + +}; +} +#endif \ No newline at end of file diff --git a/src/gui/start_race_feedback.cpp b/src/gui/start_race_feedback.cpp deleted file mode 100644 index 5740c2fd9..000000000 --- a/src/gui/start_race_feedback.cpp +++ /dev/null @@ -1,103 +0,0 @@ -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "start_race_feedback.hpp" - -#include "race_manager.hpp" -#include "gui/widget_manager.hpp" -#include "network/network_manager.hpp" -#include "utils/translation.hpp" - -enum WidgetTokens -{ - WTOK_MSG -}; - -/** Constructor for feedback screen. */ -StartRaceFeedback::StartRaceFeedback() -{ - m_is_first_frame = true; - //Add some feedback so people know they are going to start the race - widget_manager->reset(); - widget_manager->addTextWgt( WTOK_MSG, 60, 7, "" ); - - widget_manager->setWgtText(WTOK_MSG, _("Synchronising network...")); - - if(network_manager->getMode()==NetworkManager::NW_NONE) - { - // This copies the local player information to the global - // player information in the race manager. - network_manager->setupPlayerKartInfo(); - } - - widget_manager->layout(WGT_AREA_ALL); -} // StartRaceFeedback - -//----------------------------------------------------------------------------- -/** Destructor for feedback screen. - */ -StartRaceFeedback::~StartRaceFeedback() -{ - widget_manager->reset(); -} // ~StartRaceFeedback - -//----------------------------------------------------------------------------- -/** Updates the feedback screen. Depending on the state of the network manager - * it will change the displayed text. - * \param delta Time step size. - */ -void StartRaceFeedback::update(float delta) -{ - // First test if we are still waiting - // =================================== - - // If the server hasn't received all client information, keep on waiting - if(network_manager->getMode()==NetworkManager::NW_SERVER && - network_manager->getState()!=NetworkManager::NS_ALL_REMOTE_CHARACTERS_DONE) - { - widget_manager->update(delta); - return; - } - // If the client hasn't received the race data yet, keep on waiting - if(network_manager->getMode()==NetworkManager::NW_CLIENT && - network_manager->getState()==NetworkManager::NS_WAIT_FOR_RACE_DATA) - { - widget_manager->update(delta); - return; - } - - // Waiting is finished, switch to loading - // ====================================== - widget_manager->setWgtText(WTOK_MSG, _("Loading race...")); - widget_manager->update(delta); - - // We can't do the actual loading etc. in the first call here, since then - // the text 'loading' would not be displayed. So a simple state variable - // 'is_first_frame' is used to make sure that the text is displayed - // before initiating the loading of the race. - if(!m_is_first_frame) - { - if(network_manager->getMode()==NetworkManager::NW_SERVER) - { - network_manager->sendRaceInformationToClients(); - } - race_manager->startNew(); - } - m_is_first_frame = false; - -} // update - diff --git a/src/gui/start_race_feedback.hpp b/src/gui/start_race_feedback.hpp deleted file mode 100644 index 96f201241..000000000 --- a/src/gui/start_race_feedback.hpp +++ /dev/null @@ -1,44 +0,0 @@ -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef HEADER_START_RACE_FEEDBACK_H -#define HEADER_START_RACE_FEEDBACK_H - -#include "base_gui.hpp" - -/** This class is used to give feedback to the user while loading the track. - * It either displays a 'Loading track' or a 'Wait for synchronisation' - * message (dependent on the stage of the race manager). - */ -class StartRaceFeedback: public BaseGUI -{ -protected: - /** Flag used to make sure that the text is actually displayed (i.e - * update was called once) before loading the track - otherwise the - * text is set in the widget, but not on the screen since the screen - * wasn't updated. - */ - bool m_is_first_frame; -public: - StartRaceFeedback(); - ~StartRaceFeedback(); - - void update(float DELTA); - void select(){}; -}; - -#endif diff --git a/src/gui/track_sel.cpp b/src/gui/track_sel.cpp deleted file mode 100644 index 8c19fb60a..000000000 --- a/src/gui/track_sel.cpp +++ /dev/null @@ -1,444 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "gui/track_sel.hpp" - -#include - -#include "race_manager.hpp" -#include "user_config.hpp" -#include "challenges/unlock_manager.hpp" -#include "gui/menu_manager.hpp" -#include "gui/widget_manager.hpp" -#include "tracks/track.hpp" -#include "tracks/track_manager.hpp" -#include "utils/translation.hpp" - -enum WidgetTokens -{ - WTOK_TITLE, - - WTOK_IMG0, - WTOK_IMG1, - WTOK_AUTHOR, - WTOK_UP, - WTOK_DOWN, - WTOK_EMPTY0 = 1000, - WTOK_TRACK0 = 2000 - -}; - -TrackSel::TrackSel() -{ - const int HEIGHT = 10; - - const float arrows_x = 0.15f; - - Widget *prev_widget=NULL, *w; - w = widget_manager->addTextButtonWgt(WTOK_UP, 20, HEIGHT/2, "^"); - w->setPosition(WGT_DIR_FROM_RIGHT, arrows_x, WGT_DIR_UNDER_WIDGET, 0.12f); - prev_widget = w; - for (unsigned int i = 0; i addTextButtonWgt(WTOK_TRACK0+i, 40, HEIGHT, ""); - widget_manager->setWgtTextSize(WTOK_TRACK0+i, WGT_FNT_SML); - w->setPosition(WGT_DIR_FROM_RIGHT, 0.03f*offset-0.12f, NULL, - WGT_DIR_UNDER_WIDGET, 0.f, prev_widget); - prev_widget = w; - } // for i - widget_manager->sameWidth(WTOK_TRACK0, WTOK_TRACK0+m_max_entries-1); - - w = widget_manager->addTextButtonWgt(WTOK_DOWN, 20, HEIGHT/2, "v"); - w->setPosition(WGT_DIR_FROM_RIGHT, arrows_x, NULL, WGT_DIR_UNDER_WIDGET, 0, prev_widget); - - w = widget_manager->addImgWgt(WTOK_IMG0, 35, 29, 0); - w->setPosition(WGT_DIR_FROM_LEFT, 0.1f, WGT_DIR_FROM_TOP, 0.2f); - prev_widget = w; - w = widget_manager->addImgWgt(WTOK_IMG1, 35, 35, 0); - w->setPosition(WGT_DIR_FROM_LEFT, 0.1f, NULL, WGT_DIR_UNDER_WIDGET,0, prev_widget); - prev_widget = w; - w = widget_manager->addTextWgt(WTOK_AUTHOR, 60, 9, "" ); - widget_manager->setWgtResizeToText(WTOK_AUTHOR, true); - widget_manager->hideWgtRect(WTOK_AUTHOR); - - // Loop through all tracks to determine the longest description - for(unsigned int i=0; igetNumberOfTracks(); i++) - { - widget_manager->setWgtText(WTOK_AUTHOR, track_manager->getTrack(i)->getDescription()); - w->resizeToText(); - } - w->setPosition(WGT_DIR_FROM_LEFT, 0.1f, NULL, WGT_DIR_FROM_BOTTOM, 0.0f, prev_widget); - - m_offset = 0; - switchGroup(); - m_current_track = -1; - for(unsigned int i=0; igetTrack(m_index_avail_tracks[i])->getIdent()== - user_config->m_last_track) - { - m_offset = i-m_max_entries/2; - break; - } - } - updateScrollPosition(); - - widget_manager->layout(WGT_AREA_TOP); - // Make sure to select one track. The call to update() here is necessary, - // since it guarantees that selectedWgt is indeed a track (otherwise the - // manager might select e.g. arrow up, and then no track is displayed). - widget_manager->setSelectedWgt(WTOK_TRACK0+(m_max_entries-1)/2); - displayImages(0); - //update(0); -} // TrackSel - -//----------------------------------------------------------------------------- -TrackSel::~TrackSel() -{ - widget_manager->reset(); -} // ~TrackSel - -//----------------------------------------------------------------------------- -void TrackSel::updateScrollPosition() -{ - unsigned int start = 0, end=m_max_entries; - if(m_index_avail_tracks.size()end) - { - widget_manager->hideWgtRect(WTOK_TRACK0+i); - widget_manager->hideWgtText(WTOK_TRACK0+i); - widget_manager->deactivateWgt(WTOK_TRACK0+i); - continue; - } - // Make them visible again (e.g. after a change of groups) - widget_manager->activateWgt(WTOK_TRACK0+i); - widget_manager->showWgtRect(WTOK_TRACK0+i); - widget_manager->showWgtText(WTOK_TRACK0+i); - - int i_with_scrolling = i+m_offset; - while(i_with_scrolling < 0) i_with_scrolling += m_index_avail_tracks.size(); - while(i_with_scrolling >=(int)m_index_avail_tracks.size() ) - i_with_scrolling -= m_index_avail_tracks.size(); - // We can't use simply % here, since e.g. 4 % 2 = 2 (probably because of - // the unsigned involved). - int indx = m_index_avail_tracks[ i_with_scrolling]; - if(indx>=0) - { - const Track *track = track_manager->getTrack(indx); - widget_manager->setWgtText(WTOK_TRACK0+i, track->getName()); - } - else - { - const std::vector& g=track_manager->getAllGroups(); - widget_manager->setWgtText(WTOK_TRACK0+i, g[-indx-1]); - } - } // for i - m_current_track = -1; // force new display of tracks -} // updateScrollPosition - -//----------------------------------------------------------------------------- -void TrackSel::switchGroup() -{ - m_index_avail_tracks.clear(); - bool is_battle_mode = RaceManager::isBattleMode(race_manager->getMinorMode()); - bool group_available = is_battle_mode - ? track_manager->getArenasInGroup(user_config->m_track_group).size()>0 - : track_manager->getTracksInGroup(user_config->m_track_group).size()>0; - if(!group_available) - user_config->m_track_group = "standard"; - - const std::vector &tracks = is_battle_mode - ? track_manager->getArenasInGroup(user_config->m_track_group) - : track_manager->getTracksInGroup(user_config->m_track_group); - - for(unsigned int i=0; iisLocked(track_manager->getTrack(tracks[i])->getIdent())) - { - m_index_avail_tracks.push_back(tracks[i]); - } - } - - // Now add the groups, indicated by a negative number as kart index - // ---------------------------------------------------------------- - const std::vector& groups=track_manager->getAllGroups(); - const int group_size = (int)groups.size(); - for(int i =0; im_track_group) continue; - - // Check if there are any tracks available in this group - i.e. not only locked - // tracks, and not only non-arena if arena mode (and vice versa). - const std::vector &tracks_in_group = is_battle_mode - ? track_manager->getArenasInGroup(groups[i]) - : track_manager->getTracksInGroup(groups[i]); - bool ignore_group=true; - for(unsigned int j=0; jgetTrack(tracks_in_group[j]); - // Locked tracks are not available - if(unlock_manager->isLocked(track->getIdent())) continue; - // Tracks of a different type are not available - ignore_group = is_battle_mode != track->isArena(); - if(!ignore_group) break; - } - - if(!ignore_group) - m_index_avail_tracks.push_back(-i-1); - } - if(m_index_avail_tracks.size()>=m_max_entries) - { - m_offset = 0; - widget_manager->showWgtRect(WTOK_DOWN); - widget_manager->showWgtText(WTOK_DOWN); - widget_manager->showWgtRect(WTOK_UP); - widget_manager->showWgtText(WTOK_UP); - } - else - { - // Less entries than maximum -> set m_offset to a negative number, so - // that the actual existing entries are displayed - m_offset = - (int)(1+m_max_entries-m_index_avail_tracks.size())/2; - widget_manager->hideWgtRect(WTOK_DOWN); - widget_manager->hideWgtText(WTOK_DOWN); - widget_manager->hideWgtRect(WTOK_UP); - widget_manager->hideWgtText(WTOK_UP); - } -} // switchGroup - -//----------------------------------------------------------------------------- -void TrackSel::displayImages(int selected_track) -{ - if( m_current_track == selected_track) return; - m_current_track = selected_track; - if(selected_track<0) - { - widget_manager->hideWgtTexture(WTOK_IMG0); - widget_manager->hideWgtTexture(WTOK_IMG1); - widget_manager->hideWgtRect(WTOK_IMG0); - widget_manager->hideWgtRect(WTOK_IMG1); - widget_manager->hideWgtBorder(WTOK_IMG0); - widget_manager->hideWgtBorder(WTOK_IMG1); - widget_manager->hideWgtRect(WTOK_AUTHOR); - widget_manager->hideWgtText(WTOK_AUTHOR); - return; - } - - // Now we have to display new images - // --------------------------------- - widget_manager->showWgtBorder(WTOK_IMG0); - widget_manager->showWgtBorder(WTOK_IMG1); - widget_manager->showWgtRect(WTOK_AUTHOR); - widget_manager->showWgtText(WTOK_AUTHOR); - - widget_manager->hideWgtRect(WTOK_AUTHOR); - - const Track* TRACK = track_manager->getTrack(selected_track); - bool isAvailable = !unlock_manager->isLocked(TRACK->getIdent()); - - if( isAvailable ) - { - - const std::string& description = TRACK->getDescription(); - if(description!="") - { - widget_manager->setWgtText( WTOK_AUTHOR, TRACK->getDescription() ); - widget_manager->hideWgtRect(WTOK_AUTHOR); - } - else - { - std::ostringstream designedby; - designedby<<"Designed by "<getDesigner(); - widget_manager->setWgtText( WTOK_AUTHOR, designedby.str() ); - } - const std::string& screenshot = TRACK->getScreenshotFile(); - const std::string& topview = TRACK->getTopviewFile(); - - if( !screenshot.empty() && !topview.empty() ) - { - widget_manager->setWgtColor( WTOK_IMG0, WGT_WHITE); - widget_manager->showWgtRect( WTOK_IMG0 ); - widget_manager->setWgtTexture( WTOK_IMG0, screenshot.c_str() ); - widget_manager->showWgtTexture( WTOK_IMG0 ); - widget_manager->hideWgtTrack( WTOK_IMG0 ); - - widget_manager->setWgtColor( WTOK_IMG1, WGT_WHITE); - widget_manager->showWgtRect( WTOK_IMG1 ); - widget_manager->setWgtTexture( WTOK_IMG1, topview.c_str() ); - widget_manager->showWgtTexture( WTOK_IMG1 ); - widget_manager->hideWgtTrack( WTOK_IMG1 ); - } - else if( topview.empty() ) - { - widget_manager->setWgtColor( WTOK_IMG0, WGT_WHITE); - widget_manager->showWgtRect( WTOK_IMG0 ); - widget_manager->setWgtTexture( WTOK_IMG0, screenshot.c_str() ); - widget_manager->showWgtTexture( WTOK_IMG0 ); - widget_manager->hideWgtTrack( WTOK_IMG0 ); - - widget_manager->hideWgtRect( WTOK_IMG1 ); - widget_manager->hideWgtTexture( WTOK_IMG1 ); - widget_manager->setWgtTrackNum( WTOK_IMG1, selected_track ); - widget_manager->showWgtTrack( WTOK_IMG1 ); - } - else if( screenshot.empty() ) - { - widget_manager->hideWgtRect( WTOK_IMG0 ); - widget_manager->hideWgtTexture( WTOK_IMG0 ); - widget_manager->setWgtTrackNum( WTOK_IMG0, selected_track ); - widget_manager->showWgtTrack( WTOK_IMG0 ); - - widget_manager->setWgtColor( WTOK_IMG1, WGT_WHITE); - widget_manager->showWgtRect( WTOK_IMG1 ); - widget_manager->setWgtTexture( WTOK_IMG1, topview.c_str() ); - widget_manager->showWgtTexture( WTOK_IMG1 ); - widget_manager->hideWgtTrack( WTOK_IMG1 ); - } - else //if( screenshot.empty() && topview.empty() ) - { - widget_manager->hideWgtRect( WTOK_IMG0 ); - widget_manager->hideWgtTexture( WTOK_IMG0 ); - widget_manager->setWgtTrackNum( WTOK_IMG0, selected_track ); - widget_manager->showWgtTrack( WTOK_IMG0 ); - - widget_manager->hideWgtRect( WTOK_IMG1 ); - widget_manager->hideWgtTexture( WTOK_IMG1 ); - widget_manager->hideWgtTrack( WTOK_IMG1 ); - } - } // isAvailable -} // displayImages - -//----------------------------------------------------------------------------- -void TrackSel::update(float dt) -{ - int indx = widget_manager->getSelectedWgt() - WTOK_TRACK0; - if(indx<0 || indx >= (int)m_max_entries) - { - widget_manager->update(dt); - return; - } - - indx = m_offset + indx; - // Don't use modulo here, otherwise (one extreme short lists, e.g. 1 track, - // 1 group, the track is selected when hovering over invisible menu entries. - // While is necessary, e.g. with two tracks index can be 4, i.e. the - // subtraction must be done more than once. - while(indx< 0 ) indx += m_index_avail_tracks.size(); - while(indx>=(int)m_index_avail_tracks.size()) indx -= m_index_avail_tracks.size(); - if(indx<0 || indx >= (int)m_index_avail_tracks.size()) - { - widget_manager->update(dt); - return; - } - displayImages(m_index_avail_tracks[indx]); - widget_manager->update(dt); -} // update - -//----------------------------------------------------------------------------- -void TrackSel::select() -{ - const int CLICKED_TOKEN = widget_manager->getSelectedWgt(); - if(CLICKED_TOKEN==WTOK_UP) - { - m_offset--; - if(m_offset < 0) m_offset = (int)m_index_avail_tracks.size() - 1; - updateScrollPosition(); - return; - } - if(CLICKED_TOKEN==WTOK_DOWN) - { - m_offset++; - if(m_offset >=(int)m_index_avail_tracks.size()) m_offset = 0; - updateScrollPosition(); - return; - } - unsigned int track_number = CLICKED_TOKEN - WTOK_TRACK0; - if(track_number<0 || track_number >= m_max_entries) - { - return; // not clicked on a track, ignore - } - track_number = (track_number+m_offset) % (int)m_index_avail_tracks.size(); - int indx = m_index_avail_tracks[track_number]; - if(indx<0) // group selected - { - user_config->m_track_group = track_manager->getAllGroups()[-indx-1]; - switchGroup(); - // forces redraw of the model, otherwise (if m_current_kart=0) the new - // model would not be displayed. - //m_current_kart = -1; - updateScrollPosition(); - return; - } - - const Track* TRACK = track_manager->getTrack(m_index_avail_tracks[track_number]); - // Only save the last track if it's not in battle mode. - if(!RaceManager::isBattleMode(race_manager->getMinorMode())) - user_config->m_last_track = TRACK->getIdent(); - bool isAvailable = !unlock_manager->isLocked(TRACK->getIdent()); - - if( isAvailable ) - { - race_manager->setTrack(TRACK->getIdent()); - menu_manager->pushMenu(MENUID_RACE_OPTIONS); - } - - else - { - widget_manager->showWgtText( CLICKED_TOKEN ); - widget_manager->setWgtTextColor( CLICKED_TOKEN, WGT_TRANS_GRAY); - widget_manager->setWgtColor( CLICKED_TOKEN, WGT_TRANS_GRAY); - } -} // select - -// ---------------------------------------------------------------------------- - -void TrackSel::handle(GameAction action, int value) -{ - // Forward keypresses to basegui - if(value) return BaseGUI::handle(action, value); - - if(action==GA_CURSOR_UP) - { - m_offset--; - if(m_offset < 0) m_offset = (int)m_index_avail_tracks.size() - 1; - updateScrollPosition(); - return; - - } // if cursor up - if(action ==GA_CURSOR_DOWN) - { - m_offset++; - if(m_offset >= (int)m_index_avail_tracks.size()) m_offset = 0; - updateScrollPosition(); - return; - } // if cursor down - BaseGUI::handle(action, value); -} // handle -/* EOF */ diff --git a/src/gui/track_sel.hpp b/src/gui/track_sel.hpp deleted file mode 100644 index a63b61f90..000000000 --- a/src/gui/track_sel.hpp +++ /dev/null @@ -1,48 +0,0 @@ -// $Id$ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef HEADER_TRACKSEL_H -#define HEADER_TRACKSEL_H - -#include -#include "base_gui.hpp" - -class TrackSel: public BaseGUI -{ -private: - unsigned int m_num_entries; // number of entries in scrolling menu - int m_offset; // index of first track - int m_current_track; // id of current track - std::vector m_index_avail_tracks; - const static unsigned int m_max_entries = 7; - - int computeIndent(int n) {return 40+abs((int)(m_num_entries-1)/2 - n)*3;} - void updateScrollPosition(); - void switchGroup(); - void displayImages(int selected_track); -public: - TrackSel(); - ~TrackSel(); - - void update(float dt); - virtual void handle(GameAction, int); - void select(); -}; - -#endif diff --git a/src/gui/widget.cpp b/src/gui/widget.cpp index 499516910..92c12d86f 100644 --- a/src/gui/widget.cpp +++ b/src/gui/widget.cpp @@ -1,890 +1,946 @@ -// $Id: widget_set.cpp 1094 2007-05-21 06:49:06Z hiker $ -// -// SuperTuxKart - a fun racing game with go-kart -// This code originally from Neverball copyright (C) 2003 Robert Kooima -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "widget.hpp" - -#include +#include "gui/screen.hpp" +#include "gui/engine.hpp" +#include "gui/my_button.hpp" +#include #include +#include -//FIXME: this should be removed when the scrolling is cleaned -#include "user_config.hpp" +using namespace irr; +using namespace core; +using namespace scene; +using namespace video; +using namespace io; +using namespace gui; +using namespace GUIEngine; -#include "material_manager.hpp" -#include "tracks/track.hpp" -#include "tracks/track_manager.hpp" -#include "utils/constants.hpp" +#include "gui/widget.hpp" -const int Widget::MAX_SCROLL = 1000000; +static unsigned int id_counter = 0; +static unsigned int id_counter_2 = 1000; // for items that can't be reached with keyboard navigation but can be clicked -const float Widget::MAX_TEXT_SCALE = 1.2f; -const float Widget::MIN_TEXT_SCALE = 1.0f; - -const GLfloat WGT_WHITE [4] = { 1.0f, 1.0f, 1.0f, 1.0f }; -const GLfloat WGT_GRAY [4] = { 0.5f, 0.5f, 0.5f, 1.0f }; -const GLfloat WGT_BLACK [4] = { 0.0f, 0.0f, 0.0f, 1.0f }; -const GLfloat WGT_YELLOW [4] = { 1.0f, 1.0f, 0.0f, 1.0f }; -const GLfloat WGT_RED [4] = { 1.0f, 0.0f, 0.0f, 1.0f }; -const GLfloat WGT_GREEN [4] = { 0.0f, 1.0f, 0.0f, 1.0f }; -const GLfloat WGT_BLUE [4] = { 0.0f, 0.0f, 1.0f, 1.0f }; -const GLfloat WGT_TRANS_WHITE [4] = { 1.0f, 1.0f, 1.0f, 0.5f }; -const GLfloat WGT_TRANS_GRAY [4] = { 0.5f, 0.5f, 0.5f, 0.5f }; -const GLfloat WGT_TRANS_BLACK [4] = { 0.0f, 0.0f, 0.0f, 0.5f }; -const GLfloat WGT_TRANS_YELLOW [4] = { 1.0f, 1.0f, 0.0f, 0.5f }; -const GLfloat WGT_TRANS_RED [4] = { 1.0f, 0.0f, 0.0f, 0.5f }; -const GLfloat WGT_TRANS_GREEN [4] = { 0.0f, 1.0f, 0.0f, 0.5f }; -const GLfloat WGT_TRANS_BLUE [4] = { 0.0f, 0.0f, 1.0f, 0.5f }; - -//FIXME: I should change 'LIGHT' for 'LIT'. -const GLfloat WGT_LIGHT_GRAY [4] = {1.0f, 1.0f, 1.0f, 1.0f}; -const GLfloat WGT_LIGHT_BLACK [4] = {0.5f, 0.5f, 0.5f, 1.0f}; -const GLfloat WGT_LIGHT_YELLOW [4] = {1.0f, 1.0f, 0.5f, 1.0f}; -const GLfloat WGT_LIGHT_RED [4] = {1.0f, 0.5f, 0.5f, 1.0f}; -const GLfloat WGT_LIGHT_GREEN [4] = {0.5f, 1.0f, 0.5f, 1.0f}; -const GLfloat WGT_LIGHT_BLUE [4] = {0.5f, 0.5f, 1.0f, 1.0f}; -const GLfloat WGT_LIGHT_TRANS_GRAY [4] = {1.0f, 1.0f, 1.0f, 0.8f}; -const GLfloat WGT_LIGHT_TRANS_BLACK [4] = {0.5f, 0.5f, 0.5f, 0.8f}; -const GLfloat WGT_LIGHT_TRANS_YELLOW [4] = {1.0f, 1.0f, 0.5f, 0.8f}; -const GLfloat WGT_LIGHT_TRANS_RED [4] = {1.0f, 0.5f, 0.5f, 0.8f}; -const GLfloat WGT_LIGHT_TRANS_GREEN [4] = {0.5f, 1.0f, 0.5f, 0.8f}; -const GLfloat WGT_LIGHT_TRANS_BLUE [4] = {0.5f, 0.5f, 1.0f, 0.8f}; - -const GLfloat WGT_TRANSPARENT [4] = {1.0f, 1.0f, 1.0f, 0.0f}; - -Widget::Widget -( - const int X_, - const int Y_, - const int WIDTH_, - const int HEIGHT_ -) : -//Switch features are not set here to sane defaults because the WidgetManager -//handles that. - m_x(X_), m_y(Y_), - m_width(WIDTH_), m_height(HEIGHT_), - m_fixed_position(false), - m_rect_list(0), - m_round_corners(WGT_AREA_ALL), - m_border_list(0), - m_scroll_pos_x(0), m_scroll_pos_y(0), - m_text_scale(1.0f) +// ----------------------------------------------------------------------------- +/** When switching to a new screen, this function will be called to reset ID counters + * (so we start again from ID 0, and don't grow to big numbers) */ +void Widget::resetIDCounters() { + id_counter = 0; + id_counter_2 = 1000; } - -//----------------------------------------------------------------------------- -Widget::~Widget() +// ----------------------------------------------------------------------------- +Widget::Widget() { - if(glIsList(m_rect_list)) - { - glDeleteLists(m_rect_list, 1); - } - - if(glIsList(m_border_list)) - { - glDeleteLists(m_border_list, 1); - } - + x = -1; + y = -1; + w = -1; + h = -1; + id = -1; + m_element = NULL; + m_type = WTYPE_NONE; + m_selected = false; + m_parent = NULL; } - -//----------------------------------------------------------------------------- -void Widget::setPosition(WidgetDirection horizontal, float percentage_horizontal, - const Widget *w_hori, - WidgetDirection vertical, float percentage_vertical, - const Widget *w_verti) -{ - m_fixed_position = true; - m_horizontal = horizontal; - m_percentage_x = percentage_horizontal; - m_widget_horizontal = w_hori; - // If the direction is left/right of a widget, but that widget is not defined - // use left/right (of screen). This simplifies programming, since the e.g. - // left-most widget will be positioned relative to the side of the screen - if(!w_hori) - { - if(m_horizontal==WGT_DIR_LEFT_WIDGET ) m_horizontal = WGT_DIR_FROM_RIGHT; - if(m_horizontal==WGT_DIR_RIGHT_WIDGET) m_horizontal = WGT_DIR_FROM_LEFT; - } - m_vertical = vertical; - m_percentage_y = percentage_vertical; - m_widget_vertical = w_verti; - if(!w_verti) - { - if(m_vertical==WGT_DIR_ABOVE_WIDGET) m_vertical = WGT_DIR_FROM_BOTTOM; - if(m_vertical==WGT_DIR_UNDER_WIDGET) m_vertical = WGT_DIR_FROM_TOP; - } - -} // setPosition -// ---------------------------------------------------------------------------- -void Widget::layout() -{ - if(!hasFixedPosition()) - { - std::cerr << "Warning: layout called for widget without fixed position.\n"; - return; - } - if( !createRect() ) return; - - switch(m_horizontal) - { - case WGT_DIR_FROM_LEFT: - m_x = (int)(user_config->m_width*m_percentage_x); break; - case WGT_DIR_FROM_RIGHT: - m_x = (int)(user_config->m_width*(1-m_percentage_x)-m_width); break; - case WGT_DIR_CENTER: - m_x = (int)((user_config->m_width-m_width)*0.5f); break; - case WGT_DIR_LEFT_WIDGET: - m_x = m_widget_horizontal->m_x - m_width; break; - case WGT_DIR_RIGHT_WIDGET: - m_x = m_widget_horizontal->m_x+m_widget_horizontal->m_width - + (int)(user_config->m_width*m_percentage_x); break; - default: - break; - } // switch - - switch(m_vertical) - { - case WGT_DIR_FROM_TOP: - m_y = (int)(user_config->m_height*(1-m_percentage_y)-m_height); break; - case WGT_DIR_FROM_BOTTOM: - m_y = (int)(user_config->m_height*m_percentage_y); break; - case WGT_DIR_CENTER: - m_y = (int)((user_config->m_height-m_height)*0.5f); break; - case WGT_DIR_ABOVE_WIDGET: - m_y = m_widget_vertical->m_y + m_widget_vertical->m_height; break; - case WGT_DIR_UNDER_WIDGET: - m_y = m_widget_vertical->m_y-m_height-(int)(m_percentage_y*user_config->m_height); break; - default: - break; - } // switch - -} // layout - -//----------------------------------------------------------------------------- -void Widget::update( const float DELTA ) -{ - updateVariables( DELTA ); - draw(); -} - -//----------------------------------------------------------------------------- -void Widget::resizeToText() -{ - if( !m_text.empty() ) - { - float left, right, bottom, top; - m_font->getBBoxMultiLine(m_text, m_text_size, false, &left, &right, &bottom, &top); - - const int TEXT_WIDTH = (int)(right - left); - const int TEXT_HEIGHT = (int)(top - bottom); - - if( TEXT_WIDTH > m_width ) m_width = TEXT_WIDTH; - if( TEXT_HEIGHT > m_height ) m_height = TEXT_HEIGHT; - } -} - -//----------------------------------------------------------------------------- -/* Please note that this function only lightens 'non-light' colors */ -void Widget::lightenColor() -{ - if(m_rect_color == WGT_GRAY) - { - m_rect_color = WGT_LIGHT_GRAY; - } - if(m_rect_color == WGT_BLACK) - { - m_rect_color = WGT_LIGHT_BLACK; - } - else if (m_rect_color == WGT_YELLOW) - { - m_rect_color = WGT_LIGHT_YELLOW; - } - else if (m_rect_color == WGT_RED) - { - m_rect_color = WGT_LIGHT_RED; - } - else if (m_rect_color == WGT_GREEN) - { - m_rect_color = WGT_LIGHT_GREEN; - } - else if (m_rect_color == WGT_BLUE) - { - m_rect_color = WGT_LIGHT_BLUE; - } - else if (m_rect_color == WGT_TRANS_GRAY) - { - m_rect_color = WGT_LIGHT_TRANS_GRAY; - } - else if (m_rect_color == WGT_TRANS_BLACK) - { - m_rect_color = WGT_LIGHT_TRANS_BLACK; - } - else if (m_rect_color == WGT_TRANS_YELLOW) - { - m_rect_color = WGT_LIGHT_TRANS_YELLOW; - } - else if (m_rect_color == WGT_TRANS_RED) - { - m_rect_color = WGT_LIGHT_TRANS_RED; - } - else if (m_rect_color == WGT_TRANS_GREEN) - { - m_rect_color = WGT_LIGHT_TRANS_GREEN; - } - else if (m_rect_color == WGT_TRANS_BLUE) - { - m_rect_color = WGT_LIGHT_TRANS_BLUE; - } -} - -//----------------------------------------------------------------------------- -/* Please note that this function only darkens 'light' colors. */ -void Widget::darkenColor() -{ - if(m_rect_color == WGT_LIGHT_GRAY) - { - m_rect_color = WGT_GRAY; - } - if(m_rect_color == WGT_LIGHT_BLACK) - { - m_rect_color = WGT_BLACK; - } - else if (m_rect_color == WGT_LIGHT_YELLOW) - { - m_rect_color = WGT_YELLOW; - } - else if (m_rect_color == WGT_LIGHT_RED) - { - m_rect_color = WGT_RED; - } - else if (m_rect_color == WGT_LIGHT_GREEN) - { - m_rect_color = WGT_GREEN; - } - else if (m_rect_color == WGT_LIGHT_BLUE) - { - m_rect_color = WGT_BLUE; - } - else if (m_rect_color == WGT_LIGHT_TRANS_GRAY) - { - m_rect_color = WGT_TRANS_GRAY; - } - else if (m_rect_color == WGT_LIGHT_TRANS_BLACK) - { - m_rect_color = WGT_TRANS_BLACK; - } - else if (m_rect_color == WGT_LIGHT_TRANS_YELLOW) - { - m_rect_color = WGT_TRANS_YELLOW; - } - else if (m_rect_color == WGT_LIGHT_TRANS_RED) - { - m_rect_color = WGT_TRANS_RED; - } - else if (m_rect_color == WGT_LIGHT_TRANS_GREEN) - { - m_rect_color = WGT_TRANS_GREEN; - } - else if (m_rect_color == WGT_LIGHT_TRANS_BLUE) - { - m_rect_color = WGT_TRANS_BLUE; - } -} - -//----------------------------------------------------------------------------- -void Widget::setFont( const WidgetFont FONT ) -{ - switch( FONT ) - { - case WGT_FONT_GUI: - m_font = font_gui; - break; - - case WGT_FONT_RACE: - m_font = font_race; - break; - }; - - //TODO: the curr_widget_font variable exists only for a bug around; after - //some restructuration, it should be fine to remove this. - m_curr_widget_font = FONT; -} - -//----------------------------------------------------------------------------- -void Widget::setTexture( const std::string& FILENAME, bool is_full_path ) -{ - Material *m = material_manager->getMaterial( FILENAME, is_full_path ); -#ifndef HAVE_IRRLICHT - m_texture = m->getState()->getTextureHandle(); -#endif -} - -/** Initialize a display list containing a rectangle that can have rounded - * corners, with texture coordinates to properly apply a texture - * map to the rectangle as though the corners were not rounded . Returns - * false if the call to glGenLists failed, otherwise it returns true. +// ----------------------------------------------------------------------------- +/** will write to either absolute or percentage, depending on the case. + * returns false if couldn't convert to either */ -bool Widget::createRect() +bool Widget::convertToCoord(std::string& x, int* absolute, int* percentage) { - - //TODO: show warning if text > rect - if(m_radius > m_width * 0.5) - { - std::cerr << "Warning: widget's radius > half width.\n"; - } - if(m_radius > m_height * 0.5) - { - std::cerr << "Warning: widget's radius > half height.\n"; - } - if(m_radius < 1) - { - std::cerr << "Warning: widget's radius < 1, setting to 1.\n"; - m_radius = 1; - } - - if(m_width == 0) - { - std::cerr << "Warning: creating widget rect with width 0, " << - "setting to 1.\n"; - m_width = 1; - } - if(m_height == 0) - { - std::cerr << "Warning: creating widget rect with height 0, " << - "setting to 1.\n"; - m_height = 1; - } - - if(!glIsList(m_rect_list)) - { - m_rect_list = glGenLists(1); - if(m_rect_list == 0) - { - std::cerr << "Error: could not create a widget's rect list.\n"; - return false; - } - } - - //Calculate the number of quads each side should have. The algorithm - //isn't based just on logic, since it went through visual testing to give - //the perception of roundness. - const int MIN_QUADS = 2; - const int NUM_QUADS = MIN_QUADS + m_radius; - + bool is_number; int i; - - const int SMALLER_SIDE_LENGTH = m_height < m_width ? m_height / 2 : m_width / 2; - const float BORDER_LENGTH = SMALLER_SIDE_LENGTH * m_border_percentage; - - typedef std::vector float3; - std::vector inner_vertex; - std::vector outer_vertex; - - //NUM_QUADS + 1, because we have to add the union between the sides, and - //multiplied by 2, because there are two sides - inner_vertex.resize((NUM_QUADS + 1) * 2); - outer_vertex.resize((NUM_QUADS + 1) * 2); - - const float HALF_WIDTH = m_width * 0.5f; - const float HALF_HEIGHT = m_height * 0.5f; - - glNewList(m_rect_list, GL_COMPILE); + std::istringstream myStream(x); + is_number = (myStream >> i); + + if(!is_number) return false; + + if( x[x.size()-1] == '%' ) // percentage { - glBegin(GL_QUAD_STRIP); - { - //These are used to center the widget; without centering, the - //widget's 0,0 coordinates are at the lower left corner. - float angle; - float circle_x, circle_y; - - //Draw the left side of the inside - for (i = 0; i <= NUM_QUADS; ++i) - { - //To find the position in the X and Y axis of each point of - //the quads, we use the property of the unit circle (a circle - //with radius = 1) that at any given angle, cos(angle) is the - //position of the unit circle at that angle in the X axis, - //and that sin(angle) is the position of the unit circle at - //that angle in the Y axis. Then the values from cos(angle) - //and sin(angle) are multiplied by the radius. - // - //First we find the angle: since 2 * pi is the number of - //radians in an entire circle, 0.5 * pi is a quarter of the - //circle, which is a corner of the rounded rectangle. Based - //on that, we just split the radians in a corner in NUM_QUADS - //+ 1 parts, and use the angles at those parts to find the - //X and Y position of the points. - angle = 0.5f * M_PI * (float)i / (float)NUM_QUADS; - circle_x = m_radius * cos(angle); - circle_y = m_radius * sin(angle); - - //After we generate the positions in circle for the angles, - //we have to position each rounded corner properly depending - //on the position of the rectangle and the radius. The y - //position for the circle is dependant on rect; if a corner - //wasn't given, then the y position is computed as if it was - //for a rectangle without rounder corners. - // - //The value in the position 0 of these vectors is X, the - //second the Y for the top part of the widget and the third - //the Y for the lower part of the widget. - inner_vertex[i].resize(3); - outer_vertex[i].resize(3); - outer_vertex[i][0] = m_radius - circle_x; - inner_vertex[i][0] = outer_vertex[i][0] + BORDER_LENGTH; - - if( m_round_corners & WGT_AREA_NW ) - { - outer_vertex[i][1] = m_height + circle_y - m_radius; - inner_vertex[i][1] = outer_vertex[i][1] - BORDER_LENGTH; - } - else - { - outer_vertex[i][1] =(float) m_height; - inner_vertex[i][1] = outer_vertex[i][1] - BORDER_LENGTH; - } - - if( m_round_corners & WGT_AREA_SW ) - { - outer_vertex[i][2] = m_radius - circle_y; - inner_vertex[i][2] = outer_vertex[i][2] + BORDER_LENGTH; - } - else - { - outer_vertex[i][2] = 0; - inner_vertex[i][2] = outer_vertex[i][2] + BORDER_LENGTH; - } - - glTexCoord2f(inner_vertex[i][0] / (float)m_width, inner_vertex[i][1] / (float)m_height); - glVertex2f(inner_vertex[i][0] - HALF_WIDTH, inner_vertex[i][1] - HALF_HEIGHT); - - glTexCoord2f(inner_vertex[i][0] / (float)m_width, inner_vertex[i][2] / (float)m_height); - glVertex2f(inner_vertex[i][0] - HALF_WIDTH, inner_vertex[i][2] - HALF_HEIGHT); - } - - //Draw the right side of a rectangle - for (i = NUM_QUADS; i < NUM_QUADS * 2 + 1; ++i) - { - angle = 0.5f * M_PI * (float) (i - NUM_QUADS) / (float) NUM_QUADS; - - //By inverting the use of sin and cos we get corners that are - //drawn from left to right instead of right to left - circle_x = m_radius * sin(angle); - circle_y = m_radius * cos(angle); - - inner_vertex[i+1].resize(3); - outer_vertex[i+1].resize(3); - outer_vertex[i+1][0] = m_width - m_radius + circle_x; - inner_vertex[i+1][0] = outer_vertex[i+1][0] - BORDER_LENGTH; - - if( m_round_corners & WGT_AREA_NE ) - { - outer_vertex[i+1][1] = m_height - m_radius + circle_y; - inner_vertex[i+1][1] = outer_vertex[i+1][1] - BORDER_LENGTH; - } - else - { - outer_vertex[i+1][1] = (float)m_height; - inner_vertex[i+1][1] = outer_vertex[i+1][1] - BORDER_LENGTH; - } - - if( m_round_corners & WGT_AREA_SE ) - { - outer_vertex[i+1][2] = m_radius - circle_y; - inner_vertex[i+1][2] = outer_vertex[i+1][2] + BORDER_LENGTH; - } - else - { - outer_vertex[i+1][2] = 0; - inner_vertex[i+1][2] = outer_vertex[i+1][2] + BORDER_LENGTH; - } - - glTexCoord2f(inner_vertex[i+1][0] / (float)m_width, inner_vertex[i+1][1] / (float)m_height); - glVertex2f(inner_vertex[i+1][0] - HALF_WIDTH, inner_vertex[i+1][1] - HALF_HEIGHT); - - glTexCoord2f(inner_vertex[i+1][0] / (float)m_width, inner_vertex[i+1][2] / (float)m_height); - glVertex2f(inner_vertex[i+1][0] - HALF_WIDTH, inner_vertex[i+1][2] - HALF_HEIGHT); - } - } - glEnd(); + *percentage = i; + return true; } - glEndList(); - - - if(!glIsList(m_border_list)) + else // absolute number { - m_border_list = glGenLists(1); - if(m_border_list == 0) + *absolute = i; + return true; + } +} +// ----------------------------------------------------------------------------- +/** + * Finds its x, y, w and h coords from what is specified in the XML properties. + * Most notably, expands coords relative to parent and percentages. + */ +void Widget::readCoords(Widget* parent) +{ + // determine widget position and size if not already done by sizers + std::string x = m_properties[PROP_X]; + std::string y = m_properties[PROP_Y]; + std::string width = m_properties[PROP_WIDTH]; + std::string height = m_properties[PROP_HEIGHT]; + + unsigned int parent_w, parent_h, parent_x, parent_y; + if(parent == NULL) + { + core::dimension2d frame_size = GUIEngine::getDriver()->getCurrentRenderTargetSize(); + parent_w = frame_size.Width; + parent_h = frame_size.Height; + parent_x = 0; + parent_y = 0; + } + else + { + parent_w = parent->w; + parent_h = parent->h; + parent_x = parent->x; + parent_y = parent->y; + } + + // ---- try converting to number; if it works it means they're plain numbers so we can use them directly. + // x coord + { + int abs_x = -1, percent_x = -1; + if(convertToCoord(x, &abs_x, &percent_x )) { - std::cerr << "Error: could not create a widget's border list.\n"; - return false; + if(abs_x > -1) this->x = parent_x + abs_x; + else if(percent_x > -1) this->x = parent_x + parent_w*percent_x/100; } } - - glNewList(m_border_list, GL_COMPILE); + + // y coord { - glBegin(GL_QUAD_STRIP); + int abs_y = -1, percent_y = -1; + if(convertToCoord(y, &abs_y, &percent_y )) { - for (i = NUM_QUADS * 2 + 1; i >= 0 ; --i) - { - glVertex2f(outer_vertex[i][0] - HALF_WIDTH, outer_vertex[i][1] - HALF_HEIGHT); - glVertex2f(inner_vertex[i][0] - HALF_WIDTH, inner_vertex[i][1] - HALF_HEIGHT); - } - - for (i = 0; i <= NUM_QUADS * 2 + 1; ++i) - { - glVertex2f(outer_vertex[i][0] - HALF_WIDTH, outer_vertex[i][2] - HALF_HEIGHT); - glVertex2f(inner_vertex[i][0] - HALF_WIDTH, inner_vertex[i][2] - HALF_HEIGHT); - } - - //Close the border - glVertex2f(outer_vertex[NUM_QUADS * 2 + 1][0] - HALF_WIDTH, outer_vertex[NUM_QUADS * 2 + 1][1] - HALF_HEIGHT); - glVertex2f(inner_vertex[NUM_QUADS * 2 + 1][0] - HALF_WIDTH, inner_vertex[NUM_QUADS * 2 + 1][1] - HALF_HEIGHT); + if(abs_y > -1) this->y = parent_y + abs_y; + else if(percent_y > -1) this->y = parent_y + parent_h*percent_y/100; } - glEnd(); - } - glEndList(); + + // if this widget has an icon, get icon size. this can helpful determine its optimal size + int texture_w = -1, texture_h = -1; + + if(m_properties[PROP_ICON].size() > 0) + { + ITexture* texture = GUIEngine::getDriver()->getTexture(m_properties[PROP_ICON].c_str()); + if(texture != NULL) + { + texture_w = texture->getSize().Width; + texture_h = texture->getSize().Height; + } + } + + // if this widget has a label, get text length. this can helpful determine its optimal size + int label_w = -1, label_h = -1; + if(m_properties[PROP_TEXT].size() > 0) + { + IGUIFont* font = GUIEngine::getFont(); + core::dimension2d< s32 > dim = font->getDimension( stringw(m_properties[PROP_TEXT].c_str()).c_str() ); + label_w = dim.Width; + // FIXME - won't work with multiline labels. thus, for now, when multiple + // lines are required, we need to specify a height explicitely + label_h = dim.Height; + } + + // width + { + int abs_w = -1, percent_w = -1; + if(convertToCoord(width, &abs_w, &percent_w )) + { + if(abs_w > -1) this->w = abs_w; + else if(percent_w > -1) this->w = (int)round(parent_w*percent_w/100.0); + } + else if(texture_w > -1) this->w = texture_w; + else if(label_w > -1) this->w = label_w; + } + + // height + { + int abs_h = -1, percent_h = -1; + if(convertToCoord(height, &abs_h, &percent_h )) + { + if(abs_h > -1) this->h = abs_h; + else if(percent_h > -1) this->h = parent_h*percent_h/100; + } + else if(texture_h > -1) this->h = texture_h; + else if(label_h > -1) this->h = label_h; + } + +} +// ----------------------------------------------------------------------------- +void ButtonWidget::add() +{ + rect widget_size = rect(x, y, x + w, y + h); + stringw message = m_properties[PROP_TEXT].c_str(); + m_element = GUIEngine::getGUIEnv()->addButton(widget_size, NULL, ++id_counter, message.c_str(), L""); + + id = m_element->getID(); + m_element->setTabOrder(id); + m_element->setTabGroup(false); +} +// ----------------------------------------------------------------------------- +void LabelWidget::add() +{ + rect widget_size = rect(x, y, x + w, y + h); + const bool word_wrap = m_properties[PROP_WORD_WRAP] == "true"; + stringw message = m_properties[PROP_TEXT].c_str(); + + EGUI_ALIGNMENT align = EGUIA_UPPERLEFT; + if(m_properties[PROP_TEXT_ALIGN] == "center") align = EGUIA_CENTER; + else if(m_properties[PROP_TEXT_ALIGN] == "right") align = EGUIA_LOWERRIGHT; + EGUI_ALIGNMENT valign = EGUIA_CENTER ; // TODO - make confiurable through XML file? + + IGUIStaticText* irrwidget = GUIEngine::getGUIEnv()->addStaticText(message.c_str(), widget_size, false, word_wrap, NULL, -1); + m_element = irrwidget; + irrwidget->setTextAlignment( align, valign ); + + id = m_element->getID(); + //m_element->setTabOrder(id); + m_element->setTabStop(false); + m_element->setTabGroup(false); +} +// ----------------------------------------------------------------------------- +void CheckBoxWidget::add() +{ + rect widget_size = rect(x, y, x + w, y + h); + stringw message = m_properties[PROP_TEXT].c_str(); + m_element = GUIEngine::getGUIEnv()->addCheckBox(true /* checked */, widget_size, NULL, ++id_counter, message.c_str()); + + id = m_element->getID(); + m_element->setTabOrder(id); + m_element->setTabGroup(false); +} +// ----------------------------------------------------------------------------- +void GaugeWidget::add() +{ + rect widget_size = rect(x, y, x + w, y + h); + m_element = GUIEngine::getGUIEnv()->addScrollBar(true /* horizontal */, widget_size, NULL, ++id_counter); + + id = m_element->getID(); + m_element->setTabOrder(id); + m_element->setTabGroup(false); +} +// ----------------------------------------------------------------------------- +IconButtonWidget::IconButtonWidget(const bool clickable) +{ + IconButtonWidget::clickable = clickable; +} +// ----------------------------------------------------------------------------- +void IconButtonWidget::add() +{ + ITexture* texture = GUIEngine::getDriver()->getTexture(m_properties[PROP_ICON].c_str()); + //const int texture_w = texture->getSize().Width, texture_h = texture->getSize().Height; + /* + if(w < texture_w) ... ; + if(h < texture_h) ... ; + */ + rect widget_size = rect(x, y, x + w, y + h); + if(clickable) + { + IGUIButton* btn = GUIEngine::getGUIEnv()->addButton(widget_size, NULL, ++id_counter, L""); + m_element = btn; + btn->setUseAlphaChannel(true); + btn->setImage(texture); + //btn->setDrawBorder(false); + btn->setTabStop(true); + } + else + { + IGUIImage* btn = GUIEngine::getGUIEnv()->addImage(widget_size, NULL, ++id_counter_2); + m_element = btn; + btn->setUseAlphaChannel(true); + btn->setImage(texture); + //btn->setDrawBorder(false); + btn->setTabStop(false); + } + stringw message = m_properties[PROP_TEXT].c_str(); + if(message.size() > 0) + { + widget_size += position2d(0, widget_size.getHeight()); + IGUIStaticText* label = GUIEngine::getGUIEnv()->addStaticText(message.c_str(), widget_size); + label->setTextAlignment(EGUIA_CENTER, EGUIA_UPPERLEFT); + label->setTabStop(false); + } + + id = m_element->getID(); + if(clickable) m_element->setTabOrder(id); + m_element->setTabGroup(false); + + /* + IGUISpriteBank* sprite_bank = GUIEngine::getGUIEnv()->getSkin()->getSpriteBank(); + // GUIEngine::getDriver()->makeColorKeyTexture(GUIEngine::getDriver()->getTexture("irrlichtlogo2.png"), position2di(0,0)); + sprite_bank->addTexture( GUIEngine::getDriver()->getTexture("irrlichtlogo2.png") ); + + SGUISprite sprite; + sprite.frameTime = 3000; + SGUISpriteFrame frame; + core::array >& rectangles = sprite_bank->getPositions(); + rectangles.push_back(rect(0,0,128,128)); + frame.rectNumber = rectangles.size()-1; + frame.textureNumber = sprite_bank->getTextureCount() - 1; + sprite.Frames.push_back(frame); + sprite_bank->getSprites().push_back(sprite); + + button->setSpriteBank(sprite_bank); + button->setSprite(EGBS_BUTTON_UP, sprite_bank->getSprites().size()-1); + button->setSprite(EGBS_BUTTON_DOWN, sprite_bank->getSprites().size()-1); + */ +} +#if 0 +#pragma mark - +#pragma mark Ribbon +#endif + +RibbonWidget::RibbonWidget(const RibbonType type) +{ + m_selection = 0; + m_ribbon_type = type; + updateSelection(); +} +// ----------------------------------------------------------------------------- +bool RibbonWidget::rightPressed() +{ + m_selection++; + if(m_selection >= m_children.size()) + { + if(m_parent != NULL) ((RibbonGridWidget*)m_parent)->scroll(1); // FIXME? - find cleaner way to propagate event to parent + m_selection = m_children.size() - 1; + } + updateSelection(); + + return m_ribbon_type != RIBBON_TOOLBAR; +} +// ----------------------------------------------------------------------------- +bool RibbonWidget::leftPressed() +{ + m_selection--; + if(m_selection < 0) + { + if(m_parent != NULL) ((RibbonGridWidget*)m_parent)->scroll(-1); // FIXME? - find cleaner way to propagate event to parent + m_selection = 0; + } + updateSelection(); + + return m_ribbon_type != RIBBON_TOOLBAR; +} +// ----------------------------------------------------------------------------- +void RibbonWidget::focused() +{ + if(m_parent != NULL) ((RibbonGridWidget*)m_parent)->updateLabel( this ); +} +// ----------------------------------------------------------------------------- +bool RibbonWidget::mouseHovered(Widget* child) +{ + const int subbuttons_amount = m_children.size(); + + for(int i=0; isetFocus(m_element); return true; } - -//----------------------------------------------------------------------------- -void Widget::updateVariables( const float DELTA ) +// ----------------------------------------------------------------------------- +void RibbonWidget::add() { - if( m_enable_rotation ) m_rotation_angle += m_rotation_speed * DELTA; + rect widget_size = rect(x, y, x + w, y + h); - /*Handle delta time dependent features*/ - if(m_text_scale > MIN_TEXT_SCALE) + IGUIButton * btn = GUIEngine::getGUIEnv()->addButton(widget_size, NULL, ++id_counter, L""); + m_element = btn; + + const int subbuttons_amount = m_children.size(); + + // ---- check how much space each child button will take and fit them within available space + int total_needed_space = 0; + for(int i=0; igetBBoxMultiLine(m_text, m_text_size, false, &left, &right, NULL, NULL); - int text_width = (int)(right - left + 0.99); - - - const int Y_LIMIT = lines * m_text_size + m_height; - - //A work around for yet another bug with multilines: we get the wrong - //width when using multilines. - if( text_width > m_width ) - { - text_width = m_width; - } - - //With the preset positions, we do comparations with the equal sign on - //floating point variables; however, no operations are done of the - //variables between the assignment of these integer values and the - //comparation and the values are small enough to fit in a few bytes, - //so no inaccuracies because of floating point rounding should happen. - //X-axis preset positions - if( m_scroll_pos_x == WGT_SCROLL_START_LEFT ) - { - m_scroll_pos_x = 0; - } - else if( m_scroll_pos_x == WGT_SCROLL_START_RIGHT ) - { - m_scroll_pos_x = (float)m_width; - } - else if( m_scroll_pos_x == WGT_SCROLL_CENTER ) - { - m_scroll_pos_x = (float)( (m_width - text_width) / 2 ); - } - else if( m_scroll_pos_x == WGT_SCROLL_END_LEFT ) - { - m_scroll_pos_x = (float)(-text_width); - } - else if( m_scroll_pos_x == WGT_SCROLL_END_RIGHT ) - { - m_scroll_pos_x = (float)(m_width - text_width); - } - else if( m_scroll_pos_x > MAX_SCROLL ) - { - std::cerr << "WARNING: text position is too much to the right to " << - "scroll!.\n"; - } - else if( m_scroll_pos_x < -MAX_SCROLL ) - { - std::cerr << "WARNING: text position is too much to the left to " << - "to scroll!.\n"; - } - - //Y-axis preset positions - if( m_scroll_pos_y == WGT_SCROLL_START_TOP ) - { - m_scroll_pos_y =(float)(Y_LIMIT / 2 - m_height); - } - else if( m_scroll_pos_y == WGT_SCROLL_START_BOTTOM ) - { - m_scroll_pos_y = (float)(Y_LIMIT / 2); - } - else if( m_scroll_pos_y == WGT_SCROLL_CENTER ) - { - m_scroll_pos_y = 0; - } - else if( m_scroll_pos_y == WGT_SCROLL_END_TOP ) - { - m_scroll_pos_y = (float)(-Y_LIMIT / 2); - } - else if( m_scroll_pos_y == WGT_SCROLL_END_BOTTOM ) - { - m_scroll_pos_y = (float)(-Y_LIMIT / 2 + m_height); - } - else if( m_scroll_pos_y > MAX_SCROLL ) - { - std::cerr << "WARNING: text position too high to scroll!.\n"; - } - else if( m_scroll_pos_y < -MAX_SCROLL ) - { - std::cerr << "WARNING: text position too low to scroll!.\n"; - } - - if(m_enable_scroll) - { - //TODO: constrain speed to sane values - m_scroll_pos_x += m_scroll_speed_x * DELTA; - m_scroll_pos_y += m_scroll_speed_y * DELTA; - - //Y-axis wrapping - if(m_scroll_pos_y * 2 > Y_LIMIT) + m_children[i].readCoords(this); + + if(m_children[i].m_type != WTYPE_ICON_BUTTON && m_children[i].m_type != WTYPE_BUTTON) { - m_scroll_pos_y = WGT_SCROLL_END_TOP; - } - else if(-m_scroll_pos_y * 2 > Y_LIMIT) - { - m_scroll_pos_y = WGT_SCROLL_START_BOTTOM; - } - - //X-axis wrapping - if(m_scroll_pos_x > m_width ) - { - m_scroll_pos_x = WGT_SCROLL_END_LEFT; - } - else if(m_scroll_pos_x < -text_width ) - { - m_scroll_pos_x = WGT_SCROLL_START_RIGHT; + std::cerr << "/!\\ Warning /!\\ : ribbon widgets can only have (icon)button widgets as children " << std::endl; + continue; } + total_needed_space += m_children[i].w; } -} - -//----------------------------------------------------------------------------- -void Widget::draw() -{ - glPushMatrix(); - - glClear( GL_STENCIL_BUFFER_BIT ); - - applyTransformations(); - - /*Start handling on/off features*/ - if( m_enable_texture ) + + int free_h_space = w - total_needed_space; + + int biggest_y = 0; + const int button_y = 10; + float global_zoom = 1; + + const int min_free_space = 50; + if(free_h_space < min_free_space) // buttons are too big to fit :( zoom out { - glEnable( GL_TEXTURE_2D ); - if( glIsTexture ( m_texture )) + global_zoom = (float)w / (float)( w - free_h_space + min_free_space ); + free_h_space = w - total_needed_space*global_zoom; + } + + const int one_button_space = (int)round((float)w / (float)subbuttons_amount); + + // ---- add children + for(int i=0; i subsize = rect(widget_x - one_button_space/2+2, 0, + widget_x + one_button_space/2-2, h); + + stringw message = m_children[i].m_properties[PROP_TEXT].c_str(); + subbtn = GUIEngine::getGUIEnv()->addButton(subsize, btn, ++id_counter, message.c_str(), L""); + m_children[i].m_element = subbtn; + } + else if(m_children[i].m_type == WTYPE_ICON_BUTTON) + { + const bool has_label = m_children[i].m_properties[PROP_TEXT].size() > 0; + + // how much space to keep for the label under the button + const int needed_space_under_button = has_label ? 30 : 10; // quite arbitrary for now + // if button too high to fit, scale down + float zoom = global_zoom; + while(button_y + m_children[i].h*zoom + needed_space_under_button > h) zoom -= 0.01; + + // ---- add bitmap button part + const float image_w = m_children[i].w*zoom; + rect subsize = rect(widget_x - image_w/2.0, button_y, + widget_x + image_w/2.0, button_y + m_children[i].h*zoom); + + subbtn = new MyGUIButton(GUIEngine::getGUIEnv(), btn, ++id_counter_2, subsize, true); + + m_children[i].m_element = subbtn; + subbtn->setUseAlphaChannel(true); + subbtn->setImage( GUIEngine::getDriver()->getTexture(m_children[i].m_properties[PROP_ICON].c_str()) ); + + // ---- label part + if(has_label) + { + subsize = rect(widget_x - one_button_space/2, + (button_y + m_children[i].h)*zoom + 5 /* leave 5 pixels between button and label */, + widget_x + one_button_space/2, h); + + stringw message = m_children[i].m_properties[PROP_TEXT].c_str(); + IGUIStaticText* label = GUIEngine::getGUIEnv()->addStaticText(message.c_str(), subsize, false, true, btn); + label->setTextAlignment(EGUIA_CENTER, EGUIA_CENTER); + label->setTabStop(false); + label->setNotClipped(true); + const int final_y = subsize.getHeight() + label->getTextHeight(); + if(final_y > biggest_y) biggest_y = final_y; + } } else { - std::cerr << "Warning: widget tried to draw null texture.\n"; - std::cerr << "(Did you set the texture?)\n"; + std::cerr << "/!\\ Warning /!\\ : Unknown contents type in ribbon" << std::endl; } - } - else - { - //This ensures that a texture from another module doesn't affects the widget - glDisable ( GL_TEXTURE_2D ); - } - - if( glIsList ( m_rect_list )) - { - //m_enable_rect == false doesn't disables this chunk of code because - //we still need to draw the rect into OpenGL's selection buffer even - //if it's not visible - - //FIXME: maybe there is some sort of stacking method to disable/enable - //color masking - if(!m_enable_rect) - { - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - } - else - { - glColor4fv(m_rect_color); - } - - //FIXME: I should probably revert the values to the defaults within the widget manager - //(if glPushAttrib() doesn't), but right now this is the only thing using the - //stencil test anyways. - glStencilFunc(GL_ALWAYS, 0x1, 0x1); - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - glCallList(m_rect_list); - - if(!m_enable_rect) - { - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - } - } - else - { - std::cerr << "Warning: widget tried to draw null rect list.\n"; - std::cerr << "(Did you created the rect?)\n"; - } - - if(glIsList(m_border_list)) - { - if( m_enable_border ) - { - glDisable ( GL_TEXTURE_2D ); - glColor4fv(m_border_color); - - //FIXME: I should probably revert the values to the defaults within the widget manager - //(if glPushAttrib() doesn't) - glStencilFunc(GL_ALWAYS, 0x1, 0x1); - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - glCallList(m_border_list); - } - } - else - { - std::cerr << "Warning: widget tried to draw null border list.\n"; - std::cerr << "(Did you created the border?)\n"; - } - - if( m_enable_track ) - { - if( m_track_num > (int)(track_manager->getNumberOfTracks()) - 1) - { - std::cerr << "Warning: widget tried to draw a track with a " << - "number bigger than the amount of tracks available.\n"; - } - - if( m_track_num != -1 ) - { - track_manager->getTrack( m_track_num )->drawScaled2D( 0.0f, - 0.0f, (float)m_width, (float)m_height); - } - else - { - std::cerr << "Warning: widget tried to draw an unset track.\n"; - } - } - - if(m_enable_text) - { - //For multilines we have to do a *very* ugly workaround for a plib - //bug which causes multiline strings to move to the left, at least - //while centering, and also gives wrong values for the size of the - //text when there are multiple lines. Hopefully this work around will - //be removed when we move away from plib; the scrolling and the other - //text handling should be cleaned. Also, for some reason, different - //positions are needed if the text is centered, and on top of that, - //it's not 100% exact. Sorry for the mess. - size_t line_end = 0; - int lines = 0; - - do - { - line_end = m_text.find_first_of('\n', line_end + 1); - ++lines; - } while( line_end != std::string::npos ); - - - int x_pos = (int)(m_scroll_pos_x - m_width * 0.5f); - int y_pos = - (int)m_scroll_pos_y + (lines - 1 )* m_text_size / 2; - - size_t line_start = 0; - bool draw; - - glStencilFunc(GL_EQUAL,0x1,0x1); - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - do - { - draw = true; - if(y_pos + m_text_size / 2 > m_height / 2 ) - { - if(y_pos - m_text_size / 2 > m_height / 2) draw = false; - } - else if(y_pos + (m_height - m_text_size) / 2 < 0) - { - if(y_pos + (m_height + m_text_size) / 2 < 0) draw = false; - } - - line_end = m_text.find_first_of('\n', line_start); - - if( draw ) - { - glScalef(m_text_scale, m_text_scale, 1.0f); - m_font->PrintBold(m_text.substr(line_start, line_end - line_start).c_str(), - m_text_size, - x_pos, y_pos - m_text_size / 2, - m_text_color, 1.0f, 1.0f); - glScalef(1.0f/m_text_scale, 1.0f/m_text_scale, 1.0f); - } - - y_pos -= m_text_size; - line_start = line_end + 1; - - } while( line_end != std::string::npos ); - } - glPopMatrix(); + + subbtn->setTabStop(false); + subbtn->setTabGroup(false); + + m_children[i].id = subbtn->getID(); + m_children[i].m_parent = this; + }// next sub-button + + id = m_element->getID(); + m_element->setTabOrder(id); + m_element->setTabGroup(false); + updateSelection(); } -//----------------------------------------------------------------------------- -void Widget::applyTransformations() +#if 0 +#pragma mark - +#pragma mark Spinner +#endif + +void SpinnerWidget::add() { - /* OpenGL transformations are affected by the order of the calls; but the - * operations must be called in the inverse order that you want them to - * be applied, since the calls are stacked, and the one at the top is - * done first, till the one at the bottom. - */ - glTranslatef ( (GLfloat)(m_x + m_width * 0.5f), (GLfloat)(m_y + m_height * 0.5f), 0); - - if( m_enable_rotation ) + // retrieve min and max values + std::string min_s = m_properties[PROP_MIN_VALUE]; + std::string max_s = m_properties[PROP_MAX_VALUE]; + { - glRotatef( (GLfloat)m_rotation_angle, 0.0f, 0.0f, (GLfloat)1.0f ); + int i; + std::istringstream myStream(min_s); + bool is_number = (myStream >> i); + if(is_number) m_min = i; + else m_min = 0; + } + { + int i; + std::istringstream myStream(max_s); + bool is_number = (myStream >> i); + if(is_number) m_max = i; + else m_max = 10; + } + + m_value = (m_min + m_max)/2; + + // create sub-widgets if they don't already exist + if(m_children.size() == 0) + { + std::string& icon = m_properties[PROP_ICON]; + m_graphical = icon.size()>0; + + m_children.push_back( new Widget() ); + m_children.push_back( new Widget() ); + m_children.push_back( new Widget() ); + } + + rect widget_size = rect(x, y, x + w, y + h); + IGUIButton * btn = GUIEngine::getGUIEnv()->addButton(widget_size, NULL, ++id_counter, L""); + m_element = btn; + + // left arrow + rect subsize_left_arrow = rect(0 ,0, h, h); + IGUIButton * left_arrow = GUIEngine::getGUIEnv()->addButton(subsize_left_arrow, btn, ++id_counter_2, L"<<"); + m_children[0].m_element = left_arrow; + left_arrow->setTabStop(false); + m_children[0].m_parent = this; + m_children[0].m_properties[PROP_ID] = "left"; + m_children[0].id = m_children[0].m_element->getID(); + + // label + if(m_graphical) + { + char imagefile[128]; + std::string& icon = m_properties[PROP_ICON]; + snprintf(imagefile, 128, icon.c_str(), m_value); + ITexture* texture = GUIEngine::getDriver()->getTexture(imagefile); + const int texture_width = texture->getSize().Width; + const int free_h_space = w-h*2-texture_width; // to center image + + rect subsize_label = rect(h+free_h_space/2, 0, w-h+free_h_space/2, h); + //IGUIButton* subbtn = GUIEngine::getGUIEnv()->addButton(subsize_label, btn, ++id_counter_2, L""); + IGUIImage * subbtn = GUIEngine::getGUIEnv()->addImage(subsize_label, btn, ++id_counter_2); + m_children[1].m_element = subbtn; + subbtn->setUseAlphaChannel(true); + + subbtn->setImage(texture); + //subbtn->setScaleImage(true); + } + else + { + rect subsize_label = rect(h, 0, w-h, h); + IGUIStaticText* label = GUIEngine::getGUIEnv()->addStaticText(stringw(m_value).c_str(), subsize_label, false, true, btn); + m_children[1].m_element = label; + label->setTextAlignment(EGUIA_CENTER, EGUIA_CENTER); + label->setTabStop(false); + label->setNotClipped(true); + } + + + // right arrow + rect subsize_right_arrow = rect(w-h, 0, w, h); + IGUIButton * right_arrow = GUIEngine::getGUIEnv()->addButton(subsize_right_arrow, btn, ++id_counter_2, L">>"); + right_arrow->setTabStop(false); + m_children[2].m_element = right_arrow; + m_children[2].m_parent = this; + m_children[2].m_properties[PROP_ID] = "right"; + m_children[2].id = m_children[2].m_element->getID(); +} +// ----------------------------------------------------------------------------- +bool SpinnerWidget::rightPressed() +{ + if(m_value+1 <= m_max) setValue(m_value+1); + return true; +} +// ----------------------------------------------------------------------------- +bool SpinnerWidget::leftPressed() +{ + if(m_value-1 >= m_min) setValue(m_value-1); + return true; +} +// ----------------------------------------------------------------------------- +bool SpinnerWidget::transmitEvent(Widget* w, std::string& originator) +{ + if(originator == "left") leftPressed(); + else if(originator == "right") rightPressed(); + + GUIEngine::getGUIEnv()->setFocus(m_element); + return true; +} +// ----------------------------------------------------------------------------- +void SpinnerWidget::addLabel(std::string label) +{ + m_labels.push_back(label); + m_min = 0; + m_max = m_labels.size()-1; + setValue(0); +} +// ----------------------------------------------------------------------------- +void SpinnerWidget::setValue(const int new_value) +{ + m_value = new_value; + + if(m_graphical) + { + char imagefile[128]; + std::string& icon = m_properties[PROP_ICON]; + snprintf(imagefile, 128, icon.c_str(), m_value); + //((IGUIButton*)(m_children[1].m_element))->setImage(GUIEngine::getDriver()->getTexture(imagefile)); + ((IGUIImage*)(m_children[1].m_element))->setImage(GUIEngine::getDriver()->getTexture(imagefile)); + } + else if(m_labels.size() > 0) + m_children[1].m_element->setText( stringw(m_labels[new_value].c_str()).c_str() ); + else + m_children[1].m_element->setText( stringw(m_value).c_str() ); +} + +#if 0 +#pragma mark - +#pragma mark Ribbon Grid Widget +#endif + +RibbonGridWidget::RibbonGridWidget() +{ + m_scroll_offset = 0; + m_needed_cols = 0; + m_col_amount = 0; + m_has_label = false; + + m_left_widget = NULL; + m_right_widget = NULL; +} +// ----------------------------------------------------------------------------- +void RibbonGridWidget::add() +{ + m_has_label = m_properties[PROP_TEXT].size() > 0; + const int label_height = m_has_label ? 25 : 0; + + int child_width, child_height; + child_width = atoi(m_properties[PROP_CHILD_WIDTH].c_str()); + child_height = atoi(m_properties[PROP_CHILD_HEIGHT].c_str()); + + if( child_width == 0 || child_height == 0 ) + { + std::cerr << "/!\\ Warning /!\\ : ribbon grid widgets require 'child_width' and 'child_height' arguments" << std::endl; + child_width = 256; + child_height = 256; + } + + // decide how many rows and column we can show in the available space + int row_amount = (int)round((h-label_height) / (float)child_height); + //if(row_amount < 2) row_amount = 2; + //else if(row_amount > 5) row_amount = 5; + const float row_height = (float)(h - label_height)/(float)row_amount; + + // FIXME - that code seems to work but it's a bit obscure why + float ratio_zoom = (float)child_height / (float)row_height; + if(ratio_zoom > 1) ratio_zoom = 1 / ratio_zoom; + m_col_amount = (int)round( w / ratio_zoom / ( child_width + 20 ) ); + if(m_col_amount < 5) m_col_amount = 5; + + // add rows + for(int n=0; nx = x; + ribbon->y = y + n*row_height; + ribbon->w = w; + ribbon->h = row_height; + ribbon->m_type = WTYPE_RIBBON; + ribbon->m_properties[PROP_ID] = this->m_properties[PROP_ID]; + ribbon->m_parent = this; + + // add columns + for(int i=0; im_properties[PROP_ICON]="track?.png"; + + // set size to get proper ratio (as most textures are saved sccaled down to 256x256) + icon->m_properties[PROP_WIDTH] = m_properties[PROP_CHILD_WIDTH]; + icon->m_properties[PROP_HEIGHT]= m_properties[PROP_CHILD_HEIGHT]; + + icon->m_type = WTYPE_ICON_BUTTON; + ribbon->m_children.push_back( icon ); + } + m_children.push_back( ribbon ); + m_rows.push_back( ribbon ); + ribbon->add(); + } + + // add label at bottom + if(m_has_label) + { + rect label_size = rect(x, y + h - label_height, x+w, y+h); + m_label = GUIEngine::getGUIEnv()->addStaticText(L"Selecte a track...", label_size, false, true /* word wrap */, NULL, -1); + m_label->setTextAlignment( EGUIA_CENTER, EGUIA_CENTER ); + } + + // add arrow butotns on each side + // FIXME? these arrow buttons are outside of the widget's boundaries + // create sub-widgets if they don't already exist + if(m_left_widget == NULL) + { + m_left_widget = new Widget(); + m_right_widget = new Widget(); + } + + const int average_y = y + (h-label_height)/2; + const int button_w = 30, button_h = 50; + rect right_arrow_location = rect(x + w, + average_y - button_h/2, + x + w + button_w, + average_y + button_h/2); + stringw rmessage = ">>"; + IGUIButton* right_arrow = GUIEngine::getGUIEnv()->addButton(right_arrow_location, NULL, ++id_counter_2, rmessage.c_str(), L""); + right_arrow->setTabStop(false); + m_right_widget->m_element = right_arrow; + m_right_widget->m_parent = this; + m_right_widget->m_properties[PROP_ID] = "right"; + m_right_widget->id = right_arrow->getID(); + m_children.push_back( m_right_widget ); + + rect left_arrow_location = rect(x - button_w, + average_y - button_h/2, + x, + average_y + button_h/2); + stringw lmessage = "<<"; + IGUIButton* left_arrow = GUIEngine::getGUIEnv()->addButton(left_arrow_location, NULL, ++id_counter_2, lmessage.c_str(), L""); + left_arrow->setTabStop(false); + m_left_widget->m_element = left_arrow; + m_left_widget->m_parent = this; + m_left_widget->m_properties[PROP_ID] = "left"; + m_left_widget->id = left_arrow->getID(); + m_children.push_back( m_left_widget ); +} +// ----------------------------------------------------------------------------- +bool RibbonGridWidget::rightPressed() +{ + RibbonWidget* w = getSelectedRibbon(); + if(w != NULL) + { + w->rightPressed(); + + updateLabel(); + propagateSelection(); + } + return false; +} +// ----------------------------------------------------------------------------- +bool RibbonGridWidget::leftPressed() +{ + RibbonWidget* w = getSelectedRibbon(); + if(w != NULL) + { + w->leftPressed(); + + updateLabel(); + propagateSelection(); + } + return false; +} +// ----------------------------------------------------------------------------- +bool RibbonGridWidget::transmitEvent(Widget* w, std::string& originator) +{ + if(originator=="left") + { + scroll(-1); + return false; + } + if(originator=="right") + { + scroll(1); + return false; + } + + // if it's something else, it might be a ribbon child with its own parent + if(w->m_parent != NULL && w->m_parent != this) + return w->m_parent->transmitEvent(w, originator); + + // if we got there, must be a ribbon itself. in this case we can just transmit the event directly + return true; +} +void RibbonGridWidget::scroll(const int x_delta) +{ + m_scroll_offset += x_delta; + + const int max_scroll = std::max(m_col_amount, m_needed_cols) - 1; + + if(m_scroll_offset < 0) m_scroll_offset = max_scroll; + else if(m_scroll_offset > max_scroll) m_scroll_offset = 0; + + updateItemDisplay(); +} +// ----------------------------------------------------------------------------- +bool RibbonGridWidget::mouseHovered(Widget* child) +{ + updateLabel(); + propagateSelection(); + return false; +} +// ----------------------------------------------------------------------------- +/** RibbonGridWidget is made of several ribbons; each of them thus has + its own selection independently of each other. To keep a grid feeling + (i.e. you remain in the same column when pressing up/down), this method is + used to ensure that all children ribbons always select the same column */ +void RibbonGridWidget::propagateSelection() +{ + // find selection in current ribbon + RibbonWidget* selected_ribbon = (RibbonWidget*)getSelectedRibbon(); + if(selected_ribbon == NULL) return; + const int i = selected_ribbon->m_selection; + + // set same selection in all ribbons + const int row_amount = m_rows.size(); + for(int n=0; nm_selection = i; + ribbon->updateSelection(); + } } } +// ----------------------------------------------------------------------------- +void RibbonGridWidget::focused() +{ + updateLabel(); +} +// ----------------------------------------------------------------------------- +void RibbonGridWidget::updateLabel(RibbonWidget* from_this_ribbon) +{ + if(!m_has_label) return; + + RibbonWidget* row = from_this_ribbon ? from_this_ribbon : (RibbonWidget*)getSelectedRibbon(); + if(row == NULL) return; + + + std::string selection_id = row->getSelectionName(); + + const int amount = m_items.size(); + for(int n=0; nsetText( stringw(m_items[n].m_user_name.c_str()).c_str() ); + return; + } + } + + m_label->setText( L"Random" ); +} +// ----------------------------------------------------------------------------- +void RibbonGridWidget::addItem( std::string user_name, std::string code_name, std::string image_file ) +{ + ItemDescription desc; + desc.m_user_name = user_name; + desc.m_code_name = code_name; + desc.m_sshot_file = image_file; + + m_items.push_back(desc); +} +// ----------------------------------------------------------------------------- +void RibbonGridWidget::updateItemDisplay() +{ + int trackid = 0; + + const int row_amount = m_rows.size(); + const int track_amount = m_items.size(); + + m_needed_cols = (int)ceil( (float)track_amount / (float)row_amount ); + + for(int n=0; n(&row.m_children[i]); + assert(icon != NULL); + IGUIButton* button = dynamic_cast(icon->m_element); + assert(button != NULL); + + trackid = ((i+m_scroll_offset)%m_col_amount)*row_amount + n%row_amount; + + if( trackid < track_amount ) + { + button->setImage( GUIEngine::getDriver()->getTexture( m_items[trackid].m_sshot_file.c_str()) ); + button->setPressedImage( GUIEngine::getDriver()->getTexture( m_items[trackid].m_sshot_file.c_str()) ); + icon->m_properties[PROP_ID] = m_items[trackid].m_code_name; + // trackid++; + } + else + { + button->setImage( GUIEngine::getDriver()->getTexture("track?.png") ); + button->setPressedImage( GUIEngine::getDriver()->getTexture("track?.png") ); + icon->m_properties[PROP_ID] = "track?.png"; + } + } // next column + } // next row +} +// ----------------------------------------------------------------------------- +const std::string& RibbonGridWidget::getSelectionName() +{ + RibbonWidget* row = (RibbonWidget*)getSelectedRibbon(); + if(row != NULL) return row->getSelectionName(); + + static const std::string nothing = ""; + return nothing; +} +// ----------------------------------------------------------------------------- +RibbonWidget* RibbonGridWidget::getRowContaining(Widget* w) const +{ + const int row_amount = m_rows.size(); + for(int n=0; nhasFocus(row->m_element) || + m_element->isMyChild( GUIEngine::getGUIEnv()->getFocus() ) ) return (RibbonWidget*)row; + } + } + + return NULL; +} \ No newline at end of file diff --git a/src/gui/widget.hpp b/src/gui/widget.hpp index 106fb1034..ac471090a 100644 --- a/src/gui/widget.hpp +++ b/src/gui/widget.hpp @@ -1,246 +1,287 @@ -// -// SuperTuxKart - a fun racing game with go-kart -// This code originally from Neverball copyright (C) 2003 Robert Kooima -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +#ifndef HEADER_WIDGET_HPP +#define HEADER_WIDGET_HPP -/* This file should only be used directly by the widget manager. Also, all - * the coordinates in the widget.* and widget_manager.* are based on OpenGL, - * which means that the 0 in the Y-axis is in the bottom, not the top. - */ +#include +#include "ptr_vector.hpp" -#ifndef HEADER_WIDGET_H -#define HEADER_WIDGET_H +using namespace irr; +using namespace gui; -// This include strings causes very many warning in the gui subdir: -// xlocnum(590) : warning C4312: 'type cast' : conversion from 'uintptr_t' to 'void *' of greater size -// These can apparently be removed by removing 64 bit compatibility warnings, or -// just disable the warning during the include: -#if defined(WIN32) && !defined(__CYGWIN__) -# pragma warning(disable:4312) -#endif -#include -#if defined(WIN32) && !defined(__CYGWIN__) -# pragma warning(default:4312) -#endif - -#ifdef __APPLE__ -# include -#else -# ifdef WIN32 -# define WIN32_LEAN_AND_MEAN -# include -# endif -# include -#endif -#include "gui/font.hpp" -#include "user_config.hpp" - -// For widgets with fixed position -enum WidgetDirection{ WGT_DIR_FROM_LEFT, WGT_DIR_FROM_RIGHT, - WGT_DIR_LEFT_WIDGET, WGT_DIR_RIGHT_WIDGET, WGT_DIR_CENTER, - WGT_DIR_FROM_TOP, WGT_DIR_FROM_BOTTOM, - WGT_DIR_ABOVE_WIDGET, WGT_DIR_UNDER_WIDGET}; - -enum WidgetFontSize { WGT_FNT_SML = 18, WGT_FNT_MED = 24, WGT_FNT_LRG = 30}; - -enum WidgetArea //One of the uses of this, is for rounded corners +namespace GUIEngine { - WGT_AREA_NONE = 0, - WGT_AREA_NW = 1, WGT_AREA_SW = 2, WGT_AREA_NE = 4, WGT_AREA_SE = 8, - WGT_AREA_LFT = (WGT_AREA_NW | WGT_AREA_SW), - WGT_AREA_RGT = (WGT_AREA_NE | WGT_AREA_SE), - WGT_AREA_TOP = (WGT_AREA_NW | WGT_AREA_NE), - WGT_AREA_BOT = (WGT_AREA_SW | WGT_AREA_SE), - WGT_AREA_ALL = (WGT_AREA_TOP | WGT_AREA_BOT) -}; - -enum WidgetFont -{ - WGT_FONT_GUI, - WGT_FONT_RACE -}; - -//The lowest scroll values here must be bigger than -//Widget::MAX_SCROLL or lower than -Widget::MAX_SCROLL -enum WidgetScrollPos -{ - //For the X axis - WGT_SCROLL_START_LEFT = 2000001, - WGT_SCROLL_START_RIGHT = 2000002, - WGT_SCROLL_END_LEFT = -2000001, - WGT_SCROLL_END_RIGHT = -2000002, - //For the Y axis - WGT_SCROLL_START_TOP = 1000001, - WGT_SCROLL_START_BOTTOM = 1000002, - WGT_SCROLL_END_TOP = -1000001, - WGT_SCROLL_END_BOTTOM = -1000002, - //Works for both axis - WGT_SCROLL_CENTER = 3000000 -}; - -//I suggest that you do not use the white or light colors for the rects in -//most cases, because they don't have lighter versions that can be used to -//highlight those rects and then revert them, for example, when you select a -//widget. For textures, you should use WGT_WHITE usually, thought you can get -//nice effects by using other colors. -extern const GLfloat WGT_WHITE [4]; -extern const GLfloat WGT_GRAY [4]; -extern const GLfloat WGT_BLACK [4]; -extern const GLfloat WGT_YELLOW [4]; -extern const GLfloat WGT_RED [4]; -extern const GLfloat WGT_GREEN [4]; -extern const GLfloat WGT_BLUE [4]; -extern const GLfloat WGT_TRANS_WHITE [4]; -extern const GLfloat WGT_TRANS_GRAY [4]; -extern const GLfloat WGT_TRANS_BLACK [4]; -extern const GLfloat WGT_TRANS_YELLOW [4]; -extern const GLfloat WGT_TRANS_RED [4]; -extern const GLfloat WGT_TRANS_GREEN [4]; -extern const GLfloat WGT_TRANS_BLUE [4]; - -extern const GLfloat WGT_LIGHT_GRAY [4]; -extern const GLfloat WGT_LIGHT_BLACK [4]; -extern const GLfloat WGT_LIGHT_YELLOW [4]; -extern const GLfloat WGT_LIGHT_RED [4]; -extern const GLfloat WGT_LIGHT_GREEN [4]; -extern const GLfloat WGT_LIGHT_BLUE [4]; -extern const GLfloat WGT_LIGHT_TRANS_GRAY [4]; -extern const GLfloat WGT_LIGHT_TRANS_BLACK [4]; -extern const GLfloat WGT_LIGHT_TRANS_YELLOW [4]; -extern const GLfloat WGT_LIGHT_TRANS_RED [4]; -extern const GLfloat WGT_LIGHT_TRANS_GREEN [4]; -extern const GLfloat WGT_LIGHT_TRANS_BLUE [4]; - -extern const GLfloat WGT_TRANSPARENT [4]; - - -class Widget -{ - //The only class that can access the Widget class is WidgetManager; - //they are meant to always be used together, and the widgets should only - //be used through the WidgetManager class. - friend class WidgetManager; - - /* Basic widget properties that will always be used. */ - int m_x, m_y; - int m_width, m_height; - int m_radius; - - /* support for specifying the position of a widget */ - bool m_fixed_position; - WidgetDirection m_horizontal, m_vertical; - float m_percentage_x, m_percentage_y; - const Widget *m_widget_horizontal, - *m_widget_vertical; - - /* Low level features. They are off by default. */ - bool m_enable_rect; - GLuint m_rect_list; //A display list number that draws the rectangle with - //possibly rounded corners. - const GLfloat *m_rect_color; //This const cannot change the value it points to, but it - //can change where it points to. - WidgetArea m_round_corners; - - bool m_enable_border; - GLuint m_border_list; //Display list for the border - float m_border_percentage; - const GLfloat *m_border_color; - - bool m_enable_texture; - GLuint m_texture; - - bool m_enable_text; - std::string m_text; - WidgetFontSize m_text_size; - Font *m_font; - const GLfloat *m_text_color; - - //TODO: This variable exists only to go around a bug; should be removed - //after better restructuration. - WidgetFont m_curr_widget_font; - - static const int MAX_SCROLL; - bool m_enable_scroll; - float m_scroll_pos_x; - float m_scroll_pos_y; - int m_scroll_speed_x; - int m_scroll_speed_y; - - bool m_enable_rotation; - float m_rotation_angle; - int m_rotation_speed; - - - //The widget calls the Track::drawScaled2D() function to draw a given - //track, and m_track_num tells which track to draw. - int m_enable_track; - int m_track_num; - - /* High level, pattern following features; they deactivate themselves - * after they follow their pattern, and might use low level features.*/ - static const float MAX_TEXT_SCALE; - static const float MIN_TEXT_SCALE; - float m_text_scale; //Used for the pulse effect - - Widget - ( - const int X_, - const int Y_, - const int WIDTH_, - const int HEIGHT_ - ); - ~Widget(); - - void update(const float DELTA); - - /* Time limited features' functions. */ - void pulse() {m_text_scale = MAX_TEXT_SCALE;} - - /* Convenience functions. */ - - void lightenColor(); - void darkenColor(); - - void setFont( const WidgetFont FONT ); - void setTexture( const std::string& FILENAME, const bool is_full_path=true ); - - /* position support */ - bool hasFixedPosition() const {return m_fixed_position;} - void layout(); - /* Functions created simply to organize the code */ - bool createRect(); - void updateVariables( const float DELTA ); - void draw(); - void applyTransformations(); -public: - void setPosition(WidgetDirection horizontal, float percentage_horizontal, - WidgetDirection vertical, float percentage_vertical) + + enum WidgetType { - setPosition(horizontal, percentage_horizontal, NULL, - vertical, percentage_vertical, NULL); - } - void setPosition(WidgetDirection horizontal, float percentage_horizontal, - const Widget *w_hori, - WidgetDirection vertical, float percentage_vertical, - const Widget *w_verti); - void resizeToText(); //This checks if the widget is smaller than the - //text, and if so, changes the width and height. + WTYPE_NONE = -1, + WTYPE_RIBBON, + WTYPE_SPINNER, + WTYPE_BUTTON, + WTYPE_GAUGE, + WTYPE_ICON_BUTTON, + WTYPE_CHECKBOX, + WTYPE_LABEL, + WTYPE_MODEL, + WTYPE_SPACER, + WTYPE_DIV, + WTYPE_RIBBON_GRID + }; + + enum Property + { + PROP_ID = 100, + PROP_PROPORTION, + PROP_WIDTH, + PROP_HEIGHT, + PROP_CHILD_WIDTH, + PROP_CHILD_HEIGHT, + PROP_WORD_WRAP, + PROP_GROW_WITH_TEXT, // yet unused + PROP_X, + PROP_Y, + PROP_LAYOUT, + PROP_ALIGN, + PROP_TEXT, + PROP_ICON, + PROP_TEXT_ALIGN, + PROP_MIN_VALUE, + PROP_MAX_VALUE + }; + + class Widget + { + protected: + friend class RibbonWidget; + friend class Screen; + friend class SpinnerWidget; + friend class Skin; + friend class RibbonGridWidget; + + /** + * Can be used in children to indicate whether a widget is selected or not + * - in widgets where it makes sense (e.g. ribbon children) and where the + * irrLicht widget can not directly contain this state + */ + bool m_selected; + + /** + * Create and add the irrLicht widget(s) associated with this object. + * Call after Widget was read from XML file and laid out. + */ + virtual void add() {} + + /** + * called when left/right keys pressed and focus is on widget. + * Returns 'true' if main event handler should be notified of a change. + * Override in children to be notified of left/right events. + */ + virtual bool rightPressed() { return false; } + virtual bool leftPressed() { return false; } + + /** used when you set parents - see m_parent explainations below. + returns whether main event callback should be notified or not */ + virtual bool transmitEvent(Widget* w, std::string& originator) { return true; } + + /** used when you set eventSupervisors - see m_parent explainations below + called when one of a widget's children is hovered. + Returns 'true' if main event handler should be notified of a change. */ + virtual bool mouseHovered(Widget* child) { return false; } + + /** override in children if you need to know when the widget is focused */ + virtual void focused() {} + + void readCoords(Widget* parent=NULL); + + /** + * This is set to NULL by default; set to something else in a child to mean + * that events happening on the said child should not go straight into the + * event handler. Instead, they will first be passed to m_parent->transmitEvent, + * which is usually the parent analysing events from its children. + * This is especially useful with logical widgets built with more than + * one irrlicht widgets (e.g. Spinner, Ribbon) + */ + Widget* m_parent; + + static bool convertToCoord(std::string& x, int* absolute, int* percentage); + public: + virtual ~Widget() {} + + /** + * If this widget has any children, they go here. Children can be either + * specified in the XML file (e.g. Ribbon or Div children), or can also + * be created automatically for logical widgets built with more than + * one irrlicht widgets (e.g. Spinner) + */ + ptr_vector m_children; + + /** Type of this widget */ + WidgetType m_type; + + /** coordinates of the widget */ + int x, y, w, h; + + /** numerical ID used by irrLicht to identify this widget + * (not the same as the string identificator specified in the XML file) + */ + int id; + + /** + * IrrLicht widget created to represent this object. + */ + IGUIElement* m_element; + + /** A map that holds values for all specified widget properties (in the XML file)*/ + std::map m_properties; + + + Widget(); -}; + static void resetIDCounters(); + + bool isSelected() const { return m_selected; } -#endif + }; + + class ButtonWidget : public Widget + { + void add(); + public: + virtual ~ButtonWidget() {} + }; + + class LabelWidget : public Widget + { + void add(); + public: + virtual ~LabelWidget() {} + }; + + class CheckBoxWidget : public Widget + { + void add(); + public: + virtual ~CheckBoxWidget() {} + }; + -/* EOF */ + class GaugeWidget : public Widget + { + void add(); + public: + virtual ~GaugeWidget() {} + }; + + class SpinnerWidget : public Widget + { + int m_value, m_min, m_max; + std::vector m_labels; + bool m_graphical; + + bool transmitEvent(Widget* w, std::string& originator); + bool rightPressed(); + bool leftPressed(); + void add(); + public: + virtual ~SpinnerWidget() {} + void setValue(const int new_value); + void addLabel(std::string label); + }; + + class IconButtonWidget : public Widget + { + bool clickable; + void add(); + public: + virtual ~IconButtonWidget() {} + IconButtonWidget(const bool clickable=true); + }; + + enum RibbonType + { + RIBBON_COMBO, /* select one item out of many, like in a combo box */ + RIBBON_TOOLBAR, /* a row of individual buttons */ + RIBBON_TABS /* a tab bar */ + }; + + class RibbonWidget : public Widget + { + friend class RibbonGridWidget; + friend class Screen; + + int m_selection; + RibbonType m_ribbon_type; + + void add(); + + bool rightPressed(); + bool leftPressed(); + bool mouseHovered(Widget* child); + + void updateSelection(); + bool transmitEvent(Widget* w, std::string& originator); + void focused(); + public: + virtual ~RibbonWidget() {} + + int getSelection() const { return m_selection; } + RibbonType getRibbonType() const { return m_ribbon_type; } + const std::string& getSelectionName() { return m_children[m_selection].m_properties[PROP_ID]; } + + RibbonWidget(const RibbonType type=RIBBON_COMBO); + }; + + struct ItemDescription + { + std::string m_user_name; + std::string m_code_name; + std::string m_sshot_file; + }; + + class RibbonGridWidget : public Widget + { + friend class RibbonWidget; + + virtual ~RibbonGridWidget() {} + + /* reference pointers only, the actual instances are owned by m_children */ + ptr_vector m_rows; + + std::vector m_items; + IGUIStaticText* m_label; + RibbonWidget* getSelectedRibbon() const; + RibbonWidget* getRowContaining(Widget* w) const; + + void updateLabel(RibbonWidget* from_this_ribbon=NULL); + + void propagateSelection(); + void focused(); + + bool transmitEvent(Widget* w, std::string& originator); + + void scroll(const int x_delta); + + int m_scroll_offset; + int m_needed_cols; + int m_col_amount; + + bool m_has_label; + + /* reference pointers only, the actual instances are owned by m_children */ + Widget* m_left_widget; + Widget* m_right_widget; + public: + RibbonGridWidget(); + + void add(); + bool rightPressed(); + bool leftPressed(); + + void addItem( std::string user_name, std::string code_name, std::string image_file ); + void updateItemDisplay(); + + bool mouseHovered(Widget* child); + + const std::string& getSelectionName(); + }; + +} +#endif \ No newline at end of file diff --git a/src/gui/widget_manager.cpp b/src/gui/widget_manager.cpp deleted file mode 100644 index d4b5d21d6..000000000 --- a/src/gui/widget_manager.cpp +++ /dev/null @@ -1,2178 +0,0 @@ -// -// SuperTuxKart - a fun racing game with go-kart -// This code originally from Neverball copyright (C) 2003 Robert Kooima -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#include "widget_manager.hpp" - -#include "user_config.hpp" - -#ifdef __APPLE__ -# include -#else -# include -#endif - -#include -#include -#include -#include -#include -#include - -WidgetManager *widget_manager; - -const int WidgetManager::WGT_NONE = -1; - -WidgetManager::WidgetManager() : -m_prev_layout_pos(WGT_AREA_NONE), -m_x( -1 ), m_y( -1 ), -m_selected_wgt_token( WGT_NONE ), -m_selection_change( false ) -{ - restoreDefaultStates(); -} - -//----------------------------------------------------------------------------- -WidgetManager::~WidgetManager() -{ - reset(); -} - -//----------------------------------------------------------------------------- -Widget *WidgetManager::addWgt -( - const int TOKEN, - const int MIN_WIDTH, - const int MIN_HEIGHT -) -{ - if( TOKEN != WGT_NONE && findId( TOKEN ) != WGT_NONE ) - { - std::cerr << "WARNING: tried to create widget with token " << - TOKEN << " but it is already in use.\n"; - return NULL; - } - - WidgetID new_id; - new_id.token = TOKEN; - - //There is no reason to make a token-less widget active, so if the token - //WGT_NONE, the widget is forced to be inactive, preventing bugs. - new_id.active = TOKEN != WGT_NONE ? m_default_active : false; - - new_id.min_width = MIN_WIDTH; - new_id.min_height = MIN_HEIGHT; - new_id.min_radius = m_default_rect_radius; - - new_id.last_preset_scroll_x = m_default_scroll_preset_x; - new_id.last_preset_scroll_y = m_default_scroll_preset_y; - - new_id.resize_to_text = m_default_resize_to_text; - - new_id.widget = new Widget(0, 0, 0, 0); - - new_id.widget->m_enable_rect = m_default_show_rect; - new_id.widget->m_round_corners = m_default_rect_round_corners; - new_id.widget->m_rect_color = m_default_rect_color; - - new_id.widget->m_enable_border = m_default_show_border; - new_id.widget->m_border_percentage = m_default_border_percentage; - new_id.widget->m_border_color = m_default_border_color; - - new_id.widget->m_enable_texture = m_default_show_texture; - new_id.widget->m_texture = m_default_texture; - - new_id.widget->m_enable_text = m_default_show_text; - new_id.widget->m_text.assign(m_default_text); - new_id.widget->m_text_size = m_default_text_size; - new_id.widget->setFont( m_default_font ); - new_id.widget->m_text_color = m_default_text_color; - - new_id.widget->m_enable_scroll = m_default_enable_scroll; - new_id.widget->m_scroll_pos_x = (float)m_default_scroll_preset_x; - new_id.widget->m_scroll_pos_y = (float)m_default_scroll_preset_y; - new_id.widget->m_scroll_speed_x = m_default_scroll_x_speed; - new_id.widget->m_scroll_speed_y = m_default_scroll_y_speed; - - new_id.widget->m_enable_rotation = m_default_enable_rotation; - new_id.widget->m_rotation_angle = m_default_rotation_angle; - new_id.widget->m_rotation_speed = m_default_rotation_speed; - - new_id.widget->m_enable_track = m_default_show_track; - new_id.widget->m_track_num = m_default_track_num; - - new_id.widget->m_width = (int)(user_config->m_width * new_id.min_width * 0.01); - new_id.widget->m_height =(int)(user_config->m_height * new_id.min_height * 0.01); - - m_elems.push_back(WidgetElement(ET_WGT, (int)m_widgets.size())); - m_widgets.push_back(new_id); - - return new_id.widget; -} - -//----------------------------------------------------------------------------- -void WidgetManager::switchOrder() -{ - m_elems.push_back( WidgetElement( ET_SWITCH, 0 )); -} - -//----------------------------------------------------------------------------- -bool WidgetManager::breakLine() -{ - const int LAST_WGT = (int)m_widgets.size() - 1; - - if( LAST_WGT < 0 ) - { - std::cerr << "WARNING: tried to add a break before adding any " << - "widgets.\n"; - return false; - } - - const int LAST_ELEM = (int)m_elems.size() - 1; - if( m_elems[LAST_ELEM].type == ET_SWITCH ) - { - std::cerr << "WARNING: tried to add a break after a switch, last " << - "widget had token " << m_widgets[ LAST_WGT ].token << ".\n"; - return false; - } - - m_elems.push_back(WidgetElement( ET_BREAK, 0 )); - - return true; -} - -//----------------------------------------------------------------------------- -void WidgetManager::reset() -{ - const int NUM_WIDGETS = (int)m_widgets.size(); - - for(int i = 0; i < NUM_WIDGETS; ++i) - { - delete m_widgets[i].widget; - } - - m_widgets.clear(); - m_elems.clear(); - - restoreDefaultStates(); - - m_selected_wgt_token = WGT_NONE; - m_selection_change = false; -} - -//----------------------------------------------------------------------------- -int WidgetManager::findId(const int TOKEN) const -{ - const int NUM_WIDGETS = (int)m_widgets.size(); - - for( int i = 0; i < NUM_WIDGETS; ++i ) - { - if( TOKEN == m_widgets[i].token ) - return i; - } - - return WGT_NONE; -} - -//----------------------------------------------------------------------------- -void WidgetManager::update(const float DELTA) -{ - m_selection_change = false; - - //Enable 2D rendering - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - glOrtho(0.0, user_config->m_width, 0.0, user_config->m_height, -1.0, 1.0); - glMatrixMode(GL_MODELVIEW); - - glPushAttrib(GL_LIGHTING_BIT | - GL_COLOR_BUFFER_BIT | - GL_DEPTH_BUFFER_BIT | - GL_STENCIL_BUFFER_BIT); - - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_COLOR_MATERIAL); - glDisable(GL_LIGHTING); - glDisable(GL_DEPTH_TEST); - glDisable(GL_CULL_FACE); - glEnable (GL_STENCIL_TEST); - - const int NUM_WIDGETS = (int)m_widgets.size(); - for( int i = 0; i < NUM_WIDGETS; ++i) - { - m_widgets[i].widget->update(DELTA); - } - - glPopAttrib(); - - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - -} - -/** This argument-less layout() function serves as a recall to the other - * layout function in case you want to change the way widgets are put on - * the screen. It calls layout(POSITION) with the last given position, - * forces the recalculation of the scrolling position (since after the - * change the text might not fit properly the widget), and the selected - * widget, since layout(POSITION) function changes the selected widget to - * the first active widget by default. - */ -bool WidgetManager::layout() -{ - if( m_prev_layout_pos == WGT_AREA_NONE ) - { - std::cerr << "WARNING: tried to call layout() with the previous " << - "layout position, but layout(WidgetArea POSITION) has never " << - "been called.\n"; - return false; - } - - - const int NUM_WIDGETS = (int)m_widgets.size(); - for( int i = 0; i < NUM_WIDGETS; ++i ) - { - m_widgets[i].widget->m_scroll_pos_x = - (float)m_widgets[i].last_preset_scroll_x; - - m_widgets[i].widget->m_scroll_pos_y = - (float)m_widgets[i].last_preset_scroll_y; - } - - - const int PREV_SELECTED_WGT_TOKEN = m_selected_wgt_token; - - if( !layout( m_prev_layout_pos )) return false; - - if( findId( PREV_SELECTED_WGT_TOKEN ) != WGT_NONE ) - { - setSelectedWgtToken( PREV_SELECTED_WGT_TOKEN ); - } - - return true; -} - -//----------------------------------------------------------------------------- -bool WidgetManager::layout(const WidgetArea POSITION) -{ - //TODO: split layout(WidgetArea) into smaller functions - if( POSITION == WGT_AREA_NONE ) - { - std::cerr << "WARNING: called layout with WGT_AREA_NONE.\n"; - return false; - } - - m_prev_layout_pos = POSITION; - - const int NUM_WIDGETS = (int)m_widgets.size(); - if( NUM_WIDGETS < 1 ) return true; - - const int SCREEN_WIDTH = user_config->m_width; - const int SCREEN_HEIGHT = user_config->m_height; - - { - //Set the widgets' rect shape properties in pixels. - for( int i = 0; i < NUM_WIDGETS; ++i ) - { - Widget *w=m_widgets[i].widget; - if( m_widgets[i].resize_to_text ) w->resizeToText(); - if( w->m_width < w->m_height ) - { - m_widgets[i].widget->m_radius = (int)( m_widgets[i].min_radius * - m_widgets[i].widget->m_width * 0.01 ); - } - else - { - m_widgets[i].widget->m_radius = (int)( m_widgets[i].min_radius * - m_widgets[i].widget->m_height * 0.01 ); - } - - if( m_widgets[i].widget->m_radius < 1 ) - { - m_widgets[i].widget->m_radius = 1; - } - } - } - - const int WGTS_WIDTH = calcWidth(); - const int WGTS_HEIGHT = calcHeight(); - - if( WGTS_WIDTH > SCREEN_WIDTH ) - { - std::cerr << "WARNING: total width of the widgets is bigger than " << - "the screen, because the total minimum width given is bigger " << - "than 100%.\n"; - } - if( WGTS_HEIGHT > SCREEN_HEIGHT ) - { - std::cerr << "WARNING: total height of the widgets is bigger " << - "than the screen, because the total minimum height given is " << - "bigger than 100%.\n"; - } - - //To position things on the screen, remember that with OpenGL, in the - //Y-axis the position 0 is in the bottom of the screen, just like the top - //right quad of a cartesian plane. - switch(POSITION) - { - case WGT_AREA_NW: - m_x = 0; - m_y = SCREEN_HEIGHT; - break; - - case WGT_AREA_SW: - m_x = 0; - m_y = 0; - break; - - case WGT_AREA_NE: - m_x = SCREEN_WIDTH - WGTS_WIDTH; - m_y = SCREEN_HEIGHT; - break; - - case WGT_AREA_SE: - m_x = SCREEN_WIDTH - WGTS_WIDTH; - m_y = 0; - break; - - case WGT_AREA_LFT: - m_x = 0; - m_y = (int)(SCREEN_HEIGHT * 0.5 + WGTS_HEIGHT * 0.5f ); - break; - - case WGT_AREA_RGT: - m_x = SCREEN_WIDTH - WGTS_WIDTH; - m_y = (int)(SCREEN_HEIGHT * 0.5 + WGTS_HEIGHT * 0.5f ); - break; - - case WGT_AREA_TOP: - m_x = (int)(SCREEN_WIDTH * 0.5f - WGTS_WIDTH * 0.5f ); - m_y = SCREEN_HEIGHT; - break; - - case WGT_AREA_BOT: - m_x = (int)(SCREEN_WIDTH * 0.5f - WGTS_WIDTH * 0.5f ); - m_y = 0; - break; - - case WGT_AREA_ALL: - m_x = (int)(SCREEN_WIDTH * 0.5f - WGTS_WIDTH * 0.5f ); - m_y = (int)(SCREEN_HEIGHT * 0.5 + WGTS_HEIGHT * 0.5f ); - break; - - //This is just here to avoid a warning - case WGT_AREA_NONE: - break; - } - - /* We have to give each widget it's pixel position and create their rect. - * The position given to the widgets is their bottom left corner; since - * OpenGL the bottom left corner of the screen for (0,0), it's easier - * that way. Widgets are centered on the X-axis around their line or - * column (if it's inside one), but are always stuck to the top of their - * line or column. - */ - - int cursor_x = m_x + ( WGTS_WIDTH - calcLineWidth( 0 )) / 2; - int cursor_y = m_y; - int line_pos = 0; - WidgetID* curr_wgt = 0; - - const int NUM_ELEMS = (int)m_elems.size(); - - for( int i = 0; i < NUM_ELEMS; ++i ) - { - switch( m_elems[ i ].type ) - { - case ET_WGT: - curr_wgt = &m_widgets[ m_elems[ i ].pos ]; - if(curr_wgt->widget->hasFixedPosition()) - { - curr_wgt->widget->layout(); - break; - } - curr_wgt->widget->m_x = cursor_x; - - //We have to give createRect() the bottom left corner - curr_wgt->widget->m_y = cursor_y - curr_wgt->widget->m_height; - - if( !(curr_wgt->widget->createRect()) ) return false; - - cursor_x += curr_wgt->widget->m_width; - break; - - case ET_BREAK: - cursor_x = m_x + ( WGTS_WIDTH - calcLineWidth( i + 1 )) / 2; - cursor_y -= calcLineHeight( line_pos ); - line_pos = i + 1; - break; - - case ET_SWITCH: - ++i; - - if( !layoutColumn( cursor_x, cursor_y, i )) return false; - - break; - } - } - - //Select the first active widget by default - setSelectedWgtToken( WGT_NONE ); - - for( int i = 0; i < NUM_WIDGETS; ++i ) - { - if( m_widgets[i].active ) - { - setSelectedWgtToken( m_widgets[i].token ); - break; - } - } - - return true; -} - -//----------------------------------------------------------------------------- -bool WidgetManager::layoutLine( int& x, int& y, int& pos ) -{ - int cursor_x = x; - int cursor_y = y; - WidgetID* curr_wgt = 0; - - const int NUM_ELEMS = (int)m_elems.size(); - int i; - - for( i = pos; i < NUM_ELEMS; ++i ) - { - switch( m_elems[ i ].type ) - { - case ET_WGT: - curr_wgt = &m_widgets[ m_elems[ i ].pos ]; - if(curr_wgt->widget->hasFixedPosition()) break; - - curr_wgt->widget->m_x = cursor_x; - - //We have to give createRect() the bottom left corner - curr_wgt->widget->m_y = cursor_y - curr_wgt->widget->m_height; - - if( !(curr_wgt->widget->createRect()) ) return false; - - cursor_x += curr_wgt->widget->m_width; - break; - - case ET_BREAK: - x += ( calcLineWidth( pos ) - calcColumnWidth( i + 1 )) / 2; - y = cursor_y - calcLineHeight( pos ); - pos = i; - return true; - - case ET_SWITCH: - ++i; - layoutColumn( cursor_x, cursor_y, i ); - break; - } - } - - pos = i; - return true; -} - -//----------------------------------------------------------------------------- -bool WidgetManager::layoutColumn( int& x, int& y, int& pos ) -{ - int cursor_x = x + calcColumnX( pos ); - int cursor_y = y; - WidgetID* curr_wgt = 0; - - const int NUM_ELEMS = (int)m_elems.size(); - int i; - - for( i = pos; i < NUM_ELEMS; ++i ) - { - switch( m_elems[i].type ) - { - case ET_WGT: - curr_wgt = &m_widgets[ m_elems[ i ].pos ]; - if(curr_wgt->widget->hasFixedPosition()) break; - - curr_wgt->widget->m_x = cursor_x; - - //We have to give createRect() the bottom left corner - curr_wgt->widget->m_y = cursor_y - curr_wgt->widget->m_height; - - if( !(curr_wgt->widget->createRect()) ) return false; - - if( i + 1 < NUM_ELEMS ) - { - switch( m_elems[ i + 1 ].type ) - { - case ET_WGT: - cursor_x += ( curr_wgt->widget->m_width - - m_widgets[ m_elems[ i + 1 ].pos ].widget-> - m_width ) / 2; - break; - - case ET_SWITCH: - cursor_x += ( curr_wgt->widget->m_width - - calcLineWidth( i + 2 ) ) / 2; - break; - - case ET_BREAK: - break; - } - - cursor_y -= curr_wgt->widget->m_height; - } - break; - - case ET_BREAK: - x += calcColumnWidth( pos ); - pos = i; - return true; - - case ET_SWITCH: - ++i; - layoutLine( cursor_x, cursor_y, i ); - break; - } - } - - pos = i; - return true; -} - - -/** This getLineWidth() function returns the width of the smallest - * rectangle that contains the widgets in the given line. It expects - * the first element of the line as the argument, and will set pos - * to the last element of the line, usually a break. - */ -int WidgetManager::getLineWidth( int& pos ) -{ - const int NUM_ELEMS = (int)m_elems.size(); - int width = 0; - - for( ; pos < NUM_ELEMS; ++pos ) - { - switch( m_elems[ pos ].type) - { - case ET_WGT: - if(!m_widgets[ m_elems[ pos ].pos ].widget->hasFixedPosition()) - width += m_widgets[ m_elems[ pos ].pos ].widget->m_width; - break; - - case ET_BREAK: - return width; - - case ET_SWITCH: - ++pos; - width += getColumnWidth( pos ); - break; - } - } - - return width; -} - -/** This getLineHeight() function returns the height of the smallest - * rectangle that contains the widgets in the given line. It expects - * the first element of the line as the argument, and will set pos - * to the last element of the line, usually a break. - */ -int WidgetManager::getLineHeight( int& pos ) -{ - const int NUM_ELEMS = (int)m_elems.size(); - int height = 0; - int column_height; - - for( ; pos < NUM_ELEMS; ++pos ) - { - switch( m_elems[ pos ].type) - { - case ET_WGT: - if( m_widgets[ m_elems[ pos ].pos ].widget->hasFixedPosition()) break; - if( m_widgets[ m_elems[ pos ].pos ].widget->m_height > height ) - { - height = m_widgets[ m_elems[ pos ].pos ].widget->m_height; - } - break; - - case ET_BREAK: - return height; - - case ET_SWITCH: - ++pos; - column_height = getColumnHeight( pos ); - if( column_height > height ) height = column_height; - break; - } - } - - return height; -} - -/** This getColumnWidth() function returns the width of the smallest - * rectangle that contains the widgets in the given column. It expects - * the first element of the column as the argument, and will set pos - * to the last element of the column, usually a break. - */ -int WidgetManager::getColumnWidth( int& pos ) -{ - const int NUM_ELEMS = (int)m_elems.size(); - int width = 0; - int line_width; - - for( ; pos < NUM_ELEMS; ++pos ) - { - switch( m_elems[ pos ].type ) - { - case ET_WGT: - if(m_widgets[ m_elems[ pos ].pos ].widget->hasFixedPosition()) break; - if( m_widgets[ m_elems[ pos ].pos ].widget->m_width > width ) - { - width = m_widgets[ m_elems[ pos ].pos ].widget->m_width; - } - break; - - case ET_BREAK: - return width; - - case ET_SWITCH: - ++pos; - line_width = getLineWidth( pos ); - if( line_width > width ) width = line_width; - break; - - } - } - - return width; -} - -/** This getColumnHeight() function returns the height of the smallest - * rectangle that contains the widgets in the given column. It expects - * the first element of the column as the argument, and will set pos - * to the last element of the column, usually a break. - */ -int WidgetManager::getColumnHeight( int& pos ) -{ - const int NUM_ELEMS = (int)m_elems.size(); - int height = 0; - - for( ; pos < NUM_ELEMS; ++pos ) - { - switch( m_elems[ pos ].type) - { - case ET_WGT: - if(m_widgets[ m_elems[ pos ].pos ].widget->hasFixedPosition()) break; - height += m_widgets[ m_elems[ pos ].pos ].widget->m_height; - break; - - case ET_BREAK: - return height; - - case ET_SWITCH: - ++pos; - height += getLineHeight( pos ); - break; - } - } - - return height; -} - -/** This calcLineWidth() function returns the width of the smallest - * rectangle that contains the widgets in the given line. It expects - * the first element of the line as the argument. - */ -int WidgetManager::calcLineWidth( const int POS ) -{ - const int NUM_ELEMS = (int)m_elems.size(); - int width = 0; - - for( int i = POS; i < NUM_ELEMS; ++i ) - { - switch( m_elems[i].type) - { - case ET_WGT: - if(m_widgets[ m_elems[ i ].pos ].widget->hasFixedPosition()) break; - width += m_widgets[ m_elems[ i ].pos ].widget->m_width; - break; - - case ET_BREAK: - return width; - - case ET_SWITCH: - ++i; - width += getColumnWidth( i ); - break; - } - } - - return width; -} - -/** This calcLineHeight() function returns the height of the smallest - * rectangle that contains the widgets in the given line. It expects - * the first element of the line as the argument. - */ -int WidgetManager::calcLineHeight( const int POS ) -{ - const int NUM_ELEMS = (int)m_elems.size(); - int height = 0; - int column_height; - - for( int i = POS; i < NUM_ELEMS; ++i ) - { - switch( m_elems[i].type) - { - case ET_WGT: - if( m_widgets[ m_elems[ i ].pos ].widget->hasFixedPosition()) break; - if( m_widgets[ m_elems[ i ].pos ].widget->m_height > height ) - { - height = m_widgets[ m_elems[ i ].pos ].widget->m_height; - } - break; - - case ET_BREAK: - return height; - - case ET_SWITCH: - ++i; - column_height = getColumnHeight( i ); - if( column_height > height ) height = column_height; - break; - } - } - - return height; -} - -/** This calcColumnWidth() function returns the width of the smallest - * rectangle that contains the widgets in the given column. It expects - * the first element of the column as the argument. - */ -int WidgetManager::calcColumnWidth( const int POS ) -{ - const int NUM_ELEMS = (int)m_elems.size(); - int width = 0; - int line_width; - - for( int i = POS; i < NUM_ELEMS; ++i ) - { - switch( m_elems[ i ].type ) - { - case ET_WGT: - if( m_widgets[ m_elems[ i ].pos ].widget->hasFixedPosition()) break; - if( m_widgets[ m_elems[ i ].pos ].widget->m_width > width ) - { - width = m_widgets[ m_elems[ i ].pos ].widget->m_width; - } - break; - - case ET_BREAK: - return width; - - case ET_SWITCH: - ++i; - line_width = getLineWidth( i ); - if( line_width > width ) width = line_width; - break; - - } - } - - return width; -} - -/** This calcColumnHeight() function returns the height of the smallest - * rectangle that contains the widgets in the given column. It expects - * the first element of the column as the argument. - */ -int WidgetManager::calcColumnHeight( const int POS ) -{ - const int NUM_ELEMS = (int)m_elems.size(); - int height = 0; - - for( int i = POS; i < NUM_ELEMS; ++i ) - { - switch( m_elems[i].type) - { - case ET_WGT: - if(m_widgets[ m_elems[ i ].pos ].widget->hasFixedPosition()) break; - height += m_widgets[ m_elems[ i ].pos ].widget->m_height; - break; - - case ET_BREAK: - return height; - - case ET_SWITCH: - ++i; - height += getLineHeight( i ); - break; - } - } - - return height; -} - -//----------------------------------------------------------------------------- -int WidgetManager::calcLineX( const int POS ) -{ - int width = 0; - WidgetID* curr_wgt = 0; - - const int NUM_ELEMS = (int)m_elems.size(); - - for( int i = POS; i < NUM_ELEMS; ++i ) - { - switch( m_elems[ i ].type ) - { - case ET_WGT: - curr_wgt = &m_widgets[ m_elems[ i ].pos ]; - if(curr_wgt->widget->hasFixedPosition()) break; - - width += curr_wgt->widget->m_width; - break; - - case ET_SWITCH: - break; - - case ET_BREAK: - return width; - } - } - - return width; -} - -//----------------------------------------------------------------------------- -int WidgetManager::calcColumnX( const int POS ) -{ - if( POS >= (int)m_elems.size() ) return 0; - - WidgetID* curr_wgt = &m_widgets[ m_elems[ POS ].pos ]; - - if( m_elems[ POS ].type == ET_WGT ) - { - return ( calcColumnWidth( POS ) - curr_wgt->widget->m_width ) / 2; - } - - return 0; -} - -/** The calcWidth() function retrieves the width of the smallest rectangle - * that contains all the widgets being handled by the widget manager. - */ -int WidgetManager::calcWidth() -{ - const int NUM_ELEMS = (int)m_elems.size(); - int width = 0; - int line_width; - - for( int i = 0; i < NUM_ELEMS; ++i ) - { - line_width = getLineWidth( i ); - if( line_width > width ) width = line_width; - } - - return width; -} - -/** The calcHeight() function retrieves the height of the smallest rectangle - * that contains all the widgets being handled by the widget manager. - */ -int WidgetManager::calcHeight() -{ - const int NUM_ELEMS = (int)m_elems.size(); - int height = 0; - - for( int i = 0; i < NUM_ELEMS; ++i ) - { - height += getLineHeight( i ); - } - - return height; -} - -//----------------------------------------------------------------------------- -void WidgetManager::setSelectedWgt(const int TOKEN) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) - { - setSelectedWgtToken( TOKEN ); - } - - else std::cerr << "WARNING: tried to select unnamed widget with " << - "token " << TOKEN << '\n'; -} - -//----------------------------------------------------------------------------- -Widget *WidgetManager::addTitleWgt -( - const int TOKEN, - const int MIN_WIDTH, - const int MIN_HEIGHT, - const std::string TEXT -) -{ - Widget *w=addWgt( TOKEN, MIN_WIDTH, MIN_HEIGHT ); - if( !w) return false; - - showWgtRect( TOKEN ); - setWgtTextSize( TOKEN, WGT_FNT_LRG ); - showWgtText( TOKEN ); - setWgtText( TOKEN, TEXT ); - setWgtRoundCorners( TOKEN, WGT_AREA_ALL ); - setWgtCornerRadius( TOKEN, 20 ); - - return w; -} - -//----------------------------------------------------------------------------- -Widget *WidgetManager::addTextWgt -( - const int TOKEN, - const int MIN_WIDTH, - const int MIN_HEIGHT, - const std::string TEXT -) -{ - Widget *w=addWgt( TOKEN, MIN_WIDTH, MIN_HEIGHT ); - if( !w) return false; - - showWgtRect( TOKEN ); - setWgtRoundCorners( TOKEN, WGT_AREA_ALL ); - setWgtCornerRadius( TOKEN, 20 ); - showWgtText( TOKEN ); - setWgtText( TOKEN, TEXT ); - - return w; -} - -//----------------------------------------------------------------------------- -Widget *WidgetManager::addTextButtonWgt -( - const int TOKEN, - const int MIN_WIDTH, - const int MIN_HEIGHT, - const std::string TEXT -) -{ - Widget *w=addWgt( TOKEN, MIN_WIDTH, MIN_HEIGHT ); - if( !w) return false; - - showWgtRect( TOKEN ); - setWgtRoundCorners( TOKEN, WGT_AREA_ALL ); - setWgtCornerRadius( TOKEN, 20 ); - showWgtText( TOKEN ); - setWgtText( TOKEN, TEXT ); - activateWgt( TOKEN ); - - return w; -} // addTextButtonWgt - -//----------------------------------------------------------------------------- -Widget *WidgetManager::addImgWgt -( - const int TOKEN, - const int MIN_WIDTH, - const int MIN_HEIGHT, - const int IMG -) -{ - Widget *w=addWgt( TOKEN, MIN_WIDTH, MIN_HEIGHT ); - if( !w) return false; - - setWgtColor( TOKEN, WGT_WHITE ); - showWgtRect( TOKEN ); - setWgtBorderPercentage( TOKEN, 5 ); - setWgtBorderColor( TOKEN, WGT_BLACK ); - showWgtBorder( TOKEN ); - setWgtTexture( TOKEN, IMG ); - showWgtTexture( TOKEN ); - - return w; -} - -//----------------------------------------------------------------------------- -Widget *WidgetManager::addImgWgt -( - const int TOKEN, - const int MIN_WIDTH, - const int MIN_HEIGHT, - const char* FILENAME -) -{ - Widget *w=addWgt( TOKEN, MIN_WIDTH, MIN_HEIGHT ); - if( !w) return false; - - setWgtColor( TOKEN, WGT_WHITE ); - showWgtRect( TOKEN ); - setWgtBorderPercentage( TOKEN, 5 ); - setWgtBorderColor( TOKEN, WGT_BLACK ); - showWgtBorder( TOKEN ); - setWgtTexture( TOKEN, FILENAME ); - showWgtTexture( TOKEN ); - - return w; -} - -//----------------------------------------------------------------------------- -Widget *WidgetManager::addImgButtonWgt -( - const int TOKEN, - const int MIN_WIDTH, - const int MIN_HEIGHT, - const int IMG -) -{ - Widget *w=addWgt( TOKEN, MIN_WIDTH, MIN_HEIGHT ); - if( !w) return false; - - setWgtColor( TOKEN, WGT_GRAY ); - showWgtRect( TOKEN ); - setWgtRoundCorners( TOKEN, WGT_AREA_ALL ); - setWgtCornerRadius( TOKEN, 20 ); - setWgtTexture( TOKEN, IMG ); - showWgtTexture( TOKEN ); - activateWgt( TOKEN ); - - return w; -} - -//----------------------------------------------------------------------------- -Widget *WidgetManager::addImgButtonWgt -( - const int TOKEN, - const int MIN_WIDTH, - const int MIN_HEIGHT, - const std::string& FILENAME -) -{ - Widget *w=addWgt( TOKEN, MIN_WIDTH, MIN_HEIGHT ); - if( !w) return false; - - setWgtColor( TOKEN, WGT_GRAY ); - showWgtRect( TOKEN ); - setWgtRoundCorners( TOKEN, WGT_AREA_ALL ); - setWgtCornerRadius( TOKEN, 20 ); - setWgtTexture( TOKEN, FILENAME ); - showWgtTexture( TOKEN ); - activateWgt( TOKEN ); - - return w; -} - -//----------------------------------------------------------------------------- -void WidgetManager::setInitialActivationState( const bool ACTIVE) -{ - m_default_active = ACTIVE; -} - -//----------------------------------------------------------------------------- -void WidgetManager::setInitialRectState -( - const bool SHOW, - const WidgetArea ROUND_CORNERS, - const int RADIUS, - const GLfloat* const COLOR -) -{ - m_default_show_rect = SHOW; - m_default_rect_round_corners = ROUND_CORNERS; - m_default_rect_radius = RADIUS; - m_default_rect_color = COLOR; -} - -//----------------------------------------------------------------------------- -void WidgetManager::setInitialBorderState -( - const bool SHOW, - const int PERCENTAGE, - const GLfloat* const COLOR -) -{ - m_default_show_border = SHOW; - m_default_border_percentage = PERCENTAGE * 0.01f; - m_default_border_color = COLOR; -} - -//----------------------------------------------------------------------------- -void WidgetManager::setInitialTextureState -( - const bool SHOW, - const int TEXTURE -) -{ - m_default_show_texture = SHOW; - m_default_texture = TEXTURE; -} - -//----------------------------------------------------------------------------- -void WidgetManager::setInitialTextState -( - const bool SHOW, - const std::string TEXT, - const WidgetFontSize SIZE, - const WidgetFont FONT, - const GLfloat* const COLOR, - const bool RESIZE -) -{ - m_default_show_text = SHOW; - m_default_text = TEXT; - m_default_text_size = SIZE; - m_default_font = FONT; - m_default_text_color = COLOR; - m_default_resize_to_text = RESIZE; -} - -//----------------------------------------------------------------------------- -void WidgetManager::setInitialScrollState -( - const bool ENABLE, - const WidgetScrollPos X_POS, - const WidgetScrollPos Y_POS, - const int X_SPEED, - const int Y_SPEED -) -{ - m_default_enable_scroll = ENABLE; - m_default_scroll_preset_x = X_POS; - m_default_scroll_preset_y = Y_POS; - m_default_scroll_x_speed = X_SPEED; - m_default_scroll_y_speed = Y_SPEED; -} - -//----------------------------------------------------------------------------- -void WidgetManager::setInitialRotationState -( - const bool ENABLE, - const float ANGLE, - const int SPEED -) -{ - m_default_enable_rotation = ENABLE; - m_default_rotation_angle = ANGLE; - m_default_rotation_speed = SPEED; -} - -//----------------------------------------------------------------------------- -void WidgetManager::setInitialTrackState -( - const bool SHOW, - const int TRACK -) -{ - m_default_show_track = SHOW; - m_default_track_num = TRACK; -} - -//----------------------------------------------------------------------------- -void WidgetManager::restoreDefaultStates() -{ - //FIXME: maybe instead of 'default' these variables should be 'initial' - m_default_active = false; - m_default_show_rect = false; - m_default_rect_color = WGT_TRANS_BLACK; - m_default_rect_round_corners = WGT_AREA_NONE; - m_default_rect_radius = 1; - m_default_show_border = false; - m_default_border_percentage = 0.0; - m_default_border_color = WGT_TRANS_WHITE; - m_default_show_texture = false; - m_default_texture = 0; - m_default_show_text = false; - m_default_text = ""; - m_default_text_size = WGT_FNT_MED; - m_default_font = WGT_FONT_GUI; - m_default_text_color = WGT_WHITE; - m_default_resize_to_text = true; - m_default_enable_scroll = false; - m_default_scroll_preset_x = WGT_SCROLL_CENTER; - m_default_scroll_preset_y = WGT_SCROLL_CENTER; - m_default_scroll_x_speed = 0; - m_default_scroll_y_speed = 0; - m_default_enable_rotation = false; - m_default_rotation_angle = 0.0f; - m_default_rotation_speed = 0; - m_default_show_track = false; - m_default_track_num = -1; -} - -//----------------------------------------------------------------------------- -void WidgetManager::activateWgt(const int TOKEN) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].active = true; - else - { - std::cerr << "WARNING: tried to activate unnamed widget with token " - << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::deactivateWgt(const int TOKEN) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].active = false; - else - { - std::cerr << "WARNING: tried to deactivate unnamed widget with " << - TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::setWgtColor(const int TOKEN, const GLfloat *COLOR) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].widget->m_rect_color = COLOR; - else - { - std::cerr << "WARNING: tried to change the rect color of an " << - "unnamed widget with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::setWgtRoundCorners(const int TOKEN, const WidgetArea CORNERS) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].widget->m_round_corners = CORNERS; - else - { - std::cerr << "WARNING: tried to change the round corners of an " << - "unnamed widget with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::setWgtCornerRadius(const int TOKEN, const int RADIUS) -{ - if( RADIUS > 50 ) - { - std::cerr << "WARNING: tried to set the corner's radius " << - "percentage of a widget with token " << TOKEN << " to " << - "something bigger than 50% \n"; - return; - } - else if( RADIUS < 1 ) - { - std::cerr << "WARNING: tried to set the corner's radius " << - "percentage of a widget with token " << TOKEN << " to " << - "something smaller than 1% \n"; - return; - } - - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].min_radius = RADIUS; - else - { - std::cerr << "WARNING: tried to change the corner radius of an " << - "unnamed widget with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::showWgtRect(const int TOKEN) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].widget->m_enable_rect = true; - else - { - std::cerr << "WARNING: tried to show the rect of an unnamed widget " - << "with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::hideWgtRect(const int TOKEN) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].widget->m_enable_rect = false; - else - { - std::cerr << "WARNING: tried to hide the rect of an unnamed widget " - << "with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::setWgtBorderColor(const int TOKEN, const GLfloat* const COLOR) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].widget->m_border_color = COLOR; - else - { - std::cerr << "WARNING: tried to change the border color of an " << - "unnamed widget with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::setWgtBorderPercentage(const int TOKEN, const int PERCENTAGE) -{ - if( PERCENTAGE > 100 ) - { - std::cerr << "WARNING: tried to set the border's percentage of " << - "widget with token " << TOKEN << " to something bigger than " << - "100% \n"; - return; - } - else if( PERCENTAGE < 1 ) - { - std::cerr << "WARNING: tried to set the border's percentage of " << - "widget with token " << TOKEN << " to something smaller than " << - "1% \n"; - return; - } - - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].widget->m_border_percentage = PERCENTAGE * 0.01f; - else - { - std::cerr << "WARNING: tried to change the rect color of an " << - "unnamed widget with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::showWgtBorder(const int TOKEN) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].widget->m_enable_border = true; - else - { - std::cerr << "WARNING: tried to show the border of an unnamed widget " - << "with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::hideWgtBorder(const int TOKEN) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].widget->m_enable_border = false; - else - { - std::cerr << "WARNING: tried to hide the border of an unnamed widget " - << "with token " << TOKEN << '\n'; - } -} - - -//----------------------------------------------------------------------------- -void WidgetManager::setWgtTexture(const int TOKEN, const int TEXTURE) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].widget->m_texture = TEXTURE; - else - { - std::cerr << "WARNING: tried to set the texture of an unnamed " << - "widget with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::setWgtTexture(const int TOKEN, const std::string& FILENAME, - const bool is_full_path) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].widget->setTexture( FILENAME, is_full_path ); - else - { - std::cerr << "WARNING: tried to set the texture of an unnamed " << - "widget with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::showWgtTexture(const int TOKEN) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].widget->m_enable_texture = true; - else - { - std::cerr << "WARNING: tried to show the texture of an unnamed " << - "widget with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::hideWgtTexture(const int TOKEN) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].widget->m_enable_texture = false; - else - { - std::cerr << "WARNING: tried to hide the texture of an unnamed " << - "widget with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::setWgtText( const int TOKEN, const char* TEXT ) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) - { - m_widgets[ID].widget->m_text = TEXT; - - //Reset the scroll position, because it will be the wrong value if - //new text has a different size - m_widgets[ID].widget->m_scroll_pos_x = (float)m_widgets[ID].last_preset_scroll_x; - m_widgets[ID].widget->m_scroll_pos_y = (float)m_widgets[ID].last_preset_scroll_y; - } - else - { - std::cerr << "WARNING: tried to set text to an unnamed widget " << - "with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::setWgtText( const int TOKEN, const std::string TEXT ) -{ - setWgtText( TOKEN, TEXT.c_str()); -} - -//----------------------------------------------------------------------------- -void WidgetManager::setWgtTextSize( const int TOKEN, const WidgetFontSize SIZE) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].widget->m_text_size = SIZE; - else - { - std::cerr << "WARNING: tried to set the text size of an unnamed " << - "widget with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::setWgtFont( const int TOKEN, const WidgetFont FONT ) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].widget->setFont( FONT ); - else - { - std::cerr << "WARNING: tried to set the font of an unnamed " << - "widget with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::setWgtTextColor( const int TOKEN, const GLfloat* const COLOR) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].widget->m_text_color = COLOR; - else - { - std::cerr << "WARNING: tried to set the text color of an unnamed " << - "widget with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::setWgtResizeToText( const int TOKEN, const bool RESIZE ) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].resize_to_text = RESIZE; - else - { - std::cerr << "WARNING: tried to set the resize to text value of an " << - "unnamed widget with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::showWgtText( const int TOKEN ) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].widget->m_enable_text = true; - else - { - std::cerr << "WARNING: tried to show the text of an unnamed " << - "widget with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::hideWgtText( const int TOKEN ) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].widget->m_enable_text = false; - else - { - std::cerr << "WARNING: tried to hide the text of an unnamed widget " << - "with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::enableWgtScroll( const int TOKEN ) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].widget->m_enable_scroll = true; - else - { - std::cerr << "WARNING: tried to enable scrolling of an unnamed " << - "widget with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::disableWgtScroll( const int TOKEN ) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].widget->m_enable_scroll = false; - else - { - std::cerr << "WARNING: tried to disable scrolling of an unnamed " << - "widget with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::setWgtXScrollPos -( - const int TOKEN, - const WidgetScrollPos POS -) -{ - if( POS == WGT_SCROLL_START_TOP || POS == WGT_SCROLL_START_BOTTOM || - POS == WGT_SCROLL_END_TOP || POS == WGT_SCROLL_END_BOTTOM ) - { - std::cerr << "WARNING: tried to set the X scroll position to a " << - "position for the Y axis, on widget with token " << TOKEN << - '\n'; - return; - } - - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) - { - m_widgets[ID].widget->m_scroll_pos_x = (float)POS; - m_widgets[ID].last_preset_scroll_x = POS; - } - else - { - std::cerr << "WARNING: tried to set the X scroll position of an " << - "unnamed widget with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::setWgtYScrollPos -( - const int TOKEN, - const WidgetScrollPos POS -) -{ - if( POS == WGT_SCROLL_START_LEFT || POS == WGT_SCROLL_START_RIGHT || - POS == WGT_SCROLL_END_LEFT || POS == WGT_SCROLL_END_RIGHT ) - { - std::cerr << "WARNING: tried to set the Y scroll position to a " << - "position for the X axis, on widget with token " << TOKEN << - '\n'; - return; - } - - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) - { - m_widgets[ID].widget->m_scroll_pos_y = (float)POS; - m_widgets[ID].last_preset_scroll_y = POS; - } - else - { - std::cerr << "WARNING: tried to set the Y scroll position of an " << - "unnamed widget with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::setWgtXScrollSpeed( const int TOKEN, const int SPEED ) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].widget->m_scroll_speed_x = SPEED; - else - { - std::cerr << "WARNING: tried to set the X scroll speed of an " << - "unnamed widget with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::setWgtYScrollSpeed( const int TOKEN, const int SPEED ) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].widget->m_scroll_speed_y = SPEED; - else - { - std::cerr << "WARNING: tried to set the Y scroll speed of an " << - "unnamed widget with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::enableWgtRotation( const int TOKEN ) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].widget->m_enable_rotation = true; - else - { - std::cerr << "WARNING: tried to enable rotation of an unnamed " << - "widget with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::disableWgtRotation( const int TOKEN ) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].widget->m_enable_rotation = false; - else - { - std::cerr << "WARNING: tried to disable rotation of an unnamed " << - "widget with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::setWgtRotationAngle( const int TOKEN, const float ANGLE ) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].widget->m_rotation_angle = ANGLE; - else - { - std::cerr << "WARNING: tried to set the rotation angle of an " - "unnamed widget with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::setWgtRotationSpeed( const int TOKEN, const int SPEED ) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].widget->m_rotation_speed = SPEED; - else - { - std::cerr << "WARNING: tried to set the rotation speed of an " - "unnamed widget with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::showWgtTrack( const int TOKEN ) -{ - const int ID = findId( TOKEN ); - if( ID != WGT_NONE ) m_widgets[ID].widget->m_enable_track = true; - else - { - std::cerr << "WARNING: tried to show the track of an unnamed widget " - << "with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::hideWgtTrack( const int TOKEN ) -{ - const int ID = findId( TOKEN ); - if( ID != WGT_NONE ) m_widgets[ID].widget->m_enable_track = false; - else - { - std::cerr << "WARNING: tried to hide the track of an unnamed widget " - << "with token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::setWgtTrackNum( const int TOKEN, const int TRACK ) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].widget->m_track_num = TRACK; - else - { - std::cerr << "WARNING: tried to set the track number of an unnamed " - << "widget with token " << TOKEN << '\n'; - } -} - -/** pulse_widget() passes the pulse order to the right widget. -*/ -void WidgetManager::pulseWgt(const int TOKEN) const -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].widget->pulse(); - else - { - std::cerr << "WARNING: tried to pulse unnamed widget with token " << - TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::lightenWgtColor(const int TOKEN) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].widget->lightenColor(); - else - { - std::cerr << "WARNING: tried to lighten an unnamed widget with " << - "token " << TOKEN << '\n'; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::darkenWgtColor(const int TOKEN) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) m_widgets[ID].widget->darkenColor(); - else - { - std::cerr << "WARNING: tried to darken an unnamed widget with " << - "token " << TOKEN << '\n'; - } -} - -/** The handlePointer() function returns the current widget under the - * pointer, if it's different from the selected widget. If the widget under - * the pointer is the selected widget, it returns WGT_NONE. - */ -int WidgetManager::handlePointer(const int X, const int Y ) -{ - const int NUM_WGTS = (int)m_widgets.size(); - if( NUM_WGTS < 1 ) return WGT_NONE; - - for( int i = 0; i < NUM_WGTS; ++i ) - { - if(!(m_widgets[i].active)) continue; - - const int offset = m_widgets[i].widget->m_radius/4; - - if(X > m_widgets[i].widget->m_x+offset && - X < m_widgets[i].widget->m_x + m_widgets[i].widget->m_width-offset && - Y > m_widgets[i].widget->m_y+offset && - Y < m_widgets[i].widget->m_y + m_widgets[i].widget->m_height-offset) - { - if(m_widgets[i].token == getSelectedWgt()) return WGT_NONE; - setSelectedWgtToken( m_widgets[i].token ); - return m_selected_wgt_token; - } - - } - - return WGT_NONE; -} - -/** The handle_() function stores the current widget under - * the cursor after receiving input from a key. - */ -int -WidgetManager::handleLeft() -{ - if( m_selected_wgt_token == WGT_NONE ) return WGT_NONE; - - return handleFinish(findLeftWidget(findId(m_selected_wgt_token))); -} - - int -WidgetManager::handleRight() -{ - if( m_selected_wgt_token == WGT_NONE ) return WGT_NONE; - - return handleFinish(findRightWidget(findId(m_selected_wgt_token))); -} - -int -WidgetManager::handleUp() -{ - if( m_selected_wgt_token == WGT_NONE ) return WGT_NONE; - - return handleFinish(findTopWidget(findId(m_selected_wgt_token))); -} - -int -WidgetManager::handleDown() -{ - if( m_selected_wgt_token == WGT_NONE ) return WGT_NONE; - - return handleFinish(findBottomWidget(findId(m_selected_wgt_token))); -} - -int -WidgetManager::handleFinish(const int next_wgt) -{ - if( next_wgt == WGT_NONE) - return WGT_NONE; - - setSelectedWgtToken( m_widgets[next_wgt].token ); - return m_selected_wgt_token; -} - -void -WidgetManager::increaseScrollSpeed(const bool fast) -{ - //FIXME: to increase the scroll speed we substract, and to decrease - //we add; this goes against logic, making code harder to read. - const int ID = findId(m_selected_wgt_token); - if( m_widgets[ID].widget->m_enable_scroll ) - { - int &speed = m_widgets[ID].widget->m_scroll_speed_y; - //FIXME: these increases shouldn't be in pixels, but in percentages. - //This should increase it by 1%, and the page buttons by 5%. - if( fast ) - { - if( speed > 0 && speed < 50 ) speed = 0; - else speed -= 50; - } - else - { - if( speed > 0 && speed < 10 ) speed = 0; - else speed -= 10; - } - } -} - -void -WidgetManager::decreaseScrollSpeed(const bool fast) -{ - const int ID = findId(m_selected_wgt_token); - if( m_widgets[ID].widget->m_enable_scroll ) - { - int &speed = m_widgets[ID].widget->m_scroll_speed_y; - //FIXME: these increases shouldn't be in pixels, but in percentages. - //This should increase it by 1%, and the page buttons by 5%. - if( fast ) - { - if( speed < 0 && speed > -50 ) speed = 0; - else speed += 50; - } - else - { - if( speed < 0 && speed > -10 ) speed = 0; - else speed += 10; - } - } -} - -/** findLeftWidget() returns the closest widget to the left of START_WGT. - * We use the center of the widgets as the reference points; then, we - * filter any widget that is not to the left, and favor the ones that are - * closest in the Y-axis. If there is only one widget that is closest in the - * Y-axis, we pick that one as the closest, but if there is more than one - * widget with the same vertical distance, we have to break the tie by - * choosing the one closest in the X-axis. - */ -int WidgetManager::findLeftWidget(const int START_WGT) const -{ - const int NUM_WIDGETS = (int)m_widgets.size(); - int closest_wgt = WGT_NONE; - int closest_x_dist = user_config->m_width; - int closest_y_dist = user_config->m_height; - - const int START_WGT_Y_CENTER = m_widgets[START_WGT].widget->m_y + - ( m_widgets[START_WGT].widget->m_height / 2 ); - const int START_WGT_X_CENTER = m_widgets[START_WGT].widget->m_x + - ( m_widgets[START_WGT].widget->m_width / 2 ); - - int curr_wgt_x_center, curr_wgt_y_center; - int x_dist, y_dist; - - for( int i = 0; i < NUM_WIDGETS; ++i ) - { - if(!(m_widgets[i].active)) continue; - - curr_wgt_y_center = m_widgets[i].widget->m_y + ( m_widgets[i].widget->m_height / 2 ); - curr_wgt_x_center = m_widgets[i].widget->m_x + ( m_widgets[i].widget->m_width / 2 ); - - x_dist = START_WGT_X_CENTER - curr_wgt_x_center; - y_dist = abs( curr_wgt_y_center - START_WGT_Y_CENTER ); - - //Filter out all widgets that are not to the left and choose the - //widget that is closest in the Y-axis - if( x_dist > 0 && y_dist <= closest_y_dist ) - { - closest_y_dist = y_dist; - - //If this is the first widget with this vertical distance, pick - //it as the current closest widget - if( y_dist != closest_y_dist ) - { - closest_x_dist = user_config->m_width; //Reset the distance - closest_wgt = i; - } - //If there is more than one widget with the same vertical - //distance, choose the one that is closest in the X-axis - else if( x_dist <= closest_x_dist ) - { - closest_x_dist = x_dist; - closest_wgt = i; - } - } - } - - return closest_wgt; -} - -/** findRightWidget() returns the closest widget to the right of START_WGT - */ -int WidgetManager::findRightWidget(const int START_WGT) const -{ - const int NUM_WIDGETS = (int)m_widgets.size(); - int closest_wgt = WGT_NONE; - int closest_x_dist = user_config->m_width; - int closest_y_dist = user_config->m_height; - - const int START_WGT_Y_CENTER = m_widgets[START_WGT].widget->m_y + - ( m_widgets[START_WGT].widget->m_height / 2 ); - const int START_WGT_X_CENTER = m_widgets[START_WGT].widget->m_x + - ( m_widgets[START_WGT].widget->m_width / 2 ); - - int curr_wgt_x_center, curr_wgt_y_center; - int x_dist, y_dist; - - for( int i = 0; i < NUM_WIDGETS; ++i ) - { - if(!(m_widgets[i].active)) continue; - - curr_wgt_y_center = m_widgets[i].widget->m_y + ( m_widgets[i].widget->m_height / 2 ); - curr_wgt_x_center = m_widgets[i].widget->m_x + ( m_widgets[i].widget->m_width / 2 ); - - //Notice that the order of this substraction is the *only* difference - //from the findLeftWidget() function - x_dist = curr_wgt_x_center - START_WGT_X_CENTER; - y_dist = abs( curr_wgt_y_center - START_WGT_Y_CENTER ); - - if( x_dist > 0 && y_dist <= closest_y_dist ) - { - closest_y_dist = y_dist; - - if( y_dist != closest_y_dist ) - { - closest_x_dist = user_config->m_width; - closest_wgt = i; - } - else if( x_dist <= closest_x_dist ) - { - closest_x_dist = x_dist; - closest_wgt = i; - } - } - } - - return closest_wgt; -} -/** findTopWidget() returns the closest widget on top of START_WGT. - * Remember that for the widget manager, the value 0 in the y-axis is in - * the bottom of the screen. - */ -int WidgetManager::findTopWidget(const int START_WGT) const -{ - const int NUM_WIDGETS = (int)m_widgets.size(); - int closest_wgt = WGT_NONE; - int closest_x_dist = user_config->m_width; - int closest_y_dist = user_config->m_height; - - const int START_WGT_Y_CENTER = m_widgets[START_WGT].widget->m_y + - ( m_widgets[START_WGT].widget->m_height / 2 ); - const int START_WGT_X_CENTER = m_widgets[START_WGT].widget->m_x + - ( m_widgets[START_WGT].widget->m_width / 2 ); - - int curr_wgt_x_center, curr_wgt_y_center; - int x_dist, y_dist; - - for( int i = 0; i < NUM_WIDGETS; ++i ) - { - if(!(m_widgets[i].active)) continue; - - curr_wgt_y_center = m_widgets[i].widget->m_y + ( m_widgets[i].widget->m_height / 2 ); - curr_wgt_x_center = m_widgets[i].widget->m_x + ( m_widgets[i].widget->m_width / 2 ); - - y_dist = curr_wgt_y_center - START_WGT_Y_CENTER; - x_dist = abs( curr_wgt_x_center - START_WGT_X_CENTER ); - - //Filter out all widgets that are not on top and choose the - //widget that is closest in the X-axis - if( y_dist > 0 && x_dist <= closest_x_dist ) - { - closest_x_dist = x_dist; - - //If this is the first widget with this vertical distance, pick - //it as the current closest widget - if( x_dist != closest_x_dist ) - { - closest_y_dist = user_config->m_height; - closest_wgt = i; - } - //If there is more than one widget with the same horizontal - //distance, choose the one that is closest in the Y-axis - else if( y_dist <= closest_y_dist ) - { - closest_y_dist = y_dist; - closest_wgt = i; - } - } - } - - return closest_wgt; -} - -/** findBottomWidget() returns the closest widget under START_WGT. - * Remember that for the widget manager, the value 0 in the y-axis is in - * the bottom of the screen. - */ -int WidgetManager::findBottomWidget(const int START_WGT) const -{ - const int NUM_WIDGETS = (int)m_widgets.size(); - int closest_wgt = WGT_NONE; - int closest_x_dist = user_config->m_width; - int closest_y_dist = user_config->m_height; - - const int START_WGT_Y_CENTER = m_widgets[START_WGT].widget->m_y + - ( m_widgets[START_WGT].widget->m_height / 2 ); - const int START_WGT_X_CENTER = m_widgets[START_WGT].widget->m_x + - ( m_widgets[START_WGT].widget->m_width / 2 ); - - int curr_wgt_x_center, curr_wgt_y_center; - int x_dist, y_dist; - - for( int i = 0; i < NUM_WIDGETS; ++i ) - { - if(!(m_widgets[i].active)) continue; - - curr_wgt_y_center = m_widgets[i].widget->m_y + ( m_widgets[i].widget->m_height / 2 ); - curr_wgt_x_center = m_widgets[i].widget->m_x + ( m_widgets[i].widget->m_width / 2 ); - - //Notice that the order of this substraction is the *only* difference - //from the findTopWidget() function - y_dist = START_WGT_Y_CENTER - curr_wgt_y_center; - x_dist = abs( curr_wgt_x_center - START_WGT_X_CENTER ); - - if( y_dist > 0 && x_dist <= closest_x_dist ) - { - closest_x_dist = x_dist; - - if( x_dist != closest_x_dist ) - { - closest_y_dist = user_config->m_height; - closest_wgt = i; - } - else if( y_dist <= closest_y_dist ) - { - closest_y_dist = y_dist; - closest_wgt = i; - } - } - } - - return closest_wgt; -} - -//----------------------------------------------------------------------------- -void WidgetManager::setSelectedWgtToken(const int TOKEN) -{ - if( m_selected_wgt_token != TOKEN ) - { - m_selected_wgt_token = TOKEN; - m_selection_change = true; - } -} - -//----------------------------------------------------------------------------- -void WidgetManager::resizeWgtToText( const int TOKEN ) -{ - const int ID = findId(TOKEN); - if( ID != WGT_NONE ) - { - m_widgets[ID].widget->resizeToText(); - - const int SCREEN_WIDTH = user_config->m_width; - const int SCREEN_HEIGHT = user_config->m_height; - - m_widgets[ID].min_width = ( m_widgets[ID].widget->m_width * 100 ) / - SCREEN_WIDTH; - m_widgets[ID].min_height = ( m_widgets[ID].widget->m_height * 100 ) / - SCREEN_HEIGHT; - - layout(); - } - else - { - std::cerr << "WARNING: tried to resize the text of an unnamed " << - "widget with token " << TOKEN << '\n'; - } -} - -/** reloadFonts() sets the pointers to the fonts of the guis - * to their choosen fonts; it's useful in cases where you - * free the font's memory (which makes the pointers invalid), - * then reload the fonts, like it happens when you change resolution - * on the Macs or Windows. - */ -void WidgetManager::reloadFonts() -{ - const int NUM_WIDGETS = (int)m_widgets.size(); - for( int i = 0; i < NUM_WIDGETS; ++i ) - { - m_widgets[i].widget->setFont( - m_widgets[i].widget->m_curr_widget_font ); - } -} - -// ---------------------------------------------------------------------------- -void WidgetManager::setPosition(const int token, - WidgetDirection hori, float percentage_x, - WidgetDirection verti, float percentage_y) -{ - const int id = findId(token); - if( id != WGT_NONE ) - m_widgets[id].widget->setPosition(hori, percentage_x, - verti, percentage_y); -} // setPosition - -// ---------------------------------------------------------------------------- -/** Sets the width of all widgets between widget_min and widget_max to - be the same */ -void WidgetManager::sameWidth(int widget_min, int widget_max) -{ - int width = -1; - for(int i=widget_min; i<=widget_max; i++) - { - const int id = findId(i); - Widget *w = m_widgets[id].widget; - w->m_width = (int)(user_config->m_width * m_widgets[id].min_width * 0.01); - - if( m_widgets[id].resize_to_text ) w->resizeToText(); - - if(width < w->m_width) - width = w->m_width; - } - for(int i=widget_min; i<=widget_max; i++) - { - const int id = findId(i); - m_widgets[id].widget->m_width = width; - } - -} // sameWidth - diff --git a/src/gui/widget_manager.hpp b/src/gui/widget_manager.hpp deleted file mode 100644 index c97c9d54a..000000000 --- a/src/gui/widget_manager.hpp +++ /dev/null @@ -1,382 +0,0 @@ -// -// SuperTuxKart - a fun racing game with go-kart -// This code originally from Neverball copyright (C) 2003 Robert Kooima -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 3 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -#ifndef HEADER_WIDGET_MANAGER_H -#define HEADER_WIDGET_MANAGER_H - -#include "widget.hpp" -#include - - -/* Big-picture instructions: the extern widget_manager is a global interface - * to the class. Call add*Wgt() to insert new widgets, and change details - * using the 'switch features'. By default no feature besides the one for - * each widget type are enabled. - * - * After you defined the entire screen, call layout(), that creates and - * places the widgets. Call the activated functions during the time the - * widgets are alive, and make sure that update() is called each frame. - * - * To remove the widgets, you have to call reset(). - */ - -class WidgetManager -{ - struct WidgetID - { - int token; - bool active; //If true, then this widget is interactive(though by - //definition, widgets are supposed to be interactive). - - //The percentages for the widget's rect - int min_width; - int min_height; - int min_radius; - - //The last given preset scroll position is stored, to restore it in - //case that the text is changed it needs to be restored. - WidgetScrollPos last_preset_scroll_x; - WidgetScrollPos last_preset_scroll_y; - - bool resize_to_text; //This has to do with layout, so it shouldn't - //inside the Widget class, even thought - //conceptually most people will asociate it with - //text - - Widget *widget; - }; - - enum ElementTypes - { - ET_WGT, - ET_BREAK, - ET_SWITCH //Switch orientation - }; - - /* I decided to waste one integer per break/switch with the pos - * variable inside the WidgetElement struct, since otherwise we - * would need 2 vectors for breaks and columns, which would use more - * memory, be slower and more complex than this; another approach - * is to use classes for each ElementType, but this most likely will also - * waste more resources. -Coz - */ - struct WidgetElement - { - ElementTypes type; - int pos; //If the element is a widget, the position of the widget - //in it's vector - - WidgetElement(ElementTypes _type, int _pos):type(_type), pos(_pos){}; - }; - - std::vector m_elems; - std::vector m_widgets; - - WidgetArea m_prev_layout_pos; - - int m_x; - int m_y; - - int m_selected_wgt_token; - bool m_selection_change; - - bool m_default_active; - bool m_default_resize_to_text; - - bool m_default_show_rect; - WidgetArea m_default_rect_round_corners; - int m_default_rect_radius; - const GLfloat *m_default_rect_color; - - bool m_default_show_border; - float m_default_border_percentage; - const GLfloat *m_default_border_color; - - bool m_default_show_texture; - int m_default_texture; - - bool m_default_show_text; - std::string m_default_text; - WidgetFontSize m_default_text_size; - WidgetFont m_default_font; - const GLfloat* m_default_text_color; - - bool m_default_enable_scroll; - WidgetScrollPos m_default_scroll_preset_x; - WidgetScrollPos m_default_scroll_preset_y; - int m_default_scroll_x_speed; - int m_default_scroll_y_speed; - - bool m_default_enable_rotation; - float m_default_rotation_angle; - int m_default_rotation_speed; - - int m_default_show_track; - int m_default_track_num; -public: - int findId(const int TOKEN) const; -private: - - int calcLineWidth( const int POS ); - int calcLineHeight( const int POS ); - int calcColumnWidth( const int POS ); - int calcColumnHeight( const int POS ); - - //These get* functions return the same thing as the above functions, but - //they modify pos and set it to the position of the last element - int getLineWidth( int& pos); - int getLineHeight( int& pos ); - int getColumnWidth( int& pos ); - int getColumnHeight( int& pos ); - - int calcLineX( const int POS ); - int calcColumnX( const int POS ); - - int calcWidth(); - int calcHeight(); - - bool layoutLine( int& x, int& y, int& pos ); - bool layoutColumn( int& x, int& y, int& pos ); - - int findLeftWidget(const int START_WGT) const; - int findRightWidget(const int START_WGT) const; - int findTopWidget(const int START_WGT) const; - int findBottomWidget(const int START_WGT) const; - - int handleFinish(const int); - - void setSelectedWgtToken(const int TOKEN); - -public: - //TODO: remove return values that we don't check - static const int WGT_NONE; - - WidgetManager(); - ~WidgetManager(); - - bool isEmpty() { return m_widgets.empty(); } - - Widget *addWgt - ( - const int TOKEN, //A number that names the widget. - const int MIN_WIDTH, //These values are percentages not pixels. 100% - //is the whole screen. - const int MIN_HEIGHT - ); - - bool breakLine(); - void switchOrder(); //This changes the orientation from horizontal to - //vertical. It's reverted at line breaks. There are - //no situations where you cannot use a switch order - //so it should always succeed. - - void reset(); - - void update(const float DELTA); - - bool layout(); //This calls the other layout() function with the - //POSITION given to the previous call to any of the two - //layout functions. Besides the conditions under the other - //layour() function fails, itm ay also fail if no previous - //call to the layout(POSITION) function has been done. - bool layout( const WidgetArea POSITION ); - - //TODO: make all get functions const - int getSelectedWgt() const { return m_selected_wgt_token; } - void setSelectedWgt(const int TOKEN); - - /** Checks if the selected widget changed since the last call to update() */ - bool selectionChanged() const { return m_selection_change; } - - /** Forces the changed selection mode. */ - void setSelectionChanged() { m_selection_change = true; } - - /* Macro functions. They are widgets with special predefined values. */ - - //FIXME: Temporal, till I rename addWgt() to addEmptyWgt() - Widget *addEmptyWgt (const int TOKEN, const int MIN_WIDTH, - const int MIN_HEIGHT) {return addWgt(TOKEN,MIN_WIDTH,MIN_HEIGHT);} - - //Widget that adds visible rect & text, rounded corners with 20% radius, - //sets the text, and large font - Widget *addTitleWgt (const int TOKEN, const int MIN_WIDTH, - const int MIN_HEIGHT, const std::string TEXT); - - //Widget that adds visible rect & text, rounded corners with 20% radius, - //and sets the text - Widget *addTextWgt (const int TOKEN, const int MIN_WIDTH, - const int MIN_HEIGHT, const std::string TEXT); - - //Widget that adds visible rect & text, rounded corners with 20% radius, - //sets the text and is selectable - Widget *addTextButtonWgt(const int TOKEN, const int MIN_WIDTH, - const int MIN_HEIGHT, const std::string TEXT); - - //Widget that adds visible rect & image, white rect, 5% black - //border, and sets the texture - Widget *addImgWgt (const int TOKEN, const int MIN_WIDTH, - const int MIN_HEIGHT, const int IMG); - Widget *addImgWgt (const int TOKEN, const int MIN_WIDTH, - const int MIN_HEIGHT, const char* FILENAME); - - //Selectable widget with visible rect & image, rounded corners with 20% radius, - //gray rect and texture - Widget *addImgButtonWgt (const int TOKEN, const int MIN_WIDTH, - const int MIN_HEIGHT, const int IMG); - Widget *addImgButtonWgt (const int TOKEN, const int MIN_WIDTH, - const int MIN_HEIGHT,const std::string& FILENAME); - - /* On/off widget switch features. They are all disabled/hidden initially. */ - void setInitialActivationState( const bool ACTIVE); - - void setInitialRectState(const bool SHOW,const WidgetArea ROUND_CORNERS, - const int RADIUS,const GLfloat* const COLOR); - - void setInitialTextureState(const bool SHOW, const int TEXTURE ); - - void setInitialBorderState - ( - const bool SHOW, - const int PERCENTAGE, - const GLfloat* const COLOR - ); - - void setInitialTextState - ( - const bool SHOW, - const std::string TEXT, - const WidgetFontSize SIZE, - const WidgetFont FONT, - const GLfloat* const COLOR, - const bool RESIZE_WGT - ); - - void setInitialScrollState - ( - const bool ENABLE, - const WidgetScrollPos X_POS, - const WidgetScrollPos Y_POS, - const int X_SPEED, - const int Y_SPEED - ); - - void setInitialRotationState - ( - const bool ENABLE, - const float ANGLE, - const int SPEED - ); - - - void setInitialTrackState - ( - const bool SHOW, - const int TRACK - ); - - void restoreDefaultStates(); - - void activateWgt(const int TOKEN); - void deactivateWgt(const int TOKEN); - - //FIXME: maybe this should be setWgtRectColor ? and put after the other rect funcs? - void setWgtColor(const int TOKEN, const GLfloat* const COLOR); - void setWgtRoundCorners(const int TOKEN, const WidgetArea CORNERS); - //The radius given is the percentage of the height or the width of the - //widget, whatever is smaller; however, the maximum is 50% (the corner's - //size). - void setWgtCornerRadius(const int TOKEN, const int RADIUS); - void showWgtRect(const int TOKEN); - // Completely hide and show a widget - void hideWgt(const int t) {hideWgtRect(t); hideWgtText(t);} - void hideWgt(int t0, int t2) {for(int i=t0; i<=t2; hideWgt(i++));} - void showWgt(const int t) {showWgtRect(t); showWgtText(t);} - void showWgt(int t0, int t2) {for(int i=t0; i<=t2; showWgt(i++));} - void hideWgtRect(const int TOKEN); - - void setWgtBorderColor(const int TOKEN, const GLfloat* const COLOR); - void setWgtBorderPercentage(const int TOKEN, const int PERCENTAGE); - void showWgtBorder(const int TOKEN); - void hideWgtBorder(const int TOKEN); - //TODO: add initial border colors, if I don't erase those functions. - - void setWgtTexture(const int TOKEN, const int TEXTURE); - void setWgtTexture(const int TOKEN, const std::string& FILENAME, const bool is_full_path=true); - void setWgtLockTexture(const int token) {setWgtTexture(token, "gui_lock.rgb", false);} - void showWgtTexture(const int TOKEN); - void hideWgtTexture(const int TOKEN); - - void setWgtText( const int TOKEN, const char* TEXT ); - void setWgtText( const int TOKEN, const std::string TEXT ); - void setWgtTextSize( const int TOKEN, const WidgetFontSize SIZE ); - void setWgtFont( const int TOKEN, const WidgetFont FONT ); - void setWgtTextColor( const int TOKEN, const GLfloat* const COLOR ); - void setWgtResizeToText( const int TOKEN, const bool RESIZE ); - void showWgtText( const int TOKEN ); - void hideWgtText( const int TOKEN ); - void resizeWgtToText( const int TOKEN ); - void reloadFonts(); - - //FIXME: change to enableWgtScrolling, since it enables or disables - //FIXME: maybe all that enabling the scrolling should do, is to allow - //players to lower/raise it? - //only the scrolling movement, not setting the scrolling position. - void enableWgtScroll( const int TOKEN ); - void disableWgtScroll( const int TOKEN ); - void setWgtXScrollPos( const int TOKEN, const WidgetScrollPos POS ); - void setWgtYScrollPos( const int TOKEN, const WidgetScrollPos POS ); - void setWgtXScrollSpeed( const int TOKEN, const int SPEED ); - void setWgtYScrollSpeed( const int TOKEN, const int SPEED ); - - void enableWgtRotation( const int TOKEN ); - void disableWgtRotation( const int TOKEN ); - void setWgtRotationAngle( const int TOKEN, const float ANGLE ); - void setWgtRotationSpeed( const int TOKEN, const int SPEED ); - - void showWgtTrack( const int TOKEN ); - void hideWgtTrack( const int TOKEN ); - void setWgtTrackNum( const int TOKEN, const int TRACK ); - - /* Activated widget features. */ - void pulseWgt( const int TOKEN ) const; - - /* Convenience widget functions. */ - void lightenWgtColor(const int TOKEN); - void darkenWgtColor(const int TOKEN); - - /* Input device handling. */ - int handlePointer( const int X, const int Y ); - int handleLeft(); - int handleRight(); - int handleUp(); - int handleDown(); - - /* Scrolling modification. */ - void increaseScrollSpeed(bool = false); - void decreaseScrollSpeed(bool = false); - void setPosition(const int token, - WidgetDirection hori, float percentage_x, - WidgetDirection verti, float percentage_y); - void sameWidth(int widget_min, int widget_max); -}; - -extern WidgetManager *widget_manager; - -#endif - -/* EOF */ diff --git a/src/ide/Xcode/STK_XCode.xcodeproj/project.pbxproj b/src/ide/Xcode/STK_XCode.xcodeproj/project.pbxproj index 8220548a6..d09886a0e 100644 --- a/src/ide/Xcode/STK_XCode.xcodeproj/project.pbxproj +++ b/src/ide/Xcode/STK_XCode.xcodeproj/project.pbxproj @@ -12,9 +12,17 @@ 950557580F6968860056E88C /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 950557570F6968860056E88C /* Carbon.framework */; }; 950557600F6968A50056E88C /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9505575F0F6968A50056E88C /* QuickTime.framework */; }; 950557650F6968BE0056E88C /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 950557640F6968BE0056E88C /* IOKit.framework */; }; + 950557860F696A900056E88C /* engine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9505577A0F696A900056E88C /* engine.cpp */; }; + 950557870F696A900056E88C /* my_button.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9505577C0F696A900056E88C /* my_button.cpp */; }; + 950557880F696A900056E88C /* screen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9505577F0F696A900056E88C /* screen.cpp */; }; + 950557890F696A900056E88C /* screen_loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 950557810F696A900056E88C /* screen_loader.cpp */; }; + 9505578A0F696A900056E88C /* skin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 950557820F696A900056E88C /* skin.cpp */; }; + 9505578B0F696A900056E88C /* widget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 950557840F696A900056E88C /* widget.cpp */; }; 953EAAAF0F30A4220000D57D /* terrain_info.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 953EAAAE0F30A4220000D57D /* terrain_info.cpp */; }; 953EAAB20F30A4410000D57D /* triangle_mesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 953EAAB10F30A4410000D57D /* triangle_mesh.cpp */; }; 953EAAB60F30A4650000D57D /* translation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 953EAAB50F30A4650000D57D /* translation.cpp */; }; + 95C1E3F20F699079005D33E6 /* race_gui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C1E3F10F699079005D33E6 /* race_gui.cpp */; }; + 95C1E4000F699427005D33E6 /* font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C1E3FF0F699427005D33E6 /* font.cpp */; }; 95C2B1F70F296546000D3E5D /* actionmap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AC210F296540000D3E5D /* actionmap.cpp */; }; 95C2B1FB0F296546000D3E5D /* music_information.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AC280F296540000D3E5D /* music_information.cpp */; }; 95C2B1FC0F296546000D3E5D /* music_ogg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AC2A0F296540000D3E5D /* music_ogg.cpp */; }; @@ -136,36 +144,6 @@ 95C2B2FA0F296546000D3E5D /* explosion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AE740F296542000D3E5D /* explosion.cpp */; }; 95C2B3030F296546000D3E5D /* grand_prix_data.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AE7F0F296542000D3E5D /* grand_prix_data.cpp */; }; 95C2B3060F296546000D3E5D /* grand_prix_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AE830F296542000D3E5D /* grand_prix_manager.cpp */; }; - 95C2B3100F296546000D3E5D /* base_gui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AE970F296542000D3E5D /* base_gui.cpp */; }; - 95C2B3110F296546000D3E5D /* challenges_menu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AE990F296542000D3E5D /* challenges_menu.cpp */; }; - 95C2B3120F296546000D3E5D /* char_sel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AE9B0F296542000D3E5D /* char_sel.cpp */; }; - 95C2B3130F296546000D3E5D /* config_controls.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AE9D0F296542000D3E5D /* config_controls.cpp */; }; - 95C2B3140F296546000D3E5D /* config_display.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AE9F0F296542000D3E5D /* config_display.cpp */; }; - 95C2B3150F296546000D3E5D /* config_sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AEA10F296542000D3E5D /* config_sound.cpp */; }; - 95C2B3160F296546000D3E5D /* credits_menu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AEA30F296542000D3E5D /* credits_menu.cpp */; }; - 95C2B3170F296546000D3E5D /* display_res_confirm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AEA50F296542000D3E5D /* display_res_confirm.cpp */; }; - 95C2B3180F296546000D3E5D /* feature_unlocked.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AEA70F296542000D3E5D /* feature_unlocked.cpp */; }; - 95C2B3190F296546000D3E5D /* font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AEA90F296542000D3E5D /* font.cpp */; }; - 95C2B31A0F296546000D3E5D /* game_mode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AEAB0F296542000D3E5D /* game_mode.cpp */; }; - 95C2B31B0F296546000D3E5D /* grand_prix_ending.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AEAD0F296542000D3E5D /* grand_prix_ending.cpp */; }; - 95C2B31C0F296546000D3E5D /* grand_prix_select.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AEAF0F296542000D3E5D /* grand_prix_select.cpp */; }; - 95C2B31D0F296546000D3E5D /* help_page_one.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AEB10F296542000D3E5D /* help_page_one.cpp */; }; - 95C2B31E0F296546000D3E5D /* help_page_three.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AEB30F296542000D3E5D /* help_page_three.cpp */; }; - 95C2B31F0F296546000D3E5D /* help_page_two.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AEB50F296542000D3E5D /* help_page_two.cpp */; }; - 95C2B3200F296546000D3E5D /* main_menu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AEB70F296542000D3E5D /* main_menu.cpp */; }; - 95C2B3210F296546000D3E5D /* menu_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AEB90F296542000D3E5D /* menu_manager.cpp */; }; - 95C2B3220F296546000D3E5D /* network_gui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AEBB0F296542000D3E5D /* network_gui.cpp */; }; - 95C2B3230F296546000D3E5D /* num_players.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AEBD0F296542000D3E5D /* num_players.cpp */; }; - 95C2B3240F296546000D3E5D /* options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AEBF0F296542000D3E5D /* options.cpp */; }; - 95C2B3250F296546000D3E5D /* player_controls.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AEC10F296542000D3E5D /* player_controls.cpp */; }; - 95C2B3260F296546000D3E5D /* race_gui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AEC30F296542000D3E5D /* race_gui.cpp */; }; - 95C2B3270F296546000D3E5D /* race_menu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AEC50F296542000D3E5D /* race_menu.cpp */; }; - 95C2B3280F296546000D3E5D /* race_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AEC70F296542000D3E5D /* race_options.cpp */; }; - 95C2B3290F296546000D3E5D /* race_results_gui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AEC90F296542000D3E5D /* race_results_gui.cpp */; }; - 95C2B32A0F296546000D3E5D /* start_race_feedback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AECB0F296542000D3E5D /* start_race_feedback.cpp */; }; - 95C2B32B0F296546000D3E5D /* track_sel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AECD0F296542000D3E5D /* track_sel.cpp */; }; - 95C2B32C0F296546000D3E5D /* widget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AECF0F296542000D3E5D /* widget.cpp */; }; - 95C2B32D0F296546000D3E5D /* widget_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AED10F296542000D3E5D /* widget_manager.cpp */; }; 95C2B3310F296546000D3E5D /* highscore_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AED60F296542000D3E5D /* highscore_manager.cpp */; }; 95C2B3330F296546000D3E5D /* highscores.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AED90F296542000D3E5D /* highscores.cpp */; }; 95C2B3350F296546000D3E5D /* history.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AEDC0F296542000D3E5D /* history.cpp */; }; @@ -270,6 +248,18 @@ 950557570F6968860056E88C /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; 9505575F0F6968A50056E88C /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = ""; }; 950557640F6968BE0056E88C /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; + 9505577A0F696A900056E88C /* engine.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = engine.cpp; path = games/supertuxkart/src/gui/engine.cpp; sourceTree = SYSTEM_DEVELOPER_DIR; }; + 9505577B0F696A900056E88C /* engine.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = engine.hpp; path = games/supertuxkart/src/gui/engine.hpp; sourceTree = SYSTEM_DEVELOPER_DIR; }; + 9505577C0F696A900056E88C /* my_button.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = my_button.cpp; path = games/supertuxkart/src/gui/my_button.cpp; sourceTree = SYSTEM_DEVELOPER_DIR; }; + 9505577D0F696A900056E88C /* my_button.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = my_button.hpp; path = games/supertuxkart/src/gui/my_button.hpp; sourceTree = SYSTEM_DEVELOPER_DIR; }; + 9505577E0F696A900056E88C /* ptr_vector.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ptr_vector.hpp; path = games/supertuxkart/src/gui/ptr_vector.hpp; sourceTree = SYSTEM_DEVELOPER_DIR; }; + 9505577F0F696A900056E88C /* screen.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = screen.cpp; path = games/supertuxkart/src/gui/screen.cpp; sourceTree = SYSTEM_DEVELOPER_DIR; }; + 950557800F696A900056E88C /* screen.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = screen.hpp; path = games/supertuxkart/src/gui/screen.hpp; sourceTree = SYSTEM_DEVELOPER_DIR; }; + 950557810F696A900056E88C /* screen_loader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = screen_loader.cpp; path = games/supertuxkart/src/gui/screen_loader.cpp; sourceTree = SYSTEM_DEVELOPER_DIR; }; + 950557820F696A900056E88C /* skin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = skin.cpp; path = games/supertuxkart/src/gui/skin.cpp; sourceTree = SYSTEM_DEVELOPER_DIR; }; + 950557830F696A900056E88C /* skin.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = skin.hpp; path = games/supertuxkart/src/gui/skin.hpp; sourceTree = SYSTEM_DEVELOPER_DIR; }; + 950557840F696A900056E88C /* widget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = widget.cpp; path = games/supertuxkart/src/gui/widget.cpp; sourceTree = SYSTEM_DEVELOPER_DIR; }; + 950557850F696A900056E88C /* widget.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = widget.hpp; path = games/supertuxkart/src/gui/widget.hpp; sourceTree = SYSTEM_DEVELOPER_DIR; }; 951F96810F29670C00E1AC66 /* SuperTuxKart */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = SuperTuxKart; sourceTree = BUILT_PRODUCTS_DIR; }; 953EAAAD0F30A4220000D57D /* terrain_info.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = terrain_info.hpp; path = ../../tracks/terrain_info.hpp; sourceTree = SOURCE_ROOT; }; 953EAAAE0F30A4220000D57D /* terrain_info.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = terrain_info.cpp; path = ../../tracks/terrain_info.cpp; sourceTree = SOURCE_ROOT; }; @@ -277,6 +267,10 @@ 953EAAB10F30A4410000D57D /* triangle_mesh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = triangle_mesh.cpp; path = ../../physics/triangle_mesh.cpp; sourceTree = SOURCE_ROOT; }; 953EAAB40F30A4650000D57D /* translation.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = translation.hpp; path = ../../utils/translation.hpp; sourceTree = SOURCE_ROOT; }; 953EAAB50F30A4650000D57D /* translation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = translation.cpp; path = ../../utils/translation.cpp; sourceTree = SOURCE_ROOT; }; + 95C1E3EB0F698F23005D33E6 /* race_gui.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = race_gui.hpp; path = games/supertuxkart/src/gui/race_gui.hpp; sourceTree = SYSTEM_DEVELOPER_DIR; }; + 95C1E3F10F699079005D33E6 /* race_gui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = race_gui.cpp; path = games/supertuxkart/src/gui/race_gui.cpp; sourceTree = SYSTEM_DEVELOPER_DIR; }; + 95C1E3FF0F699427005D33E6 /* font.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = font.cpp; path = games/supertuxkart/src/gui/font.cpp; sourceTree = SYSTEM_DEVELOPER_DIR; }; + 95C1E4020F69943D005D33E6 /* font.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = font.hpp; path = games/supertuxkart/src/gui/font.hpp; sourceTree = SYSTEM_DEVELOPER_DIR; }; 95C2AC210F296540000D3E5D /* actionmap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = actionmap.cpp; path = ../../actionmap.cpp; sourceTree = SOURCE_ROOT; }; 95C2AC220F296540000D3E5D /* actionmap.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = actionmap.hpp; path = ../../actionmap.hpp; sourceTree = SOURCE_ROOT; }; 95C2AC270F296540000D3E5D /* music.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = music.hpp; path = ../../audio/music.hpp; sourceTree = SOURCE_ROOT; }; @@ -567,66 +561,6 @@ 95C2AE800F296542000D3E5D /* grand_prix_data.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = grand_prix_data.hpp; path = ../../grand_prix_data.hpp; sourceTree = SOURCE_ROOT; }; 95C2AE830F296542000D3E5D /* grand_prix_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = grand_prix_manager.cpp; path = ../../grand_prix_manager.cpp; sourceTree = SOURCE_ROOT; }; 95C2AE840F296542000D3E5D /* grand_prix_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = grand_prix_manager.hpp; path = ../../grand_prix_manager.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AE970F296542000D3E5D /* base_gui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = base_gui.cpp; path = ../../gui/base_gui.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AE980F296542000D3E5D /* base_gui.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = base_gui.hpp; path = ../../gui/base_gui.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AE990F296542000D3E5D /* challenges_menu.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = challenges_menu.cpp; path = ../../gui/challenges_menu.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AE9A0F296542000D3E5D /* challenges_menu.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = challenges_menu.hpp; path = ../../gui/challenges_menu.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AE9B0F296542000D3E5D /* char_sel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = char_sel.cpp; path = ../../gui/char_sel.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AE9C0F296542000D3E5D /* char_sel.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = char_sel.hpp; path = ../../gui/char_sel.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AE9D0F296542000D3E5D /* config_controls.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = config_controls.cpp; path = ../../gui/config_controls.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AE9E0F296542000D3E5D /* config_controls.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = config_controls.hpp; path = ../../gui/config_controls.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AE9F0F296542000D3E5D /* config_display.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = config_display.cpp; path = ../../gui/config_display.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AEA00F296542000D3E5D /* config_display.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = config_display.hpp; path = ../../gui/config_display.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AEA10F296542000D3E5D /* config_sound.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = config_sound.cpp; path = ../../gui/config_sound.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AEA20F296542000D3E5D /* config_sound.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = config_sound.hpp; path = ../../gui/config_sound.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AEA30F296542000D3E5D /* credits_menu.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = credits_menu.cpp; path = ../../gui/credits_menu.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AEA40F296542000D3E5D /* credits_menu.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = credits_menu.hpp; path = ../../gui/credits_menu.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AEA50F296542000D3E5D /* display_res_confirm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = display_res_confirm.cpp; path = ../../gui/display_res_confirm.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AEA60F296542000D3E5D /* display_res_confirm.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = display_res_confirm.hpp; path = ../../gui/display_res_confirm.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AEA70F296542000D3E5D /* feature_unlocked.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = feature_unlocked.cpp; path = ../../gui/feature_unlocked.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AEA80F296542000D3E5D /* feature_unlocked.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = feature_unlocked.hpp; path = ../../gui/feature_unlocked.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AEA90F296542000D3E5D /* font.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = font.cpp; path = ../../gui/font.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AEAA0F296542000D3E5D /* font.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = font.hpp; path = ../../gui/font.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AEAB0F296542000D3E5D /* game_mode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = game_mode.cpp; path = ../../gui/game_mode.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AEAC0F296542000D3E5D /* game_mode.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = game_mode.hpp; path = ../../gui/game_mode.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AEAD0F296542000D3E5D /* grand_prix_ending.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = grand_prix_ending.cpp; path = ../../gui/grand_prix_ending.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AEAE0F296542000D3E5D /* grand_prix_ending.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = grand_prix_ending.hpp; path = ../../gui/grand_prix_ending.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AEAF0F296542000D3E5D /* grand_prix_select.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = grand_prix_select.cpp; path = ../../gui/grand_prix_select.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AEB00F296542000D3E5D /* grand_prix_select.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = grand_prix_select.hpp; path = ../../gui/grand_prix_select.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AEB10F296542000D3E5D /* help_page_one.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = help_page_one.cpp; path = ../../gui/help_page_one.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AEB20F296542000D3E5D /* help_page_one.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = help_page_one.hpp; path = ../../gui/help_page_one.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AEB30F296542000D3E5D /* help_page_three.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = help_page_three.cpp; path = ../../gui/help_page_three.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AEB40F296542000D3E5D /* help_page_three.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = help_page_three.hpp; path = ../../gui/help_page_three.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AEB50F296542000D3E5D /* help_page_two.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = help_page_two.cpp; path = ../../gui/help_page_two.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AEB60F296542000D3E5D /* help_page_two.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = help_page_two.hpp; path = ../../gui/help_page_two.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AEB70F296542000D3E5D /* main_menu.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main_menu.cpp; path = ../../gui/main_menu.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AEB80F296542000D3E5D /* main_menu.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = main_menu.hpp; path = ../../gui/main_menu.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AEB90F296542000D3E5D /* menu_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = menu_manager.cpp; path = ../../gui/menu_manager.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AEBA0F296542000D3E5D /* menu_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = menu_manager.hpp; path = ../../gui/menu_manager.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AEBB0F296542000D3E5D /* network_gui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = network_gui.cpp; path = ../../gui/network_gui.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AEBC0F296542000D3E5D /* network_gui.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = network_gui.hpp; path = ../../gui/network_gui.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AEBD0F296542000D3E5D /* num_players.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = num_players.cpp; path = ../../gui/num_players.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AEBE0F296542000D3E5D /* num_players.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = num_players.hpp; path = ../../gui/num_players.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AEBF0F296542000D3E5D /* options.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = options.cpp; path = ../../gui/options.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AEC00F296542000D3E5D /* options.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = options.hpp; path = ../../gui/options.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AEC10F296542000D3E5D /* player_controls.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = player_controls.cpp; path = ../../gui/player_controls.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AEC20F296542000D3E5D /* player_controls.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = player_controls.hpp; path = ../../gui/player_controls.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AEC30F296542000D3E5D /* race_gui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = race_gui.cpp; path = ../../gui/race_gui.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AEC40F296542000D3E5D /* race_gui.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = race_gui.hpp; path = ../../gui/race_gui.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AEC50F296542000D3E5D /* race_menu.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = race_menu.cpp; path = ../../gui/race_menu.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AEC60F296542000D3E5D /* race_menu.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = race_menu.hpp; path = ../../gui/race_menu.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AEC70F296542000D3E5D /* race_options.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = race_options.cpp; path = ../../gui/race_options.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AEC80F296542000D3E5D /* race_options.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = race_options.hpp; path = ../../gui/race_options.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AEC90F296542000D3E5D /* race_results_gui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = race_results_gui.cpp; path = ../../gui/race_results_gui.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AECA0F296542000D3E5D /* race_results_gui.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = race_results_gui.hpp; path = ../../gui/race_results_gui.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AECB0F296542000D3E5D /* start_race_feedback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = start_race_feedback.cpp; path = ../../gui/start_race_feedback.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AECC0F296542000D3E5D /* start_race_feedback.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = start_race_feedback.hpp; path = ../../gui/start_race_feedback.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AECD0F296542000D3E5D /* track_sel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = track_sel.cpp; path = ../../gui/track_sel.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AECE0F296542000D3E5D /* track_sel.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = track_sel.hpp; path = ../../gui/track_sel.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AECF0F296542000D3E5D /* widget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = widget.cpp; path = ../../gui/widget.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AED00F296542000D3E5D /* widget.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = widget.hpp; path = ../../gui/widget.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AED10F296542000D3E5D /* widget_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = widget_manager.cpp; path = ../../gui/widget_manager.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AED20F296542000D3E5D /* widget_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = widget_manager.hpp; path = ../../gui/widget_manager.hpp; sourceTree = SOURCE_ROOT; }; 95C2AED60F296542000D3E5D /* highscore_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = highscore_manager.cpp; path = ../../highscore_manager.cpp; sourceTree = SOURCE_ROOT; }; 95C2AED70F296542000D3E5D /* highscore_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = highscore_manager.hpp; path = ../../highscore_manager.hpp; sourceTree = SOURCE_ROOT; }; 95C2AED90F296542000D3E5D /* highscores.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = highscores.cpp; path = ../../highscores.cpp; sourceTree = SOURCE_ROOT; }; @@ -806,6 +740,171 @@ 95C65D9F0F532FD400BE7BA7 /* scene.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = scene.cpp; path = games/supertuxkart/src/graphics/scene.cpp; sourceTree = SYSTEM_DEVELOPER_DIR; }; 95C65DA00F532FD400BE7BA7 /* shadow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = shadow.cpp; path = games/supertuxkart/src/graphics/shadow.cpp; sourceTree = SYSTEM_DEVELOPER_DIR; }; 95C65DA10F532FD400BE7BA7 /* nitro.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = nitro.cpp; path = games/supertuxkart/src/graphics/nitro.cpp; sourceTree = SYSTEM_DEVELOPER_DIR; }; + 95D538840F69D61C00B4062E /* aabbox3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = aabbox3d.h; path = /usr/local/include/irrlicht/aabbox3d.h; sourceTree = ""; }; + 95D538850F69D61C00B4062E /* CDynamicMeshBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDynamicMeshBuffer.h; path = /usr/local/include/irrlicht/CDynamicMeshBuffer.h; sourceTree = ""; }; + 95D538860F69D61C00B4062E /* CIndexBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CIndexBuffer.h; path = /usr/local/include/irrlicht/CIndexBuffer.h; sourceTree = ""; }; + 95D538870F69D61C00B4062E /* CMeshBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CMeshBuffer.h; path = /usr/local/include/irrlicht/CMeshBuffer.h; sourceTree = ""; }; + 95D538880F69D61C00B4062E /* coreutil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = coreutil.h; path = /usr/local/include/irrlicht/coreutil.h; sourceTree = ""; }; + 95D538890F69D61C00B4062E /* CVertexBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CVertexBuffer.h; path = /usr/local/include/irrlicht/CVertexBuffer.h; sourceTree = ""; }; + 95D5388A0F69D61C00B4062E /* dimension2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dimension2d.h; path = /usr/local/include/irrlicht/dimension2d.h; sourceTree = ""; }; + 95D5388B0F69D61C00B4062E /* ECullingTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ECullingTypes.h; path = /usr/local/include/irrlicht/ECullingTypes.h; sourceTree = ""; }; + 95D5388C0F69D61C00B4062E /* EDebugSceneTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EDebugSceneTypes.h; path = /usr/local/include/irrlicht/EDebugSceneTypes.h; sourceTree = ""; }; + 95D5388D0F69D61C00B4062E /* EDriverFeatures.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EDriverFeatures.h; path = /usr/local/include/irrlicht/EDriverFeatures.h; sourceTree = ""; }; + 95D5388E0F69D61C00B4062E /* EDriverTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EDriverTypes.h; path = /usr/local/include/irrlicht/EDriverTypes.h; sourceTree = ""; }; + 95D5388F0F69D61C00B4062E /* EGUIAlignment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EGUIAlignment.h; path = /usr/local/include/irrlicht/EGUIAlignment.h; sourceTree = ""; }; + 95D538900F69D61C00B4062E /* EGUIElementTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EGUIElementTypes.h; path = /usr/local/include/irrlicht/EGUIElementTypes.h; sourceTree = ""; }; + 95D538910F69D61C00B4062E /* EHardwareBufferFlags.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EHardwareBufferFlags.h; path = /usr/local/include/irrlicht/EHardwareBufferFlags.h; sourceTree = ""; }; + 95D538920F69D61C00B4062E /* EMaterialFlags.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EMaterialFlags.h; path = /usr/local/include/irrlicht/EMaterialFlags.h; sourceTree = ""; }; + 95D538930F69D61C00B4062E /* EMaterialTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EMaterialTypes.h; path = /usr/local/include/irrlicht/EMaterialTypes.h; sourceTree = ""; }; + 95D538940F69D61C00B4062E /* EMeshWriterEnums.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EMeshWriterEnums.h; path = /usr/local/include/irrlicht/EMeshWriterEnums.h; sourceTree = ""; }; + 95D538950F69D61C00B4062E /* EMessageBoxFlags.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EMessageBoxFlags.h; path = /usr/local/include/irrlicht/EMessageBoxFlags.h; sourceTree = ""; }; + 95D538960F69D61C00B4062E /* ESceneNodeAnimatorTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ESceneNodeAnimatorTypes.h; path = /usr/local/include/irrlicht/ESceneNodeAnimatorTypes.h; sourceTree = ""; }; + 95D538970F69D61C00B4062E /* ESceneNodeTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ESceneNodeTypes.h; path = /usr/local/include/irrlicht/ESceneNodeTypes.h; sourceTree = ""; }; + 95D538980F69D61C00B4062E /* ETerrainElements.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ETerrainElements.h; path = /usr/local/include/irrlicht/ETerrainElements.h; sourceTree = ""; }; + 95D538990F69D61C00B4062E /* fast_atof.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fast_atof.h; path = /usr/local/include/irrlicht/fast_atof.h; sourceTree = ""; }; + 95D5389A0F69D61C00B4062E /* heapsort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = heapsort.h; path = /usr/local/include/irrlicht/heapsort.h; sourceTree = ""; }; + 95D5389B0F69D61C00B4062E /* IAnimatedMesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IAnimatedMesh.h; path = /usr/local/include/irrlicht/IAnimatedMesh.h; sourceTree = ""; }; + 95D5389C0F69D61C00B4062E /* IAnimatedMeshMD2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IAnimatedMeshMD2.h; path = /usr/local/include/irrlicht/IAnimatedMeshMD2.h; sourceTree = ""; }; + 95D5389D0F69D61C00B4062E /* IAnimatedMeshMD3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IAnimatedMeshMD3.h; path = /usr/local/include/irrlicht/IAnimatedMeshMD3.h; sourceTree = ""; }; + 95D5389E0F69D61C00B4062E /* IAnimatedMeshSceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IAnimatedMeshSceneNode.h; path = /usr/local/include/irrlicht/IAnimatedMeshSceneNode.h; sourceTree = ""; }; + 95D5389F0F69D61C00B4062E /* IAttributeExchangingObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IAttributeExchangingObject.h; path = /usr/local/include/irrlicht/IAttributeExchangingObject.h; sourceTree = ""; }; + 95D538A00F69D61C00B4062E /* IAttributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IAttributes.h; path = /usr/local/include/irrlicht/IAttributes.h; sourceTree = ""; }; + 95D538A10F69D61C00B4062E /* IBillboardSceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IBillboardSceneNode.h; path = /usr/local/include/irrlicht/IBillboardSceneNode.h; sourceTree = ""; }; + 95D538A20F69D61C00B4062E /* IBillboardTextSceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IBillboardTextSceneNode.h; path = /usr/local/include/irrlicht/IBillboardTextSceneNode.h; sourceTree = ""; }; + 95D538A30F69D61C00B4062E /* IBoneSceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IBoneSceneNode.h; path = /usr/local/include/irrlicht/IBoneSceneNode.h; sourceTree = ""; }; + 95D538A40F69D61C00B4062E /* ICameraSceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ICameraSceneNode.h; path = /usr/local/include/irrlicht/ICameraSceneNode.h; sourceTree = ""; }; + 95D538A50F69D61C00B4062E /* ICursorControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ICursorControl.h; path = /usr/local/include/irrlicht/ICursorControl.h; sourceTree = ""; }; + 95D538A60F69D61C00B4062E /* IDummyTransformationSceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IDummyTransformationSceneNode.h; path = /usr/local/include/irrlicht/IDummyTransformationSceneNode.h; sourceTree = ""; }; + 95D538A70F69D61C00B4062E /* IDynamicMeshBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IDynamicMeshBuffer.h; path = /usr/local/include/irrlicht/IDynamicMeshBuffer.h; sourceTree = ""; }; + 95D538A80F69D61C00B4062E /* IEventReceiver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IEventReceiver.h; path = /usr/local/include/irrlicht/IEventReceiver.h; sourceTree = ""; }; + 95D538A90F69D61C00B4062E /* IFileList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IFileList.h; path = /usr/local/include/irrlicht/IFileList.h; sourceTree = ""; }; + 95D538AA0F69D61C00B4062E /* IFileSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IFileSystem.h; path = /usr/local/include/irrlicht/IFileSystem.h; sourceTree = ""; }; + 95D538AB0F69D61C00B4062E /* IGPUProgrammingServices.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGPUProgrammingServices.h; path = /usr/local/include/irrlicht/IGPUProgrammingServices.h; sourceTree = ""; }; + 95D538AC0F69D61C00B4062E /* IGUIButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIButton.h; path = /usr/local/include/irrlicht/IGUIButton.h; sourceTree = ""; }; + 95D538AD0F69D61C00B4062E /* IGUICheckBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUICheckBox.h; path = /usr/local/include/irrlicht/IGUICheckBox.h; sourceTree = ""; }; + 95D538AE0F69D61C00B4062E /* IGUIColorSelectDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIColorSelectDialog.h; path = /usr/local/include/irrlicht/IGUIColorSelectDialog.h; sourceTree = ""; }; + 95D538AF0F69D61C00B4062E /* IGUIComboBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIComboBox.h; path = /usr/local/include/irrlicht/IGUIComboBox.h; sourceTree = ""; }; + 95D538B00F69D61C00B4062E /* IGUIContextMenu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIContextMenu.h; path = /usr/local/include/irrlicht/IGUIContextMenu.h; sourceTree = ""; }; + 95D538B10F69D61C00B4062E /* IGUIEditBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIEditBox.h; path = /usr/local/include/irrlicht/IGUIEditBox.h; sourceTree = ""; }; + 95D538B20F69D61C00B4062E /* IGUIElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIElement.h; path = /usr/local/include/irrlicht/IGUIElement.h; sourceTree = ""; }; + 95D538B30F69D61C00B4062E /* IGUIElementFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIElementFactory.h; path = /usr/local/include/irrlicht/IGUIElementFactory.h; sourceTree = ""; }; + 95D538B40F69D61C00B4062E /* IGUIEnvironment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIEnvironment.h; path = /usr/local/include/irrlicht/IGUIEnvironment.h; sourceTree = ""; }; + 95D538B50F69D61C00B4062E /* IGUIFileOpenDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIFileOpenDialog.h; path = /usr/local/include/irrlicht/IGUIFileOpenDialog.h; sourceTree = ""; }; + 95D538B60F69D61C00B4062E /* IGUIFont.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIFont.h; path = /usr/local/include/irrlicht/IGUIFont.h; sourceTree = ""; }; + 95D538B70F69D61C00B4062E /* IGUIFontBitmap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIFontBitmap.h; path = /usr/local/include/irrlicht/IGUIFontBitmap.h; sourceTree = ""; }; + 95D538B80F69D61C00B4062E /* IGUIImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIImage.h; path = /usr/local/include/irrlicht/IGUIImage.h; sourceTree = ""; }; + 95D538B90F69D61C00B4062E /* IGUIInOutFader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIInOutFader.h; path = /usr/local/include/irrlicht/IGUIInOutFader.h; sourceTree = ""; }; + 95D538BA0F69D61C00B4062E /* IGUIListBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIListBox.h; path = /usr/local/include/irrlicht/IGUIListBox.h; sourceTree = ""; }; + 95D538BB0F69D61C00B4062E /* IGUIMeshViewer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIMeshViewer.h; path = /usr/local/include/irrlicht/IGUIMeshViewer.h; sourceTree = ""; }; + 95D538BC0F69D61C00B4062E /* IGUIScrollBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIScrollBar.h; path = /usr/local/include/irrlicht/IGUIScrollBar.h; sourceTree = ""; }; + 95D538BD0F69D61C00B4062E /* IGUISkin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUISkin.h; path = /usr/local/include/irrlicht/IGUISkin.h; sourceTree = ""; }; + 95D538BE0F69D61C00B4062E /* IGUISpinBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUISpinBox.h; path = /usr/local/include/irrlicht/IGUISpinBox.h; sourceTree = ""; }; + 95D538BF0F69D61C00B4062E /* IGUISpriteBank.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUISpriteBank.h; path = /usr/local/include/irrlicht/IGUISpriteBank.h; sourceTree = ""; }; + 95D538C00F69D61C00B4062E /* IGUIStaticText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIStaticText.h; path = /usr/local/include/irrlicht/IGUIStaticText.h; sourceTree = ""; }; + 95D538C10F69D61C00B4062E /* IGUITabControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUITabControl.h; path = /usr/local/include/irrlicht/IGUITabControl.h; sourceTree = ""; }; + 95D538C20F69D61C00B4062E /* IGUITable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUITable.h; path = /usr/local/include/irrlicht/IGUITable.h; sourceTree = ""; }; + 95D538C30F69D61C00B4062E /* IGUIToolbar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIToolbar.h; path = /usr/local/include/irrlicht/IGUIToolbar.h; sourceTree = ""; }; + 95D538C40F69D61C00B4062E /* IGUIWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIWindow.h; path = /usr/local/include/irrlicht/IGUIWindow.h; sourceTree = ""; }; + 95D538C50F69D61C00B4062E /* IImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IImage.h; path = /usr/local/include/irrlicht/IImage.h; sourceTree = ""; }; + 95D538C60F69D61C00B4062E /* IImageLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IImageLoader.h; path = /usr/local/include/irrlicht/IImageLoader.h; sourceTree = ""; }; + 95D538C70F69D61C00B4062E /* IImageWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IImageWriter.h; path = /usr/local/include/irrlicht/IImageWriter.h; sourceTree = ""; }; + 95D538C80F69D61C00B4062E /* IIndexBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IIndexBuffer.h; path = /usr/local/include/irrlicht/IIndexBuffer.h; sourceTree = ""; }; + 95D538C90F69D61C00B4062E /* ILightSceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ILightSceneNode.h; path = /usr/local/include/irrlicht/ILightSceneNode.h; sourceTree = ""; }; + 95D538CA0F69D61C00B4062E /* ILogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ILogger.h; path = /usr/local/include/irrlicht/ILogger.h; sourceTree = ""; }; + 95D538CB0F69D61C00B4062E /* IMaterialRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IMaterialRenderer.h; path = /usr/local/include/irrlicht/IMaterialRenderer.h; sourceTree = ""; }; + 95D538CC0F69D61C00B4062E /* IMaterialRendererServices.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IMaterialRendererServices.h; path = /usr/local/include/irrlicht/IMaterialRendererServices.h; sourceTree = ""; }; + 95D538CD0F69D61C00B4062E /* IMesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IMesh.h; path = /usr/local/include/irrlicht/IMesh.h; sourceTree = ""; }; + 95D538CE0F69D61C00B4062E /* IMeshBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IMeshBuffer.h; path = /usr/local/include/irrlicht/IMeshBuffer.h; sourceTree = ""; }; + 95D538CF0F69D61C00B4062E /* IMeshCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IMeshCache.h; path = /usr/local/include/irrlicht/IMeshCache.h; sourceTree = ""; }; + 95D538D00F69D61C00B4062E /* IMeshLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IMeshLoader.h; path = /usr/local/include/irrlicht/IMeshLoader.h; sourceTree = ""; }; + 95D538D10F69D61C00B4062E /* IMeshManipulator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IMeshManipulator.h; path = /usr/local/include/irrlicht/IMeshManipulator.h; sourceTree = ""; }; + 95D538D20F69D61C00B4062E /* IMeshSceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IMeshSceneNode.h; path = /usr/local/include/irrlicht/IMeshSceneNode.h; sourceTree = ""; }; + 95D538D30F69D61C00B4062E /* IMeshWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IMeshWriter.h; path = /usr/local/include/irrlicht/IMeshWriter.h; sourceTree = ""; }; + 95D538D40F69D61C00B4062E /* IMetaTriangleSelector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IMetaTriangleSelector.h; path = /usr/local/include/irrlicht/IMetaTriangleSelector.h; sourceTree = ""; }; + 95D538D50F69D61C00B4062E /* IOSOperator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IOSOperator.h; path = /usr/local/include/irrlicht/IOSOperator.h; sourceTree = ""; }; + 95D538D60F69D61C00B4062E /* IParticleAffector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IParticleAffector.h; path = /usr/local/include/irrlicht/IParticleAffector.h; sourceTree = ""; }; + 95D538D70F69D61C00B4062E /* IParticleAnimatedMeshSceneNodeEmitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IParticleAnimatedMeshSceneNodeEmitter.h; path = /usr/local/include/irrlicht/IParticleAnimatedMeshSceneNodeEmitter.h; sourceTree = ""; }; + 95D538D80F69D61C00B4062E /* IParticleAttractionAffector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IParticleAttractionAffector.h; path = /usr/local/include/irrlicht/IParticleAttractionAffector.h; sourceTree = ""; }; + 95D538D90F69D61C00B4062E /* IParticleBoxEmitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IParticleBoxEmitter.h; path = /usr/local/include/irrlicht/IParticleBoxEmitter.h; sourceTree = ""; }; + 95D538DA0F69D61C00B4062E /* IParticleCylinderEmitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IParticleCylinderEmitter.h; path = /usr/local/include/irrlicht/IParticleCylinderEmitter.h; sourceTree = ""; }; + 95D538DB0F69D61C00B4062E /* IParticleEmitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IParticleEmitter.h; path = /usr/local/include/irrlicht/IParticleEmitter.h; sourceTree = ""; }; + 95D538DC0F69D61C00B4062E /* IParticleFadeOutAffector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IParticleFadeOutAffector.h; path = /usr/local/include/irrlicht/IParticleFadeOutAffector.h; sourceTree = ""; }; + 95D538DD0F69D61C00B4062E /* IParticleGravityAffector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IParticleGravityAffector.h; path = /usr/local/include/irrlicht/IParticleGravityAffector.h; sourceTree = ""; }; + 95D538DE0F69D61C00B4062E /* IParticleMeshEmitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IParticleMeshEmitter.h; path = /usr/local/include/irrlicht/IParticleMeshEmitter.h; sourceTree = ""; }; + 95D538DF0F69D61C00B4062E /* IParticleRingEmitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IParticleRingEmitter.h; path = /usr/local/include/irrlicht/IParticleRingEmitter.h; sourceTree = ""; }; + 95D538E00F69D61C00B4062E /* IParticleRotationAffector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IParticleRotationAffector.h; path = /usr/local/include/irrlicht/IParticleRotationAffector.h; sourceTree = ""; }; + 95D538E10F69D61C00B4062E /* IParticleSphereEmitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IParticleSphereEmitter.h; path = /usr/local/include/irrlicht/IParticleSphereEmitter.h; sourceTree = ""; }; + 95D538E20F69D61C00B4062E /* IParticleSystemSceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IParticleSystemSceneNode.h; path = /usr/local/include/irrlicht/IParticleSystemSceneNode.h; sourceTree = ""; }; + 95D538E30F69D61C00B4062E /* IQ3LevelMesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IQ3LevelMesh.h; path = /usr/local/include/irrlicht/IQ3LevelMesh.h; sourceTree = ""; }; + 95D538E40F69D61C00B4062E /* IQ3Shader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IQ3Shader.h; path = /usr/local/include/irrlicht/IQ3Shader.h; sourceTree = ""; }; + 95D538E50F69D61C00B4062E /* IReadFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IReadFile.h; path = /usr/local/include/irrlicht/IReadFile.h; sourceTree = ""; }; + 95D538E60F69D61C00B4062E /* IReferenceCounted.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IReferenceCounted.h; path = /usr/local/include/irrlicht/IReferenceCounted.h; sourceTree = ""; }; + 95D538E70F69D61C00B4062E /* irrAllocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = irrAllocator.h; path = /usr/local/include/irrlicht/irrAllocator.h; sourceTree = ""; }; + 95D538E80F69D61C00B4062E /* irrArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = irrArray.h; path = /usr/local/include/irrlicht/irrArray.h; sourceTree = ""; }; + 95D538E90F69D61C00B4062E /* IrrCompileConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IrrCompileConfig.h; path = /usr/local/include/irrlicht/IrrCompileConfig.h; sourceTree = ""; }; + 95D538EA0F69D61C00B4062E /* irrlicht.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = irrlicht.h; path = /usr/local/include/irrlicht/irrlicht.h; sourceTree = ""; }; + 95D538EB0F69D61C00B4062E /* IrrlichtDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IrrlichtDevice.h; path = /usr/local/include/irrlicht/IrrlichtDevice.h; sourceTree = ""; }; + 95D538EC0F69D61C00B4062E /* irrList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = irrList.h; path = /usr/local/include/irrlicht/irrList.h; sourceTree = ""; }; + 95D538ED0F69D61C00B4062E /* irrMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = irrMap.h; path = /usr/local/include/irrlicht/irrMap.h; sourceTree = ""; }; + 95D538EE0F69D61C00B4062E /* irrMath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = irrMath.h; path = /usr/local/include/irrlicht/irrMath.h; sourceTree = ""; }; + 95D538EF0F69D61C00B4062E /* irrString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = irrString.h; path = /usr/local/include/irrlicht/irrString.h; sourceTree = ""; }; + 95D538F00F69D61C00B4062E /* irrTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = irrTypes.h; path = /usr/local/include/irrlicht/irrTypes.h; sourceTree = ""; }; + 95D538F10F69D61C00B4062E /* irrXML.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = irrXML.h; path = /usr/local/include/irrlicht/irrXML.h; sourceTree = ""; }; + 95D538F20F69D61C00B4062E /* ISceneCollisionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISceneCollisionManager.h; path = /usr/local/include/irrlicht/ISceneCollisionManager.h; sourceTree = ""; }; + 95D538F30F69D61C00B4062E /* ISceneManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISceneManager.h; path = /usr/local/include/irrlicht/ISceneManager.h; sourceTree = ""; }; + 95D538F40F69D61C00B4062E /* ISceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISceneNode.h; path = /usr/local/include/irrlicht/ISceneNode.h; sourceTree = ""; }; + 95D538F50F69D61C00B4062E /* ISceneNodeAnimator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISceneNodeAnimator.h; path = /usr/local/include/irrlicht/ISceneNodeAnimator.h; sourceTree = ""; }; + 95D538F60F69D61C00B4062E /* ISceneNodeAnimatorCameraFPS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISceneNodeAnimatorCameraFPS.h; path = /usr/local/include/irrlicht/ISceneNodeAnimatorCameraFPS.h; sourceTree = ""; }; + 95D538F70F69D61C00B4062E /* ISceneNodeAnimatorCameraMaya.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISceneNodeAnimatorCameraMaya.h; path = /usr/local/include/irrlicht/ISceneNodeAnimatorCameraMaya.h; sourceTree = ""; }; + 95D538F80F69D61C00B4062E /* ISceneNodeAnimatorCollisionResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISceneNodeAnimatorCollisionResponse.h; path = /usr/local/include/irrlicht/ISceneNodeAnimatorCollisionResponse.h; sourceTree = ""; }; + 95D538F90F69D61C00B4062E /* ISceneNodeAnimatorFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISceneNodeAnimatorFactory.h; path = /usr/local/include/irrlicht/ISceneNodeAnimatorFactory.h; sourceTree = ""; }; + 95D538FA0F69D61C00B4062E /* ISceneNodeFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISceneNodeFactory.h; path = /usr/local/include/irrlicht/ISceneNodeFactory.h; sourceTree = ""; }; + 95D538FB0F69D61C00B4062E /* ISceneUserDataSerializer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISceneUserDataSerializer.h; path = /usr/local/include/irrlicht/ISceneUserDataSerializer.h; sourceTree = ""; }; + 95D538FC0F69D61C00B4062E /* IShaderConstantSetCallBack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IShaderConstantSetCallBack.h; path = /usr/local/include/irrlicht/IShaderConstantSetCallBack.h; sourceTree = ""; }; + 95D538FD0F69D61C00B4062E /* IShadowVolumeSceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IShadowVolumeSceneNode.h; path = /usr/local/include/irrlicht/IShadowVolumeSceneNode.h; sourceTree = ""; }; + 95D538FE0F69D61C00B4062E /* ISkinnedMesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISkinnedMesh.h; path = /usr/local/include/irrlicht/ISkinnedMesh.h; sourceTree = ""; }; + 95D538FF0F69D61C00B4062E /* ITerrainSceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ITerrainSceneNode.h; path = /usr/local/include/irrlicht/ITerrainSceneNode.h; sourceTree = ""; }; + 95D539000F69D61C00B4062E /* ITextSceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ITextSceneNode.h; path = /usr/local/include/irrlicht/ITextSceneNode.h; sourceTree = ""; }; + 95D539010F69D61C00B4062E /* ITexture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ITexture.h; path = /usr/local/include/irrlicht/ITexture.h; sourceTree = ""; }; + 95D539020F69D61C00B4062E /* ITimer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ITimer.h; path = /usr/local/include/irrlicht/ITimer.h; sourceTree = ""; }; + 95D539030F69D61C00B4062E /* ITriangleSelector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ITriangleSelector.h; path = /usr/local/include/irrlicht/ITriangleSelector.h; sourceTree = ""; }; + 95D539040F69D61C00B4062E /* IVertexBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IVertexBuffer.h; path = /usr/local/include/irrlicht/IVertexBuffer.h; sourceTree = ""; }; + 95D539050F69D61C00B4062E /* IVideoDriver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IVideoDriver.h; path = /usr/local/include/irrlicht/IVideoDriver.h; sourceTree = ""; }; + 95D539060F69D61C00B4062E /* IVideoModeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IVideoModeList.h; path = /usr/local/include/irrlicht/IVideoModeList.h; sourceTree = ""; }; + 95D539070F69D61C00B4062E /* IVolumeLightSceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IVolumeLightSceneNode.h; path = /usr/local/include/irrlicht/IVolumeLightSceneNode.h; sourceTree = ""; }; + 95D539080F69D61C00B4062E /* IWriteFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IWriteFile.h; path = /usr/local/include/irrlicht/IWriteFile.h; sourceTree = ""; }; + 95D539090F69D61C00B4062E /* IXMLReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IXMLReader.h; path = /usr/local/include/irrlicht/IXMLReader.h; sourceTree = ""; }; + 95D5390A0F69D61C00B4062E /* IXMLWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IXMLWriter.h; path = /usr/local/include/irrlicht/IXMLWriter.h; sourceTree = ""; }; + 95D5390B0F69D61C00B4062E /* Keycodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Keycodes.h; path = /usr/local/include/irrlicht/Keycodes.h; sourceTree = ""; }; + 95D5390C0F69D61C00B4062E /* line2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = line2d.h; path = /usr/local/include/irrlicht/line2d.h; sourceTree = ""; }; + 95D5390D0F69D61C00B4062E /* line3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = line3d.h; path = /usr/local/include/irrlicht/line3d.h; sourceTree = ""; }; + 95D5390E0F69D61C00B4062E /* matrix4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = matrix4.h; path = /usr/local/include/irrlicht/matrix4.h; sourceTree = ""; }; + 95D5390F0F69D61C00B4062E /* plane3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = plane3d.h; path = /usr/local/include/irrlicht/plane3d.h; sourceTree = ""; }; + 95D539100F69D61C00B4062E /* position2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = position2d.h; path = /usr/local/include/irrlicht/position2d.h; sourceTree = ""; }; + 95D539110F69D61C00B4062E /* quaternion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = quaternion.h; path = /usr/local/include/irrlicht/quaternion.h; sourceTree = ""; }; + 95D539120F69D61C00B4062E /* rect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rect.h; path = /usr/local/include/irrlicht/rect.h; sourceTree = ""; }; + 95D539130F69D61C00B4062E /* S3DVertex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = S3DVertex.h; path = /usr/local/include/irrlicht/S3DVertex.h; sourceTree = ""; }; + 95D539140F69D61C00B4062E /* SAnimatedMesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SAnimatedMesh.h; path = /usr/local/include/irrlicht/SAnimatedMesh.h; sourceTree = ""; }; + 95D539150F69D61C00B4062E /* SceneParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SceneParameters.h; path = /usr/local/include/irrlicht/SceneParameters.h; sourceTree = ""; }; + 95D539160F69D61C00B4062E /* SColor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SColor.h; path = /usr/local/include/irrlicht/SColor.h; sourceTree = ""; }; + 95D539170F69D61C00B4062E /* SExposedVideoData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SExposedVideoData.h; path = /usr/local/include/irrlicht/SExposedVideoData.h; sourceTree = ""; }; + 95D539180F69D61C00B4062E /* SIrrCreationParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SIrrCreationParameters.h; path = /usr/local/include/irrlicht/SIrrCreationParameters.h; sourceTree = ""; }; + 95D539190F69D61C00B4062E /* SKeyMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SKeyMap.h; path = /usr/local/include/irrlicht/SKeyMap.h; sourceTree = ""; }; + 95D5391A0F69D61C00B4062E /* SLight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SLight.h; path = /usr/local/include/irrlicht/SLight.h; sourceTree = ""; }; + 95D5391B0F69D61C00B4062E /* SMaterial.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SMaterial.h; path = /usr/local/include/irrlicht/SMaterial.h; sourceTree = ""; }; + 95D5391C0F69D61C00B4062E /* SMaterialLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SMaterialLayer.h; path = /usr/local/include/irrlicht/SMaterialLayer.h; sourceTree = ""; }; + 95D5391D0F69D61C00B4062E /* SMesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SMesh.h; path = /usr/local/include/irrlicht/SMesh.h; sourceTree = ""; }; + 95D5391E0F69D61C00B4062E /* SMeshBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SMeshBuffer.h; path = /usr/local/include/irrlicht/SMeshBuffer.h; sourceTree = ""; }; + 95D5391F0F69D61C00B4062E /* SMeshBufferLightMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SMeshBufferLightMap.h; path = /usr/local/include/irrlicht/SMeshBufferLightMap.h; sourceTree = ""; }; + 95D539200F69D61C00B4062E /* SMeshBufferTangents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SMeshBufferTangents.h; path = /usr/local/include/irrlicht/SMeshBufferTangents.h; sourceTree = ""; }; + 95D539210F69D61C00B4062E /* SParticle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SParticle.h; path = /usr/local/include/irrlicht/SParticle.h; sourceTree = ""; }; + 95D539220F69D61C00B4062E /* SSharedMeshBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SSharedMeshBuffer.h; path = /usr/local/include/irrlicht/SSharedMeshBuffer.h; sourceTree = ""; }; + 95D539230F69D61C00B4062E /* SSkinMeshBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SSkinMeshBuffer.h; path = /usr/local/include/irrlicht/SSkinMeshBuffer.h; sourceTree = ""; }; + 95D539240F69D61C00B4062E /* SVertexIndex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SVertexIndex.h; path = /usr/local/include/irrlicht/SVertexIndex.h; sourceTree = ""; }; + 95D539250F69D61C00B4062E /* SViewFrustum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SViewFrustum.h; path = /usr/local/include/irrlicht/SViewFrustum.h; sourceTree = ""; }; + 95D539260F69D61C00B4062E /* triangle3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = triangle3d.h; path = /usr/local/include/irrlicht/triangle3d.h; sourceTree = ""; }; + 95D539270F69D61C00B4062E /* vector2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vector2d.h; path = /usr/local/include/irrlicht/vector2d.h; sourceTree = ""; }; + 95D539280F69D61C00B4062E /* vector3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vector3d.h; path = /usr/local/include/irrlicht/vector3d.h; sourceTree = ""; }; 95E1059A0E28F65F00503124 /* btBulletCollisionCommon.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = btBulletCollisionCommon.h; path = ../../bullet/src/btBulletCollisionCommon.h; sourceTree = SOURCE_ROOT; }; 95E1059B0E28F65F00503124 /* btBulletDynamicsCommon.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = btBulletDynamicsCommon.h; path = ../../bullet/src/btBulletDynamicsCommon.h; sourceTree = SOURCE_ROOT; }; 95E105F00E28F66000503124 /* Bullet-C-Api.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = "Bullet-C-Api.h"; path = "../../bullet/src/Bullet-C-Api.h"; sourceTree = SOURCE_ROOT; }; @@ -1056,6 +1155,7 @@ 08FB7794FE84155DC02AAC07 /* STK_XCode */ = { isa = PBXGroup; children = ( + 95D538830F69D61C00B4062E /* irrlicht */, 95C2ABA60F29653F000D3E5D /* src */, 9513B40E0F0EDE80005D29F6 /* Frameworks */, 1AB674ADFE9D54B511CA2CBB /* Products */, @@ -1072,6 +1172,30 @@ name = Products; sourceTree = ""; }; + 950557790F696A900056E88C /* gui */ = { + isa = PBXGroup; + children = ( + 9505577A0F696A900056E88C /* engine.cpp */, + 9505577B0F696A900056E88C /* engine.hpp */, + 9505577C0F696A900056E88C /* my_button.cpp */, + 9505577D0F696A900056E88C /* my_button.hpp */, + 95C1E3FF0F699427005D33E6 /* font.cpp */, + 95C1E4020F69943D005D33E6 /* font.hpp */, + 9505577E0F696A900056E88C /* ptr_vector.hpp */, + 9505577F0F696A900056E88C /* screen.cpp */, + 950557800F696A900056E88C /* screen.hpp */, + 950557810F696A900056E88C /* screen_loader.cpp */, + 950557820F696A900056E88C /* skin.cpp */, + 950557830F696A900056E88C /* skin.hpp */, + 950557840F696A900056E88C /* widget.cpp */, + 950557850F696A900056E88C /* widget.hpp */, + 95C1E3F10F699079005D33E6 /* race_gui.cpp */, + 95C1E3EB0F698F23005D33E6 /* race_gui.hpp */, + ); + name = gui; + path = games/supertuxkart/src/gui; + sourceTree = SYSTEM_DEVELOPER_DIR; + }; 9513B40E0F0EDE80005D29F6 /* Frameworks */ = { isa = PBXGroup; children = ( @@ -1093,8 +1217,8 @@ 95C2AC360F296540000D3E5D /* bullet */, 95C2AE250F296541000D3E5D /* challenges */, 95C2AE370F296541000D3E5D /* enet */, + 950557790F696A900056E88C /* gui */, 95C2AE870F296542000D3E5D /* graphics */, - 95C2AE960F296542000D3E5D /* gui */, 95C65D750F532F7D00BE7BA7 /* io */, 95C2B0F50F296545000D3E5D /* items */, 95C2B1160F296545000D3E5D /* karts */, @@ -1645,74 +1769,6 @@ path = ../../graphics; sourceTree = SOURCE_ROOT; }; - 95C2AE960F296542000D3E5D /* gui */ = { - isa = PBXGroup; - children = ( - 95C2AE970F296542000D3E5D /* base_gui.cpp */, - 95C2AE980F296542000D3E5D /* base_gui.hpp */, - 95C2AE990F296542000D3E5D /* challenges_menu.cpp */, - 95C2AE9A0F296542000D3E5D /* challenges_menu.hpp */, - 95C2AE9B0F296542000D3E5D /* char_sel.cpp */, - 95C2AE9C0F296542000D3E5D /* char_sel.hpp */, - 95C2AE9D0F296542000D3E5D /* config_controls.cpp */, - 95C2AE9E0F296542000D3E5D /* config_controls.hpp */, - 95C2AE9F0F296542000D3E5D /* config_display.cpp */, - 95C2AEA00F296542000D3E5D /* config_display.hpp */, - 95C2AEA10F296542000D3E5D /* config_sound.cpp */, - 95C2AEA20F296542000D3E5D /* config_sound.hpp */, - 95C2AEA30F296542000D3E5D /* credits_menu.cpp */, - 95C2AEA40F296542000D3E5D /* credits_menu.hpp */, - 95C2AEA50F296542000D3E5D /* display_res_confirm.cpp */, - 95C2AEA60F296542000D3E5D /* display_res_confirm.hpp */, - 95C2AEA70F296542000D3E5D /* feature_unlocked.cpp */, - 95C2AEA80F296542000D3E5D /* feature_unlocked.hpp */, - 95C2AEA90F296542000D3E5D /* font.cpp */, - 95C2AEAA0F296542000D3E5D /* font.hpp */, - 95C2AEAB0F296542000D3E5D /* game_mode.cpp */, - 95C2AEAC0F296542000D3E5D /* game_mode.hpp */, - 95C2AEAD0F296542000D3E5D /* grand_prix_ending.cpp */, - 95C2AEAE0F296542000D3E5D /* grand_prix_ending.hpp */, - 95C2AEAF0F296542000D3E5D /* grand_prix_select.cpp */, - 95C2AEB00F296542000D3E5D /* grand_prix_select.hpp */, - 95C2AEB10F296542000D3E5D /* help_page_one.cpp */, - 95C2AEB20F296542000D3E5D /* help_page_one.hpp */, - 95C2AEB30F296542000D3E5D /* help_page_three.cpp */, - 95C2AEB40F296542000D3E5D /* help_page_three.hpp */, - 95C2AEB50F296542000D3E5D /* help_page_two.cpp */, - 95C2AEB60F296542000D3E5D /* help_page_two.hpp */, - 95C2AEB70F296542000D3E5D /* main_menu.cpp */, - 95C2AEB80F296542000D3E5D /* main_menu.hpp */, - 95C2AEB90F296542000D3E5D /* menu_manager.cpp */, - 95C2AEBA0F296542000D3E5D /* menu_manager.hpp */, - 95C2AEBB0F296542000D3E5D /* network_gui.cpp */, - 95C2AEBC0F296542000D3E5D /* network_gui.hpp */, - 95C2AEBD0F296542000D3E5D /* num_players.cpp */, - 95C2AEBE0F296542000D3E5D /* num_players.hpp */, - 95C2AEBF0F296542000D3E5D /* options.cpp */, - 95C2AEC00F296542000D3E5D /* options.hpp */, - 95C2AEC10F296542000D3E5D /* player_controls.cpp */, - 95C2AEC20F296542000D3E5D /* player_controls.hpp */, - 95C2AEC30F296542000D3E5D /* race_gui.cpp */, - 95C2AEC40F296542000D3E5D /* race_gui.hpp */, - 95C2AEC50F296542000D3E5D /* race_menu.cpp */, - 95C2AEC60F296542000D3E5D /* race_menu.hpp */, - 95C2AEC70F296542000D3E5D /* race_options.cpp */, - 95C2AEC80F296542000D3E5D /* race_options.hpp */, - 95C2AEC90F296542000D3E5D /* race_results_gui.cpp */, - 95C2AECA0F296542000D3E5D /* race_results_gui.hpp */, - 95C2AECB0F296542000D3E5D /* start_race_feedback.cpp */, - 95C2AECC0F296542000D3E5D /* start_race_feedback.hpp */, - 95C2AECD0F296542000D3E5D /* track_sel.cpp */, - 95C2AECE0F296542000D3E5D /* track_sel.hpp */, - 95C2AECF0F296542000D3E5D /* widget.cpp */, - 95C2AED00F296542000D3E5D /* widget.hpp */, - 95C2AED10F296542000D3E5D /* widget_manager.cpp */, - 95C2AED20F296542000D3E5D /* widget_manager.hpp */, - ); - name = gui; - path = ../../gui; - sourceTree = SOURCE_ROOT; - }; 95C2B0F50F296545000D3E5D /* items */ = { isa = PBXGroup; children = ( @@ -1937,6 +1993,179 @@ path = games/supertuxkart/src/io; sourceTree = SYSTEM_DEVELOPER_DIR; }; + 95D538830F69D61C00B4062E /* irrlicht */ = { + isa = PBXGroup; + children = ( + 95D538840F69D61C00B4062E /* aabbox3d.h */, + 95D538850F69D61C00B4062E /* CDynamicMeshBuffer.h */, + 95D538860F69D61C00B4062E /* CIndexBuffer.h */, + 95D538870F69D61C00B4062E /* CMeshBuffer.h */, + 95D538880F69D61C00B4062E /* coreutil.h */, + 95D538890F69D61C00B4062E /* CVertexBuffer.h */, + 95D5388A0F69D61C00B4062E /* dimension2d.h */, + 95D5388B0F69D61C00B4062E /* ECullingTypes.h */, + 95D5388C0F69D61C00B4062E /* EDebugSceneTypes.h */, + 95D5388D0F69D61C00B4062E /* EDriverFeatures.h */, + 95D5388E0F69D61C00B4062E /* EDriverTypes.h */, + 95D5388F0F69D61C00B4062E /* EGUIAlignment.h */, + 95D538900F69D61C00B4062E /* EGUIElementTypes.h */, + 95D538910F69D61C00B4062E /* EHardwareBufferFlags.h */, + 95D538920F69D61C00B4062E /* EMaterialFlags.h */, + 95D538930F69D61C00B4062E /* EMaterialTypes.h */, + 95D538940F69D61C00B4062E /* EMeshWriterEnums.h */, + 95D538950F69D61C00B4062E /* EMessageBoxFlags.h */, + 95D538960F69D61C00B4062E /* ESceneNodeAnimatorTypes.h */, + 95D538970F69D61C00B4062E /* ESceneNodeTypes.h */, + 95D538980F69D61C00B4062E /* ETerrainElements.h */, + 95D538990F69D61C00B4062E /* fast_atof.h */, + 95D5389A0F69D61C00B4062E /* heapsort.h */, + 95D5389B0F69D61C00B4062E /* IAnimatedMesh.h */, + 95D5389C0F69D61C00B4062E /* IAnimatedMeshMD2.h */, + 95D5389D0F69D61C00B4062E /* IAnimatedMeshMD3.h */, + 95D5389E0F69D61C00B4062E /* IAnimatedMeshSceneNode.h */, + 95D5389F0F69D61C00B4062E /* IAttributeExchangingObject.h */, + 95D538A00F69D61C00B4062E /* IAttributes.h */, + 95D538A10F69D61C00B4062E /* IBillboardSceneNode.h */, + 95D538A20F69D61C00B4062E /* IBillboardTextSceneNode.h */, + 95D538A30F69D61C00B4062E /* IBoneSceneNode.h */, + 95D538A40F69D61C00B4062E /* ICameraSceneNode.h */, + 95D538A50F69D61C00B4062E /* ICursorControl.h */, + 95D538A60F69D61C00B4062E /* IDummyTransformationSceneNode.h */, + 95D538A70F69D61C00B4062E /* IDynamicMeshBuffer.h */, + 95D538A80F69D61C00B4062E /* IEventReceiver.h */, + 95D538A90F69D61C00B4062E /* IFileList.h */, + 95D538AA0F69D61C00B4062E /* IFileSystem.h */, + 95D538AB0F69D61C00B4062E /* IGPUProgrammingServices.h */, + 95D538AC0F69D61C00B4062E /* IGUIButton.h */, + 95D538AD0F69D61C00B4062E /* IGUICheckBox.h */, + 95D538AE0F69D61C00B4062E /* IGUIColorSelectDialog.h */, + 95D538AF0F69D61C00B4062E /* IGUIComboBox.h */, + 95D538B00F69D61C00B4062E /* IGUIContextMenu.h */, + 95D538B10F69D61C00B4062E /* IGUIEditBox.h */, + 95D538B20F69D61C00B4062E /* IGUIElement.h */, + 95D538B30F69D61C00B4062E /* IGUIElementFactory.h */, + 95D538B40F69D61C00B4062E /* IGUIEnvironment.h */, + 95D538B50F69D61C00B4062E /* IGUIFileOpenDialog.h */, + 95D538B60F69D61C00B4062E /* IGUIFont.h */, + 95D538B70F69D61C00B4062E /* IGUIFontBitmap.h */, + 95D538B80F69D61C00B4062E /* IGUIImage.h */, + 95D538B90F69D61C00B4062E /* IGUIInOutFader.h */, + 95D538BA0F69D61C00B4062E /* IGUIListBox.h */, + 95D538BB0F69D61C00B4062E /* IGUIMeshViewer.h */, + 95D538BC0F69D61C00B4062E /* IGUIScrollBar.h */, + 95D538BD0F69D61C00B4062E /* IGUISkin.h */, + 95D538BE0F69D61C00B4062E /* IGUISpinBox.h */, + 95D538BF0F69D61C00B4062E /* IGUISpriteBank.h */, + 95D538C00F69D61C00B4062E /* IGUIStaticText.h */, + 95D538C10F69D61C00B4062E /* IGUITabControl.h */, + 95D538C20F69D61C00B4062E /* IGUITable.h */, + 95D538C30F69D61C00B4062E /* IGUIToolbar.h */, + 95D538C40F69D61C00B4062E /* IGUIWindow.h */, + 95D538C50F69D61C00B4062E /* IImage.h */, + 95D538C60F69D61C00B4062E /* IImageLoader.h */, + 95D538C70F69D61C00B4062E /* IImageWriter.h */, + 95D538C80F69D61C00B4062E /* IIndexBuffer.h */, + 95D538C90F69D61C00B4062E /* ILightSceneNode.h */, + 95D538CA0F69D61C00B4062E /* ILogger.h */, + 95D538CB0F69D61C00B4062E /* IMaterialRenderer.h */, + 95D538CC0F69D61C00B4062E /* IMaterialRendererServices.h */, + 95D538CD0F69D61C00B4062E /* IMesh.h */, + 95D538CE0F69D61C00B4062E /* IMeshBuffer.h */, + 95D538CF0F69D61C00B4062E /* IMeshCache.h */, + 95D538D00F69D61C00B4062E /* IMeshLoader.h */, + 95D538D10F69D61C00B4062E /* IMeshManipulator.h */, + 95D538D20F69D61C00B4062E /* IMeshSceneNode.h */, + 95D538D30F69D61C00B4062E /* IMeshWriter.h */, + 95D538D40F69D61C00B4062E /* IMetaTriangleSelector.h */, + 95D538D50F69D61C00B4062E /* IOSOperator.h */, + 95D538D60F69D61C00B4062E /* IParticleAffector.h */, + 95D538D70F69D61C00B4062E /* IParticleAnimatedMeshSceneNodeEmitter.h */, + 95D538D80F69D61C00B4062E /* IParticleAttractionAffector.h */, + 95D538D90F69D61C00B4062E /* IParticleBoxEmitter.h */, + 95D538DA0F69D61C00B4062E /* IParticleCylinderEmitter.h */, + 95D538DB0F69D61C00B4062E /* IParticleEmitter.h */, + 95D538DC0F69D61C00B4062E /* IParticleFadeOutAffector.h */, + 95D538DD0F69D61C00B4062E /* IParticleGravityAffector.h */, + 95D538DE0F69D61C00B4062E /* IParticleMeshEmitter.h */, + 95D538DF0F69D61C00B4062E /* IParticleRingEmitter.h */, + 95D538E00F69D61C00B4062E /* IParticleRotationAffector.h */, + 95D538E10F69D61C00B4062E /* IParticleSphereEmitter.h */, + 95D538E20F69D61C00B4062E /* IParticleSystemSceneNode.h */, + 95D538E30F69D61C00B4062E /* IQ3LevelMesh.h */, + 95D538E40F69D61C00B4062E /* IQ3Shader.h */, + 95D538E50F69D61C00B4062E /* IReadFile.h */, + 95D538E60F69D61C00B4062E /* IReferenceCounted.h */, + 95D538E70F69D61C00B4062E /* irrAllocator.h */, + 95D538E80F69D61C00B4062E /* irrArray.h */, + 95D538E90F69D61C00B4062E /* IrrCompileConfig.h */, + 95D538EA0F69D61C00B4062E /* irrlicht.h */, + 95D538EB0F69D61C00B4062E /* IrrlichtDevice.h */, + 95D538EC0F69D61C00B4062E /* irrList.h */, + 95D538ED0F69D61C00B4062E /* irrMap.h */, + 95D538EE0F69D61C00B4062E /* irrMath.h */, + 95D538EF0F69D61C00B4062E /* irrString.h */, + 95D538F00F69D61C00B4062E /* irrTypes.h */, + 95D538F10F69D61C00B4062E /* irrXML.h */, + 95D538F20F69D61C00B4062E /* ISceneCollisionManager.h */, + 95D538F30F69D61C00B4062E /* ISceneManager.h */, + 95D538F40F69D61C00B4062E /* ISceneNode.h */, + 95D538F50F69D61C00B4062E /* ISceneNodeAnimator.h */, + 95D538F60F69D61C00B4062E /* ISceneNodeAnimatorCameraFPS.h */, + 95D538F70F69D61C00B4062E /* ISceneNodeAnimatorCameraMaya.h */, + 95D538F80F69D61C00B4062E /* ISceneNodeAnimatorCollisionResponse.h */, + 95D538F90F69D61C00B4062E /* ISceneNodeAnimatorFactory.h */, + 95D538FA0F69D61C00B4062E /* ISceneNodeFactory.h */, + 95D538FB0F69D61C00B4062E /* ISceneUserDataSerializer.h */, + 95D538FC0F69D61C00B4062E /* IShaderConstantSetCallBack.h */, + 95D538FD0F69D61C00B4062E /* IShadowVolumeSceneNode.h */, + 95D538FE0F69D61C00B4062E /* ISkinnedMesh.h */, + 95D538FF0F69D61C00B4062E /* ITerrainSceneNode.h */, + 95D539000F69D61C00B4062E /* ITextSceneNode.h */, + 95D539010F69D61C00B4062E /* ITexture.h */, + 95D539020F69D61C00B4062E /* ITimer.h */, + 95D539030F69D61C00B4062E /* ITriangleSelector.h */, + 95D539040F69D61C00B4062E /* IVertexBuffer.h */, + 95D539050F69D61C00B4062E /* IVideoDriver.h */, + 95D539060F69D61C00B4062E /* IVideoModeList.h */, + 95D539070F69D61C00B4062E /* IVolumeLightSceneNode.h */, + 95D539080F69D61C00B4062E /* IWriteFile.h */, + 95D539090F69D61C00B4062E /* IXMLReader.h */, + 95D5390A0F69D61C00B4062E /* IXMLWriter.h */, + 95D5390B0F69D61C00B4062E /* Keycodes.h */, + 95D5390C0F69D61C00B4062E /* line2d.h */, + 95D5390D0F69D61C00B4062E /* line3d.h */, + 95D5390E0F69D61C00B4062E /* matrix4.h */, + 95D5390F0F69D61C00B4062E /* plane3d.h */, + 95D539100F69D61C00B4062E /* position2d.h */, + 95D539110F69D61C00B4062E /* quaternion.h */, + 95D539120F69D61C00B4062E /* rect.h */, + 95D539130F69D61C00B4062E /* S3DVertex.h */, + 95D539140F69D61C00B4062E /* SAnimatedMesh.h */, + 95D539150F69D61C00B4062E /* SceneParameters.h */, + 95D539160F69D61C00B4062E /* SColor.h */, + 95D539170F69D61C00B4062E /* SExposedVideoData.h */, + 95D539180F69D61C00B4062E /* SIrrCreationParameters.h */, + 95D539190F69D61C00B4062E /* SKeyMap.h */, + 95D5391A0F69D61C00B4062E /* SLight.h */, + 95D5391B0F69D61C00B4062E /* SMaterial.h */, + 95D5391C0F69D61C00B4062E /* SMaterialLayer.h */, + 95D5391D0F69D61C00B4062E /* SMesh.h */, + 95D5391E0F69D61C00B4062E /* SMeshBuffer.h */, + 95D5391F0F69D61C00B4062E /* SMeshBufferLightMap.h */, + 95D539200F69D61C00B4062E /* SMeshBufferTangents.h */, + 95D539210F69D61C00B4062E /* SParticle.h */, + 95D539220F69D61C00B4062E /* SSharedMeshBuffer.h */, + 95D539230F69D61C00B4062E /* SSkinMeshBuffer.h */, + 95D539240F69D61C00B4062E /* SVertexIndex.h */, + 95D539250F69D61C00B4062E /* SViewFrustum.h */, + 95D539260F69D61C00B4062E /* triangle3d.h */, + 95D539270F69D61C00B4062E /* vector2d.h */, + 95D539280F69D61C00B4062E /* vector3d.h */, + ); + name = irrlicht; + path = /usr/local/include/irrlicht; + sourceTree = ""; + }; 95E104FE0E28F65D00503124 /* bullet */ = { isa = PBXGroup; children = ( @@ -2429,36 +2658,6 @@ 95C2B2FA0F296546000D3E5D /* explosion.cpp in Sources */, 95C2B3030F296546000D3E5D /* grand_prix_data.cpp in Sources */, 95C2B3060F296546000D3E5D /* grand_prix_manager.cpp in Sources */, - 95C2B3100F296546000D3E5D /* base_gui.cpp in Sources */, - 95C2B3110F296546000D3E5D /* challenges_menu.cpp in Sources */, - 95C2B3120F296546000D3E5D /* char_sel.cpp in Sources */, - 95C2B3130F296546000D3E5D /* config_controls.cpp in Sources */, - 95C2B3140F296546000D3E5D /* config_display.cpp in Sources */, - 95C2B3150F296546000D3E5D /* config_sound.cpp in Sources */, - 95C2B3160F296546000D3E5D /* credits_menu.cpp in Sources */, - 95C2B3170F296546000D3E5D /* display_res_confirm.cpp in Sources */, - 95C2B3180F296546000D3E5D /* feature_unlocked.cpp in Sources */, - 95C2B3190F296546000D3E5D /* font.cpp in Sources */, - 95C2B31A0F296546000D3E5D /* game_mode.cpp in Sources */, - 95C2B31B0F296546000D3E5D /* grand_prix_ending.cpp in Sources */, - 95C2B31C0F296546000D3E5D /* grand_prix_select.cpp in Sources */, - 95C2B31D0F296546000D3E5D /* help_page_one.cpp in Sources */, - 95C2B31E0F296546000D3E5D /* help_page_three.cpp in Sources */, - 95C2B31F0F296546000D3E5D /* help_page_two.cpp in Sources */, - 95C2B3200F296546000D3E5D /* main_menu.cpp in Sources */, - 95C2B3210F296546000D3E5D /* menu_manager.cpp in Sources */, - 95C2B3220F296546000D3E5D /* network_gui.cpp in Sources */, - 95C2B3230F296546000D3E5D /* num_players.cpp in Sources */, - 95C2B3240F296546000D3E5D /* options.cpp in Sources */, - 95C2B3250F296546000D3E5D /* player_controls.cpp in Sources */, - 95C2B3260F296546000D3E5D /* race_gui.cpp in Sources */, - 95C2B3270F296546000D3E5D /* race_menu.cpp in Sources */, - 95C2B3280F296546000D3E5D /* race_options.cpp in Sources */, - 95C2B3290F296546000D3E5D /* race_results_gui.cpp in Sources */, - 95C2B32A0F296546000D3E5D /* start_race_feedback.cpp in Sources */, - 95C2B32B0F296546000D3E5D /* track_sel.cpp in Sources */, - 95C2B32C0F296546000D3E5D /* widget.cpp in Sources */, - 95C2B32D0F296546000D3E5D /* widget_manager.cpp in Sources */, 95C2B3310F296546000D3E5D /* highscore_manager.cpp in Sources */, 95C2B3330F296546000D3E5D /* highscores.cpp in Sources */, 95C2B3350F296546000D3E5D /* history.cpp in Sources */, @@ -2543,6 +2742,14 @@ 95C65DAA0F532FD400BE7BA7 /* shadow.cpp in Sources */, 95C65DAB0F532FD400BE7BA7 /* nitro.cpp in Sources */, 950557140F6963790056E88C /* file_manager.cpp in Sources */, + 950557860F696A900056E88C /* engine.cpp in Sources */, + 950557870F696A900056E88C /* my_button.cpp in Sources */, + 950557880F696A900056E88C /* screen.cpp in Sources */, + 950557890F696A900056E88C /* screen_loader.cpp in Sources */, + 9505578A0F696A900056E88C /* skin.cpp in Sources */, + 9505578B0F696A900056E88C /* widget.cpp in Sources */, + 95C1E3F20F699079005D33E6 /* race_gui.cpp in Sources */, + 95C1E4000F699427005D33E6 /* font.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2631,8 +2838,6 @@ "-lplibssgaux", "-lirrlicht", "-L/usr/local/lib", - "-lSDL", - "-lSDLmain", "-lopenal", "-lvorbisfile", "-lvorbis", diff --git a/src/io/file_manager.cpp b/src/io/file_manager.cpp index 565c7baa2..fa84bb1e4 100644 --- a/src/io/file_manager.cpp +++ b/src/io/file_manager.cpp @@ -19,6 +19,7 @@ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "io/file_manager.hpp" +#include #include #include @@ -91,16 +92,31 @@ FileManager* file_manager = 0; */ FileManager::FileManager() { - m_device = createDevice(video::EDT_NULL); +#ifdef __APPLE__ + // irrLicht's createDevice method has a nasty habit of messing the CWD. + // since the code above may rely on it, save it to be able to restore it after. + char buffer[256]; + getcwd(buffer, 256); +#endif + + m_device = createDevice(video::EDT_NULL); + +#ifdef __APPLE__ + chdir( buffer ); +#endif + m_file_system = m_device->getFileSystem(); m_is_full_path = false; - + if ( getenv ( "SUPERTUXKART_DATADIR" ) != NULL ) m_root_dir= getenv ( "SUPERTUXKART_DATADIR" ) ; #ifdef __APPLE__ else if( macSetBundlePathIfRelevant( m_root_dir ) ) { /* nothing to do */ } #endif - else if(m_file_system->existFile("data/stk_config.data")) + // else if(m_file_system->existFile("/Developer/games/supertuxkart/data/stk_config.data")) + // m_root_dir = "/Developer/games/supertuxkart" ; + // FIXME - existFile() fails to detect the file, even though it exists, on my computer + else if(m_file_system->existFile("/data/stk_config.data")) m_root_dir = "." ; else if(m_file_system->existFile("../data/stk_config.data")) m_root_dir = ".." ; diff --git a/src/karts/kart.cpp b/src/karts/kart.cpp index b1189beab..145023dfb 100644 --- a/src/karts/kart.cpp +++ b/src/karts/kart.cpp @@ -38,8 +38,7 @@ #include "graphics/shadow.hpp" #include "graphics/skid_marks.hpp" #include "graphics/smoke.hpp" -#include "gui/menu_manager.hpp" -#include "gui/race_gui.hpp" +#include "modes/world.hpp" #include "io/file_manager.hpp" #include "items/item_manager.hpp" #include "karts/kart_model.hpp" diff --git a/src/karts/player_kart.cpp b/src/karts/player_kart.cpp index 4227f55d7..6d81b54d0 100644 --- a/src/karts/player_kart.cpp +++ b/src/karts/player_kart.cpp @@ -27,7 +27,6 @@ #include "audio/sfx_base.hpp" #include "graphics/camera.hpp" #include "graphics/scene.hpp" -#include "gui/menu_manager.hpp" #include "gui/race_gui.hpp" #include "items/item.hpp" #include "modes/world.hpp" @@ -314,12 +313,15 @@ void PlayerKart::raceFinished(float time) // will most likely not be at the starting line at the end of the race if(race_manager->getMinorMode()!=RaceManager::MINOR_MODE_FOLLOW_LEADER) m_camera->setMode(Camera::CM_FINAL); + // TODO : race ending menu + /* RaceGUI* m=(RaceGUI*)menu_manager->getRaceMenu(); if(m) { m->addMessage(getPosition()==1 ? _("You won the race!") : _("You finished the race!") , this, 2.0f, 60); } + */ } // raceFinished //----------------------------------------------------------------------------- @@ -376,7 +378,7 @@ void PlayerKart::collectedItem(const Item &item, int add_info) */ void PlayerKart::doingShortcut() { - RaceGUI* m=(RaceGUI*)menu_manager->getRaceMenu(); + RaceGUI* m=(RaceGUI*)getRaceGUI(); // Can happen if the option menu is called if(m) m->addMessage(_("Invalid short-cut!!"), this, 2.0f, 60); diff --git a/src/main.cpp b/src/main.cpp index 60c2bd62a..aff4dcd52 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -60,9 +60,7 @@ #include "challenges/unlock_manager.hpp" #include "graphics/irr_driver.hpp" #include "graphics/scene.hpp" -#include "gui/menu_manager.hpp" -#include "gui/menu_manager.hpp" -#include "gui/widget_manager.hpp" +#include "gui/font.hpp" #include "io/file_manager.hpp" #include "items/attachment_manager.hpp" #include "items/item_manager.hpp" @@ -472,7 +470,7 @@ void InitTuxkart() race_manager->setMinorMode (RaceManager::MINOR_MODE_QUICK_RACE); race_manager->setDifficulty(RaceManager::RD_HARD); - menu_manager= new MenuManager(); + //menu_manager= new MenuManager(); // Consistency check for challenges, and enable all challenges // that have all prerequisites fulfilled @@ -484,7 +482,7 @@ void CleanTuxKart() { //delete in reverse order of what they were created in. //see InitTuxkart() - if(menu_manager) delete menu_manager; + //if(menu_manager) delete menu_manager; if(race_manager) delete race_manager; if(network_manager) delete network_manager; if(grand_prix_manager) delete grand_prix_manager; @@ -561,11 +559,12 @@ int main(int argc, char *argv[] ) //For some reason, calling this before the material loading screws //the background picture. - fntInit(); + //fntInit(); init_fonts(); - widget_manager = new WidgetManager; - menu_manager->switchToMainMenu(); + // TODO - show main menu here + //widget_manager = new WidgetManager; + //menu_manager->switchToMainMenu(); // Replay a race // ============= @@ -593,7 +592,8 @@ int main(int argc, char *argv[] ) // On the server start with the network information page for now if(network_manager->getMode()==NetworkManager::NW_SERVER) { - menu_manager->pushMenu(MENUID_NETWORK_GUI); + // TODO - network menu + //menu_manager->pushMenu(MENUID_NETWORK_GUI); } // Not replaying // ============= diff --git a/src/main_loop.cpp b/src/main_loop.cpp index f13e58b16..78cc28725 100644 --- a/src/main_loop.cpp +++ b/src/main_loop.cpp @@ -28,7 +28,7 @@ #include "audio/sound_manager.hpp" #include "graphics/irr_driver.hpp" #include "graphics/scene.hpp" -#include "gui/menu_manager.hpp" +#include "gui/engine.hpp" #include "modes/world.hpp" #include "user_config.hpp" #include "network/network_manager.hpp" @@ -191,12 +191,12 @@ void MainLoop::run() //Draw the splash screen - + /* if(menu_manager->isMainMenuActive()) glBindTexture(GL_TEXTURE_2D, m_title_screen_texture); else glBindTexture(GL_TEXTURE_2D, m_bg_texture); - + */ glBegin ( GL_QUADS ) ; glColor3f (1, 1, 1 ) ; glTexCoord2f(0, 0); glVertex2i(-1, -1); @@ -206,7 +206,9 @@ void MainLoop::run() glEnd () ; } - menu_manager->update(); + // TODO - render menus if necessary + //GUIEngine::render(); + //menu_manager->update(); sound_manager->update(dt); #ifdef HAVE_IRRLICHT diff --git a/src/modes/follow_the_leader.cpp b/src/modes/follow_the_leader.cpp index 4862e1bba..ea807404e 100644 --- a/src/modes/follow_the_leader.cpp +++ b/src/modes/follow_the_leader.cpp @@ -18,7 +18,7 @@ #include "user_config.hpp" #include "audio/sound_manager.hpp" #include "challenges/unlock_manager.hpp" -#include "gui/menu_manager.hpp" +#include "gui/race_gui.hpp" #include "items/powerup_manager.hpp" #include "modes/follow_the_leader.hpp" #include "tracks/track.hpp" diff --git a/src/modes/linear_world.cpp b/src/modes/linear_world.cpp index 8243a5cae..39260a11f 100644 --- a/src/modes/linear_world.cpp +++ b/src/modes/linear_world.cpp @@ -16,12 +16,11 @@ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "modes/linear_world.hpp" - +#include "gui/race_gui.hpp" + #include #include "audio/sound_manager.hpp" -#include "gui/menu_manager.hpp" -#include "gui/race_gui.hpp" #include "network/network_manager.hpp" #include "tracks/track.hpp" #include "utils/constants.hpp" @@ -281,13 +280,13 @@ void LinearWorld::doLapCounting ( KartInfo& kart_info, Kart* kart ) if(time_per_lap < getFastestLapTime() && raceHasLaps()) { setFastestLap(kart, time_per_lap); - RaceGUI* m=(RaceGUI*)menu_manager->getRaceMenu(); + RaceGUI* m=(RaceGUI*)getRaceGUI(); if(m) { m->addMessage(_("New fastest lap"), NULL, 2.0f, 40, 100, 210, 100); char s[20]; - m->TimeToString(time_per_lap, s); + timeToString(time_per_lap, s); std::ostringstream m_fastest_lap_message; m_fastest_lap_message << s << ": " << kart->getName(); @@ -413,7 +412,7 @@ KartIconDisplayInfo* LinearWorld::getKartsDisplayInfo(const RaceGUI* caller) if(position==1) { str[0]=' '; str[1]=0; - caller->TimeToString(getTimeAtLapForKart(kart->getWorldKartId()), str+1); + timeToString(getTimeAtLapForKart(kart->getWorldKartId()), str+1); } else { @@ -423,7 +422,7 @@ KartIconDisplayInfo* LinearWorld::getKartsDisplayInfo(const RaceGUI* caller) : getTime()) - time_of_leader; str[0]='+'; str[1]=0; - caller->TimeToString(timeBehind, str+1); + timeToString(timeBehind, str+1); } rank_info.time = str; } @@ -633,7 +632,7 @@ void LinearWorld::checkForWrongDirection(unsigned int i) if(!m_kart[i]->isPlayerKart()) return; if(!m_kart_info[i].m_on_road) return; - RaceGUI* m=menu_manager->getRaceMenu(); + RaceGUI* m = getRaceGUI(); // This can happen if the option menu is called, since the // racegui gets deleted if(!m) return; @@ -653,7 +652,6 @@ void LinearWorld::checkForWrongDirection(unsigned int i) { m->addMessage(_("WRONG WAY!"), kart, -1.0f, 60); } // if angle is too big - } // checkForWrongDirection //----------------------------------------------------------------------------- diff --git a/src/modes/standard_race.cpp b/src/modes/standard_race.cpp index 350404b72..cfb92b0ab 100644 --- a/src/modes/standard_race.cpp +++ b/src/modes/standard_race.cpp @@ -19,7 +19,6 @@ #include "user_config.hpp" #include "challenges/unlock_manager.hpp" -#include "gui/menu_manager.hpp" //----------------------------------------------------------------------------- StandardRace::StandardRace() : LinearWorld() diff --git a/src/modes/world.cpp b/src/modes/world.cpp index aab06f360..c1f03b4a4 100644 --- a/src/modes/world.cpp +++ b/src/modes/world.cpp @@ -34,7 +34,7 @@ #include "challenges/unlock_manager.hpp" #include "graphics/camera.hpp" #include "graphics/scene.hpp" -#include "gui/menu_manager.hpp" +#include "gui/race_gui.hpp" #include "io/file_manager.hpp" #include "items/item_manager.hpp" #include "items/projectile_manager.hpp" @@ -158,7 +158,8 @@ void World::init() #endif callback_manager->initAll(); - menu_manager->switchToRace(); + // TODO - race GUI + //menu_manager->switchToRace(); m_track->startMusic(); @@ -205,7 +206,8 @@ void World::terminateRace() { updateHighscores(); TimedRace::pause(); - menu_manager->pushMenu(MENUID_RACERESULT); + // TODO - race results GUI + //menu_manager->pushMenu(MENUID_RACERESULT); unlock_manager->raceFinished(); } //----------------------------------------------------------------------------- @@ -401,7 +403,7 @@ void World::removeKart(int kart_number) { Kart *kart = m_kart[kart_number]; // Display a message about the eliminated kart in the race gui - RaceGUI* m=(RaceGUI*)menu_manager->getRaceMenu(); + RaceGUI* m=getRaceGUI(); if(m) { for (std::vector::iterator i = m_player_karts.begin(); diff --git a/src/modes/world.hpp b/src/modes/world.hpp index c67d2a2ae..56226fd61 100644 --- a/src/modes/world.hpp +++ b/src/modes/world.hpp @@ -34,9 +34,9 @@ class SFXBase; struct KartIconDisplayInfo; -class RaceGUI; class btRigidBody; class Track; +class RaceGUI; /** This class is responsible for running the actual race. A world is created * by the race manager on the start of each race (so a new world is created diff --git a/src/network/network_manager.cpp b/src/network/network_manager.cpp index 3161890b4..5f40df0b1 100644 --- a/src/network/network_manager.cpp +++ b/src/network/network_manager.cpp @@ -22,9 +22,6 @@ #include "stk_config.hpp" #include "user_config.hpp" #include "race_manager.hpp" -#include "gui/menu_manager.hpp" -#include "gui/char_sel.hpp" -#include "gui/race_results_gui.hpp" #include "karts/kart_properties_manager.hpp" #include "modes/world.hpp" #include "network/connect_message.hpp" @@ -251,9 +248,12 @@ void NetworkManager::handleMessageAtServer(ENetEvent *event) int kart_id = kart_properties_manager->getKartId(ki.getKartName()); kart_properties_manager->testAndSetKart(kart_id); + // TODO - character selection screen in networking + /* CharSel *menu = dynamic_cast(menu_manager->getCurrentMenu()); if(menu) menu->updateAvailableCharacters(); + */ // Broadcast the information about a selected kart to all clients CharacterConfirmMessage ccm(ki.getKartName(), hostid); @@ -318,9 +318,12 @@ void NetworkManager::handleMessageAtClient(ENetEvent *event) { CharacterConfirmMessage m(event->packet); kart_properties_manager->selectKartName(m.getKartName()); + // TODO - karts selection screen in networking + /* CharSel *menu = dynamic_cast(menu_manager->getCurrentMenu()); if(menu) menu->updateAvailableCharacters(); + */ break; } case NS_WAIT_FOR_KART_CONFIRMATION: @@ -330,9 +333,11 @@ void NetworkManager::handleMessageAtClient(ENetEvent *event) // If the current menu is the character selection menu, // update the menu so that the newly taken character is removed. + // TODO - kart selection screen and networking + /* CharSel *menu = dynamic_cast(menu_manager->getCurrentMenu()); if(menu) - menu->updateAvailableCharacters(); + menu->updateAvailableCharacters();*/ // Check if we received a message about the kart we just selected. // If so, the menu needs to progress, otherwise a different kart // must be selected by the current player. @@ -376,9 +381,11 @@ void NetworkManager::handleMessageAtClient(ENetEvent *event) case NS_RACE_RESULT_BARRIER: { RaceResultAckMessage message(event->packet); + // TODO - race results menu in networking + /* RaceResultsGUI *menu = dynamic_cast(menu_manager->getCurrentMenu()); if(menu) - menu->setSelectedWidget(message.getSelectedMenu()); + menu->setSelectedWidget(message.getSelectedMenu());*/ m_state = NS_RACE_RESULT_BARRIER_OVER; break; } diff --git a/src/race_manager.cpp b/src/race_manager.cpp index 573cff857..23d98c69c 100644 --- a/src/race_manager.cpp +++ b/src/race_manager.cpp @@ -26,7 +26,6 @@ #include "stk_config.hpp" #include "challenges/unlock_manager.hpp" #include "graphics/scene.hpp" -#include "gui/menu_manager.hpp" #include "karts/kart_properties_manager.hpp" #include "network/network_manager.hpp" #include "modes/standard_race.hpp" @@ -364,11 +363,13 @@ void RaceManager::exit_race() delete []race_time; unlock_manager->grandPrixFinished(); - menu_manager->switchToGrandPrixEnding(); + // TODO - Grand Prix ending + // menu_manager->switchToGrandPrixEnding(); } else { - menu_manager->switchToMainMenu(); + // FIXME - back to main menu + // menu_manager->switchToMainMenu(); } stk_scene->clear(); delete world; diff --git a/src/sdldrv.cpp b/src/sdldrv.cpp index fed7f94c4..131476f7e 100644 --- a/src/sdldrv.cpp +++ b/src/sdldrv.cpp @@ -36,14 +36,12 @@ #include "loader.hpp" #include "player.hpp" #include "user_config.hpp" -#include "gui/menu_manager.hpp" -#include "gui/widget_manager.hpp" -#include "gui/font.hpp" #include "items/item_manager.hpp" #include "items/powerup_manager.hpp" #include "items/attachment_manager.hpp" #include "items/projectile_manager.hpp" #include "karts/kart_properties_manager.hpp" +#include "gui/font.hpp" #define DEADZONE_MOUSE 150 #define DEADZONE_MOUSE_SENSE 200 @@ -229,16 +227,20 @@ void SDLDriver::toggleFullscreen(bool resetTextures) { m_flags |= SDL_FULLSCREEN; + // TODO - GUI and screen setup + /* if(menu_manager->isSomewhereOnStack(MENUID_RACE)) - showPointer(); + showPointer();*/ // Store settings in user config file in case new video mode // causes a crash user_config->m_crashed = true; //set flag. user_config->saveConfig(); } + // TODO - GUI and screen setup + /* else if(menu_manager->isSomewhereOnStack(MENUID_RACE)) - hidePointer(); + hidePointer();*/ setVideoMode(resetTextures); } // toggleFullscreen @@ -289,7 +291,7 @@ void SDLDriver::setVideoMode(bool resetTextures) //TODO: this function probably will get deleted in the future; if //so, the widget_manager.hpp include has no other reason to be here. - widget_manager->reloadFonts(); + //widget_manager->reloadFonts(); } #endif } // setVideoMode @@ -326,6 +328,8 @@ SDLDriver::~SDLDriver() void SDLDriver::input(Input::InputType type, int id0, int id1, int id2, int value) { + // TODO - menus handle SDL input + /* BaseGUI* menu = menu_manager->getCurrentMenu(); GameAction ga = m_action_map->getEntry(type, id0, id1, id2); @@ -391,6 +395,7 @@ void SDLDriver::input(Input::InputType type, int id0, int id1, int id2, menu->handle(ga, value); } } // menu!=NULL + */ } // input //----------------------------------------------------------------------------- @@ -433,12 +438,14 @@ void SDLDriver::input() case SDL_KEYDOWN: if (m_mode == LOWLEVEL) { + // TODO - keyboard handling and GUI + /* // Unicode translation in SDL is only done for keydown events. // Therefore for lowlevel keyboard handling we provide no notion // of whether a key was pressed or released. menu_manager->getCurrentMenu() ->inputKeyboard(ev.key.keysym.sym, - ev.key.keysym.unicode); + ev.key.keysym.unicode);*/ } input(Input::IT_KEYBOARD, ev.key.keysym.sym, #ifdef HAVE_IRRLICHT @@ -465,11 +472,14 @@ void SDLDriver::input() // axis value) while the pointer has two. if (!m_mode) { + // TODO - mouse motion handling and GUI + /* BaseGUI* menu = menu_manager->getCurrentMenu(); #ifndef HAVE_IRRLICHT if (menu != NULL) menu->inputPointer(ev.motion.x, m_main_surface->h - ev.motion.y); #endif + */ } // If sensing input mouse movements are made less sensitive in order // to avoid it being detected unwantedly. @@ -582,8 +592,10 @@ void SDLDriver::input() ev.jbutton.button, 0, 32768); break; case SDL_USEREVENT: + // TODO - GUI countdown + break; // used in display_res_confirm for the countdown timer - (menu_manager->getCurrentMenu())->countdown(); + // (menu_manager->getCurrentMenu())->countdown(); } // switch } // while (SDL_PollEvent()) From f69086893ec3ec7448ef62a3057bb3dfe6f5da0d Mon Sep 17 00:00:00 2001 From: auria Date: Sat, 14 Mar 2009 00:21:40 +0000 Subject: [PATCH 0020/1008] i think i broke game input in my previous commit. i'm trying to limit the damage here... don't think i got it right yet git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3257 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- src/gui/race_gui.cpp | 5 +++++ src/sdldrv.cpp | 10 ++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/gui/race_gui.cpp b/src/gui/race_gui.cpp index d8a3b7499..dca684183 100644 --- a/src/gui/race_gui.cpp +++ b/src/gui/race_gui.cpp @@ -128,8 +128,13 @@ RaceGUI::handle(GameAction ga, int value) // Note that the kartaction enum value and their representatives in // gameaction enum have the same order (Otherwise the stuff below would // not work ...)! + + std::cout << "--- ga = " << ga << "\n"; + if (ga >= GA_FIRST_KARTACTION && ga <= GA_LAST_KARTACTION) { + std::cout << "--- yay passing to kart\n"; + // 'Pulls down' the gameaction value to make them multiples of the // kartaction values. int ka = ga - GA_FIRST_KARTACTION; diff --git a/src/sdldrv.cpp b/src/sdldrv.cpp index 131476f7e..3a916f94d 100644 --- a/src/sdldrv.cpp +++ b/src/sdldrv.cpp @@ -42,6 +42,7 @@ #include "items/projectile_manager.hpp" #include "karts/kart_properties_manager.hpp" #include "gui/font.hpp" +#include "gui/race_gui.hpp" #define DEADZONE_MOUSE 150 #define DEADZONE_MOUSE_SENSE 200 @@ -329,8 +330,8 @@ void SDLDriver::input(Input::InputType type, int id0, int id1, int id2, int value) { // TODO - menus handle SDL input - /* - BaseGUI* menu = menu_manager->getCurrentMenu(); + RaceGUI* menu = getRaceGUI(); // FIXME - input is handled in menu class?? + //BaseGUI* menu = menu_manager->getCurrentMenu(); GameAction ga = m_action_map->getEntry(type, id0, id1, id2); @@ -388,14 +389,15 @@ void SDLDriver::input(Input::InputType type, int id0, int id1, int id2, int x, y; SDL_GetMouseState( &x, &y ); y = SDL_GetVideoSurface()->h - y; - menu->inputPointer( x, y ); + //menu->inputPointer( x, y ); } + std::cout << "--- passing event to menu\n"; + // Lets the currently active menu handle the GameAction. menu->handle(ga, value); } } // menu!=NULL - */ } // input //----------------------------------------------------------------------------- From 031b4b4a81e00c3c3469794047a84908eb5bd2dc Mon Sep 17 00:00:00 2001 From: auria Date: Sat, 14 Mar 2009 00:26:18 +0000 Subject: [PATCH 0021/1008] removed debug code that should not have gone in git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3258 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- src/gui/race_gui.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/gui/race_gui.cpp b/src/gui/race_gui.cpp index dca684183..deb08a4b0 100644 --- a/src/gui/race_gui.cpp +++ b/src/gui/race_gui.cpp @@ -129,12 +129,8 @@ RaceGUI::handle(GameAction ga, int value) // gameaction enum have the same order (Otherwise the stuff below would // not work ...)! - std::cout << "--- ga = " << ga << "\n"; - if (ga >= GA_FIRST_KARTACTION && ga <= GA_LAST_KARTACTION) { - std::cout << "--- yay passing to kart\n"; - // 'Pulls down' the gameaction value to make them multiples of the // kartaction values. int ka = ga - GA_FIRST_KARTACTION; From 61a26d9d44113ad4cbdafead1f7cf6ac39a9cd6c Mon Sep 17 00:00:00 2001 From: auria Date: Sat, 14 Mar 2009 00:27:21 +0000 Subject: [PATCH 0022/1008] removed debug code that should not have gone in git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3259 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- src/sdldrv.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/sdldrv.cpp b/src/sdldrv.cpp index 3a916f94d..eacbd7b92 100644 --- a/src/sdldrv.cpp +++ b/src/sdldrv.cpp @@ -392,8 +392,6 @@ void SDLDriver::input(Input::InputType type, int id0, int id1, int id2, //menu->inputPointer( x, y ); } - std::cout << "--- passing event to menu\n"; - // Lets the currently active menu handle the GameAction. menu->handle(ga, value); } From c3f168bd3dd300634afc360dc6b2e19c512d42e7 Mon Sep 17 00:00:00 2001 From: auria Date: Sat, 14 Mar 2009 22:35:00 +0000 Subject: [PATCH 0023/1008] fixed input, which wwas broken when introducing GUI git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3260 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- src/main.cpp | 2 ++ src/sdldrv.cpp | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index aff4dcd52..f3f3315b3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -566,6 +566,8 @@ int main(int argc, char *argv[] ) //widget_manager = new WidgetManager; //menu_manager->switchToMainMenu(); + inputDriver->setMode(SDLDriver::INGAME); + // Replay a race // ============= if(history->replayHistory()) diff --git a/src/sdldrv.cpp b/src/sdldrv.cpp index eacbd7b92..41992a949 100644 --- a/src/sdldrv.cpp +++ b/src/sdldrv.cpp @@ -228,7 +228,7 @@ void SDLDriver::toggleFullscreen(bool resetTextures) { m_flags |= SDL_FULLSCREEN; - // TODO - GUI and screen setup + // TODO - toggle fullscreen / hide/show mouse /* if(menu_manager->isSomewhereOnStack(MENUID_RACE)) showPointer();*/ @@ -238,7 +238,7 @@ void SDLDriver::toggleFullscreen(bool resetTextures) user_config->m_crashed = true; //set flag. user_config->saveConfig(); } - // TODO - GUI and screen setup + // TODO - toggle fullscreen / hide/show mouse /* else if(menu_manager->isSomewhereOnStack(MENUID_RACE)) hidePointer();*/ From f5ced788acdb272f011b76d192ed474e39a4f01f Mon Sep 17 00:00:00 2001 From: auria Date: Sun, 15 Mar 2009 01:34:21 +0000 Subject: [PATCH 0024/1008] Game menu now shows up :) Input is not yet handled, so not yet usable. Some dummy placeholder datafiles included for the sake of having something testable git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3261 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- data/gui/difficulty_easy.png | Bin 0 -> 13525 bytes data/gui/difficulty_hard.png | Bin 0 -> 17042 bytes data/gui/difficulty_medium.png | Bin 0 -> 12974 bytes data/gui/fonthaettenschweiler.bmp | Bin 0 -> 196662 bytes data/gui/gnu.png | Bin 0 -> 22995 bytes data/gui/karts.stkgui | 21 ++++++++ data/gui/karts1.png | Bin 0 -> 8725 bytes data/gui/karts2.png | Bin 0 -> 11002 bytes data/gui/karts3.png | Bin 0 -> 11190 bytes data/gui/karts4.png | Bin 0 -> 11198 bytes data/gui/karts5.png | Bin 0 -> 11257 bytes data/gui/karts6.png | Bin 0 -> 11262 bytes data/gui/karts7.png | Bin 0 -> 11299 bytes data/gui/karts8.png | Bin 0 -> 10925 bytes data/gui/logo.png | Bin 0 -> 41048 bytes data/gui/main.stkgui | 24 +++++++++ data/gui/main_about.png | Bin 0 -> 11820 bytes data/gui/main_challenges.png | Bin 0 -> 15471 bytes data/gui/main_help.png | Bin 0 -> 11271 bytes data/gui/main_network.png | Bin 0 -> 17371 bytes data/gui/main_options.png | Bin 0 -> 12735 bytes data/gui/main_quit.png | Bin 0 -> 4732 bytes data/gui/main_race.png | Bin 0 -> 19444 bytes data/gui/mode_3strikes.png | Bin 0 -> 14235 bytes data/gui/mode_ftl.png | Bin 0 -> 16214 bytes data/gui/mode_normal.png | Bin 0 -> 15968 bytes data/gui/mode_tt.png | Bin 0 -> 15471 bytes data/gui/racesetup.stkgui | 32 ++++++++++++ data/gui/track1.png | Bin 0 -> 122699 bytes data/gui/track2.png | Bin 0 -> 117612 bytes data/gui/track3.png | Bin 0 -> 81177 bytes data/gui/track4.png | Bin 0 -> 86240 bytes data/gui/track5.png | Bin 0 -> 102866 bytes data/gui/track6.png | Bin 0 -> 73583 bytes data/gui/track7.png | Bin 0 -> 105501 bytes data/gui/track8.png | Bin 0 -> 83080 bytes data/gui/track?.png | Bin 0 -> 29535 bytes data/gui/tracks.stkgui | 25 +++++++++ src/graphics/irr_driver.cpp | 5 +- src/gui/engine.cpp | 29 ++++++----- src/gui/engine.hpp | 2 + src/gui/screen.cpp | 4 +- src/gui/screen_loader.cpp | 3 +- src/gui/state_manager.cpp | 48 ++++++++++++++++++ src/gui/state_manager.hpp | 15 ++++++ src/gui/widget.cpp | 20 +++++--- .../Xcode/STK_XCode.xcodeproj/project.pbxproj | 6 +++ src/io/file_manager.cpp | 6 ++- src/io/file_manager.hpp | 3 +- src/main.cpp | 19 +++++-- src/main_loop.cpp | 4 +- src/sdldrv.cpp | 4 ++ 52 files changed, 237 insertions(+), 33 deletions(-) create mode 100644 data/gui/difficulty_easy.png create mode 100644 data/gui/difficulty_hard.png create mode 100644 data/gui/difficulty_medium.png create mode 100755 data/gui/fonthaettenschweiler.bmp create mode 100755 data/gui/gnu.png create mode 100644 data/gui/karts.stkgui create mode 100644 data/gui/karts1.png create mode 100644 data/gui/karts2.png create mode 100644 data/gui/karts3.png create mode 100644 data/gui/karts4.png create mode 100644 data/gui/karts5.png create mode 100644 data/gui/karts6.png create mode 100644 data/gui/karts7.png create mode 100644 data/gui/karts8.png create mode 100644 data/gui/logo.png create mode 100644 data/gui/main.stkgui create mode 100644 data/gui/main_about.png create mode 100644 data/gui/main_challenges.png create mode 100644 data/gui/main_help.png create mode 100644 data/gui/main_network.png create mode 100644 data/gui/main_options.png create mode 100644 data/gui/main_quit.png create mode 100644 data/gui/main_race.png create mode 100644 data/gui/mode_3strikes.png create mode 100644 data/gui/mode_ftl.png create mode 100644 data/gui/mode_normal.png create mode 100644 data/gui/mode_tt.png create mode 100644 data/gui/racesetup.stkgui create mode 100644 data/gui/track1.png create mode 100644 data/gui/track2.png create mode 100644 data/gui/track3.png create mode 100644 data/gui/track4.png create mode 100644 data/gui/track5.png create mode 100644 data/gui/track6.png create mode 100644 data/gui/track7.png create mode 100644 data/gui/track8.png create mode 100644 data/gui/track?.png create mode 100644 data/gui/tracks.stkgui create mode 100644 src/gui/state_manager.cpp create mode 100644 src/gui/state_manager.hpp diff --git a/data/gui/difficulty_easy.png b/data/gui/difficulty_easy.png new file mode 100644 index 0000000000000000000000000000000000000000..bc987cd16223ad11e92e2e068c45d13af07fab86 GIT binary patch literal 13525 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 literal 0 HcmV?d00001 diff --git a/data/gui/difficulty_hard.png b/data/gui/difficulty_hard.png new file mode 100644 index 0000000000000000000000000000000000000000..975c6a11f0138e150e3ff6fd4e2444c5420d7e76 GIT binary patch literal 17042 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%0D`&&dWl0e}?t?_L0FQ`@;QU2cr>Rlhmy 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 Aq5uE@ literal 0 HcmV?d00001 diff --git a/data/gui/gnu.png b/data/gui/gnu.png new file mode 100755 index 0000000000000000000000000000000000000000..06befe71268cbe8ceacc0119d76fb9da42bd50ad GIT binary patch literal 22995 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 akN*p?yDV^wJ9!iU0000 + +