diff --git a/src/Doxyfile b/src/Doxyfile index db6d4679d..e2d368245 100644 --- a/src/Doxyfile +++ b/src/Doxyfile @@ -1139,7 +1139,7 @@ MATHJAX_RELPATH = http://www.mathjax.org/mathjax # typically be disabled. For large projects the javascript based search engine # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. -SEARCHENGINE = NO +SEARCHENGINE = YES # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a PHP enabled web server instead of at the web client diff --git a/src/Doxyfile_Win b/src/Doxyfile_Win index 6463a9108..72a1af102 100644 --- a/src/Doxyfile_Win +++ b/src/Doxyfile_Win @@ -1202,7 +1202,7 @@ MATHJAX_EXTENSIONS = # typically be disabled. For large projects the javascript based search engine # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. -SEARCHENGINE = NO +SEARCHENGINE = YES # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a PHP enabled web server instead of at the web client diff --git a/src/Makefile.am b/src/Makefile.am index ec510b3bb..40d714555 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -69,10 +69,14 @@ supertuxkart_SOURCES = \ config/device_config.hpp \ graphics/CBatchingMesh.cpp \ graphics/CBatchingMesh.hpp \ + graphics/callbacks.cpp \ + graphics/callbacks.hpp \ graphics/camera.cpp \ graphics/camera.hpp \ graphics/explosion.cpp \ graphics/explosion.hpp \ + graphics/glow.cpp \ + graphics/glow.hpp \ graphics/hardware_skinning.cpp \ graphics/hardware_skinning.hpp \ graphics/hit_effect.hpp \ @@ -80,6 +84,11 @@ supertuxkart_SOURCES = \ graphics/hit_sfx.hpp \ graphics/irr_driver.cpp \ graphics/irr_driver.hpp \ + graphics/large_mesh_buffer.hpp \ + graphics/lens_flare.cpp \ + graphics/lens_flare.hpp \ + graphics/light.hpp \ + graphics/light.cpp \ graphics/lod_node.cpp \ graphics/lod_node.hpp \ graphics/material.cpp \ @@ -102,10 +111,19 @@ supertuxkart_SOURCES = \ graphics/post_processing.hpp \ graphics/rain.cpp \ graphics/rain.hpp \ + graphics/render.cpp \ graphics/referee.cpp \ graphics/referee.hpp \ + graphics/rtts.hpp \ + graphics/rtts.cpp \ + graphics/screenquad.cpp \ + graphics/screenquad.hpp \ + graphics/shaders.cpp \ + graphics/shaders.hpp \ graphics/shadow.cpp \ graphics/shadow.hpp \ + graphics/shadow_importance.cpp \ + graphics/shadow_importance.hpp \ graphics/show_curve.cpp \ graphics/show_curve.hpp \ graphics/skid_marks.cpp \ @@ -114,6 +132,12 @@ supertuxkart_SOURCES = \ graphics/slip_stream.hpp \ graphics/stars.cpp \ graphics/stars.hpp \ + graphics/sun.hpp \ + graphics/sun.cpp \ + graphics/water.hpp \ + graphics/water.cpp \ + graphics/wind.hpp \ + graphics/wind.cpp \ guiengine/CGUISpriteBank.cpp \ guiengine/CGUISpriteBank.h \ guiengine/abstract_state_manager.cpp \ @@ -496,6 +520,8 @@ supertuxkart_SOURCES = \ utils/aligned_array.hpp \ utils/constants.hpp \ utils/constants.cpp \ + utils/helpers.hpp \ + utils/helpers.cpp \ utils/leak_check.cpp \ utils/leak_check.hpp \ utils/log.cpp \ @@ -510,6 +536,7 @@ supertuxkart_SOURCES = \ utils/string_utils.hpp \ utils/synchronised.hpp \ utils/time.hpp \ + utils/time.cpp \ utils/translation.cpp \ utils/translation.hpp \ utils/utf8.h \ @@ -517,7 +544,8 @@ supertuxkart_SOURCES = \ utils/utf8/core.h \ utils/utf8/unchecked.h \ utils/vec3.cpp \ - utils/vec3.hpp + utils/vec3.hpp \ + utils/vs.hpp # Link in the specific gcc 4.1 bug work around supertuxkart_LDADD = \ diff --git a/src/addons/addon.cpp b/src/addons/addon.cpp index 864261a7e..924facdd1 100644 --- a/src/addons/addon.cpp +++ b/src/addons/addon.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Lucas Baudin, Joerg Henrichs +// Copyright (C) 2010-2013 Lucas Baudin, Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -162,7 +162,7 @@ void Addon::writeXML(std::ofstream *out_stream) // ---------------------------------------------------------------------------- std::string Addon::getDateAsString() const { - return Time::toString(m_date); + return StkTime::toString(m_date); } // getDateAsString // ---------------------------------------------------------------------------- diff --git a/src/addons/addon.hpp b/src/addons/addon.hpp index 3e5002aaf..fc3c111f1 100644 --- a/src/addons/addon.hpp +++ b/src/addons/addon.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Lucas Baudin, Joerg Henrichs +// Copyright (C) 2010-2013 Lucas Baudin, Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -99,7 +99,7 @@ private: * in the addons.xml file. */ bool m_still_exists; /** Date when the addon was added. */ - Time::TimeType m_date; + StkTime::TimeType m_date; /** A description of this addon. */ core::stringw m_description; /** The URL of the icon (relative to the server) */ @@ -171,7 +171,7 @@ public: // ------------------------------------------------------------------------ /** Returns the date (in seconds since epoch) when the addon was * uploaded. */ - Time::TimeType getDate() const { return m_date; } + StkTime::TimeType getDate() const { return m_date; } // ------------------------------------------------------------------------ /** Returns a user readable date as a string. */ std::string getDateAsString() const; diff --git a/src/addons/addons_manager.cpp b/src/addons/addons_manager.cpp index b8920f4a5..4d50a63c4 100644 --- a/src/addons/addons_manager.cpp +++ b/src/addons/addons_manager.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Lucas Baudin +// Copyright (C) 2010-2013 Lucas Baudin // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -456,22 +456,22 @@ bool AddonsManager::uninstall(const Addon &addon) m_addons_list.getData()[index].setInstalled(false); //remove the addons directory - bool error = false; - // if the user deleted the data directory for an add-on with - // filesystem tools, removeTrack/removeKart will trigger an assert - // because the kart/track was never added in the first place - if (file_manager->fileExists(addon.getDataDir())) - { - error = !file_manager->removeDirectory(addon.getDataDir()); - if(addon.getType()=="kart") - { - kart_properties_manager->removeKart(addon.getId()); - } - else if(addon.getType()=="track" || addon.getType()=="arena") - { - track_manager->removeTrack(addon.getId()); - } - } + bool error = false; + // if the user deleted the data directory for an add-on with + // filesystem tools, removeTrack/removeKart will trigger an assert + // because the kart/track was never added in the first place + if (file_manager->fileExists(addon.getDataDir())) + { + error = !file_manager->removeDirectory(addon.getDataDir()); + if(addon.getType()=="kart") + { + kart_properties_manager->removeKart(addon.getId()); + } + else if(addon.getType()=="track" || addon.getType()=="arena") + { + track_manager->removeTrack(addon.getId()); + } + } saveInstalled(); return !error; } // uninstall diff --git a/src/addons/addons_manager.hpp b/src/addons/addons_manager.hpp index d3b0545d8..e5d90bdf8 100644 --- a/src/addons/addons_manager.hpp +++ b/src/addons/addons_manager.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Lucas Baudin, Joerg Henrichs +// Copyright (C) 2010-2013 Lucas Baudin, Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/addons/dummy_network_http.hpp b/src/addons/dummy_network_http.hpp index cf58b8859..7b00fe586 100644 --- a/src/addons/dummy_network_http.hpp +++ b/src/addons/dummy_network_http.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Lucas Baudin +// Copyright (C) 2010-2013 Lucas Baudin // 2011 Lucas Baudin, Joerg Henrichs // // This program is free software; you can redistribute it and/or diff --git a/src/addons/inetwork_http.cpp b/src/addons/inetwork_http.cpp index 6dc8f64c6..d1a8b9e96 100644 --- a/src/addons/inetwork_http.cpp +++ b/src/addons/inetwork_http.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/addons/inetwork_http.hpp b/src/addons/inetwork_http.hpp index ed55aa215..7a49bf723 100644 --- a/src/addons/inetwork_http.hpp +++ b/src/addons/inetwork_http.hpp @@ -1,6 +1,6 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Lucas Baudin -// 2011 Lucas Baudin, Joerg Henrichs +// Copyright (C) 2010-2013 Lucas Baudin +// Copyright (C) 2011-2013 Lucas Baudin, Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/addons/network_http.cpp b/src/addons/network_http.cpp index 2646e19f8..569e2e6dc 100644 --- a/src/addons/network_http.cpp +++ b/src/addons/network_http.cpp @@ -1,6 +1,6 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Lucas Baudin -// 2011 Lucas Baudin, Joerg Henrichs +// Copyright (C) 2010-2013 Lucas Baudin +// Copyright (C) 2011-2013 Lucas Baudin, Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -24,14 +24,7 @@ #include #include #include - -#if defined(WIN32) && !defined(__CYGWIN__) -# include -# define isnan _isnan -#else -# include -# include -#endif +#include #include "addons/news_manager.hpp" #include "addons/request.hpp" @@ -42,6 +35,7 @@ #include "utils/string_utils.hpp" #include "utils/time.hpp" #include "utils/translation.hpp" +#include "utils/vs.hpp" // ---------------------------------------------------------------------------- /** Create a thread that handles all network functions independent of the @@ -270,7 +264,7 @@ CURLcode NetworkHttp::init(bool forceRefresh) bool download = UserConfigParams::m_news_last_updated==0 || UserConfigParams::m_news_last_updated +UserConfigParams::m_news_frequency - < Time::getTimeSinceEpoch() || forceRefresh; + < StkTime::getTimeSinceEpoch() || forceRefresh; if(!download) { @@ -303,7 +297,7 @@ CURLcode NetworkHttp::init(bool forceRefresh) { std::string xml_file = file_manager->getAddonsFile("news.xml"); if(download) - UserConfigParams::m_news_last_updated = Time::getTimeSinceEpoch(); + UserConfigParams::m_news_last_updated = StkTime::getTimeSinceEpoch(); const XMLNode *xml = new XMLNode(xml_file); // A proper news file has at least a version number, mtime, and @@ -319,7 +313,7 @@ CURLcode NetworkHttp::init(bool forceRefresh) status = downloadFileInternal(&r); if(status==CURLE_OK) UserConfigParams::m_news_last_updated = - Time::getTimeSinceEpoch(); + StkTime::getTimeSinceEpoch(); delete xml; xml = new XMLNode(xml_file); } @@ -416,7 +410,7 @@ CURLcode NetworkHttp::loadAddonsList(const XMLNode *xml, bool forceRefresh) { std::string addon_list_url(""); - Time::TimeType mtime(0); + StkTime::TimeType mtime(0); const XMLNode *include = xml->getNode("include"); if(include) { @@ -456,7 +450,7 @@ CURLcode NetworkHttp::loadAddonsList(const XMLNode *xml, { std::string xml_file = file_manager->getAddonsFile("addons.xml"); if(download) - UserConfigParams::m_addons_last_updated=Time::getTimeSinceEpoch(); + UserConfigParams::m_addons_last_updated=StkTime::getTimeSinceEpoch(); const XMLNode *xml = new XMLNode(xml_file); addons_manager->initOnline(xml); if(UserConfigParams::logAddons()) @@ -494,19 +488,19 @@ CURLcode NetworkHttp::downloadFileInternal(Request *request) curl_easy_setopt(m_curl_session, CURLOPT_URL, full_url.c_str()); std::string uagent = (std::string)"SuperTuxKart/" + STK_VERSION; - // Add platform to user-agent string for informational purposes. - // Add more cases as necessary. - #ifdef WIN32 - uagent += (std::string)" (Windows)"; - #elif defined(__APPLE__) - uagent += (std::string)" (Macintosh)"; - #elif defined(__FreeBSD__) - uagent += (std::string)" (FreeBSD)"; - #elif defined(linux) - uagent += (std::string)" (Linux)"; - #else - // Unknown system type - #endif + // Add platform to user-agent string for informational purposes. + // Add more cases as necessary. + #ifdef WIN32 + uagent += (std::string)" (Windows)"; + #elif defined(__APPLE__) + uagent += (std::string)" (Macintosh)"; + #elif defined(__FreeBSD__) + uagent += (std::string)" (FreeBSD)"; + #elif defined(linux) + uagent += (std::string)" (Linux)"; + #else + // Unknown system type + #endif curl_easy_setopt(m_curl_session, CURLOPT_USERAGENT, uagent.c_str()); curl_easy_setopt(m_curl_session, CURLOPT_FOLLOWLOCATION, 1); curl_easy_setopt(m_curl_session, CURLOPT_PROGRESSDATA, request); diff --git a/src/addons/network_http.hpp b/src/addons/network_http.hpp index 8b09758ea..5ea3d0f0d 100644 --- a/src/addons/network_http.hpp +++ b/src/addons/network_http.hpp @@ -1,6 +1,6 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Lucas Baudin -// 2011 Lucas Baudin, Joerg Henrichs +// Copyright (C) 2010-2013 Lucas Baudin +// Copyright (C) 2011-2013 Lucas Baudin, Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/addons/news_manager.cpp b/src/addons/news_manager.cpp index eb75f7abd..eadf6d7b1 100644 --- a/src/addons/news_manager.cpp +++ b/src/addons/news_manager.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Joerg Henrichs +// Copyright (C) 2011-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -50,7 +50,7 @@ NewsManager::~NewsManager() */ void NewsManager::init() { - UserConfigParams::m_news_last_updated = Time::getTimeSinceEpoch(); + UserConfigParams::m_news_last_updated = StkTime::getTimeSinceEpoch(); std::string xml_file = file_manager->getAddonsFile("news.xml"); const XMLNode *xml = new XMLNode(xml_file); diff --git a/src/addons/news_manager.hpp b/src/addons/news_manager.hpp index ba1770e7b..f55baa138 100644 --- a/src/addons/news_manager.hpp +++ b/src/addons/news_manager.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Joerg Henrichs +// Copyright (C) 2011-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/addons/request.cpp b/src/addons/request.cpp index 3a8d7595a..645d44e14 100644 --- a/src/addons/request.cpp +++ b/src/addons/request.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Joerg Henrichs +// Copyright (C) 2011-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/addons/request.hpp b/src/addons/request.hpp index 4b6f540f9..9090d84ee 100644 --- a/src/addons/request.hpp +++ b/src/addons/request.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Joerg Henrichs +// Copyright (C) 2011-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/addons/zip.cpp b/src/addons/zip.cpp index 0d6001faa..6cadcb7f9 100644 --- a/src/addons/zip.cpp +++ b/src/addons/zip.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Lucas Baudin +// Copyright (C) 2010-2013 Lucas Baudin // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/addons/zip.hpp b/src/addons/zip.hpp index e49faab2c..e78f515cc 100644 --- a/src/addons/zip.hpp +++ b/src/addons/zip.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Lucas Baudin +// Copyright (C) 2010-2013 Lucas Baudin // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/animations/animation_base.cpp b/src/animations/animation_base.cpp index e6aec59df..cd51bf3c1 100644 --- a/src/animations/animation_base.cpp +++ b/src/animations/animation_base.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -21,14 +21,10 @@ #include "animations/ipo.hpp" #include "io/file_manager.hpp" #include "io/xml_node.hpp" +#include "utils/vs.hpp" #include - -#if defined(WIN32) && !defined(__CYGWIN__) && !defined(__MINGW32__) -# define isnan _isnan -#else -# include -#endif +#include AnimationBase::AnimationBase(const XMLNode &node) diff --git a/src/animations/animation_base.hpp b/src/animations/animation_base.hpp index 53aa55fab..ae84c6447 100644 --- a/src/animations/animation_base.hpp +++ b/src/animations/animation_base.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/animations/ipo.cpp b/src/animations/ipo.cpp index 22433d4a4..d5c4db071 100644 --- a/src/animations/ipo.cpp +++ b/src/animations/ipo.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -19,14 +19,11 @@ #include "animations/ipo.hpp" #include "io/xml_node.hpp" +#include "utils/vs.hpp" #include - -#if defined(WIN32) && !defined(__CYGWIN__) && !defined(__MINGW32__) -# define isnan _isnan -#else -# include -#endif +#include +#include const std::string Ipo::m_all_channel_names[IPO_MAX] = {"LocX", "LocY", "LocZ", "LocXYZ", diff --git a/src/animations/ipo.hpp b/src/animations/ipo.hpp index 308ae87a5..a0a93eff4 100644 --- a/src/animations/ipo.hpp +++ b/src/animations/ipo.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/animations/three_d_animation.cpp b/src/animations/three_d_animation.cpp index a920602bc..5a64db219 100644 --- a/src/animations/three_d_animation.cpp +++ b/src/animations/three_d_animation.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/animations/three_d_animation.hpp b/src/animations/three_d_animation.hpp index 1acd0cbd1..451ed2a82 100644 --- a/src/animations/three_d_animation.hpp +++ b/src/animations/three_d_animation.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/audio/dummy_sfx.hpp b/src/audio/dummy_sfx.hpp index 812828ada..9840c2233 100644 --- a/src/audio/dummy_sfx.hpp +++ b/src/audio/dummy_sfx.hpp @@ -1,7 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Patrick Ammann -// Copyright (C) 2008 Joerg Henrichs, Patrick Ammann +// Copyright (C) 2006-2013 Patrick Ammann +// Copyright (C) 2008-2013 Joerg Henrichs, Patrick Ammann // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/audio/music.hpp b/src/audio/music.hpp index 0ed725960..824f4d3de 100644 --- a/src/audio/music.hpp +++ b/src/audio/music.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Patrick Ammann +// Copyright (C) 2006-2013 Patrick Ammann // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/audio/music_dummy.hpp b/src/audio/music_dummy.hpp index 16efd4e96..977c4a5b7 100644 --- a/src/audio/music_dummy.hpp +++ b/src/audio/music_dummy.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Patrick Ammann +// Copyright (C) 2006-2013 Patrick Ammann // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/audio/music_information.cpp b/src/audio/music_information.cpp index dd489bffe..2d7cc8e86 100644 --- a/src/audio/music_information.cpp +++ b/src/audio/music_information.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2008 Joerg Henrichs +// Copyright (C) 2008-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/audio/music_information.hpp b/src/audio/music_information.hpp index 4af4a3f21..07d1aebfa 100644 --- a/src/audio/music_information.hpp +++ b/src/audio/music_information.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2008 Joerg Henrichs +// Copyright (C) 2008-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/audio/music_manager.cpp b/src/audio/music_manager.cpp index 590d74161..9999c2a46 100644 --- a/src/audio/music_manager.cpp +++ b/src/audio/music_manager.cpp @@ -1,7 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Patrick Ammann -// Copyright (C) 2008 Patrick Ammann , Joerg Henrichs +// Copyright (C) 2006-2013 Patrick Ammann +// Copyright (C) 2008-2013 Patrick Ammann , Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/audio/music_manager.hpp b/src/audio/music_manager.hpp index ef6887f96..cee900a25 100644 --- a/src/audio/music_manager.hpp +++ b/src/audio/music_manager.hpp @@ -1,7 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Patrick Ammann -// Copyright (C) 2008 Patrick Ammann , Joerg Henrichs +// Copyright (C) 2006-2013 Patrick Ammann +// Copyright (C) 2008-2013 Patrick Ammann , Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/audio/music_ogg.cpp b/src/audio/music_ogg.cpp index c009dc717..711769df9 100644 --- a/src/audio/music_ogg.cpp +++ b/src/audio/music_ogg.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2007 Damien Morel +// Copyright (C) 2007-2013 Damien Morel // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/audio/music_ogg.hpp b/src/audio/music_ogg.hpp index afd1f899e..2478ee454 100644 --- a/src/audio/music_ogg.hpp +++ b/src/audio/music_ogg.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2007 Damien Morel +// Copyright (C) 2007-2013 Damien Morel // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/audio/sfx_base.hpp b/src/audio/sfx_base.hpp index 7fd5a8ec4..39229fd3f 100644 --- a/src/audio/sfx_base.hpp +++ b/src/audio/sfx_base.hpp @@ -1,7 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Patrick Ammann -// Copyright (C) 2008 Joerg Henrichs, Patrick Ammann +// Copyright (C) 2006-2013 Patrick Ammann +// Copyright (C) 2008-2013 Joerg Henrichs, Patrick Ammann // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -55,6 +55,7 @@ public: virtual void resume() = 0; virtual void speed(float factor) = 0; virtual void volume(float gain) = 0; + virtual void masterVolume(float gain) = 0; virtual SFXManager::SFXStatus getStatus() = 0; virtual void onSoundEnabledBack() = 0; diff --git a/src/audio/sfx_buffer.cpp b/src/audio/sfx_buffer.cpp index 422c696be..8bcefbfec 100644 --- a/src/audio/sfx_buffer.cpp +++ b/src/audio/sfx_buffer.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Marianne Gagnon +// Copyright (C) 2010-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -18,6 +18,7 @@ #include "audio/sfx_buffer.hpp" #include "audio/sfx_manager.hpp" +#include "config/user_config.hpp" #include "io/file_manager.hpp" #include "utils/constants.hpp" @@ -76,6 +77,8 @@ SFXBuffer::SFXBuffer(const std::string& file, bool SFXBuffer::load() { + if (UserConfigParams::m_sfx == false) return false; + #if HAVE_OGGVORBIS if (m_loaded) return false; diff --git a/src/audio/sfx_buffer.hpp b/src/audio/sfx_buffer.hpp index 4efbf53aa..98ffbc8e4 100644 --- a/src/audio/sfx_buffer.hpp +++ b/src/audio/sfx_buffer.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Marianne Gagnon +// Copyright (C) 2010-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/audio/sfx_manager.cpp b/src/audio/sfx_manager.cpp index fe5d2b6e1..6b282209f 100644 --- a/src/audio/sfx_manager.cpp +++ b/src/audio/sfx_manager.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2008 Joerg Henrichs +// Copyright (C) 2008-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -154,14 +154,16 @@ void SFXManager::loadSfx() std::cerr << "Could not read sounf effects XML file " << sfx_config_name.c_str() << std::endl; } + int i; + const int amount = root->getNumNodes(); - for (int i=0; igetNode(i); if (node->getName() == "sfx") { - loadSingleSfx(node); + loadSingleSfx(node, "", false); } else { @@ -171,7 +173,27 @@ void SFXManager::loadSfx() }// nend for delete root; - } // loadSfx + + // Now load them in parallel + const int max = m_all_sfx_types.size(); + SFXBuffer **array = new SFXBuffer *[max]; + i = 0; + + for (std::map::iterator it = m_all_sfx_types.begin(); + it != m_all_sfx_types.end(); it++) + { + SFXBuffer* const buffer = (*it).second; + array[i++] = buffer; + } + + #pragma omp parallel for private(i) + for (i = 0; i < max; i++) + { + array[i]->load(); + } + + delete [] array; +} // loadSfx // ----------------------------------------------------------------------------- /** Introduces a mechanism by which one can load sound effects beyond the basic @@ -188,7 +210,8 @@ SFXBuffer* SFXManager::addSingleSfx(const std::string &sfx_name, bool positional, float rolloff, float max_width, - float gain) + float gain, + const bool load) { SFXBuffer* buffer = new SFXBuffer(sfx_file, positional, rolloff, max_width, gain); @@ -205,7 +228,7 @@ SFXBuffer* SFXManager::addSingleSfx(const std::string &sfx_name, if (UserConfigParams::logMisc()) Log::debug("SFXManager", "Loading SFX %s\n", sfx_file.c_str()); - if (buffer->load()) return buffer; + if (load && buffer->load()) return buffer; return NULL; } // addSingleSFX @@ -215,7 +238,8 @@ SFXBuffer* SFXManager::addSingleSfx(const std::string &sfx_name, * \param node The XML node with the data for this sfx. */ SFXBuffer* SFXManager::loadSingleSfx(const XMLNode* node, - const std::string &path) + const std::string &path, + const bool load) { std::string filename; @@ -254,7 +278,8 @@ SFXBuffer* SFXManager::loadSingleSfx(const XMLNode* node, tmpbuffer.isPositional(), tmpbuffer.getRolloff(), tmpbuffer.getMaxDist(), - tmpbuffer.getGain()); + tmpbuffer.getGain(), + load); } // loadSingleSfx @@ -288,7 +313,7 @@ SFXBase* SFXManager::createSoundSource(SFXBuffer* buffer, SFXBase* sfx = new DummySFX(buffer, positional, buffer->getGain(), owns_buffer); #endif - sfx->volume(m_master_gain); + sfx->masterVolume(m_master_gain); if (add_to_SFX_list) m_all_sfx.push_back(sfx); @@ -442,7 +467,7 @@ void SFXManager::setMasterSFXVolume(float gain) for (std::vector::iterator i=m_all_sfx.begin(); i!=m_all_sfx.end(); i++) { - (*i)->volume(m_master_gain); + (*i)->masterVolume(m_master_gain); } // for i in m_all_sfx } @@ -451,7 +476,7 @@ void SFXManager::setMasterSFXVolume(float gain) std::map::iterator i = m_quick_sounds.begin(); for (; i != m_quick_sounds.end(); i++) { - (*i).second->volume(m_master_gain); + (*i).second->masterVolume(m_master_gain); } } diff --git a/src/audio/sfx_manager.hpp b/src/audio/sfx_manager.hpp index 118aa78ad..2342a3a23 100644 --- a/src/audio/sfx_manager.hpp +++ b/src/audio/sfx_manager.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2008 Joerg Henrichs +// Copyright (C) 2008-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -106,13 +106,15 @@ public: virtual ~SFXManager(); bool sfxAllowed(); SFXBuffer* loadSingleSfx(const XMLNode* node, - const std::string &path=std::string("")); + const std::string &path=std::string(""), + const bool load = true); SFXBuffer* addSingleSfx(const std::string &sfx_name, const std::string &filename, bool positional, float rolloff, float max_width, - float gain); + float gain, + const bool load = true); SFXBase* createSoundSource(SFXBuffer* info, const bool addToSFXList=true, diff --git a/src/audio/sfx_openal.cpp b/src/audio/sfx_openal.cpp index 123b15b99..fb73fd969 100644 --- a/src/audio/sfx_openal.cpp +++ b/src/audio/sfx_openal.cpp @@ -1,7 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Patrick Ammann -// 2009-2011 Marianne Gagnon +// Copyright (C) 2006-2013 Patrick Ammann +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -20,11 +20,11 @@ #if HAVE_OGGVORBIS #include "audio/sfx_openal.hpp" + #include "audio/sfx_buffer.hpp" +#include "config/user_config.hpp" +#include "io/file_manager.hpp" #include "race/race_manager.hpp" -#include -#include -#include #ifdef __APPLE__ # include @@ -32,8 +32,16 @@ # include #endif -#include "config/user_config.hpp" -#include "io/file_manager.hpp" +#include +#include +#include + +#if defined(WIN32) && !defined(__CYGWIN__) && !defined(__MINGW32__) +# define isnan _isnan +#else +# include +#endif + SFXOpenAL::SFXOpenAL(SFXBuffer* buffer, bool positional, float gain, bool ownsBuffer) : SFXBase() { @@ -44,6 +52,7 @@ SFXOpenAL::SFXOpenAL(SFXBuffer* buffer, bool positional, float gain, bool ownsBu m_defaultGain = gain; m_loop = false; m_gain = -1.0f; + m_master_gain = 1.0f; m_owns_buffer = ownsBuffer; // Don't initialise anything else if the sfx manager was not correctly @@ -98,11 +107,11 @@ bool SFXOpenAL::init() if (m_gain < 0.0f) { - alSourcef (m_soundSource, AL_GAIN, m_defaultGain); + alSourcef (m_soundSource, AL_GAIN, m_defaultGain * m_master_gain); } else { - alSourcef (m_soundSource, AL_GAIN, m_gain); + alSourcef (m_soundSource, AL_GAIN, m_gain * m_master_gain); } if (m_positional) alSourcei (m_soundSource, AL_SOURCE_RELATIVE, AL_FALSE); @@ -121,7 +130,7 @@ bool SFXOpenAL::init() */ void SFXOpenAL::speed(float factor) { - if(!m_ok) return; + if(!m_ok || isnan(factor)) return; //OpenAL only accepts pitches in the range of 0.5 to 2.0 if(factor > 2.0f) @@ -146,10 +155,22 @@ void SFXOpenAL::volume(float gain) if(!m_ok) return; - alSourcef(m_soundSource, AL_GAIN, m_defaultGain * gain); + alSourcef(m_soundSource, AL_GAIN, m_gain * m_master_gain); SFXManager::checkError("setting volume"); } // volume +//----------------------------------------------------------------------------- + +void SFXOpenAL::masterVolume(float gain) +{ + m_master_gain = gain; + + if(!m_ok) return; + + alSourcef(m_soundSource, AL_GAIN, (m_gain < 0.0f ? m_defaultGain : m_gain) * m_master_gain); + SFXManager::checkError("setting volume"); +} + //----------------------------------------------------------------------------- /** Loops this sound effect. */ @@ -258,7 +279,7 @@ void SFXOpenAL::position(const Vec3 &position) } else { - alSourcef(m_soundSource, AL_GAIN, (m_gain < 0.0f ? m_defaultGain : m_gain)); + alSourcef(m_soundSource, AL_GAIN, (m_gain < 0.0f ? m_defaultGain : m_gain) * m_master_gain); } SFXManager::checkError("positioning"); @@ -295,7 +316,7 @@ void SFXOpenAL::onSoundEnabledBack() alSourcef(m_soundSource, AL_GAIN, 0); play(); pause(); - alSourcef(m_soundSource, AL_GAIN, (m_gain < 0.0f ? m_defaultGain : m_gain)); + alSourcef(m_soundSource, AL_GAIN, (m_gain < 0.0f ? m_defaultGain : m_gain) * m_master_gain); } } } diff --git a/src/audio/sfx_openal.hpp b/src/audio/sfx_openal.hpp index edc0c30cd..5ba26e8e0 100644 --- a/src/audio/sfx_openal.hpp +++ b/src/audio/sfx_openal.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Patrick Ammann +// Copyright (C) 2006-2013 Patrick Ammann // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -55,6 +55,9 @@ private: the sound source won't be created and we'll be left with no clue when enabling sounds later. */ float m_gain; + + /** The master gain set in user preferences */ + float m_master_gain; bool m_owns_buffer; @@ -74,6 +77,7 @@ public: virtual void speed(float factor); virtual void position(const Vec3 &position); virtual void volume(float gain); + virtual void masterVolume(float gain); virtual SFXManager::SFXStatus getStatus(); virtual void onSoundEnabledBack(); virtual void setRolloff(float rolloff); diff --git a/src/challenges/challenge.cpp b/src/challenges/challenge.cpp index 844e8f981..29d9e2af8 100644 --- a/src/challenges/challenge.cpp +++ b/src/challenges/challenge.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2008 Joerg Henrichs +// Copyright (C) 2008-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/challenges/challenge.hpp b/src/challenges/challenge.hpp index 739cc4e5b..7d18c8f49 100644 --- a/src/challenges/challenge.hpp +++ b/src/challenges/challenge.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2008 Joerg Henrichs +// Copyright (C) 2008-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/challenges/challenge_data.cpp b/src/challenges/challenge_data.cpp index a18c08ea5..b0fe57a68 100644 --- a/src/challenges/challenge_data.cpp +++ b/src/challenges/challenge_data.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2008 Joerg Henrichs +// Copyright (C) 2008-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/challenges/challenge_data.hpp b/src/challenges/challenge_data.hpp index 7912a06f1..ba3bff33e 100644 --- a/src/challenges/challenge_data.hpp +++ b/src/challenges/challenge_data.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2008 Joerg Henrichs +// Copyright (C) 2008-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/challenges/game_slot.cpp b/src/challenges/game_slot.cpp index e571db816..2ac0449ac 100644 --- a/src/challenges/game_slot.cpp +++ b/src/challenges/game_slot.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 SuperTuxKart-Team +// Copyright (C) 2010-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/challenges/game_slot.hpp b/src/challenges/game_slot.hpp index 1994b0bc9..11dedf407 100644 --- a/src/challenges/game_slot.hpp +++ b/src/challenges/game_slot.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 SuperTuxKart-Team +// Copyright (C) 2010-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/challenges/unlock_manager.cpp b/src/challenges/unlock_manager.cpp index eca7cf8cb..538d113c3 100644 --- a/src/challenges/unlock_manager.cpp +++ b/src/challenges/unlock_manager.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2008 Joerg Henrichs +// Copyright (C) 2008-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/challenges/unlock_manager.hpp b/src/challenges/unlock_manager.hpp index 0dc1452ac..093efcc29 100644 --- a/src/challenges/unlock_manager.hpp +++ b/src/challenges/unlock_manager.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2008 Joerg Henrichs +// Copyright (C) 2008-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/config/device_config.cpp b/src/config/device_config.cpp index dfaec0eeb..32db91569 100644 --- a/src/config/device_config.cpp +++ b/src/config/device_config.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 SuperTuxKart-Team +// Copyright (C) 2010-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/config/device_config.hpp b/src/config/device_config.hpp index 8c148a460..775d8506f 100644 --- a/src/config/device_config.hpp +++ b/src/config/device_config.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 SuperTuxKart-Team +// Copyright (C) 2010-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/config/player.cpp b/src/config/player.cpp index dacbcc19d..179c30775 100644 --- a/src/config/player.cpp +++ b/src/config/player.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 +// Copyright (C) 2012-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -79,7 +79,7 @@ void PlayerProfile::incrementUseFrequency() //------------------------------------------------------------------------------ int64_t PlayerProfile::generateUniqueId(const char* playerName) { - return ((int64_t)(Time::getTimeSinceEpoch()) << 32) | + return ((int64_t)(StkTime::getTimeSinceEpoch()) << 32) | ((rand() << 16) & 0xFFFF0000) | (StringUtils::simpleHash(playerName) & 0xFFFF); } diff --git a/src/config/player.hpp b/src/config/player.hpp index c0c68a779..809d5416e 100644 --- a/src/config/player.hpp +++ b/src/config/player.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 SuperTuxKart-Team +// Copyright (C) 2010-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/config/saved_grand_prix.cpp b/src/config/saved_grand_prix.cpp index 06ed1a188..bf8f2b01d 100644 --- a/src/config/saved_grand_prix.cpp +++ b/src/config/saved_grand_prix.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2013 +// Copyright (C) 2013-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -19,6 +19,7 @@ #include "config/saved_grand_prix.hpp" +#include "karts/kart_properties_manager.hpp" #include "utils/ptr_vector.hpp" #include "utils/string_utils.hpp" @@ -145,10 +146,12 @@ void SavedGrandPrix::loadKarts(std::vector & kart_list) int aikarts = 0; for(int i = 0; i < m_karts.size(); i++) { + const KartProperties *kp = kart_properties_manager->getKart(m_karts[i].m_ident); + if(m_karts[i].m_local_player_id == -1) { //AI kart found - kart_list[aikarts].m_ident = m_karts[i].m_ident; + if(kp) kart_list[aikarts].m_ident = m_karts[i].m_ident; kart_list[aikarts].m_score = m_karts[i].m_score; kart_list[aikarts].m_overall_time = m_karts[i].m_overall_time; aikarts++; diff --git a/src/config/saved_grand_prix.hpp b/src/config/saved_grand_prix.hpp index 89b061be5..a0789a59e 100644 --- a/src/config/saved_grand_prix.hpp +++ b/src/config/saved_grand_prix.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 SuperTuxKart-Team +// Copyright (C) 2010-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/config/stk_config.cpp b/src/config/stk_config.cpp index b3f840e74..d65cab865 100644 --- a/src/config/stk_config.cpp +++ b/src/config/stk_config.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -181,6 +181,13 @@ void STKConfig::init_defaults() m_disable_steer_while_unskid = false; m_camera_follow_skid = false; + m_nitro_glow_color[0] = 1.0f; + m_nitro_glow_color[1] = 1.0f; + m_nitro_glow_color[2] = 1.0f; + m_box_glow_color[0] = 1.0f; + m_box_glow_color[1] = 1.0f; + m_box_glow_color[2] = 1.0f; + m_score_increase.clear(); m_leader_intervals.clear(); m_switch_items.clear(); @@ -362,6 +369,25 @@ void STKConfig::getAllData(const XMLNode * root) replay_node->get("delta-pos", &m_replay_delta_pos2 ); replay_node->get("delta-t", &m_replay_dt ); } + + if(const XMLNode *colors = root->getNode("glow-colors")) + { + video::SColor tmpcol; + if (colors->get("nitro", &tmpcol)) + { + m_nitro_glow_color[0] = tmpcol.getRed() / 255.0f; + m_nitro_glow_color[1] = tmpcol.getGreen() / 255.0f; + m_nitro_glow_color[2] = tmpcol.getBlue() / 255.0f; + } + + if (colors->get("box", &tmpcol)) + { + m_box_glow_color[0] = tmpcol.getRed() / 255.0f; + m_box_glow_color[1] = tmpcol.getGreen() / 255.0f; + m_box_glow_color[2] = tmpcol.getBlue() / 255.0f; + } + } + // Get the default KartProperties // ------------------------------ const XMLNode *node = root -> getNode("general-kart-defaults"); diff --git a/src/config/stk_config.hpp b/src/config/stk_config.hpp index 67b93140d..1d394f571 100644 --- a/src/config/stk_config.hpp +++ b/src/config/stk_config.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -148,6 +148,11 @@ public: * be generated. */ float m_replay_delta_angle; + /** Colors for glows */ + float m_nitro_glow_color[3]; + + float m_box_glow_color[3]; + private: /** True if stk_config has been loaded. This is necessary if the * --stk-config command line parameter has been specified to avoid diff --git a/src/config/user_config.cpp b/src/config/user_config.cpp index d4f11a16a..ec2563d50 100644 --- a/src/config/user_config.cpp +++ b/src/config/user_config.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team +// Copyright (C) 2006-2013 SuperTuxKart-Team // Modelled after Supertux's configfile.cpp // // This program is free software; you can redistribute it and/or @@ -46,6 +46,9 @@ static PtrVector all_params; #include "utils/string_utils.hpp" #include "utils/translation.hpp" +const int UserConfig::m_current_config_version = 8; + + // ---------------------------------------------------------------------------- UserConfigParam::~UserConfigParam() { @@ -242,7 +245,7 @@ void IntUserConfigParam::findYourDataInAnAttributeOf(const XMLNode* node) } // findYourDataInAnAttributeOf // ============================================================================ -TimeUserConfigParam::TimeUserConfigParam(Time::TimeType default_value, +TimeUserConfigParam::TimeUserConfigParam(StkTime::TimeType default_value, const char* param_name, const char* comment) { @@ -254,7 +257,7 @@ TimeUserConfigParam::TimeUserConfigParam(Time::TimeType default_value, } // TimeUserConfigParam // ---------------------------------------------------------------------------- -TimeUserConfigParam::TimeUserConfigParam(Time::TimeType default_value, +TimeUserConfigParam::TimeUserConfigParam(StkTime::TimeType default_value, const char* param_name, GroupUserConfigParam* group, const char* comment) @@ -649,13 +652,14 @@ bool UserConfig::loadConfig() } // ---- Read config file version - int configFileVersion = CURRENT_CONFIG_VERSION; - if(root->get("version", &configFileVersion) < 1) + int config_file_version = m_current_config_version; + if(root->get("version", &config_file_version) < 1) { GUIEngine::showMessage( _("Your config file was malformed, so it was deleted and a new one will be created."), 10.0f); - std::cerr << "Warning, malformed user config file! Contains no version\n"; + Log::error("UserConfig", + "Warning, malformed user config file! Contains no version"); } - if (configFileVersion < CURRENT_CONFIG_VERSION) + if (config_file_version < m_current_config_version) { // current version (8) is 100% incompatible with other versions (which were lisp) // so we just delete the old config. in the future, for smaller updates, we can @@ -713,6 +717,16 @@ bool UserConfig::loadConfig() return true; } // loadConfig +// ---------------------------------------------------------------------------- + +void UserConfig::postLoadInit() +{ + for (int i = 0; i < UserConfigParams::m_all_players.size(); i++) + { + PlayerProfile* player = UserConfigParams::m_all_players.get(i); + if (player->isGuestAccount()) player->setName(_LTR("Guest")); + } +} // ---------------------------------------------------------------------------- /** Write settings to config file. */ @@ -732,7 +746,8 @@ void UserConfig::saveConfig() XMLWriter configfile(filename.c_str()); configfile << L"\n"; - configfile << L"\n\n"; + configfile << L"\n\n"; const int paramAmount = all_params.size(); for(int i=0; i #include #include @@ -132,14 +130,14 @@ public: // ============================================================================ class TimeUserConfigParam : public UserConfigParam { - Time::TimeType m_value; - Time::TimeType m_default_value; + StkTime::TimeType m_value; + StkTime::TimeType m_default_value; public: - TimeUserConfigParam(Time::TimeType default_value, const char* param_name, + TimeUserConfigParam(StkTime::TimeType default_value, const char* param_name, const char* comment = NULL); - TimeUserConfigParam(Time::TimeType default_value, const char* param_name, + TimeUserConfigParam(StkTime::TimeType default_value, const char* param_name, GroupUserConfigParam* group, const char* comment=NULL); void write(XMLWriter& stream) const; @@ -148,10 +146,10 @@ public: irr::core::stringw toString() const; void revertToDefaults() { m_value = m_default_value; } - operator Time::TimeType() const { return m_value; } - Time::TimeType& operator=(const Time::TimeType& v) + operator StkTime::TimeType() const { return m_value; } + StkTime::TimeType& operator=(const StkTime::TimeType& v) { m_value = v; return m_value; } - Time::TimeType& operator=(const TimeUserConfigParam& v) + StkTime::TimeType& operator=(const TimeUserConfigParam& v) { m_value = (int)v; return m_value; } }; // TimeUserConfigParam @@ -328,6 +326,9 @@ namespace UserConfigParams PARAM_PREFIX IntUserConfigParam m_num_laps PARAM_DEFAULT( IntUserConfigParam(4, "numlaps", &m_race_setup_group, "Default number of laps.") ); + PARAM_PREFIX IntUserConfigParam m_num_goals + PARAM_DEFAULT( IntUserConfigParam(3, "numgoals", + &m_race_setup_group, "Default number of goals in soccer mode.") ); PARAM_PREFIX IntUserConfigParam m_difficulty PARAM_DEFAULT( IntUserConfigParam(0, "difficulty", &m_race_setup_group, @@ -348,32 +349,32 @@ namespace UserConfigParams PARAM_PREFIX GroupUserConfigParam m_wiimote_group PARAM_DEFAULT( GroupUserConfigParam("WiiMote", "Settings for the wiimote") ); - PARAM_PREFIX FloatUserConfigParam m_wiimote_max - PARAM_DEFAULT( FloatUserConfigParam(90.0f, "wiimote-max", + PARAM_PREFIX FloatUserConfigParam m_wiimote_raw_max + PARAM_DEFAULT( FloatUserConfigParam(20.0f, "wiimote-raw-max", &m_wiimote_group, - "At what angle (0-128) maximum steering is reached.") ); + "At what raw input value maximum steering is reached (between 1 and 25).") ); - PARAM_PREFIX FloatUserConfigParam m_wiimote_weight_linear - PARAM_DEFAULT( FloatUserConfigParam(0.2f, "wiimote-weight-linear", + PARAM_PREFIX FloatUserConfigParam m_wiimote_weight_linear + PARAM_DEFAULT( FloatUserConfigParam(1.0f, "wiimote-weight-linear", &m_wiimote_group, - "A weight applied to the linear component of mapping wiimote angle to steering angle")); + "A weight applied to the linear component of mapping wiimote angle to steering angle")); PARAM_PREFIX FloatUserConfigParam m_wiimote_weight_square - PARAM_DEFAULT( FloatUserConfigParam(0.8f, "wiimote-weight-square", + PARAM_DEFAULT( FloatUserConfigParam(0.0f, "wiimote-weight-square", &m_wiimote_group, - "A weight applied to the square component of mapping wiimote angle to steering angle")); + "A weight applied to the square component of mapping wiimote angle to steering angle")); PARAM_PREFIX FloatUserConfigParam m_wiimote_weight_asin PARAM_DEFAULT( FloatUserConfigParam(0.0f, "wiimote-weight-asin", &m_wiimote_group, - "A weight applied to the asin component of mapping wiimote angle to steering angle")); + "A weight applied to the asin component of mapping wiimote angle to steering angle")); PARAM_PREFIX FloatUserConfigParam m_wiimote_weight_sin PARAM_DEFAULT( FloatUserConfigParam(0.0f, "wiimote-weight-sin", &m_wiimote_group, - "A weight applied to the sin component of mapping wiimote angle to steering angle")); + "A weight applied to the sin component of mapping wiimote angle to steering angle")); - // ---- GP start order + // ---- GP start order PARAM_PREFIX GroupUserConfigParam m_gp_start_order PARAM_DEFAULT( GroupUserConfigParam("GpStartOrder", "Order karts start in GP") ); @@ -448,8 +449,9 @@ namespace UserConfigParams /** True if check structures should be debugged. */ PARAM_PREFIX bool m_check_debug PARAM_DEFAULT( false ); - /** Special debug camera being high over the kart. */ - PARAM_PREFIX bool m_camera_debug PARAM_DEFAULT( false ); + /** Special debug camera: 0: normal cameral; 1: being high over the kart.; + 2: on ground level. */ + PARAM_PREFIX int m_camera_debug PARAM_DEFAULT( false ); /** True if physics debugging should be enabled. */ PARAM_PREFIX bool m_physics_debug PARAM_DEFAULT( false ); @@ -481,9 +483,6 @@ namespace UserConfigParams /** True if hardware skinning should be enabled */ PARAM_PREFIX bool m_hw_skinning_enabled PARAM_DEFAULT( false ); - /** True if Christmas Mode should be enabled */ - PARAM_PREFIX bool m_xmas_enabled PARAM_DEFAULT( false ); - // not saved to file // ---- Networking @@ -513,14 +512,15 @@ namespace UserConfigParams #define FBO_DEFAULT true #endif - PARAM_PREFIX BoolUserConfigParam m_fbo - PARAM_DEFAULT( BoolUserConfigParam(FBO_DEFAULT, "fbo", - &m_graphics_quality, "Use frame buffer objects (FBOs)") ); - PARAM_PREFIX BoolUserConfigParam m_graphical_effects PARAM_DEFAULT( BoolUserConfigParam(true, "anim_gfx", &m_graphics_quality, "Scenery animations") ); + // This saves the actual user preference. + PARAM_PREFIX IntUserConfigParam m_xmas_mode + PARAM_DEFAULT( IntUserConfigParam(0, "christmas-mode", + &m_graphics_quality, "Christmas hats: 0 use calendar, 1 always on, 2 always off") ); + PARAM_PREFIX BoolUserConfigParam m_weather_effects PARAM_DEFAULT( BoolUserConfigParam(true, "weather_gfx", &m_graphics_quality, "Weather effects") ); @@ -538,10 +538,12 @@ namespace UserConfigParams &m_graphics_quality, "Whether trilinear filtering is allowed to be " "used (true or false)") ); + /* PARAM_PREFIX IntUserConfigParam m_antialiasing PARAM_DEFAULT( IntUserConfigParam(0, "antialiasing", &m_graphics_quality, "Whether antialiasing is enabled (0 = disabled, 1 = 2x, 2 = 4x, 3 = 8x") ); + */ PARAM_PREFIX BoolUserConfigParam m_vsync PARAM_DEFAULT( BoolUserConfigParam(false, "vsync", &m_graphics_quality, @@ -550,18 +552,27 @@ namespace UserConfigParams PARAM_DEFAULT( BoolUserConfigParam(true, "pixel_shaders", &m_graphics_quality, "Whether to enable pixel shaders (splatting, normal maps, ...)") ); - PARAM_PREFIX BoolUserConfigParam m_postprocess_enabled + PARAM_PREFIX BoolUserConfigParam m_motionblur PARAM_DEFAULT( BoolUserConfigParam(false, - "postprocess_enabled", &m_graphics_quality, - "Whether post-processing (motion blur...) should " - "be enabled") ); + "motionblur_enabled", &m_graphics_quality, + "Whether motion blur should be enabled") ); + PARAM_PREFIX BoolUserConfigParam m_mlaa + PARAM_DEFAULT( BoolUserConfigParam(false, + "mlaa", &m_graphics_quality, + "Whether MLAA anti-aliasing should be enabled") ); + PARAM_PREFIX IntUserConfigParam m_ssao + PARAM_DEFAULT( IntUserConfigParam(0, + "ssao", &m_graphics_quality, + "Whether SSAO is enabled (0 = disabled, 1 = low, 2 = high") ); + PARAM_PREFIX IntUserConfigParam m_shadows + PARAM_DEFAULT( IntUserConfigParam(0, + "shadows", &m_graphics_quality, + "Whether shadows are enabled (0 = disabled, 1 = low, 2 = high") ); // ---- Misc PARAM_PREFIX BoolUserConfigParam m_cache_overworld PARAM_DEFAULT( BoolUserConfigParam(true, "cache-overworld") ); - PARAM_PREFIX BoolUserConfigParam m_minimal_race_gui - PARAM_DEFAULT( BoolUserConfigParam(false, "minimal-race-gui") ); // TODO : is this used with new code? does it still work? PARAM_PREFIX BoolUserConfigParam m_crashed PARAM_DEFAULT( BoolUserConfigParam(false, "crashed") ); @@ -735,6 +746,8 @@ private: std::string m_filename; irr::core::stringw m_warning; + static const int m_current_config_version; + public: /** Create the user config object; does not actually load it, * UserConfig::loadConfig needs to be called. */ @@ -747,7 +760,7 @@ public: const irr::core::stringw& getWarning() { return m_warning; } void resetWarning() { m_warning=""; } void setWarning(irr::core::stringw& warning) { m_warning=warning; } - + void postLoadInit(); void addDefaultPlayer(); }; // UserConfig diff --git a/src/graphics/callbacks.cpp b/src/graphics/callbacks.cpp new file mode 100644 index 000000000..778f8ccf0 --- /dev/null +++ b/src/graphics/callbacks.cpp @@ -0,0 +1,775 @@ +// SuperTuxKart - a fun racing game with go-kart +// +// 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 "graphics/callbacks.hpp" +#include "graphics/irr_driver.hpp" +#include "graphics/wind.hpp" +#include "guiengine/engine.hpp" +#include "modes/world.hpp" +#include "tracks/track.hpp" +#include "utils/helpers.hpp" + +using namespace video; +using namespace core; + +//------------------------------------- + +void NormalMapProvider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + if (!firstdone) + { + s32 decaltex = 0; + srv->setPixelShaderConstant("DecalTex", &decaltex, 1); + + s32 bumptex = 1; + srv->setPixelShaderConstant("BumpTex", &bumptex, 1); + + s32 lightmapTex = (m_with_lightmap ? 2 : 0); + srv->setPixelShaderConstant("LightMapTex", &lightmapTex, 1); + + s32 hasLightMap = (m_with_lightmap ? 1 : 0); + srv->setPixelShaderConstant("HasLightMap", &hasLightMap, 1); + + // We could calculate light direction as coming from the sun (then we'd need to + // transform it into camera space). But I find that pretending light + // comes from the camera gives good results + const float lightdir[] = {0.1852f, -0.1852f, -0.9259f}; + srv->setVertexShaderConstant("lightdir", lightdir, 3); + + + firstdone = true; + } +} + +//------------------------------------- + +void WaterShaderProvider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + const float time = irr_driver->getDevice()->getTimer()->getTime() / 1000.0f; + + float strength = time; + strength = 1.4f - fabsf(noise2d(strength / 30.0f + 133)) * 0.8f; + + m_dx_1 += GUIEngine::getLatestDt() * m_water_shader_speed_1 * strength; + m_dy_1 += GUIEngine::getLatestDt() * m_water_shader_speed_1 * strength; + + m_dx_2 += GUIEngine::getLatestDt() * m_water_shader_speed_2 * strength; + m_dy_2 -= GUIEngine::getLatestDt() * m_water_shader_speed_2 * strength; + + if (m_dx_1 > 1.0f) m_dx_1 -= 1.0f; + if (m_dy_1 > 1.0f) m_dy_1 -= 1.0f; + if (m_dx_2 > 1.0f) m_dx_2 -= 1.0f; + if (m_dy_2 < 0.0f) m_dy_2 += 1.0f; + + const float d1[2] = { m_dx_1, m_dy_1 }; + const float d2[2] = { m_dx_2, m_dy_2 }; + + srv->setVertexShaderConstant("delta1", d1, 2); + srv->setVertexShaderConstant("delta2", d2, 2); + + const float speed = irr_driver->getDevice()->getTimer()->getTime() / m_speed; + const float height = m_height * strength; + + srv->setVertexShaderConstant("height", &height, 1); + srv->setVertexShaderConstant("speed", &speed, 1); + srv->setVertexShaderConstant("waveLength", &m_length, 1); + + // Can't use the firstdone optimization, as the callback is shared + //if (!firstdone) + { + s32 decaltex = 0; + srv->setPixelShaderConstant("DecalTex", &decaltex, 1); + + s32 bumptex = 1; + srv->setPixelShaderConstant("BumpTex1", &bumptex, 1); + + bumptex = 2; + srv->setPixelShaderConstant("BumpTex2", &bumptex, 1); + + // Calculate light direction as coming from the sun. + matrix4 normalm = srv->getVideoDriver()->getTransform(ETS_VIEW); + normalm.makeInverse(); + normalm = normalm.getTransposed(); + vector3df tmp = m_sunpos; + normalm.transformVect(tmp); + tmp.normalize(); + + const float lightdir[] = {tmp.X, tmp.Y, tmp.Z}; + srv->setVertexShaderConstant("lightdir", lightdir, 3); + + firstdone = true; + } +} + +//------------------------------------- + +void GrassShaderProvider::OnSetConstants(IMaterialRendererServices *srv, int userData) +{ + IVideoDriver * const drv = srv->getVideoDriver(); + const core::vector3df pos = drv->getTransform(ETS_WORLD).getTranslation(); + const float time = irr_driver->getDevice()->getTimer()->getTime() / 1000.0f; + + float strength = (pos.X + pos.Y + pos.Z) * 1.2f + time * m_speed; + strength = noise2d(strength / 10.0f) * m_amplitude * 5; + // * 5 is to work with the existing amplitude values. + + // Pre-multiply on the cpu + vector3df wind = irr_driver->getWind() * strength; + + srv->setVertexShaderConstant("windDir", &wind.X, 3); + + if (!firstdone) + { + s32 tex = 0; + srv->setVertexShaderConstant("tex", &tex, 1); + + firstdone = true; + } +} + +//------------------------------------- + +void SplattingProvider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + const float camfar = irr_driver->getSceneManager()->getActiveCamera()->getFarValue(); + srv->setVertexShaderConstant("far", &camfar, 1); + + // The normal is transformed by the inverse transposed world matrix + // because we want world-space normals + matrix4 invtworldm = irr_driver->getVideoDriver()->getTransform(ETS_WORLD); + invtworldm.makeInverse(); + invtworldm = invtworldm.getTransposed(); + + srv->setVertexShaderConstant("invtworldm", invtworldm.pointer(), 16); + + float objectid = 0; + const stringc name = mat.TextureLayer[0].Texture->getName().getPath(); + objectid = shash8((const u8 *) name.c_str(), name.size()) / 255.0f; + srv->setVertexShaderConstant("objectid", &objectid, 1); + + if (!firstdone) + { + s32 tex_layout = 1; + srv->setPixelShaderConstant("tex_layout", &tex_layout, 1); + + s32 tex_detail0 = 2; + srv->setPixelShaderConstant("tex_detail0", &tex_detail0, 1); + + s32 tex_detail1 = 3; + srv->setPixelShaderConstant("tex_detail1", &tex_detail1, 1); + + s32 tex_detail2 = 4; + srv->setPixelShaderConstant("tex_detail2", &tex_detail2, 1); + + s32 tex_detail3 = 5; + srv->setPixelShaderConstant("tex_detail3", &tex_detail3, 1); + + firstdone = true; + } +} + +//------------------------------------- + +void BubbleEffectProvider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + const float start = fabsf(mat.MaterialTypeParam2); + const bool visible = mat.MaterialTypeParam2 > 0; + const float time = irr_driver->getDevice()->getTimer()->getTime() / 1000.0f; + float transparency; + + const float diff = (time - start) / 3.0f; + + if (visible) + { + transparency = diff; + } + else + { + transparency = 1.0 - diff; + } + + transparency = clampf(transparency, 0, 1); + + srv->setVertexShaderConstant("time", &time, 1); + srv->setVertexShaderConstant("transparency", &transparency, 1); +} + +//------------------------------------- + +void RainEffectProvider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + const float screenw = UserConfigParams::m_width; + const float time = irr_driver->getDevice()->getTimer()->getTime() / 90.0f; + const matrix4 viewm = srv->getVideoDriver()->getTransform(ETS_VIEW); + const vector3df campos = irr_driver->getSceneManager()->getActiveCamera()->getPosition(); + + srv->setVertexShaderConstant("screenw", &screenw, 1); + srv->setVertexShaderConstant("time", &time, 1); + srv->setVertexShaderConstant("viewm", viewm.pointer(), 16); + srv->setVertexShaderConstant("campos", &campos.X, 3); +} + +//------------------------------------- + +void SnowEffectProvider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + const float time = irr_driver->getDevice()->getTimer()->getTime() / 1000.0f; + + srv->setVertexShaderConstant("time", &time, 1); +} + +//------------------------------------- + +void MotionBlurProvider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + // We need the maximum texture coordinates: + float max_tex_height = m_maxheight[m_current_camera]; + srv->setPixelShaderConstant("max_tex_height", &max_tex_height, 1); + + // Scale the boost time to get a usable boost amount: + float boost_amount = m_boost_time[m_current_camera] * 0.7f; + + // Especially for single screen the top of the screen is less blurred + // in the fragment shader by multiplying the blurr factor by + // (max_tex_height - texcoords.t), where max_tex_height is the maximum + // texture coordinate (1.0 or 0.5). In split screen this factor is too + // small (half the value compared with non-split screen), so we + // multiply this by 2. + if(Camera::getNumCameras() > 1) + boost_amount *= 2.0f; + + srv->setPixelShaderConstant("boost_amount", &boost_amount, 1); + srv->setPixelShaderConstant("center", + &(m_center[m_current_camera].X), 2); + srv->setPixelShaderConstant("direction", + &(m_direction[m_current_camera].X), 2); + + // Use a radius of 0.15 when showing a single kart, otherwise (2-4 karts + // on splitscreen) use only 0.75. + float radius = Camera::getNumCameras()==1 ? 0.15f : 0.075f; + srv->setPixelShaderConstant("mask_radius", &radius, 1); + + const int texunit = 0; + srv->setPixelShaderConstant("color_buffer", &texunit, 1); +} + +//------------------------------------- + +void GaussianBlurProvider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + srv->setVertexShaderConstant("pixel", m_pixel, 2); +} + +//------------------------------------- + +void MipVizProvider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + const ITexture * const tex = mat.TextureLayer[0].Texture; + + const int notex = (mat.TextureLayer[0].Texture == NULL); + srv->setVertexShaderConstant("notex", ¬ex, 1); + if (!tex) return; + + const dimension2du size = tex->getSize(); + + const float texsize[2] = { + size.Width, + size.Height + }; + + srv->setVertexShaderConstant("texsize", texsize, 2); +} + +//------------------------------------- + +void ColorizeProvider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + srv->setVertexShaderConstant("col", m_color, 3); +} + +//------------------------------------- + +void GlowProvider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + srv->setVertexShaderConstant("res", m_res, 2); +} + +//------------------------------------- + +void ObjectPassProvider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + const float camfar = irr_driver->getSceneManager()->getActiveCamera()->getFarValue(); + srv->setVertexShaderConstant("far", &camfar, 1); + + // The normal is transformed by the inverse transposed world matrix + // because we want world-space normals + matrix4 invtworldm = irr_driver->getVideoDriver()->getTransform(ETS_WORLD); + invtworldm.makeInverse(); + invtworldm = invtworldm.getTransposed(); + + srv->setVertexShaderConstant("invtworldm", invtworldm.pointer(), 16); + + const int hastex = mat.TextureLayer[0].Texture != NULL; + srv->setVertexShaderConstant("hastex", &hastex, 1); + + const int haslightmap = mat.TextureLayer[1].Texture != NULL; + srv->setVertexShaderConstant("haslightmap", &haslightmap, 1); + + float objectid = 0; + if (hastex) + { + const stringc name = mat.TextureLayer[0].Texture->getName().getPath(); + objectid = shash8((const u8 *) name.c_str(), name.size()) / 255.0f; + } + srv->setVertexShaderConstant("objectid", &objectid, 1); + + //if (!firstdone) + // Can't use the firstdone optimization, as this callback is used for multiple shaders + { + int tex = 0; + srv->setVertexShaderConstant("tex", &tex, 1); + + tex = 1; + srv->setVertexShaderConstant("lighttex", &tex, 1); + } +} + +//------------------------------------- + +void LightBlendProvider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + const SColorf s = irr_driver->getSceneManager()->getAmbientLight(); + + float ambient[3] = { s.r, s.g, s.b }; + srv->setVertexShaderConstant("ambient", ambient, 3); + + int spectex = 1; + srv->setVertexShaderConstant("spectex", &spectex, 1); +} + +//------------------------------------- + +void PointLightProvider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + srv->setVertexShaderConstant("screen", m_screen, 2); + srv->setVertexShaderConstant("spec", &m_specular, 1); + srv->setVertexShaderConstant("col", m_color, 3); + srv->setVertexShaderConstant("campos", m_campos, 3); + srv->setVertexShaderConstant("center", m_pos, 3); + srv->setVertexShaderConstant("r", &m_radius, 1); + srv->setVertexShaderConstant("invprojview", m_invprojview.pointer(), 16); + + if (!firstdone) + { + int tex = 0; + srv->setVertexShaderConstant("ntex", &tex, 1); + + tex = 1; + srv->setVertexShaderConstant("dtex", &tex, 1); + + firstdone = true; + } +} + +//------------------------------------- + +void SunLightProvider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + const int hasclouds = World::getWorld()->getTrack()->hasClouds() && + UserConfigParams::m_weather_effects; + + srv->setVertexShaderConstant("screen", m_screen, 2); + srv->setVertexShaderConstant("col", m_color, 3); + srv->setVertexShaderConstant("center", m_pos, 3); + srv->setVertexShaderConstant("invprojview", m_invprojview.pointer(), 16); + srv->setVertexShaderConstant("hasclouds", &hasclouds, 1); + + const float time = irr_driver->getDevice()->getTimer()->getTime() / 1000.0f; + + float strength = time; + strength = fabsf(noise2d(strength / 10.0f)) * 0.003f; + + const vector3df winddir = irr_driver->getWind() * strength; + m_wind[0] += winddir.X; + m_wind[1] += winddir.Z; + srv->setVertexShaderConstant("wind", m_wind, 2); + + if (UserConfigParams::m_shadows) + { + srv->setVertexShaderConstant("shadowmat", m_shadowmat.pointer(), 16); + } + + // Can't use the firstdone optimization, as this callback is used for multiple shaders + //if (!firstdone) + { + int tex = 0; + srv->setVertexShaderConstant("ntex", &tex, 1); + + tex = 1; + srv->setVertexShaderConstant("dtex", &tex, 1); + + tex = 2; + srv->setVertexShaderConstant("cloudtex", &tex, 1); + + tex = 3; + srv->setVertexShaderConstant("shadowtex", &tex, 1); + + tex = 4; + srv->setVertexShaderConstant("warpx", &tex, 1); + + tex = 5; + srv->setVertexShaderConstant("warpy", &tex, 1); + + const float shadowoffset = 1.0f / irr_driver->getRTT(RTT_SHADOW)->getSize().Width; + srv->setVertexShaderConstant("shadowoffset", &shadowoffset, 1); + + firstdone = true; + } +} + +//------------------------------------- + +void BloomProvider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + srv->setVertexShaderConstant("low", &m_threshold, 1); +} + +//------------------------------------- + +void MLAAColor1Provider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + if (!firstdone) + { + const float pixels[2] = { + 1.0f / UserConfigParams::m_width, + 1.0f / UserConfigParams::m_height + }; + + srv->setPixelShaderConstant("PIXEL_SIZE", pixels, 2); + + firstdone = true; + } +} + +//------------------------------------- + +void MLAABlend2Provider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + if (!firstdone) + { + const float pixels[2] = { + 1.0f / UserConfigParams::m_width, + 1.0f / UserConfigParams::m_height + }; + + srv->setPixelShaderConstant("PIXEL_SIZE", pixels, 2); + + + int tex = 0; + srv->setPixelShaderConstant("edgesMap", &tex, 1); + + tex = 1; + srv->setPixelShaderConstant("areaMap", &tex, 1); + + + firstdone = true; + } +} + +//------------------------------------- + +void MLAANeigh3Provider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + if (!firstdone) + { + const float pixels[2] = { + 1.0f / UserConfigParams::m_width, + 1.0f / UserConfigParams::m_height + }; + + srv->setPixelShaderConstant("PIXEL_SIZE", pixels, 2); + + + int tex = 0; + srv->setPixelShaderConstant("blendMap", &tex, 1); + + tex = 1; + srv->setPixelShaderConstant("colorMap", &tex, 1); + + firstdone = true; + } +} + +//------------------------------------- + +void SSAOProvider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + if (!firstdone) + { + int tex = 0; + srv->setPixelShaderConstant("tex", &tex, 1); + + tex = 1; + srv->setPixelShaderConstant("oldtex", &tex, 1); + + firstdone = true; + } +} + +//------------------------------------- + +void GodRayProvider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + srv->setPixelShaderConstant("sunpos", m_sunpos, 2); +} + +//------------------------------------- + +void ShadowPassProvider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + const int hastex = mat.TextureLayer[0].Texture != NULL; + srv->setVertexShaderConstant("hastex", &hastex, 1); + + int viz = irr_driver->getShadowViz(); + srv->setVertexShaderConstant("viz", &viz, 1); + + int wireframe = mat.Wireframe; + srv->setVertexShaderConstant("wireframe", &wireframe, 1); + + float objectid = 0; + if (hastex) + { + const stringc name = mat.TextureLayer[0].Texture->getName().getPath(); + objectid = shash8((const u8 *) name.c_str(), name.size()) / 255.0f; + } + srv->setVertexShaderConstant("objectid", &objectid, 1); + + //if (!firstdone) + // Can't use the firstdone optimization, as this callback is used for multiple shaders + { + int tex = 0; + srv->setVertexShaderConstant("tex", &tex, 1); + + tex = 1; + srv->setVertexShaderConstant("warpx", &tex, 1); + tex = 2; + srv->setVertexShaderConstant("warpy", &tex, 1); + + firstdone = true; + } +} + +//------------------------------------- + +void ShadowImportanceProvider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + srv->setVertexShaderConstant("shadowmat", m_shadowmat.pointer(), 16); + srv->setVertexShaderConstant("ipvmat", m_invprojview.pointer(), 16); + + srv->setVertexShaderConstant("campos", m_campos, 3); + + int low = UserConfigParams::m_shadows == 1; + srv->setVertexShaderConstant("low", &low, 1); + + if (!firstdone) + { + int tex = 0; + srv->setVertexShaderConstant("ntex", &tex, 1); + + tex = 1; + srv->setVertexShaderConstant("dtex", &tex, 1); + + tex = 2; + srv->setVertexShaderConstant("ctex", &tex, 1); + + firstdone = true; + } +} + +//------------------------------------- + +void CollapseProvider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + srv->setVertexShaderConstant("pixel", m_pixel, 2); + srv->setVertexShaderConstant("multi", m_multi, 2); + srv->setVertexShaderConstant("size", &m_size, 1); + + //if (!firstdone) + // Can't use the firstdone optimization, as this callback is used for multiple shaders + { + int tex = 0; + srv->setVertexShaderConstant("tex", &tex, 1); + + tex = 1; + srv->setVertexShaderConstant("oldtex", &tex, 1); + + firstdone = true; + } +} + +//------------------------------------- + +void BloomPowerProvider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + srv->setVertexShaderConstant("power", &m_power, 1); +} + +//------------------------------------- + +void MultiplyProvider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + if (!firstdone) + { + int tex = 0; + srv->setVertexShaderConstant("tex1", &tex, 1); + + tex = 1; + srv->setVertexShaderConstant("tex2", &tex, 1); + + firstdone = true; + } +} + +//------------------------------------- + +void ShadowGenProvider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + if (!firstdone) + { + int tex = 0; + srv->setVertexShaderConstant("halft", &tex, 1); + + tex = 1; + srv->setVertexShaderConstant("quarter", &tex, 1); + + tex = 2; + srv->setVertexShaderConstant("eighth", &tex, 1); + + firstdone = true; + } +} + +//------------------------------------- + +void CausticsProvider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + const float time = irr_driver->getDevice()->getTimer()->getTime() / 1000.0f; + const float speed = World::getWorld()->getTrack()->getCausticsSpeed(); + + float strength = time; + strength = fabsf(noise2d(strength / 10.0f)) * 0.006f + 0.001f; + + vector3df wind = irr_driver->getWind() * strength * speed; + m_dir[0] += wind.X; + m_dir[1] += wind.Z; + + strength = time * 0.56f + sinf(time); + strength = fabsf(noise2d(0.0, strength / 6.0f)) * 0.0095f + 0.001f; + + wind = irr_driver->getWind() * strength * speed; + wind.rotateXZBy(cosf(time)); + m_dir2[0] += wind.X; + m_dir2[1] += wind.Z; + + srv->setVertexShaderConstant("dir", m_dir, 2); + srv->setVertexShaderConstant("dir2", m_dir2, 2); + + if (!firstdone) + { + int tex = 0; + srv->setVertexShaderConstant("tex", &tex, 1); + + tex = 1; + srv->setVertexShaderConstant("caustictex", &tex, 1); + + firstdone = true; + } +} + +//------------------------------------- + +void DisplaceProvider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + const float time = irr_driver->getDevice()->getTimer()->getTime() / 1000.0f; + const float speed = World::getWorld()->getTrack()->getDisplacementSpeed(); + + float strength = time; + strength = fabsf(noise2d(strength / 10.0f)) * 0.006f + 0.002f; + + vector3df wind = irr_driver->getWind() * strength * speed; + m_dir[0] += wind.X; + m_dir[1] += wind.Z; + + strength = time * 0.56f + sinf(time); + strength = fabsf(noise2d(0.0, strength / 6.0f)) * 0.0095f + 0.0025f; + + wind = irr_driver->getWind() * strength * speed; + wind.rotateXZBy(cosf(time)); + m_dir2[0] += wind.X; + m_dir2[1] += wind.Z; + + srv->setVertexShaderConstant("dir", m_dir, 2); + srv->setVertexShaderConstant("dir2", m_dir2, 2); + + srv->setVertexShaderConstant("screen", m_screen, 2); +} + +//------------------------------------- + +void PPDisplaceProvider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + int viz = irr_driver->getDistortViz(); + srv->setPixelShaderConstant("viz", &viz, 1); + + if (!firstdone) + { + int tex = 0; + srv->setPixelShaderConstant("tex", &tex, 1); + + tex = 1; + srv->setPixelShaderConstant("dtex", &tex, 1); + + firstdone = true; + } +} + +//------------------------------------- + +void FogProvider::OnSetConstants(IMaterialRendererServices *srv, int) +{ + const Track * const track = World::getWorld()->getTrack(); + + // This function is only called once per frame - thus no need for setters. + const float fogmax = track->getFogMax(); + const float startH = track->getFogStartHeight(); + const float endH = track->getFogEndHeight(); + const float start = track->getFogStart(); + const float end = track->getFogEnd(); + const SColor tmpcol = track->getFogColor(); + + const float col[3] = { tmpcol.getRed() / 255.0f, + tmpcol.getGreen() / 255.0f, + tmpcol.getBlue() / 255.0f }; + + srv->setPixelShaderConstant("fogmax", &fogmax, 1); + srv->setPixelShaderConstant("startH", &startH, 1); + srv->setPixelShaderConstant("endH", &endH, 1); + srv->setPixelShaderConstant("start", &start, 1); + srv->setPixelShaderConstant("end", &end, 1); + srv->setPixelShaderConstant("col", col, 3); + srv->setVertexShaderConstant("ipvmat", m_invprojview.pointer(), 16); + srv->setVertexShaderConstant("campos", m_campos, 3); +} diff --git a/src/graphics/callbacks.hpp b/src/graphics/callbacks.hpp new file mode 100644 index 000000000..6bdee62f2 --- /dev/null +++ b/src/graphics/callbacks.hpp @@ -0,0 +1,712 @@ +// SuperTuxKart - a fun racing game with go-kart +// +// 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_CALLBACKS_HPP +#define HEADER_CALLBACKS_HPP + +#include "config/user_config.hpp" +#include "graphics/irr_driver.hpp" + +#include +#include +#include +#include +#include +#include +#include + +using namespace irr; + +class CallBase: public video::IShaderConstantSetCallBack +{ +public: + CallBase() + { + firstdone = 0; + } + + virtual void OnSetMaterial(const video::SMaterial &material) + { + mat = material; + } + +protected: + bool firstdone; + video::SMaterial mat; +}; + +// + +class NormalMapProvider: public CallBase +{ +public: + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); + + NormalMapProvider(bool withLightmap) + { + m_with_lightmap = withLightmap; + } + +private: + bool m_with_lightmap; +}; + +// + +class WaterShaderProvider: public CallBase +{ +public: + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); + + void setSpeed(const float s1, const float s2) + { + m_water_shader_speed_1 = s1; + m_water_shader_speed_2 = s2; + } + + WaterShaderProvider() + { + m_dx_1 = 0.0f; + m_dx_2 = 0.0f; + m_dy_1 = 0.0f; + m_dy_2 = 0.0f; + + m_water_shader_speed_1 = + m_water_shader_speed_2 = 0.0f; + } + + void setSunPosition(const core::vector3df &in) + { + m_sunpos = in; + m_sunpos.normalize(); + } + + void setSpeed(float speed) { m_speed = speed; } + void setHeight(float height) { m_height = height; } + void setLength(float length) { m_length = length; } + +private: + core::vector3df m_sunpos; + + float m_dx_1, m_dy_1, m_dx_2, m_dy_2; + float m_water_shader_speed_1; + float m_water_shader_speed_2; + + float m_speed; + float m_height; + float m_length; +}; + +// + +class GrassShaderProvider: public CallBase +{ +public: + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); + + GrassShaderProvider() + { + m_amplitude = + m_speed = 0.0f; + } + + void setSpeed(float speed) + { + m_speed = speed; + } + + void setAmplitude(float amp) + { + m_amplitude = amp; + } + +private: + float m_amplitude, m_speed; +}; + +// + +class SplattingProvider: public CallBase +{ +public: + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); +}; + +// + +class BubbleEffectProvider: public CallBase +{ +public: + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); + + BubbleEffectProvider() + { + } + + // We hijack the material type param 2 of bubbles. + // It's time to start the fade, negative if fade out, positive if in. + // It'd be unused otherwise. + + void onMadeVisible(scene::IMeshBuffer * const mb) + { + if (!contains(mb)) + return; + + video::SMaterial &mat = mb->getMaterial(); + mat.MaterialTypeParam2 = irr_driver->getDevice()->getTimer()->getTime() / 1000.0f; + } + + void onHidden(scene::IMeshBuffer * const mb) + { + if (!contains(mb)) + return; + + video::SMaterial &mat = mb->getMaterial(); + mat.MaterialTypeParam2 = irr_driver->getDevice()->getTimer()->getTime() / -1000.0f; + } + + void isInitiallyHidden(scene::IMeshBuffer * const mb) + { + if (!contains(mb)) + return; + + video::SMaterial &mat = mb->getMaterial(); + mat.MaterialTypeParam2 = irr_driver->getDevice()->getTimer()->getTime() / -1000.0f; + } + + void removeBubble(const scene::IMeshBuffer * const mb) + { + m_bubbles.erase(mb); + } + + void addBubble(scene::IMeshBuffer * const mb) + { + m_bubbles.insert(mb); + + video::SMaterial &mat = mb->getMaterial(); + mat.MaterialTypeParam2 = 1; + } + + bool contains(const scene::IMeshBuffer * const mb) const + { + return m_bubbles.count(mb); + } + +private: + std::set m_bubbles; +}; + +// + +class RainEffectProvider: public CallBase +{ +public: + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); +}; + +// + +class SnowEffectProvider: public CallBase +{ +public: + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); +}; + +// + +class MotionBlurProvider: public CallBase +{ +public: + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); + + void setMaxHeight(u32 who, float height) + { + assert(who < MAX_PLAYER_COUNT); + m_maxheight[who] = height; + } + + void setBoostTime(u32 who, float time) + { + assert(who < MAX_PLAYER_COUNT); + m_boost_time[who] = time; + } + + void setCenter(u32 who, float X, float Y) + { + assert(who < MAX_PLAYER_COUNT); + m_center[who].X = X; + m_center[who].Y = Y; + } + + void setDirection(u32 who, float X, float Y) + { + assert(who < MAX_PLAYER_COUNT); + m_direction[who].X = X; + m_direction[who].Y = Y; + } + + void setCurrentCamera(u32 who) + { + m_current_camera = who; + } + +private: + float m_maxheight[MAX_PLAYER_COUNT]; + u32 m_current_camera; + float m_boost_time[MAX_PLAYER_COUNT]; + core::vector2df m_center[MAX_PLAYER_COUNT]; + core::vector2df m_direction[MAX_PLAYER_COUNT]; +}; + +// + +class GaussianBlurProvider: public CallBase +{ +public: + GaussianBlurProvider() + { + m_pixel[0] = 1.0f / UserConfigParams::m_width; + m_pixel[1] = 1.0f / UserConfigParams::m_height; + } + + void setResolution(float x, float y) + { + m_pixel[0] = 1.0f / x; + m_pixel[1] = 1.0f / y; + } + + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); + +private: + float m_pixel[2]; +}; + +// + +class MipVizProvider: public CallBase +{ +public: + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); +}; + +// + +class ColorizeProvider: public CallBase +{ +public: + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); + + void setColor(float r, float g, float b) + { + m_color[0] = r; + m_color[1] = g; + m_color[2] = b; + } + +private: + float m_color[3]; +}; + +// + +class GlowProvider: public CallBase +{ +public: + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); + + void setResolution(float x, float y) + { + m_res[0] = x; + m_res[1] = y; + } + +private: + float m_res[2]; +}; + +// + +class ObjectPassProvider: public CallBase +{ +public: + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); +}; + +// + +class LightBlendProvider: public CallBase +{ +public: + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); +}; + +// + +class PointLightProvider: public CallBase +{ +public: + PointLightProvider() + { + m_screen[0] = UserConfigParams::m_width; + m_screen[1] = UserConfigParams::m_height; + + m_specular = 200; + } + + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); + + void setColor(float r, float g, float b) + { + m_color[0] = r; + m_color[1] = g; + m_color[2] = b; + } + + void setPosition(float x, float y, float z) + { + m_pos[0] = x; + m_pos[1] = y; + m_pos[2] = z; + } + + void setRadius(float r) + { + m_radius = r; + } + + void setSpecular(float s) + { + m_specular = s; + } + + void updateIPVMatrix() + { + // Update the campos and IPV matrix, only once per frame since it's costly + const core::vector3df &campos = + irr_driver->getSceneManager()->getActiveCamera()->getAbsolutePosition(); + m_campos[0] = campos.X; + m_campos[1] = campos.Y; + m_campos[2] = campos.Z; + + const video::IVideoDriver * const drv = irr_driver->getVideoDriver(); + + m_invprojview = drv->getTransform(video::ETS_PROJECTION); + m_invprojview *= drv->getTransform(video::ETS_VIEW); + m_invprojview.makeInverse(); + } + +private: + core::matrix4 m_invprojview; + + float m_campos[3]; + float m_color[3]; + float m_pos[3]; + float m_screen[2]; + float m_radius; + float m_specular; +}; + +// + +class SunLightProvider: public CallBase +{ +public: + SunLightProvider() + { + m_screen[0] = UserConfigParams::m_width; + m_screen[1] = UserConfigParams::m_height; + + m_wind[0] = m_wind[1] = 0; + } + + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); + + void setColor(float r, float g, float b) + { + m_color[0] = r; + m_color[1] = g; + m_color[2] = b; + } + + void setPosition(float x, float y, float z) + { + m_pos[0] = x; + m_pos[1] = y; + m_pos[2] = z; + } + + void updateIPVMatrix() + { + // Update the IPV matrix, only once per frame since it's costly + const video::IVideoDriver * const drv = irr_driver->getVideoDriver(); + + m_invprojview = drv->getTransform(video::ETS_PROJECTION); + m_invprojview *= drv->getTransform(video::ETS_VIEW); + m_invprojview.makeInverse(); + } + + void setShadowMatrix(const core::matrix4 &mat) + { + m_shadowmat = mat; + } + +private: + core::matrix4 m_invprojview, m_shadowmat; + float m_color[3]; + float m_pos[3]; + float m_screen[2]; + float m_wind[2]; +}; + +// + +class BloomProvider: public CallBase +{ +public: + BloomProvider() { m_threshold = 0.75f; } + + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); + + void setThreshold(const float f) { m_threshold = f; } + +private: + float m_threshold; +}; + +// + +class MLAAColor1Provider: public CallBase +{ +public: + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); +}; + +// + +class MLAABlend2Provider: public CallBase +{ +public: + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); +}; + +// + +class MLAANeigh3Provider: public CallBase +{ +public: + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); +}; + +// + +class SSAOProvider: public CallBase +{ +public: + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); +}; + +// + +class GodRayProvider: public CallBase +{ +public: + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); + + // In texcoords + void setSunPosition(float x, float y) { m_sunpos[0] = x; m_sunpos[1] = y; } + +private: + float m_sunpos[2]; +}; + +// + +class ShadowPassProvider: public CallBase +{ +public: + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); +}; + +// + +class ShadowImportanceProvider: public CallBase +{ +public: + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); + + void updateIPVMatrix() + { + // Update the IPV matrix, only once per frame since it's costly + const video::IVideoDriver * const drv = irr_driver->getVideoDriver(); + + const core::vector3df &campos = + irr_driver->getSceneManager()->getActiveCamera()->getAbsolutePosition(); + m_campos[0] = campos.X; + m_campos[1] = campos.Y; + m_campos[2] = campos.Z; + + m_invprojview = drv->getTransform(video::ETS_PROJECTION); + m_invprojview *= drv->getTransform(video::ETS_VIEW); + m_invprojview.makeInverse(); + } + + void setShadowMatrix(const core::matrix4 &mat) + { + m_shadowmat = mat; + } + +private: + core::matrix4 m_invprojview, m_shadowmat; + float m_campos[3]; +}; + +// + +class CollapseProvider: public CallBase +{ +public: + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); + + void setResolution(const float x, const float y) + { + m_pixel[0] = 1.0f / x; + m_pixel[1] = 1.0f / y; + + m_multi[0] = m_multi[1] = 1; + + if (x < 2 || y < 2) + { + u32 i; + for (i = 0; i < 2; i++) + { + // No increase for the other direction + if (m_pixel[i] > 0.9f) m_pixel[i] = m_multi[i] = 0; + } + + std::swap(m_multi[0], m_multi[1]); + } + + m_size = std::max(x, y); + } + +private: + float m_pixel[2]; + int m_size; + float m_multi[2]; +}; + +// + +class BloomPowerProvider: public CallBase +{ +public: + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); + + void setPower(float power) + { + m_power = power / 10.0f; + } + +private: + float m_power; +}; + +// + +class MultiplyProvider: public CallBase +{ +public: + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); +}; + +// + +class ShadowGenProvider: public CallBase +{ +public: + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); +}; + +// + +class CausticsProvider: public CallBase +{ +public: + CausticsProvider() { m_dir[0] = m_dir[1] = m_dir2[0] = m_dir2[1] = 0; } + + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); + +private: + float m_dir[2], m_dir2[2]; +}; + +// + +class DisplaceProvider: public CallBase +{ +public: + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); + + DisplaceProvider() + { + m_screen[0] = UserConfigParams::m_width; + m_screen[1] = UserConfigParams::m_height; + + m_dir[0] = m_dir[1] = m_dir2[0] = m_dir2[1] = 0; + } + +private: + float m_screen[2]; + float m_dir[2], m_dir2[2]; +}; + +// + +class PPDisplaceProvider: public CallBase +{ +public: + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); +}; + +// + +class FogProvider: public CallBase +{ +public: + virtual void OnSetConstants(video::IMaterialRendererServices *srv, int); + + void updateIPVMatrix() + { + // Update the campos and IPV matrix, only once per frame since it's costly + const core::vector3df &campos = + irr_driver->getSceneManager()->getActiveCamera()->getAbsolutePosition(); + m_campos[0] = campos.X; + m_campos[1] = campos.Y; + m_campos[2] = campos.Z; + + const video::IVideoDriver * const drv = irr_driver->getVideoDriver(); + + m_invprojview = drv->getTransform(video::ETS_PROJECTION); + m_invprojview *= drv->getTransform(video::ETS_VIEW); + m_invprojview.makeInverse(); + } + +private: + core::matrix4 m_invprojview; + float m_campos[3]; +}; + +#endif diff --git a/src/graphics/camera.cpp b/src/graphics/camera.cpp index fc8ffc356..0e9026e85 100644 --- a/src/graphics/camera.cpp +++ b/src/graphics/camera.cpp @@ -1,7 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004-2005 Steve Baker -// Copyright (C) 2006 SuperTuxKart-Team, Steve Baker +// Copyright (C) 2004-2013 Steve Baker +// Copyright (C) 2006-2013 SuperTuxKart-Team, Steve Baker // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -19,11 +19,7 @@ #include "graphics/camera.hpp" -#if defined(WIN32) && !defined(__CYGWIN__) && !defined(__MINGW32__) -# define isnan _isnan -#else -# include -#endif +#include #include "audio/music_manager.hpp" #include "config/user_config.hpp" @@ -35,10 +31,12 @@ #include "karts/kart_properties.hpp" #include "karts/skidding.hpp" #include "modes/world.hpp" +#include "physics/btKart.hpp" #include "race/race_manager.hpp" #include "tracks/track.hpp" #include "utils/aligned_array.hpp" #include "utils/constants.hpp" +#include "utils/vs.hpp" #include "ICameraSceneNode.h" #include "ISceneManager.h" @@ -387,13 +385,21 @@ void Camera::getCameraSettings(float *above_kart, float *cam_angle, // Fall through to falling mode. case CM_FALLING: { - *above_kart = 0.75f; + if(UserConfigParams::m_camera_debug==2) + { + *above_kart = 0; + *cam_angle = 0; + } + else + { + *above_kart = 0.75f; + *cam_angle = kp->getCameraForwardUpAngle(); + } float steering = m_kart->getSteerPercent() * (1.0f + (m_kart->getSkidding()->getSkidFactor() - 1.0f)/2.3f ); // quadratically to dampen small variations (but keep sign) float dampened_steer = fabsf(steering) * steering; - *cam_angle = kp->getCameraForwardUpAngle(); *sideway = -m_rotation_range*dampened_steer*0.5f; *distance = -m_distance; *smoothing = true; @@ -442,19 +448,12 @@ void Camera::getCameraSettings(float *above_kart, float *cam_angle, */ void Camera::update(float dt) { - if (UserConfigParams::m_graphical_effects) - { - if (m_rain) - { - m_rain->setPosition( getCameraSceneNode()->getPosition() ); - m_rain->update(dt); - } - } // UserConfigParams::m_graphical_effects - + float above_kart, cam_angle, side_way, distance; + bool smoothing; // The following settings give a debug camera which shows the track from // high above the kart straight down. - if(UserConfigParams::m_camera_debug) + if (UserConfigParams::m_camera_debug==1) { core::vector3df xyz = m_kart->getXYZ().toIrrVector(); m_camera->setTarget(xyz); @@ -464,24 +463,18 @@ void Camera::update(float dt) // To view inside tunnels (FIXME 27>15 why??? makes no sense // - the kart should not be visible, but it works) m_camera->setNearValue(27.0); - return; } - if(m_mode==CM_FINAL) + else if (m_mode==CM_FINAL) { handleEndCamera(dt); - return; } - float above_kart, cam_angle, side_way, distance; - bool smoothing; - getCameraSettings(&above_kart, &cam_angle, &side_way, &distance, - &smoothing); - // If an explosion is happening, stop moving the camera, // but keep it target on the kart. - if(dynamic_cast(m_kart->getKartAnimation())) + else if (dynamic_cast(m_kart->getKartAnimation())) { + getCameraSettings(&above_kart, &cam_angle, &side_way, &distance, &smoothing); // The camera target needs to be 'smooth moved', otherwise // there will be a noticable jump in the first frame @@ -495,10 +488,19 @@ void Camera::update(float dt) current_target += ((wanted_target-current_target)*m_target_speed)*dt; m_camera->setTarget(current_target); - return; } - positionCamera(dt, above_kart, cam_angle, side_way, distance, smoothing); + else + { + getCameraSettings(&above_kart, &cam_angle, &side_way, &distance, &smoothing); + positionCamera(dt, above_kart, cam_angle, side_way, distance, smoothing); + } + + if (UserConfigParams::m_graphical_effects && m_rain) + { + m_rain->setPosition( getCameraSceneNode()->getPosition() ); + m_rain->update(dt); + } // UserConfigParams::m_graphical_effects } // update // ---------------------------------------------------------------------------- @@ -513,9 +515,10 @@ void Camera::positionCamera(float dt, float above_kart, float cam_angle, { Vec3 wanted_position; Vec3 wanted_target = m_kart->getXYZ(); - - wanted_target.setY(wanted_target.getY()+above_kart); - + if(UserConfigParams::m_camera_debug==2) + wanted_target.setY(m_kart->getVehicle()->getWheelInfo(2).m_raycastInfo.m_contactPointWS.getY()); + else + wanted_target.setY(wanted_target.getY()+above_kart); float tan_up = tan(cam_angle); Vec3 relative_position(side_way, fabsf(distance)*tan_up+above_kart, diff --git a/src/graphics/camera.hpp b/src/graphics/camera.hpp index 0e1240d17..01426c802 100644 --- a/src/graphics/camera.hpp +++ b/src/graphics/camera.hpp @@ -1,7 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004-2005 Steve Baker -// Copyright (C) 2006 SuperTuxKart-Team, Steve Baker +// Copyright (C) 2004-2013 Steve Baker +// Copyright (C) 2006-2013 SuperTuxKart-Team, Steve Baker // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/graphics/explosion.cpp b/src/graphics/explosion.cpp index 028a37a20..c38c30e8f 100644 --- a/src/graphics/explosion.cpp +++ b/src/graphics/explosion.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004 Steve Baker +// Copyright (C) 2004-2013 Steve Baker // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/graphics/explosion.hpp b/src/graphics/explosion.hpp index a5f848143..92ee65349 100644 --- a/src/graphics/explosion.hpp +++ b/src/graphics/explosion.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004 Steve Baker +// Copyright (C) 2004-2013 Steve Baker // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/graphics/glow.cpp b/src/graphics/glow.cpp new file mode 100644 index 000000000..780c506b0 --- /dev/null +++ b/src/graphics/glow.cpp @@ -0,0 +1,85 @@ +// +// SuperTuxKart - a fun racing game with go-kart +// Copyright (C) 2013 Lauri Kasanen +// +// 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 "graphics/glow.hpp" + +#include "graphics/callbacks.hpp" +#include "graphics/glwrap.hpp" +#include "graphics/irr_driver.hpp" +#include "graphics/material_manager.hpp" +#include "graphics/material.hpp" +#include "graphics/rtts.hpp" +#include "graphics/shaders.hpp" + +using namespace video; +using namespace scene; +using namespace core; + +IMesh * GlowNode::sphere = NULL; +SMaterial GlowNode::mat; +aabbox3df GlowNode::box; + + +GlowNode::GlowNode(scene::ISceneManager* mgr, float radius): ISceneNode(mgr->getRootSceneNode(), mgr, -1) +{ + if (!sphere) + { + mat.Lighting = false; + mat.MaterialType = irr_driver->getShader(ES_GLOW); + + mat.setTexture(0, irr_driver->getRTT(RTT_QUARTER1)); + mat.TextureLayer[0].TextureWrapU = + mat.TextureLayer[0].TextureWrapV = ETC_CLAMP_TO_EDGE; + mat.setFlag(EMF_TRILINEAR_FILTER, true); + mat.BlendOperation = EBO_ADD; + + sphere = mgr->getGeometryCreator()->createSphereMesh(1, 4, 4); + box = sphere->getBoundingBox(); + } + + setScale(vector3df(radius)); +} + +GlowNode::~GlowNode() +{ +} + +void GlowNode::render() +{ + IVideoDriver * const drv = irr_driver->getVideoDriver(); + drv->setTransform(ETS_WORLD, AbsoluteTransformation); + drv->setMaterial(mat); + + glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); + glStencilFunc(GL_EQUAL, 0, ~0); + glEnable(GL_STENCIL_TEST); + + drv->drawMeshBuffer(sphere->getMeshBuffer(0)); + + glDisable(GL_STENCIL_TEST); +} + +void GlowNode::OnRegisterSceneNode() +{ + if (IsVisible) + { + SceneManager->registerNodeForRendering(this, ESNRP_TRANSPARENT); + } + + ISceneNode::OnRegisterSceneNode(); +} diff --git a/src/graphics/glow.hpp b/src/graphics/glow.hpp new file mode 100644 index 000000000..8d9fa12f9 --- /dev/null +++ b/src/graphics/glow.hpp @@ -0,0 +1,53 @@ +// +// SuperTuxKart - a fun racing game with go-kart +// Copyright (C) 2013 Lauri Kasanen +// +// 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_GLOW_HPP +#define HEADER_GLOW_HPP + +#include +#include + +using namespace irr; + +// The actual node +class GlowNode: public scene::ISceneNode +{ +public: + GlowNode(scene::ISceneManager* mgr, float radius); + ~GlowNode(); + + virtual void render(); + + virtual const core::aabbox3d& getBoundingBox() const + { + return box; + } + + virtual void OnRegisterSceneNode(); + + virtual u32 getMaterialCount() const { return 1; } + virtual video::SMaterial& getMaterial(u32 i) { return mat; } + +private: + static video::SMaterial mat; + static core::aabbox3df box; + + static scene::IMesh *sphere; +}; + +#endif diff --git a/src/graphics/glwrap.hpp b/src/graphics/glwrap.hpp new file mode 100644 index 000000000..fcac96621 --- /dev/null +++ b/src/graphics/glwrap.hpp @@ -0,0 +1,21 @@ +#ifndef GLWRAP_HEADER_H +#define GLWRAP_HEADER_H + +#if defined(__APPLE__) +# include +#elif defined(ANDROID) +# include +#elif defined(WIN32) +# define _WINSOCKAPI_ +// has to be included before gl.h because of WINGDIAPI and APIENTRY definitions +# include +# include +#else +# include +#endif + +// already includes glext.h, which defines useful GL constants. +// COpenGLDriver has already loaded the extension GL functions we use (e.g glBeginQuery) +#include "../../lib/irrlicht/source/Irrlicht/COpenGLDriver.h" + +#endif diff --git a/src/graphics/hardware_skinning.cpp b/src/graphics/hardware_skinning.cpp index 2d9d708c0..976404ffb 100644 --- a/src/graphics/hardware_skinning.cpp +++ b/src/graphics/hardware_skinning.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004 Steve Baker +// Copyright (C) 2004-2013 Steve Baker // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/graphics/hardware_skinning.hpp b/src/graphics/hardware_skinning.hpp index a572152f3..6f4144210 100644 --- a/src/graphics/hardware_skinning.hpp +++ b/src/graphics/hardware_skinning.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 the SuperTuxKart team +// Copyright (C) 2011-2013 the SuperTuxKart team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/graphics/hit_effect.hpp b/src/graphics/hit_effect.hpp index 903808b84..e2ec5966a 100644 --- a/src/graphics/hit_effect.hpp +++ b/src/graphics/hit_effect.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Joerg Henrichs +// Copyright (C) 2011-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/graphics/hit_sfx.cpp b/src/graphics/hit_sfx.cpp index 4a6541931..815ae624a 100644 --- a/src/graphics/hit_sfx.cpp +++ b/src/graphics/hit_sfx.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Joerg Henrichs +// Copyright (C) 2011-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/graphics/hit_sfx.hpp b/src/graphics/hit_sfx.hpp index 2d19bf492..d7f7e2e5a 100644 --- a/src/graphics/hit_sfx.hpp +++ b/src/graphics/hit_sfx.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Joerg Henrichs +// Copyright (C) 2011-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/graphics/irr_driver.cpp b/src/graphics/irr_driver.cpp index 8bb0b230b..c8ca401ac 100644 --- a/src/graphics/irr_driver.cpp +++ b/src/graphics/irr_driver.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -19,13 +19,23 @@ #include "graphics/irr_driver.hpp" #include "config/user_config.hpp" +#include "graphics/callbacks.hpp" #include "graphics/camera.hpp" +#include "graphics/glwrap.hpp" #include "graphics/hardware_skinning.hpp" +#include "graphics/lens_flare.hpp" +#include "graphics/light.hpp" #include "graphics/material_manager.hpp" #include "graphics/particle_kind_manager.hpp" #include "graphics/per_camera_node.hpp" #include "graphics/post_processing.hpp" #include "graphics/referee.hpp" +#include "graphics/shaders.hpp" +#include "graphics/shadow_importance.hpp" +#include "graphics/sun.hpp" +#include "graphics/rtts.hpp" +#include "graphics/water.hpp" +#include "graphics/wind.hpp" #include "guiengine/engine.hpp" #include "guiengine/modaldialog.hpp" #include "guiengine/scalable_font.hpp" @@ -47,6 +57,7 @@ #include "utils/constants.hpp" #include "utils/log.hpp" #include "utils/profiler.hpp" +#include "utils/vs.hpp" #include @@ -62,19 +73,12 @@ using namespace irr; -#ifndef round -# define round(x) (floor(x+0.5f)) -#endif - #ifdef WIN32 #include #endif #if defined(__linux__) && !defined(ANDROID) -namespace X11 -{ - #include - #include -} +#include +#include #endif /** singleton */ @@ -96,6 +100,11 @@ IrrDriver::IrrDriver() m_resolution_changing = RES_CHANGE_NONE; m_device = createDevice(video::EDT_NULL); m_request_screenshot = false; + m_shaders = NULL; + m_rtts = NULL; + m_wind = new Wind(); + m_mipviz = m_wireframe = m_normals = m_ssaoviz = \ + m_lightviz = m_shadowviz = m_distortviz = 0; } // IrrDriver // ---------------------------------------------------------------------------- @@ -117,6 +126,9 @@ IrrDriver::~IrrDriver() m_device->drop(); m_device = NULL; m_modes.clear(); + + delete m_shaders; + delete m_wind; } // ~IrrDriver // ---------------------------------------------------------------------------- @@ -124,7 +136,7 @@ IrrDriver::~IrrDriver() */ void IrrDriver::reset() { - m_post_processing->reset(); + if (m_glsl) m_post_processing->reset(); } // reset // ---------------------------------------------------------------------------- @@ -135,22 +147,22 @@ Returns the parent window of "window" (i.e. the ancestor of window that is a direct child of the root, or window itself if it is a direct child). If window is the root window, returns window. */ -X11::Window get_toplevel_parent(X11::Display* display, X11::Window window) +Window get_toplevel_parent(Display* display, Window window) { - X11::Window parent; - X11::Window root; - X11::Window * children; + Window parent; + Window root; + Window * children; unsigned int num_children; while (true) { - if (0 == X11::XQueryTree(display, window, &root, + if (0 == XQueryTree(display, window, &root, &parent, &children, &num_children)) { Log::fatal("irr_driver", "XQueryTree error\n"); } if (children) { //must test for null - X11::XFree(children); + XFree(children); } if (window == root || parent == root) { return window; @@ -201,7 +213,6 @@ void IrrDriver::updateConfigIfRelevant() Log::warn("irr_driver", "Could not retrieve window location\n"); } #elif defined(__linux__) && !defined(ANDROID) - using namespace X11; const video::SExposedVideoData& videoData = m_device->getVideoDriver()->getExposedVideoData(); Display* display = (Display*)videoData.OpenGLLinux.X11Display; @@ -265,8 +276,8 @@ void IrrDriver::initDevice() if(m_modes.size()==0) { createListOfVideoModes(); - // The debug name is only set if irrlicht is compiled in debug - // mode. So we use this to print a warning to the user. + // The debug name is only set if irrlicht is compiled in debug + // mode. So we use this to print a warning to the user. if(m_device->getDebugName()) { Log::warn("irr_driver", @@ -326,6 +337,8 @@ void IrrDriver::initDevice() params.WindowSize = core::dimension2du(UserConfigParams::m_width, UserConfigParams::m_height); + + /* switch ((int)UserConfigParams::m_antialiasing) { case 0: @@ -345,9 +358,12 @@ void IrrDriver::initDevice() "anti-alias setting : %i\n", (int)UserConfigParams::m_antialiasing); } + */ + m_device = createDeviceEx(params); + if(m_device) + break; } // for bits=32, 24, 16 - m_device = createDeviceEx(params); // if still no device, try with a standard 800x600 window size, maybe // size is the problem @@ -382,7 +398,8 @@ void IrrDriver::initDevice() m_gui_env = m_device->getGUIEnvironment(); m_video_driver = m_device->getVideoDriver(); m_glsl = m_video_driver->queryFeature(video::EVDF_ARB_GLSL) && - m_video_driver->queryFeature(video::EVDF_TEXTURE_NPOT); + m_video_driver->queryFeature(video::EVDF_TEXTURE_NPOT) && + UserConfigParams::m_pixel_shaders; // This remaps the window, so it has to be done before the clear to avoid flicker m_device->setResizable(false); @@ -394,10 +411,48 @@ void IrrDriver::initDevice() if (m_glsl) { Log::info("irr_driver", "GLSL supported."); + + // Order matters, create RTTs as soon as possible, as they are the largest blocks. + m_rtts = new RTT(); + m_shaders = new Shaders(); + m_shadow_importance = new ShadowImportance(); + + m_mrt.clear(); + m_mrt.reallocate(3); + m_mrt.push_back(m_rtts->getRTT(RTT_COLOR)); + m_mrt.push_back(m_rtts->getRTT(RTT_NORMAL)); + m_mrt.push_back(m_rtts->getRTT(RTT_DEPTH)); + + irr::video::COpenGLDriver* gl_driver = (irr::video::COpenGLDriver*)m_device->getVideoDriver(); + gl_driver->extGlGenQueries(1, &m_lensflare_query); + + scene::IMesh * const sphere = m_scene_manager->getGeometryCreator()->createSphereMesh(1, 16, 16); + m_sun_interposer = m_scene_manager->addMeshSceneNode(sphere); + m_sun_interposer->grab(); + m_sun_interposer->setParent(NULL); + m_sun_interposer->setScale(core::vector3df(20)); + + m_sun_interposer->getMaterial(0).Lighting = false; + m_sun_interposer->getMaterial(0).ColorMask = video::ECP_NONE; + m_sun_interposer->getMaterial(0).ZWriteEnable = false; + m_sun_interposer->getMaterial(0).MaterialType = m_shaders->getShader(ES_PASSFAR); + + sphere->drop(); + + m_lensflare = new scene::CLensFlareSceneNode(NULL, m_scene_manager, -1); + video::ITexture * const tex = + m_video_driver->getTexture((file_manager->getTextureDir() + "lensflare.png").c_str()); + if (!tex) Log::fatal("irr_driver", "Cannot find lens flare texture"); + m_lensflare->setMaterialTexture(0, tex); + m_lensflare->setAutomaticCulling(scene::EAC_OFF); + + m_suncam = m_scene_manager->addCameraSceneNode(0, vector3df(0), vector3df(0), -1, false); + m_suncam->grab(); + m_suncam->setParent(NULL); } else { - Log::warn("irr_driver", "Too old GPU; using the fixed pipeline."); + Log::warn("irr_driver", "Using the fixed pipeline (old GPU, or shaders disabled in options)"); } // Only change video driver settings if we are showing graphics @@ -405,7 +460,6 @@ void IrrDriver::initDevice() { #if defined(__linux__) && !defined(ANDROID) // Set class hints on Linux, used by Window Managers. - using namespace X11; const video::SExposedVideoData& videoData = m_video_driver ->getExposedVideoData(); XClassHint* classhint = XAllocClassHint(); @@ -421,11 +475,6 @@ void IrrDriver::initDevice() ->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS, true); m_device->getVideoDriver() ->setTextureCreationFlag(video::ETCF_OPTIMIZED_FOR_QUALITY, true); - if (!UserConfigParams::m_fbo) - { - m_device->getVideoDriver() - ->disableFeature(video::EVDF_FRAMEBUFFER_OBJECT); - } // Force creation of mipmaps even if the mipmaps flag in a b3d file // does not set the 'enable mipmap' flag. @@ -524,7 +573,6 @@ bool IrrDriver::moveWindow(const int x, const int y) return false; } #elif defined(__linux__) && !defined(ANDROID) - using namespace X11; const video::SExposedVideoData& videoData = m_video_driver->getExposedVideoData(); // TODO: Actually handle possible failure XMoveWindow((Display*)videoData.OpenGLLinux.X11Display, @@ -769,6 +817,7 @@ void IrrDriver::setAllMaterialFlags(scene::IMesh *mesh) const * \param wave_length Lenght of a water wave. */ scene::ISceneNode* IrrDriver::addWaterNode(scene::IMesh *mesh, + scene::IMesh **welded, float wave_height, float wave_speed, float wave_length) @@ -776,11 +825,24 @@ scene::ISceneNode* IrrDriver::addWaterNode(scene::IMesh *mesh, mesh->setMaterialFlag(video::EMF_GOURAUD_SHADING, true); scene::IMesh* welded_mesh = m_scene_manager->getMeshManipulator() ->createMeshWelded(mesh); - scene::ISceneNode* out = m_scene_manager->addWaterSurfaceSceneNode(welded_mesh, + scene::ISceneNode* out = NULL; + + if (!m_glsl) + { + out = m_scene_manager->addWaterSurfaceSceneNode(welded_mesh, wave_height, wave_speed, wave_length); + } else + { + out = new WaterNode(m_scene_manager, welded_mesh, wave_height, wave_speed, + wave_length); + } + out->getMaterial(0).setFlag(video::EMF_GOURAUD_SHADING, true); welded_mesh->drop(); // The scene node keeps a reference + + *welded = welded_mesh; + return out; } // addWaterNode @@ -839,11 +901,22 @@ PerCameraNode *IrrDriver::addPerCameraMesh(scene::IMesh* mesh, scene::ICameraSceneNode* camera, scene::ISceneNode *parent) { + scene::ISceneNode *node = m_scene_manager->addMeshSceneNode(mesh); + return new PerCameraNode((parent ? parent : m_scene_manager->getRootSceneNode()), - m_scene_manager, -1, camera, mesh); + m_scene_manager, -1, camera, node); } // addMesh +PerCameraNode *IrrDriver::addPerCameraNode(scene::ISceneNode* node, + scene::ICameraSceneNode* camera, + scene::ISceneNode *parent) +{ + return new PerCameraNode((parent ? parent + : m_scene_manager->getRootSceneNode()), + m_scene_manager, -1, camera, node); +} // addNode + // ---------------------------------------------------------------------------- /** Adds a billboard node to scene. @@ -856,8 +929,8 @@ scene::ISceneNode *IrrDriver::addBillboard(const core::dimension2d< f32 > size, m_scene_manager->addBillboardSceneNode(parent, size); assert(node->getMaterialCount() > 0); node->setMaterialTexture(0, texture); - if(alphaTesting) - node->setMaterialType(video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF); + if(alphaTesting) + node->setMaterialType(video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF); return node; } // addMesh @@ -994,9 +1067,9 @@ void IrrDriver::removeTexture(video::ITexture *t) /** Adds an animated mesh to the scene. * \param mesh The animated mesh to add. */ -scene::IAnimatedMeshSceneNode *IrrDriver::addAnimatedMesh(scene::IAnimatedMesh *mesh) +scene::IAnimatedMeshSceneNode *IrrDriver::addAnimatedMesh(scene::IAnimatedMesh *mesh, scene::ISceneNode* parent) { - return m_scene_manager->addAnimatedMeshSceneNode(mesh, NULL, -1, + return m_scene_manager->addAnimatedMeshSceneNode(mesh, parent, -1, core::vector3df(0,0,0), core::vector3df(0,0,0), core::vector3df(1,1,1), @@ -1067,6 +1140,32 @@ void IrrDriver::removeCameraSceneNode(scene::ICameraSceneNode *camera) camera->remove(); } // removeCameraSceneNode +// ---------------------------------------------------------------------------- +/** Sets an error message to be displayed when a texture is not found. This + * error message is shown before the "Texture '%s' not found" message. It can + * be used to supply additional details like what kart is currently being + * loaded. + * \param error Error message, potentially with a '%' which will be replaced + * with detail. + * \param detail String to replace a '%' in the error message. + */ +void IrrDriver::setTextureErrorMessage(const std::string &error, + const std::string &detail) +{ + if(detail=="") + m_texture_error_message = error; + else + m_texture_error_message = StringUtils::insertValues(error, detail); +} // setTextureErrorMessage + +// ---------------------------------------------------------------------------- +/** Disables the texture error message again. + */ +void IrrDriver::unsetTextureErrorMessage() +{ + m_texture_error_message = ""; +} // unsetTextureErrorMessage + // ---------------------------------------------------------------------------- /** Loads a texture from a file and returns the texture object. * \param filename File name of the texture to load. @@ -1096,7 +1195,7 @@ video::ITexture *IrrDriver::getTexture(const std::string &filename, // PNGs are non premul, but some are used for premul tasks, so convert // http://home.comcast.net/~tom_forsyth/blog.wiki.html#[[Premultiplied%20alpha]] // FIXME check param, not name - if(is_premul && + if(img && is_premul && StringUtils::hasSuffix(filename.c_str(), ".png") && (img->getColorFormat() == video::ECF_A8R8G8B8) && img->lock()) @@ -1119,7 +1218,7 @@ video::ITexture *IrrDriver::getTexture(const std::string &filename, } // if png and ColorFOrmat and lock // Other formats can be premul, but the tasks can be non premul // So divide to get the separate RGBA (only possible if alpha!=0) - else if(is_prediv && + else if(img && is_prediv && (img->getColorFormat() == video::ECF_A8R8G8B8) && img->lock()) { @@ -1148,9 +1247,12 @@ video::ITexture *IrrDriver::getTexture(const std::string &filename, if (complain_if_not_found && out == NULL) { - Log::error("irr_driver", "Texture '%s' not found; Put a breakpoint " - "at line %s:%i to debug!\n", - filename.c_str(), __FILE__, __LINE__); + + if(m_texture_error_message.size()>0) + { + Log::error("irr_driver", m_texture_error_message.c_str()); + } + Log::error("irr_driver", "Texture '%s' not found.", filename.c_str()); } return out; @@ -1581,6 +1683,11 @@ void IrrDriver::update(float dt) return; } + // If we quit via the menu the m_device->run() does not return true. + // To avoid any other calls, we return here. + if(main_loop->isAborted()) + return; + // If the resolution should be switched, do it now. This will delete the // old device and create a new one. if (m_resolution_changing!=RES_CHANGE_NONE) @@ -1591,6 +1698,8 @@ void IrrDriver::update(float dt) m_resolution_changing = RES_CHANGE_NONE; } + m_wind->update(); + World *world = World::getWorld(); // Handle cut scenes (which do not have any karts in it) @@ -1615,97 +1724,24 @@ void IrrDriver::update(float dt) m_video_driver->endScene(); return; } - - const bool inRace = world!=NULL; - - if (inRace) + else if (!world) { - // Start the RTT for post-processing. - // We do this before beginScene() because we want to capture the glClear() - // because of tracks that do not have skyboxes (generally add-on tracks) - m_post_processing->beginCapture(); - } - m_video_driver->beginScene(/*backBuffer clear*/ true, /*zBuffer*/ true, - world ? world->getClearColor() - : video::SColor(255,100,101,140)); + video::SColor(255,100,101,140)); - if (inRace) - { - irr_driver->getVideoDriver()->enableMaterial2D(); - - RaceGUIBase *rg = world->getRaceGUI(); - if (rg) rg->update(dt); - - - for(unsigned int i=0; iactivate(); - rg->preRenderCallback(camera); // adjusts start referee - m_scene_manager->drawAll(); - - PROFILER_POP_CPU_MARKER(); - - // Note that drawAll must be called before rendering - // the bullet debug view, since otherwise the camera - // is not set up properly. This is only used for - // the bullet debug view. - if (UserConfigParams::m_artist_debug_mode) - World::getWorld()->getPhysics()->draw(); - } // for igetNumKarts() - - // Stop capturing for the post-processing - m_post_processing->endCapture(); - - // Render the post-processed scene - m_post_processing->render(); - - // Set the viewport back to the full screen for race gui - m_video_driver->setViewPort(core::recti(0, 0, - UserConfigParams::m_width, - UserConfigParams::m_height)); - - for(unsigned int i=0; irenderPlayerView(camera, dt); - - PROFILER_POP_CPU_MARKER(); - } // for iendScene(); + return; } - -#ifdef DEBUG - drawDebugMeshes(); -#endif - - m_video_driver->endScene(); + if (m_glsl) + renderGLSL(dt); + else + renderFixed(dt); if (m_request_screenshot) doScreenShot(); - getPostProcessing()->update(dt); - // Enable this next print statement to get render information printed // E.g. number of triangles rendered, culled etc. The stats is only // printed while the race is running and not while the in-game menu @@ -1739,7 +1775,7 @@ bool IrrDriver::OnEvent(const irr::SEvent &event) // Ignore 'normal' messages if (event.LogEvent.Level > 1) { - printf("[IrrDriver Temp Logger] Level %d: %s\n", + Log::warn("[IrrDriver Temp Logger]", "Level %d: %s\n", event.LogEvent.Level,event.LogEvent.Text); } return true; @@ -1755,7 +1791,7 @@ bool IrrDriver::OnEvent(const irr::SEvent &event) bool IrrDriver::supportsSplatting() { - return UserConfigParams::m_pixel_shaders && m_glsl; + return m_glsl; } // ---------------------------------------------------------------------------- @@ -1941,6 +1977,11 @@ video::ITexture* IrrDriver::RTTProvider::renderToTexture(float angle, if (angle != -1 && m_rtt_main_node != NULL) m_rtt_main_node->setRotation( core::vector3df(0, angle, 0) ); + video::SOverrideMaterial &overridemat = m_video_driver->getOverrideMaterial(); + overridemat.EnablePasses = scene::ESNRP_SOLID; + overridemat.EnableFlags = video::EMF_MATERIAL_TYPE; + overridemat.Material.MaterialType = video::EMT_SOLID; + if (m_rtt_main_node == NULL) { irr_driver->getSceneManager()->drawAll(); @@ -1954,6 +1995,129 @@ video::ITexture* IrrDriver::RTTProvider::renderToTexture(float angle, m_light->setVisible(false); } + overridemat.EnablePasses = 0; + m_video_driver->setRenderTarget(0, false, false); return m_render_target_texture; } + +void IrrDriver::applyObjectPassShader(scene::ISceneNode * const node, bool rimlit) +{ + if (!m_glsl) + return; + + // Don't override sky + if (node->getType() == scene::ESNT_SKY_DOME || + node->getType() == scene::ESNT_SKY_BOX) + return; + + const u32 mcount = node->getMaterialCount(); + u32 i; + const video::E_MATERIAL_TYPE ref = rimlit ? m_shaders->getShader(ES_OBJECTPASS_RIMLIT): + m_shaders->getShader(ES_OBJECTPASS_REF); + const video::E_MATERIAL_TYPE pass = rimlit ? m_shaders->getShader(ES_OBJECTPASS_RIMLIT): + m_shaders->getShader(ES_OBJECTPASS); + + const video::E_MATERIAL_TYPE origref = m_shaders->getShader(ES_OBJECTPASS_REF); + const video::E_MATERIAL_TYPE origpass = m_shaders->getShader(ES_OBJECTPASS); + + bool viamb = false; + scene::IMesh *mesh = NULL; + if (node->getType() == scene::ESNT_ANIMATED_MESH) + { + viamb = ((scene::IAnimatedMeshSceneNode *) node)->isReadOnlyMaterials(); + mesh = ((scene::IAnimatedMeshSceneNode *) node)->getMesh(); + } + else if (node->getType() == scene::ESNT_MESH) + { + viamb = ((scene::IMeshSceneNode *) node)->isReadOnlyMaterials(); + mesh = ((scene::IMeshSceneNode *) node)->getMesh(); + } + + for (i = 0; i < mcount; i++) + { + video::SMaterial &nodemat = node->getMaterial(i); + video::SMaterial &mbmat = mesh ? mesh->getMeshBuffer(i)->getMaterial() : nodemat; + video::SMaterial *mat = &nodemat; + + if (viamb) + mat = &mbmat; + + if (mat->MaterialType == video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF || + mat->MaterialType == origref) + mat->MaterialType = ref; + else if (mat->MaterialType == video::EMT_SOLID || + mat->MaterialType == origpass || + (mat->MaterialType >= video::EMT_LIGHTMAP && + mat->MaterialType <= video::EMT_LIGHTMAP_LIGHTING_M4)) + mat->MaterialType = pass; + } + + + core::list kids = node->getChildren(); + scene::ISceneNodeList::Iterator it = kids.begin(); + for (; it != kids.end(); ++it) + { + applyObjectPassShader(*it, rimlit); + } +} + +void IrrDriver::applyObjectPassShader() +{ + if (!m_glsl) + return; + + applyObjectPassShader(m_scene_manager->getRootSceneNode()); +} + +scene::ISceneNode *IrrDriver::addLight(const core::vector3df &pos, float radius, + float r, float g, float b, bool sun) +{ + if (m_glsl) + { + LightNode *light = NULL; + + if (!sun) + light = new LightNode(m_scene_manager, radius, r, g, b); + else + light = new SunNode(m_scene_manager, r, g, b); + + light->grab(); + light->setParent(NULL); + + light->setPosition(pos); + light->updateAbsolutePosition(); + + m_lights.push_back(light); + + if (sun) { + m_sun_interposer->setPosition(pos); + m_sun_interposer->updateAbsolutePosition(); + + m_lensflare->setPosition(pos); + m_lensflare->updateAbsolutePosition(); + + m_suncam->setPosition(pos); + m_suncam->updateAbsolutePosition(); + + ((WaterShaderProvider *) m_shaders->m_callbacks[ES_WATER])->setSunPosition(pos); + } + + return light; + } else + { + return m_scene_manager->addLightSceneNode(NULL, pos, video::SColorf(r, g, b), radius); + } +} + +void IrrDriver::clearLights() +{ + u32 i; + const u32 max = m_lights.size(); + for (i = 0; i < max; i++) + { + m_lights[i]->drop(); + } + + m_lights.clear(); +} diff --git a/src/graphics/irr_driver.hpp b/src/graphics/irr_driver.hpp index 125fa9f60..ad28c204a 100644 --- a/src/graphics/irr_driver.hpp +++ b/src/graphics/irr_driver.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -39,11 +39,15 @@ namespace irr { namespace scene { class ISceneManager; class IMesh; class IAnimatedMeshSceneNode; class IAnimatedMesh; - class IMeshSceneNode; class IParticleSystemSceneNode; class ICameraSceneNode; class ILightSceneNode; } + class IMeshSceneNode; class IParticleSystemSceneNode; class ICameraSceneNode; class ILightSceneNode; + class CLensFlareSceneNode; } namespace gui { class IGUIEnvironment; class IGUIFont; } } using namespace irr; +#include "graphics/rtts.hpp" +#include "graphics/shaders.hpp" +#include "graphics/wind.hpp" #include "utils/aligned_array.hpp" #include "utils/no_copy.hpp" #include "utils/ptr_vector.hpp" @@ -53,6 +57,8 @@ class AbstractKart; class Camera; class PerCameraNode; class PostProcessing; +class LightNode; +class ShadowImportance; /** * \brief class that creates the irrLicht device and offers higher-level @@ -74,6 +80,21 @@ private: gui::IGUIFont *m_race_font; /** Post-processing. */ PostProcessing *m_post_processing; + /** Shaders. */ + Shaders *m_shaders; + /** Wind. */ + Wind *m_wind; + /** RTTs. */ + RTT *m_rtts; + /** Shadow importance. */ + ShadowImportance *m_shadow_importance; + + /** Additional details to be shown in case that a texture is not found. + * This is used to specify details like: "while loading kart '...'" */ + std::string m_texture_error_message; + + /** The main MRT setup. */ + core::array m_mrt; /** Flag to indicate if a resolution change is pending (which will be * acted upon in the next update). None means no change, yes means @@ -95,6 +116,12 @@ public: int getWidth() const {return m_width; } int getHeight() const {return m_height; } }; // VideoMode + + struct BloomData { + scene::ISceneNode * node; + float power; + }; + private: std::vector m_modes; @@ -112,6 +139,34 @@ private: bool m_request_screenshot; + bool m_wireframe; + bool m_mipviz; + bool m_normals; + bool m_ssaoviz; + bool m_shadowviz; + bool m_lightviz; + bool m_distortviz; + u32 m_renderpass; + u32 m_lensflare_query; + scene::IMeshSceneNode *m_sun_interposer; + scene::CLensFlareSceneNode *m_lensflare; + scene::ICameraSceneNode *m_suncam; + + struct GlowData { + scene::ISceneNode * node; + float r, g, b; + }; + + std::vector m_glowing; + + std::vector m_lights; + + std::vector m_forcedbloom; + + std::vector m_displacing; + + std::vector m_background; + #ifdef DEBUG /** Used to visualise skeletons. */ std::vector m_debug_meshes; @@ -122,6 +177,9 @@ private: irr::scene::ISkinnedMesh* mesh, int id); #endif + void renderFixed(float dt); + void renderGLSL(float dt); + void doScreenShot(); public: IrrDriver(); @@ -147,7 +205,8 @@ public: bool create_one_quad=false); scene::IMesh *createTexturedQuadMesh(const video::SMaterial *material, const double w, const double h); - scene::ISceneNode *addWaterNode(scene::IMesh *mesh, float wave_height, + scene::ISceneNode *addWaterNode(scene::IMesh *mesh, scene::IMesh **welded, + float wave_height, float wave_speed, float wave_length); scene::IMeshSceneNode*addOctTree(scene::IMesh *mesh); scene::IMeshSceneNode*addSphere(float radius, @@ -157,6 +216,9 @@ public: PerCameraNode *addPerCameraMesh(scene::IMesh* mesh, scene::ICameraSceneNode* node, scene::ISceneNode *parent = NULL); + PerCameraNode *addPerCameraNode(scene::ISceneNode* node, + scene::ICameraSceneNode* cam, + scene::ISceneNode *parent = NULL); scene::ISceneNode *addBillboard(const core::dimension2d< f32 > size, video::ITexture *texture, scene::ISceneNode* parent=NULL, bool alphaTesting = false); @@ -171,7 +233,7 @@ public: void removeMeshFromCache(scene::IMesh *mesh); void removeTexture(video::ITexture *t); scene::IAnimatedMeshSceneNode - *addAnimatedMesh(scene::IAnimatedMesh *mesh); + *addAnimatedMesh(scene::IAnimatedMesh *mesh, scene::ISceneNode* parent=NULL); scene::ICameraSceneNode *addCameraSceneNode(); Camera *addCamera(unsigned int index, AbstractKart *kart); @@ -193,6 +255,9 @@ public: void printRenderStats(); bool supportsSplatting(); void requestScreenshot(); + void setTextureErrorMessage(const std::string &error, + const std::string &detail=""); + void unsetTextureErrorMessage(); void draw2dTriangle(const core::vector2df &a, const core::vector2df &b, const core::vector2df &c, @@ -203,6 +268,55 @@ public: + // ------------------------------------------------------------------------ + /** Convenience function that loads a texture with default parameters + * but includes an error message. + * \param filename File name of the texture to load. + * \param error Error message, potentially with a '%' which will be replaced + * with detail. + * \param detail String to replace a '%' in the error message. + */ + video::ITexture* getTexture(const std::string &filename, + const std::string &error_message, + const std::string &detail="") + { + setTextureErrorMessage(error_message, detail); + video::ITexture *tex = getTexture(filename); + unsetTextureErrorMessage(); + return tex; + } // getTexture + + // ------------------------------------------------------------------------ + /** Convenience function that loads a texture with default parameters + * but includes an error message. + * \param filename File name of the texture to load. + * \param error Error message, potentially with a '%' which will be replaced + * with detail. + * \param detail String to replace a '%' in the error message. + */ + video::ITexture* getTexture(const std::string &filename, + char *error_message, + char *detail=NULL) + { + if(!detail) + return getTexture(filename, std::string(error_message), + std::string("")); + + return getTexture(filename, std::string(error_message), + std::string(detail)); + } // getTexture + + // ------------------------------------------------------------------------ + /** Returns the currently defined texture error message, which is used + * by event_handler.cpp to print additional info about irrlicht + * internal errors or warnings. If no error message is currently + * defined, the error message is "". + */ + const std::string &getTextureErrorMessage() + { + return m_texture_error_message; + } // getTextureErrorMessage + // ------------------------------------------------------------------------ /** Returns a list of all video modes supports by the graphics card. */ const std::vector& getVideoModes() const { return m_modes; } @@ -230,9 +344,89 @@ public: /** Returns a pointer to the post processing object. */ inline PostProcessing* getPostProcessing() {return m_post_processing;} // ------------------------------------------------------------------------ - + inline core::vector3df getWind() {return m_wind->getWind();} + // ------------------------------------------------------------------------ + inline video::E_MATERIAL_TYPE getShader(const ShaderType num) {return m_shaders->getShader(num);} + // ------------------------------------------------------------------------ + inline video::IShaderConstantSetCallBack* getCallback(const ShaderType num) + { + return (m_shaders == NULL ? NULL : m_shaders->m_callbacks[num]); + } + // ------------------------------------------------------------------------ + inline video::ITexture* getRTT(TypeRTT which) {return m_rtts->getRTT(which);} + // ------------------------------------------------------------------------ inline bool isGLSL() const { return m_glsl; } // ------------------------------------------------------------------------ + void toggleWireframe() { m_wireframe ^= 1; } + // ------------------------------------------------------------------------ + void toggleMipVisualization() { m_mipviz ^= 1; } + // ------------------------------------------------------------------------ + void toggleNormals() { m_normals ^= 1; } + // ------------------------------------------------------------------------ + bool getNormals() { return m_normals; } + // ------------------------------------------------------------------------ + void toggleSSAOViz() { m_ssaoviz ^= 1; } + // ------------------------------------------------------------------------ + void toggleLightViz() { m_lightviz ^= 1; } + // ------------------------------------------------------------------------ + bool getSSAOViz() { return m_ssaoviz; } + // ------------------------------------------------------------------------ + void toggleShadowViz() { m_shadowviz ^= 1; } + // ------------------------------------------------------------------------ + bool getShadowViz() { return m_shadowviz; } + // ------------------------------------------------------------------------ + void toggleDistortViz() { m_distortviz ^= 1; } + // ------------------------------------------------------------------------ + bool getDistortViz() { return m_distortviz; } + // ------------------------------------------------------------------------ + u32 getRenderPass() { return m_renderpass; } + // ------------------------------------------------------------------------ + void addGlowingNode(scene::ISceneNode *n, float r = 1.0f, float g = 1.0f, float b = 1.0f) + { + GlowData dat; + dat.node = n; + dat.r = r; + dat.g = g; + dat.b = b; + + m_glowing.push_back(dat); + } + // ------------------------------------------------------------------------ + void clearGlowingNodes() { m_glowing.clear(); } + // ------------------------------------------------------------------------ + void addForcedBloomNode(scene::ISceneNode *n, float power = 1) + { + BloomData dat; + dat.node = n; + dat.power = power; + + m_forcedbloom.push_back(dat); + } + // ------------------------------------------------------------------------ + void clearForcedBloom() { m_forcedbloom.clear(); } + // ------------------------------------------------------------------------ + const std::vector &getForcedBloom() const { return m_forcedbloom; } + // ------------------------------------------------------------------------ + void clearDisplacingNodes() { m_displacing.clear(); } + // ------------------------------------------------------------------------ + const std::vector &getDisplacingNodes() const { return m_displacing; } + // ------------------------------------------------------------------------ + void addDisplacingNode(scene::ISceneNode * const n) { m_displacing.push_back(n); } + // ------------------------------------------------------------------------ + void clearBackgroundNodes() { m_background.clear(); } + // ------------------------------------------------------------------------ + void addBackgroundNode(scene::ISceneNode * const n) { m_background.push_back(n); } + // ------------------------------------------------------------------------ + void applyObjectPassShader(); + void applyObjectPassShader(scene::ISceneNode * const node, bool rimlit = false); + // ------------------------------------------------------------------------ + scene::ISceneNode *addLight(const core::vector3df &pos, float radius = 1.0f, float r = 1.0f, + float g = 1.0f, float b = 1.0f, bool sun = false); + // ------------------------------------------------------------------------ + void clearLights(); + // ------------------------------------------------------------------------ + scene::IMeshSceneNode *getSunInterposer() { return m_sun_interposer; } + #ifdef DEBUG /** Removes debug meshes. */ void clearDebugMesh() { m_debug_meshes.clear(); } diff --git a/src/graphics/large_mesh_buffer.hpp b/src/graphics/large_mesh_buffer.hpp new file mode 100644 index 000000000..84c77fd17 --- /dev/null +++ b/src/graphics/large_mesh_buffer.hpp @@ -0,0 +1,58 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __LARGE_MESH_BUFFER_H_INCLUDED__ +#define __LARGE_MESH_BUFFER_H_INCLUDED__ + +#include "irrArray.h" +#include "IMeshBuffer.h" +#include "CMeshBuffer.h" + +namespace irr +{ +namespace scene +{ + //! A SMeshBuffer with 32-bit indices + class LargeMeshBuffer : public SMeshBuffer + { + public: + //! Get type of index data which is stored in this meshbuffer. + /** \return Index type of this buffer. */ + virtual video::E_INDEX_TYPE getIndexType() const + { + return video::EIT_32BIT; + } + + //! Get pointer to indices + /** \return Pointer to indices. */ + virtual const u16* getIndices() const + { + return (u16 *) Indices.const_pointer(); + } + + + //! Get pointer to indices + /** \return Pointer to indices. */ + virtual u16* getIndices() + { + return (u16 *) Indices.pointer(); + } + + + //! Get number of indices + /** \return Number of indices. */ + virtual u32 getIndexCount() const + { + return Indices.size(); + } + + //! Indices into the vertices of this buffer. + core::array Indices; + }; +} // end namespace scene +} // end namespace irr + +#endif + + diff --git a/src/graphics/lens_flare.cpp b/src/graphics/lens_flare.cpp new file mode 100644 index 000000000..eebc27d16 --- /dev/null +++ b/src/graphics/lens_flare.cpp @@ -0,0 +1,264 @@ +/* TODO: copyright */ + +#include "graphics/lens_flare.hpp" +#include "IVideoDriver.h" +#include "ISceneManager.h" +#include "ISceneCollisionManager.h" + +namespace irr +{ +namespace scene +{ + +CLensFlareSceneNode::CLensFlareSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id) : + scene::ISceneNode(parent, mgr, id) +{ + #ifdef _DEBUG + setDebugName("CLensFlareSceneNode"); + #endif + + // set the bounding box + BBox.MaxEdge.set(0,0,0); + BBox.MinEdge.set(0,0,0); + + // set the initial Strength + Strength = 1.0f; + + // setup the vertices + Vertices[0] = video::S3DVertex(-1.f, -1.f, 0.f, 0.f, 0.f, 1.f, 0xffffffff, 0.f, 1.f); + Vertices[1] = video::S3DVertex(-1.f, 1.f, 0.f, 0.f, 0.f, 1.f, 0xffffffff, 0.f, 0.f); + Vertices[2] = video::S3DVertex( 1.f, 1.f, 0.f, 0.f, 0.f, 1.f, 0xffffffff, 1.f, 0.f); + Vertices[3] = video::S3DVertex( 1.f, -1.f, 0.f, 0.f, 0.f, 1.f, 0xffffffff, 1.f, 1.f); + + // setup the indices + Indices[0] = 0; + Indices[1] = 1; + Indices[2] = 2; + Indices[3] = 2; + Indices[4] = 3; + Indices[5] = 0; + + // set the default material properties + Material.MaterialType = video::EMT_TRANSPARENT_ADD_COLOR; + Material.Lighting = false; + Material.ZBuffer = video::ECFN_NEVER; + + FlareData.reallocate(30); + + // prepare the flare data array + // circles, halos and ring behind the sun + FlareData.push_back(SFlareData(EFT_CIRCLE, 0.5f, 0.12f, video::SColor(120, 60, 180, 35))); + FlareData.push_back(SFlareData(EFT_HALO, 0.45f, 0.4f, video::SColor(200, 100, 200, 60))); + FlareData.push_back(SFlareData(EFT_CIRCLE, 0.4f, 0.17f, video::SColor(240, 120, 220, 40))); + FlareData.push_back(SFlareData(EFT_CIRCLE, 0.2f, 0.35f, video::SColor(175, 175, 255, 20))); + FlareData.push_back(SFlareData(EFT_RING, 0.15f, 0.2f, video::SColor(120, 60, 255, 100))); + + // sun and glow effect at sun position + FlareData.push_back(SFlareData(EFT_SUN, 0.0f, 0.75f, video::SColor(255, 255, 255, 255))); +// FlareData.push_back(SFlareData(EFT_STREAKS, 0.0f, 2.9f, video::SColor(255, 255, 255, 255))); + FlareData.push_back(SFlareData(EFT_GLOW, 0.0f, 3.5f, video::SColor(255, 255, 255, 255))); +// FlareData.push_back(SFlareData(EFT_RING, 0.0f, 1.5f, video::SColor(120, 120, 120, 150))); + + // some lenses, halos and circles + FlareData.push_back(SFlareData(EFT_LENS, -0.15f, 0.15f, video::SColor(255, 60, 60, 90))); + FlareData.push_back(SFlareData(EFT_HALO, -0.3f, 0.3f, video::SColor(120, 60, 255, 180))); + FlareData.push_back(SFlareData(EFT_HALO, -0.4f, 0.2f, video::SColor(220, 80, 80, 98))); + FlareData.push_back(SFlareData(EFT_CIRCLE, -0.45f, 0.1f, video::SColor(220, 80, 80, 85))); + FlareData.push_back(SFlareData(EFT_RING, -0.42f, 0.3f, video::SColor(180, 60, 255, 110))); + + // some small lenses, halos and rings + FlareData.push_back(SFlareData(EFT_LENS, -0.55f, 0.2f, video::SColor(255, 60, 60, 130))); + FlareData.push_back(SFlareData(EFT_HALO, -0.6f, 0.3f, video::SColor(120, 60, 255, 80))); + FlareData.push_back(SFlareData(EFT_LENS, -0.7f, 0.2f, video::SColor(200, 60, 60, 130))); + FlareData.push_back(SFlareData(EFT_LENS, -0.71f, 0.2f, video::SColor(200, 60, 130, 60))); + FlareData.push_back(SFlareData(EFT_LENS, -0.72f, 0.2f, video::SColor(200, 130, 130, 60))); + FlareData.push_back(SFlareData(EFT_LENS, -0.74f, 0.2f, video::SColor(200, 130, 60, 60))); + + // some polyons, lenses and circle + FlareData.push_back(SFlareData(scene::EFT_POLY, -0.79f, 0.2f, video::SColor(200, 60, 130, 60))); + FlareData.push_back(SFlareData(scene::EFT_POLY, -0.86f, 0.3f, video::SColor(200, 130, 130, 60))); + FlareData.push_back(SFlareData(scene::EFT_LENS, -0.87f, 0.3f, video::SColor(180,255,192,178))); + FlareData.push_back(SFlareData(scene::EFT_CIRCLE, -0.9f, 0.1f, video::SColor(200, 60, 60, 130))); + FlareData.push_back(SFlareData(scene::EFT_POLY, -0.93f, 0.4f, video::SColor(200, 130, 60, 60))); + + // finally som polygons + FlareData.push_back(SFlareData(EFT_POLY, -0.95f, 0.6f, video::SColor(120, 60, 255, 120))); + FlareData.push_back(SFlareData(EFT_POLY, -1.0f, 0.15f, video::SColor(120, 20, 255, 85))); +} + +CLensFlareSceneNode::~CLensFlareSceneNode() +{ +} + +u32 CLensFlareSceneNode::getMaterialCount() const +{ + // return the material count (always one in our case) + return 1; +} + +video::SMaterial& CLensFlareSceneNode::getMaterial(u32 i) +{ + // return the material + return Material; +} + +core::array& CLensFlareSceneNode::getFlareData() +{ + // return the flare data array + return FlareData; +} + +void CLensFlareSceneNode::OnRegisterSceneNode() +{ + // if node is visible and Strength is greater than 0 register it for the ESNRP_TRANSPARENT_EFFECT pass + if(IsVisible && Strength > 0.0f) + { + SceneManager->registerNodeForRendering(this, scene::ESNRP_TRANSPARENT_EFFECT); + } + + // call base OnRegisterSceneNode + ISceneNode::OnRegisterSceneNode(); +} + +void CLensFlareSceneNode::render() +{ + // get the videodriver and the active camera + video::IVideoDriver* driver = SceneManager->getVideoDriver(); + ICameraSceneNode* camera = SceneManager->getActiveCamera(); + + // return if we don't have a valid driver or a valid camera + // or if we have no texture attached to the material + if (!camera || !driver || !Material.getTexture(0)) + return; + + // get screencenter + const core::vector2d screenCenter = core::vector2d( + SceneManager->getVideoDriver()->getScreenSize().Width, + SceneManager->getVideoDriver()->getScreenSize().Height)/2; + + // get screencoordinates of the node + const core::vector2d lightPos = SceneManager->getSceneCollisionManager()->getScreenCoordinatesFrom3DPosition( + getAbsolutePosition(), + camera); + + // store old projection matrix + core::matrix4 oldProjMat = driver->getTransform(video::ETS_PROJECTION); + + // store old view matrix + core::matrix4 oldViewMat = driver->getTransform(video::ETS_VIEW); + + // clear the projection matrix + driver->setTransform(video::ETS_PROJECTION, core::IdentityMatrix); + + // clear the view matrix + driver->setTransform(video::ETS_VIEW, core::IdentityMatrix); + + // set the transform + driver->setTransform(video::ETS_WORLD, core::IdentityMatrix); + + // set the material + driver->setMaterial(Material); + + // calculate some handy constants + const f32 texPos = 1.0f/EFT_COUNT; + const s32 texHeight = s32(Material.getTexture(0)->getSize().Height*0.5f); + const f32 screenWidth = f32(driver->getScreenSize().Width); + const f32 screenHeight = f32(driver->getScreenSize().Height); + + // render the flares + for (u32 i=0; iflarePos = screenCenter.getInterpolated(lightPos, -2.0*flare.Position); + + // calculate flareposition in vertex coordinates using the scalefactor of the flare + s32 flareScale = s32((texHeight*flare.Scale)); + core::rect flareRect = core::rect( + -1.f + 2.f * f32(flarePos.X-flareScale) / screenWidth, + -1.f + 2.f * f32(screenHeight-flarePos.Y-flareScale) / screenHeight, + -1.f + 2.f * f32(flarePos.X+flareScale) / screenWidth, + -1.f + 2.f * f32(screenHeight-flarePos.Y+flareScale) / screenHeight); + + // calculate flarecolor in dependence of occlusion + f32 flareAlpha = f32(flare.Color.getAlpha()) / 255.f; + video::SColor flareColor(255, + (u32)(Strength * flareAlpha * flare.Color.getRed()), + (u32)(Strength * flareAlpha * flare.Color.getGreen()), + (u32)(Strength * flareAlpha * flare.Color.getBlue())); + + // set vertex colors + Vertices[0].Color = flareColor; + Vertices[1].Color = flareColor; + Vertices[2].Color = flareColor; + Vertices[3].Color = flareColor; + + // set texture coordinates + Vertices[0].TCoords.set( flare.Type * texPos, 1.0f); + Vertices[1].TCoords.set( flare.Type * texPos, 0.0f); + Vertices[2].TCoords.set((flare.Type+1) * texPos, 0.0f); + Vertices[3].TCoords.set((flare.Type+1) * texPos, 1.0f); + + // set vertex positions + Vertices[0].Pos.set(flareRect.UpperLeftCorner.X, flareRect.UpperLeftCorner.Y, 0); + Vertices[1].Pos.set(flareRect.UpperLeftCorner.X, flareRect.LowerRightCorner .Y, 0); + Vertices[2].Pos.set(flareRect.LowerRightCorner.X, flareRect.LowerRightCorner.Y, 0); + Vertices[3].Pos.set(flareRect.LowerRightCorner.X, flareRect.UpperLeftCorner.Y, 0); + + //draw the mesh + driver->drawIndexedTriangleList(Vertices, 4, Indices, 2); + } + + // restore view matrix + driver->setTransform(video::ETS_VIEW, oldViewMat); + + // restore projection matrix + driver->setTransform(video::ETS_PROJECTION, oldProjMat); +} + +const core::aabbox3df& CLensFlareSceneNode::getBoundingBox() const +{ + // return the bounding box + return BBox; +} + +ESCENE_NODE_TYPE CLensFlareSceneNode::getType() const +{ + // return type of the scene node + // (important when using with a custom scene node factory) + return scene::ESNT_UNKNOWN; //(ESCENE_NODE_TYPE) ECSNT_LENSFLARE; +} + +void CLensFlareSceneNode::serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options) const +{ + // write attributes of the scene node. + ISceneNode::serializeAttributes(out, options); +} + +void CLensFlareSceneNode::deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options) +{ + // read attributes of the scene node. + ISceneNode::deserializeAttributes(in, options); +} + +ISceneNode* CLensFlareSceneNode::clone(ISceneNode* newParent, ISceneManager* newManager) +{ + if (!newParent) + newParent = Parent; + if (!newManager) + newManager = SceneManager; + + CLensFlareSceneNode* nb = new CLensFlareSceneNode(newParent, newManager, ID); + + nb->cloneMembers(this, newManager); + nb->Material = Material; + + nb->drop(); + return nb; +} + +}// end irr namespace +}// end scene namespace + diff --git a/src/graphics/lens_flare.hpp b/src/graphics/lens_flare.hpp new file mode 100644 index 000000000..50d7145b0 --- /dev/null +++ b/src/graphics/lens_flare.hpp @@ -0,0 +1,117 @@ +#ifndef _CLENSFLARESCENENODE_H +#define _CLENSFLARESCENENODE_H + +#include +#include + +namespace irr +{ +namespace scene +{ + // enum with different flare types (used by SFlareData) + enum E_FLARE_TYPE + { + EFT_SUN = 0, + EFT_GLOW, + EFT_LENS, + EFT_STREAKS, + EFT_RING, + EFT_HALO, + EFT_CIRCLE, + EFT_POLY, + EFT_COUNT + }; + + // struct holding the flare specification + struct SFlareData + { + public: + // constructor + SFlareData(const E_FLARE_TYPE type, const float position, + const float scale, const video::SColor &color) + { + Type = type; + Position = position; + Scale = scale; + Color = color; + } + + // flare type + E_FLARE_TYPE Type; + // position + f32 Position; + // flare scale + f32 Scale; + // flare color + video::SColor Color; + }; + + class CLensFlareSceneNode : public ISceneNode + { + public: + // constructor + CLensFlareSceneNode(ISceneNode* parent, scene::ISceneManager* mgr, s32 id = -1); + + // destructor + virtual ~CLensFlareSceneNode(); + + protected: + // material of the node + video::SMaterial Material; + + // Bounding box + core::aabbox3d BBox; + + // vertices and indices of a flare element + video::S3DVertex Vertices[4]; + u16 Indices[6]; + + // flare data array + core::array FlareData; + + // Strength of the flare effect (between 0 and 1) + f32 Strength; + + public: + // typical OnRegisterSceneNode function + virtual void OnRegisterSceneNode(); + + // renders the node + virtual void render(); + + // returns the bounding box + virtual const core::aabbox3d& getBoundingBox() const; + + // returns the node type + virtual ESCENE_NODE_TYPE getType() const; + + // returns the material count + virtual u32 getMaterialCount() const; + + // returns the material + virtual video::SMaterial& getMaterial(u32 i); + + // writes attributes of the scene node. + virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options = 0) const; + + // reads attributes of the scene node. + virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options = 0); + + // clones the node + virtual ISceneNode* clone(ISceneNode* newParent = 0, ISceneManager* newManager = 0); + + // returns the flare data array + core::array& getFlareData(); + + // returns the strength (visibility) of the flares + f32 getStrength() { return Strength; } + + // sets the strength (visibility) of the flares + void setStrength(f32 strength) { Strength = core::clamp(strength, 0.0f, 0.7f); } + }; + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/src/graphics/light.cpp b/src/graphics/light.cpp new file mode 100644 index 000000000..bbc0d0da6 --- /dev/null +++ b/src/graphics/light.cpp @@ -0,0 +1,93 @@ +// +// SuperTuxKart - a fun racing game with go-kart +// Copyright (C) 2013 Lauri Kasanen +// +// 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 "graphics/light.hpp" + +#include "graphics/callbacks.hpp" +#include "graphics/glwrap.hpp" +#include "graphics/irr_driver.hpp" +#include "graphics/material_manager.hpp" +#include "graphics/material.hpp" +#include "graphics/rtts.hpp" +#include "graphics/shaders.hpp" + +using namespace video; +using namespace scene; +using namespace core; + +IMesh * LightNode::sphere = NULL; +SMaterial LightNode::mat; +aabbox3df LightNode::box; + + +LightNode::LightNode(scene::ISceneManager* mgr, float radius, float r, float g, float b): + ISceneNode(mgr->getRootSceneNode(), mgr, -1) +{ + if (!sphere) + { + mat.Lighting = false; + mat.MaterialType = irr_driver->getShader(ES_POINTLIGHT); + + mat.setTexture(0, irr_driver->getRTT(RTT_NORMAL)); + mat.setTexture(1, irr_driver->getRTT(RTT_DEPTH)); + + for (u32 i = 0; i < MATERIAL_MAX_TEXTURES; ++i) + { + mat.TextureLayer[i].TextureWrapU = + mat.TextureLayer[i].TextureWrapV = ETC_CLAMP_TO_EDGE; + } + + mat.setFlag(EMF_BILINEAR_FILTER, false); + mat.setFlag(EMF_ZWRITE_ENABLE, false); + + mat.MaterialTypeParam = pack_textureBlendFunc(EBF_ONE, EBF_ONE); + mat.BlendOperation = EBO_ADD; + + sphere = mgr->getGeometryCreator()->createSphereMesh(1, 16, 16); + box = sphere->getBoundingBox(); + } + + setScale(vector3df(radius)); + m_radius = radius; + + m_color[0] = r; + m_color[1] = g; + m_color[2] = b; +} + +LightNode::~LightNode() +{ +} + +void LightNode::render() +{ + PointLightProvider * const cb = (PointLightProvider *) irr_driver->getCallback(ES_POINTLIGHT); + cb->setColor(m_color[0], m_color[1], m_color[2]); + cb->setPosition(getPosition().X, getPosition().Y, getPosition().Z); + cb->setRadius(m_radius); + + IVideoDriver * const drv = irr_driver->getVideoDriver(); + drv->setTransform(ETS_WORLD, AbsoluteTransformation); + drv->setMaterial(mat); + + drv->drawMeshBuffer(sphere->getMeshBuffer(0)); +} + +void LightNode::OnRegisterSceneNode() +{ // This node is only drawn manually. +} diff --git a/src/graphics/light.hpp b/src/graphics/light.hpp new file mode 100644 index 000000000..245a3250e --- /dev/null +++ b/src/graphics/light.hpp @@ -0,0 +1,64 @@ +// +// SuperTuxKart - a fun racing game with go-kart +// Copyright (C) 2013 Lauri Kasanen +// +// 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_LIGHT_HPP +#define HEADER_LIGHT_HPP + +#include +#include + +using namespace irr; + +namespace irr +{ + namespace scene { class IMesh; } +} + +// The actual node +class LightNode: public scene::ISceneNode +{ +public: + LightNode(scene::ISceneManager* mgr, float radius, float r, float g, float b); + virtual ~LightNode(); + + virtual void render() OVERRIDE; + + virtual const core::aabbox3d& getBoundingBox() const OVERRIDE + { + return box; + } + + virtual void OnRegisterSceneNode() OVERRIDE; + + virtual u32 getMaterialCount() const OVERRIDE { return 1; } + virtual video::SMaterial& getMaterial(u32 i) OVERRIDE { return mat; } + + float getRadius() const { return m_radius; } + void getColor(float out[3]) const { memcpy(out, m_color, 3 * sizeof(float)); } + +protected: + static video::SMaterial mat; + static core::aabbox3df box; + + static scene::IMesh *sphere; + + float m_radius; + float m_color[3]; +}; + +#endif diff --git a/src/graphics/lod_node.cpp b/src/graphics/lod_node.cpp index 5c04b5aad..f8820d69d 100644 --- a/src/graphics/lod_node.cpp +++ b/src/graphics/lod_node.cpp @@ -1,6 +1,6 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Marianne Gagnon -// based on code Copyright (C) 2002-2010 Nikolaus Gebhardt +// Copyright (C) 2011-2013 Marianne Gagnon +// based on code Copyright 2002-2010 Nikolaus Gebhardt // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -49,6 +49,7 @@ LODNode::LODNode(std::string group_name, scene::ISceneNode* parent, drop(); m_forced_lod = -1; + m_last_tick = 0; } LODNode::~LODNode() @@ -81,6 +82,11 @@ int LODNode::getLevel() if (dist < m_detail[n]) return n; } + + // If it's the shadow pass, and we would have otherwise hidden the item, show the min one + if (curr_cam->isOrthogonal()) + return m_detail.size() - 1; + return -1; } // getLevel @@ -139,9 +145,12 @@ void LODNode::OnRegisterSceneNode() shown = true; } + const u32 now = irr_driver->getDevice()->getTimer()->getTime(); + // support an optional, mostly hard-coded fade-in/out effect for objects with a single level if (m_nodes.size() == 1 && (m_nodes[0]->getType() == scene::ESNT_MESH || - m_nodes[0]->getType() == scene::ESNT_ANIMATED_MESH)) + m_nodes[0]->getType() == scene::ESNT_ANIMATED_MESH) && + now > m_last_tick) { if (m_previous_visibility == WAS_HIDDEN && shown) { @@ -237,6 +246,7 @@ void LODNode::OnRegisterSceneNode() } m_previous_visibility = (shown ? WAS_SHOWN : WAS_HIDDEN); + m_last_tick = now; // If this node has children other than the LOD nodes, draw them core::list::Iterator it; @@ -279,7 +289,13 @@ void LODNode::add(int level, scene::ISceneNode* node, bool reparent) if(UserConfigParams::m_hw_skinning_enabled && node->getType() == scene::ESNT_ANIMATED_MESH) HardwareSkinning::prepareNode((scene::IAnimatedMeshSceneNode*)node); + if (node->getType() == scene::ESNT_ANIMATED_MESH) + ((scene::IAnimatedMeshSceneNode *) node)->setReadOnlyMaterials(true); + if (node->getType() == scene::ESNT_MESH) + ((scene::IMeshSceneNode *) node)->setReadOnlyMaterials(true); + node->drop(); node->updateAbsolutePosition(); + irr_driver->applyObjectPassShader(node); } diff --git a/src/graphics/lod_node.hpp b/src/graphics/lod_node.hpp index 65762d057..3cca1bc28 100644 --- a/src/graphics/lod_node.hpp +++ b/src/graphics/lod_node.hpp @@ -1,6 +1,6 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Marianne Gagnon -// based on code Copyright (C) 2002-2010 Nikolaus Gebhardt +// Copyright (C) 2011-2013 Marianne Gagnon +// based on code Copyright 2002-2010 Nikolaus Gebhardt // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -71,6 +71,8 @@ private: PreviousVisibility m_previous_visibility; + u32 m_last_tick; + public: LODNode(std::string group_name, scene::ISceneNode* parent, scene::ISceneManager* mgr, s32 id=-1); @@ -112,8 +114,8 @@ public: std::vector& getAllNodes() { return m_nodes; } //! OnAnimate() is called just before rendering the whole scene. - /** This method will be called once per frame, independent - of whether the scene node is visible or not. */ + /** This method will be called once per frame, independent + of whether the scene node is visible or not. */ virtual void OnAnimate(u32 timeMs); virtual void OnRegisterSceneNode(); diff --git a/src/graphics/material.cpp b/src/graphics/material.cpp index 8ee0c10c1..31929007b 100644 --- a/src/graphics/material.cpp +++ b/src/graphics/material.cpp @@ -1,7 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart // Copyright (C) 2004 Steve Baker -// 2010 Steve Baker, Joerg Henrichs +// Copyright (C) 2010-2013 Steve Baker, Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -27,8 +27,10 @@ #include "config/user_config.hpp" #include "config/stk_config.hpp" #include "guiengine/engine.hpp" +#include "graphics/callbacks.hpp" #include "graphics/irr_driver.hpp" #include "graphics/particle_kind_manager.hpp" +#include "graphics/shaders.hpp" #include "io/file_manager.hpp" #include "io/xml_node.hpp" #include "utils/string_utils.hpp" @@ -36,7 +38,6 @@ #include "tracks/track.hpp" #include "utils/log.hpp" -#include #include #include #include @@ -46,351 +47,6 @@ using namespace irr::video; const unsigned int UCLAMP = 1; const unsigned int VCLAMP = 2; -//----------------------------------------------------------------------------- - -class NormalMapProvider : public video::IShaderConstantSetCallBack -{ - bool m_with_lightmap; - -public: - LEAK_CHECK() - - NormalMapProvider(bool withLightmap) - { - m_with_lightmap = withLightmap; - } - - virtual void OnSetConstants( - irr::video::IMaterialRendererServices *services, - s32 userData) - { - s32 decaltex = 0; - services->setPixelShaderConstant("DecalTex", &decaltex, 1); - - s32 bumptex = 1; - services->setPixelShaderConstant("BumpTex", &bumptex, 1); - - s32 lightmapTex = (m_with_lightmap ? 2 : 0); - services->setPixelShaderConstant("LightMapTex", &lightmapTex, 1); - - s32 hasLightMap = (m_with_lightmap ? 1 : 0); - services->setPixelShaderConstant("HasLightMap", &hasLightMap, 1); - - // We could calculate light direction as coming from the sun (then we'd need to - // transform it into camera space). But I find that pretending light - // comes from the camera gives good results - const float lightdir[] = {0.1852f, -0.1852f, -0.9259f}; - services->setVertexShaderConstant("lightdir", lightdir, 3); - } -}; - - -//----------------------------------------------------------------------------- - -class WaterShaderProvider : public video::IShaderConstantSetCallBack -{ - float m_dx_1, m_dy_1, m_dx_2, m_dy_2; - float m_water_shader_speed_1; - float m_water_shader_speed_2; - bool m_fog; - -public: - LEAK_CHECK() - - void enableFog(bool enable) - { - m_fog = enable; - } - - - WaterShaderProvider(float water_shader_speed_1, - float water_shader_speed_2) - { - m_dx_1 = 0.0f; - m_dy_1 = 0.0f; - m_dx_2 = 0.0f; - m_dy_2 = 0.0f; - - m_water_shader_speed_1 = water_shader_speed_1/100.0f; - m_water_shader_speed_2 = water_shader_speed_2/100.0f; - - m_fog = false; - } - - virtual void OnSetConstants( - irr::video::IMaterialRendererServices *services, - s32 userData) - { - m_dx_1 += GUIEngine::getLatestDt()*m_water_shader_speed_1; - m_dy_1 += GUIEngine::getLatestDt()*m_water_shader_speed_1; - - m_dx_2 += GUIEngine::getLatestDt()*m_water_shader_speed_2; - m_dy_2 -= GUIEngine::getLatestDt()*m_water_shader_speed_2; - - if (m_dx_1 > 1.0f) m_dx_1 -= 1.0f; - if (m_dy_1 > 1.0f) m_dy_1 -= 1.0f; - if (m_dx_2 > 1.0f) m_dx_2 -= 1.0f; - if (m_dy_2 < 0.0f) m_dy_2 += 1.0f; - - s32 decaltex = 0; - services->setPixelShaderConstant("DecalTex", &decaltex, 1); - - s32 bumptex = 1; - services->setPixelShaderConstant("BumpTex1", &bumptex, 1); - - bumptex = 2; - services->setPixelShaderConstant("BumpTex2", &bumptex, 1); - - // We could calculate light direction as coming from the sun (then we'd need to - // transform it into camera space). But I find that pretending light - // comes from the camera gives good results - const float lightdir[] = {-0.315f, 0.91f, -0.3f}; - services->setVertexShaderConstant("lightdir", lightdir, 3); - - services->setVertexShaderConstant("delta1", &m_dx_1, 2); - services->setVertexShaderConstant("delta2", &m_dx_2, 2); - - if (m_fog) - { - Track* t = World::getWorld()->getTrack(); - - float fogStart = t->getFogStart(); - services->setPixelShaderConstant("fogFrom", &fogStart, 1); - - float fogEnd = t->getFogEnd(); - services->setPixelShaderConstant("fogTo", &fogEnd, 1); - - video::SColor fogColor = t->getFogColor(); - float fogColorVec[] = {fogColor.getRed()/255.0f, - fogColor.getGreen()/255.0f, - fogColor.getBlue()/255.0f, 1.0f}; - services->setVertexShaderConstant("fogColor", fogColorVec, 4); - } - } -}; - -//----------------------------------------------------------------------------- - -// FIXME: refactor this hack to get per-instance properties, and apply the -// clean fix to all shaders why we're at it...... -std::map grass_shaders_times; -int grass_shaders_times_index = 0; - -class GrassShaderProvider : public video::IShaderConstantSetCallBack -{ - bool m_fog; - float m_angle; - float m_amplitude; - float m_speed; - -public: - LEAK_CHECK() - - - GrassShaderProvider(float amplitude, float speed) - { - m_fog = false; - m_angle = 0.0f; - m_amplitude = amplitude; - m_speed = speed; - } - - - void enableFog(bool enable) - { - m_fog = enable; - } - - void update(float dt) - { - m_angle += GUIEngine::getLatestDt()*m_speed; - if (m_angle > M_PI*2) m_angle -= M_PI*2; - } - - virtual void OnSetConstants(irr::video::IMaterialRendererServices *services, - s32 userData) - { - grass_shaders_times[userData] += GUIEngine::getLatestDt()*m_speed; - if (grass_shaders_times[userData] > M_PI*2) grass_shaders_times[userData] -= M_PI*2; - - services->setVertexShaderConstant("angle", &grass_shaders_times[userData], 1); - - int fog = (m_fog ? 1 : 0); - services->setVertexShaderConstant("fog", &fog, 1); - - s32 tex = 0; - services->setVertexShaderConstant("tex", &tex, 1); - - services->setVertexShaderConstant("amplitude", &m_amplitude, 1); - - if (m_fog) - { - Track* t = World::getWorld()->getTrack(); - - float fogStart = t->getFogStart(); - services->setPixelShaderConstant("fogFrom", &fogStart, 1); - - float fogEnd = t->getFogEnd(); - services->setPixelShaderConstant("fogTo", &fogEnd, 1); - - video::SColor fogColor = t->getFogColor(); - float fogColorVec[] = {fogColor.getRed()/255.0f, - fogColor.getGreen()/255.0f, - fogColor.getBlue()/255.0f, 1.0f}; - services->setVertexShaderConstant("fogColor", fogColorVec, 4); - } - } -}; - -//----------------------------------------------------------------------------- - -#if 0 -#pragma mark - -#endif - -class SplattingProvider : public video::IShaderConstantSetCallBack -{ - core::vector3df m_light_direction; - bool m_light_dir_calculated; - bool m_lightmap; - -public: - LEAK_CHECK() - - SplattingProvider(bool lightmap) - { - m_light_dir_calculated = false; - m_lightmap = lightmap; - } - - virtual void OnSetConstants( - irr::video::IMaterialRendererServices *services, - s32 userData) - { - if (!m_light_dir_calculated) - { - m_light_dir_calculated = true; - m_light_direction = -World::getWorld()->getTrack()->getSunRotation().rotationToDirection(); - } - - s32 tex_layout = 1; - services->setPixelShaderConstant("tex_layout", &tex_layout, 1); - - s32 tex_detail0 = 2; - services->setPixelShaderConstant("tex_detail0", &tex_detail0, 1); - - s32 tex_detail1 = 3; - services->setPixelShaderConstant("tex_detail1", &tex_detail1, 1); - - s32 tex_detail2 = 4; - services->setPixelShaderConstant("tex_detail2", &tex_detail2, 1); - - s32 tex_detail3 = 5; - services->setPixelShaderConstant("tex_detail3", &tex_detail3, 1); - - if (m_lightmap) - { - s32 tex_lightmap = 6; - services->setPixelShaderConstant("tex_lightmap", &tex_lightmap, 1); - } - - services->setVertexShaderConstant("lightdir", &m_light_direction.X, 3); - } -}; - -//----------------------------------------------------------------------------- - -#if 0 -#pragma mark - -#endif - -class SphereMapProvider: public video::IShaderConstantSetCallBack -{ - core::vector3df m_light_direction; - -public: - LEAK_CHECK() - - SphereMapProvider() - { - m_light_direction = core::vector3df(-0.6f, -0.5f, -0.63f); - //m_light_direction = core::vector3df(-0.315f, 0.91f, -0.3f); - } - - virtual void OnSetConstants( - irr::video::IMaterialRendererServices *services, - s32 userData) - { - s32 texture = 0; - services->setPixelShaderConstant("texture", &texture, 1); - - services->setVertexShaderConstant("lightdir", &m_light_direction.X, 3); - } -}; - -//----------------------------------------------------------------------------- -#if 0 -#pragma mark - -#endif - -class BubbleEffectProvider : public video::IShaderConstantSetCallBack -{ - irr::u32 initial_time; - float m_transparency; - bool m_is_visible; - -public: - LEAK_CHECK() - - BubbleEffectProvider() - { - initial_time = irr_driver->getDevice()->getTimer()->getRealTime(); - m_transparency = 1.0f; - m_is_visible = true; - } - - virtual void OnSetConstants( - irr::video::IMaterialRendererServices *services, - s32 userData) - { - if (m_is_visible && m_transparency < 1.0f) - { - m_transparency += GUIEngine::getLatestDt()*0.3f; - if (m_transparency > 1.0f) m_transparency = 1.0f; - } - else if (!m_is_visible && m_transparency > 0.0f) - { - m_transparency -= GUIEngine::getLatestDt()*0.3f; - if (m_transparency < 0.0f) m_transparency = 0.0f; - } - - float time = (irr_driver->getDevice()->getTimer()->getRealTime() - initial_time) / 1000.0f; - services->setVertexShaderConstant("time", &time, 1); - services->setVertexShaderConstant("transparency", &m_transparency, 1); - } - - void onMadeVisible() - { - m_is_visible = true; - } - - void onHidden() - { - m_is_visible = false; - m_transparency = 0.0f; - } - - void isInitiallyHidden() - { - m_is_visible = false; - m_transparency = 0.0f; - } -}; - -#if 0 -#pragma mark - -#endif - //----------------------------------------------------------------------------- /** Create a new material using the parameters specified in the xml file. * \param node Node containing the parameters for this material. @@ -430,8 +86,9 @@ Material::Material(const XMLNode *node, int index, bool deprecated) else if (s=="" || s=="none") m_adjust_image = ADJ_NONE; else - printf("Incorrect adjust-image specification: '%s' - ignored.\n", - s.c_str()); + Log::warn("material", + "Incorrect adjust-image specification: '%s' - ignored.", + s.c_str()); node->get("alpha", &m_alpha_blending ); node->get("light", &m_lighting ); @@ -458,9 +115,14 @@ Material::Material(const XMLNode *node, int index, bool deprecated) { m_collision_reaction = PUSH_BACK; } + else if (creaction == "push-soccer") + { + m_collision_reaction = PUSH_SOCCER_BALL; + } else if (creaction.size() > 0) { - fprintf(stderr, "[Material] WARNING: Unknown collision reaction '%s'\n", creaction.c_str()); + Log::warn("Material","Unknown collision reaction '%s'", + creaction.c_str()); } node->get("below-surface", &m_below_surface ); @@ -562,16 +224,19 @@ Material::Material(const XMLNode *node, int index, bool deprecated) node->get("splatting-texture-2", &m_splatting_texture_2); node->get("splatting-texture-3", &m_splatting_texture_3); node->get("splatting-texture-4", &m_splatting_texture_4); - node->get("splatting-lightmap", &m_splatting_lightmap); + } + else if (s == "caustics") + { + m_graphical_effect = GE_CAUSTICS; } else if (s == "none") { } else if (s != "") { - fprintf(stderr, - "Invalid graphical effect specification: '%s' - ignored.\n", - s.c_str()); + Log::warn("material", + "Invalid graphical effect specification: '%s' - ignored.", + s.c_str()); } else { @@ -591,7 +256,8 @@ Material::Material(const XMLNode *node, int index, bool deprecated) } else { - fprintf(stderr, "[Material] WARNING: could not find normal map image in materials.xml\n"); + Log::warn("material", + "Could not find normal map image in materials.xml"); } node->get("normal-light-map", &m_normal_map_shader_lightmap); @@ -614,9 +280,8 @@ Material::Material(const XMLNode *node, int index, bool deprecated) else if (s == "additive") m_add = true; else if (s == "coverage") m_alpha_to_coverage = true; else if (s != "none") - fprintf(stderr, - "[Material] WARNING: Unknown compositing mode '%s'\n", - s.c_str()); + Log::warn("material", "Unknown compositing mode '%s'", + s.c_str()); } @@ -661,10 +326,9 @@ Material::Material(const XMLNode *node, int index, bool deprecated) } else { - fprintf(stderr, - "[Material] WARNING: unknown node type '%s' for texture " - "'%s' - ignored.\n", - child_node->getName().c_str(), m_texname.c_str()); + Log::warn("material", "Unknown node type '%s' for texture " + "'%s' - ignored.", + child_node->getName().c_str(), m_texname.c_str()); } } // for i getNumNodes() @@ -735,8 +399,6 @@ void Material::init(unsigned int index) m_water_splash = false; m_is_jump_texture = false; - m_shaders.resize(SHADER_COUNT, NULL); - for (int n=0; ngetTexture(full_path, + isPreMul(), + isPreDiv(), + complain_if_not_found); } - - - m_texture = irr_driver->getTexture(full_path, - isPreMul(), - isPreDiv(), - complain_if_not_found); if (m_texture == NULL) return; @@ -776,9 +440,8 @@ void Material::install(bool is_full_path, bool complain_if_not_found) } else { - fprintf(stderr, "Applying mask failed for '%s'!\n", - m_texname.c_str()); - return; + Log::warn("material", "Applying mask failed for '%s'!", + m_texname.c_str()); } } m_texture->grab(); @@ -794,20 +457,6 @@ Material::~Material() irr_driver->removeTexture(m_texture); } - for (unsigned int n=0; ndrop(); - } - } - - for (std::map::iterator it = m_bubble_provider.begin(); - it != m_bubble_provider.end(); it++) - { - it->second->drop(); - } - // If a special sfx is installed (that isn't part of stk itself), the // entry needs to be removed from the sfx_manager's mapping, since other // tracks might use the same name. @@ -830,8 +479,8 @@ void Material::initCustomSFX(const XMLNode *sfx) if (filename.empty()) { - fprintf(stderr, "[Material] WARNING: sfx node has no 'filename' " - "attribute, sound effect will be ignored\n"); + Log::warn("material", "Sfx node has no 'filename' " + "attribute, sound effect will be ignored."); return; } @@ -909,10 +558,10 @@ void Material::initParticlesEffect(const XMLNode *node) if (count == 0) { - fprintf(stderr, "[Material::initParticlesEffect] WARNING: Particles " - "'%s' for material '%s' are declared but not used " - "(no emission condition set)\n", - base.c_str(), m_texname.c_str()); + Log::warn("material", "initParticlesEffect: Particles " + "'%s' for material '%s' are declared but not used " + "(no emission condition set).", + base.c_str(), m_texname.c_str()); } for (int c=0; cgetStatus() == SFXManager::SFX_PAUSED) { - if (speedplay(); } else if (sfx->getStatus() == SFXManager::SFX_PLAYING) { - if (speedpause(); @@ -981,9 +631,12 @@ void Material::setMaterialProperties(video::SMaterial *m, scene::IMeshBuffer* m // materials.xml, if you want to set flags for all surfaces, see // 'MaterialManager::setAllMaterialFlags' - if (m_deprecated || (m->getTexture(0) != NULL && ((core::stringc)m->getTexture(0)->getName()).find("deprecated") != -1)) + if (m_deprecated || + (m->getTexture(0) != NULL && + ((core::stringc)m->getTexture(0)->getName()).find("deprecated") != -1)) { - fprintf(stderr, "WARNING: track uses deprecated texture <%s>\n", m_texname.c_str()); + Log::warn("material", "Track uses deprecated texture '%s'\n", + m_texname.c_str()); } @@ -1022,25 +675,10 @@ void Material::setMaterialProperties(video::SMaterial *m, scene::IMeshBuffer* m } if (m_smooth_reflection_shader) { - IVideoDriver* video_driver = irr_driver->getVideoDriver(); - if (UserConfigParams::m_pixel_shaders && - irr_driver->isGLSL()) + if (irr_driver->isGLSL()) { - if (m_shaders[SHADER_SPHERE_MAP] == NULL) - { - m_shaders[SHADER_SPHERE_MAP] = new SphereMapProvider(); + m->MaterialType = irr_driver->getShader(ES_SPHERE_MAP); } - // Material and shaders - IGPUProgrammingServices* gpu = - irr_driver->getVideoDriver()->getGPUProgrammingServices(); - s32 material_type = gpu->addHighLevelShaderMaterialFromFiles( - (file_manager->getShaderDir() + "spheremap.vert").c_str(), - "main", video::EVST_VS_2_0, - (file_manager->getShaderDir() + "spheremap.frag").c_str(), - "main", video::EPST_PS_2_0, - m_shaders[SHADER_SPHERE_MAP], video::EMT_SOLID_2_LAYER ); - m->MaterialType = (E_MATERIAL_TYPE)material_type; - } else { m->MaterialType = video::EMT_SPHERE_MAP; @@ -1059,6 +697,12 @@ void Material::setMaterialProperties(video::SMaterial *m, scene::IMeshBuffer* m } if (m_graphical_effect == GE_SPHERE_MAP) { + if (irr_driver->isGLSL()) + { + m->MaterialType = irr_driver->getShader(ES_SPHERE_MAP); + } + else + { m->MaterialType = video::EMT_SPHERE_MAP; // sphere map + alpha blending is a supported combination so in @@ -1072,7 +716,8 @@ void Material::setMaterialProperties(video::SMaterial *m, scene::IMeshBuffer* m modes++; } } -#if !LIGHTMAP_VISUALISATION + } + if (m_lightmap) { m->MaterialType = video::EMT_LIGHTMAP; @@ -1083,7 +728,7 @@ void Material::setMaterialProperties(video::SMaterial *m, scene::IMeshBuffer* m m->MaterialType = video::EMT_LIGHTMAP_ADD; modes++; } -#endif + if (m_add) { //m->MaterialType = video::EMT_TRANSPARENT_ADD_COLOR; @@ -1102,8 +747,7 @@ void Material::setMaterialProperties(video::SMaterial *m, scene::IMeshBuffer* m if (m_graphical_effect == GE_NORMAL_MAP) { IVideoDriver* video_driver = irr_driver->getVideoDriver(); - if (UserConfigParams::m_pixel_shaders && - irr_driver->isGLSL()) + if (irr_driver->isGLSL()) { ITexture* tex = irr_driver->getTexture(m_normal_map_tex); if (m_is_heightmap) @@ -1121,37 +765,9 @@ void Material::setMaterialProperties(video::SMaterial *m, scene::IMeshBuffer* m with_lightmap = true; } - if (with_lightmap) - { - if (m_shaders[SHADER_NORMAL_MAP_WITH_LIGHTMAP] == NULL) - { - m_shaders[SHADER_NORMAL_MAP_WITH_LIGHTMAP] = - new NormalMapProvider(true); - } - } - else - { - if (m_shaders[SHADER_NORMAL_MAP] == NULL) - { - m_shaders[SHADER_NORMAL_MAP] = new NormalMapProvider(false); - } - } - - const char* vertex_shader = "normalmap.vert"; - const char* pixel_shader = "normalmap.frag"; - // Material and shaders - IGPUProgrammingServices* gpu = - video_driver->getGPUProgrammingServices(); - s32 material_type = gpu->addHighLevelShaderMaterialFromFiles( - (file_manager->getShaderDir() + vertex_shader).c_str(), - "main", video::EVST_VS_2_0, - (file_manager->getShaderDir() + pixel_shader).c_str(), - "main", video::EPST_PS_2_0, - m_shaders[with_lightmap ? SHADER_NORMAL_MAP_WITH_LIGHTMAP - : SHADER_NORMAL_MAP], - video::EMT_SOLID_2_LAYER ); - m->MaterialType = (E_MATERIAL_TYPE)material_type; + m->MaterialType = irr_driver->getShader( + with_lightmap ? ES_NORMAL_MAP_LIGHTMAP : ES_NORMAL_MAP ); m->Lighting = false; m->ZWriteEnable = true; @@ -1201,64 +817,20 @@ void Material::setMaterialProperties(video::SMaterial *m, scene::IMeshBuffer* m } m->setTexture(5, tex); - if (m_splatting_lightmap.size() > 0) - { - tex = irr_driver->getTexture(m_splatting_lightmap); - } - m->setTexture(6, tex); - - if (m_splatting_lightmap.size() > 0) - { - if (m_shaders[SHADER_SPLATTING_LIGHTMAP] == NULL) - { - m_shaders[SHADER_SPLATTING_LIGHTMAP] = - new SplattingProvider(true); - } - } - else - { - if (m_shaders[SHADER_SPLATTING] == NULL) - { - m_shaders[SHADER_SPLATTING] = new SplattingProvider(false); - } - } - - // Material and shaders - IGPUProgrammingServices* gpu = - irr_driver->getVideoDriver()->getGPUProgrammingServices(); - - if (m_splatting_lightmap.size() > 0) - { - s32 material_type = gpu->addHighLevelShaderMaterialFromFiles( - (file_manager->getShaderDir() - + "splatting_lightmap.vert").c_str(), - "main",video::EVST_VS_2_0, - (file_manager->getShaderDir() - + "splatting_lightmap.frag").c_str(), - "main",video::EPST_PS_2_0, - m_shaders[SHADER_SPLATTING_LIGHTMAP], - video::EMT_SOLID ); - m->MaterialType = (E_MATERIAL_TYPE)material_type; + m->MaterialType = irr_driver->getShader(ES_SPLATTING); } else { - s32 material_type = gpu->addHighLevelShaderMaterialFromFiles( - (file_manager->getShaderDir() - + "splatting.vert").c_str(), - "main",video::EVST_VS_2_0, - (file_manager->getShaderDir() - + "splatting.frag").c_str(), - "main",video::EPST_PS_2_0, - m_shaders[SHADER_SPLATTING], video::EMT_SOLID ); - m->MaterialType = (E_MATERIAL_TYPE)material_type; + m->MaterialType = video::EMT_SOLID; } } - else + if (m_graphical_effect == GE_CAUSTICS && irr_driver->isGLSL()) { - m->MaterialType = video::EMT_SOLID; + m->MaterialType = irr_driver->getShader(ES_CAUSTICS); + + m->setTexture(1, irr_driver->getTexture((file_manager->getTextureDir() + "caustics.png").c_str())); } - } // Modify lightmap materials so that vertex colors are taken into account. @@ -1275,26 +847,14 @@ void Material::setMaterialProperties(video::SMaterial *m, scene::IMeshBuffer* m if (m_graphical_effect == GE_BUBBLE && mb != NULL) { - IVideoDriver* video_driver = irr_driver->getVideoDriver(); - if (UserConfigParams::m_pixel_shaders && - irr_driver->isGLSL()) + if (irr_driver->isGLSL()) { - if (m_bubble_provider.find(mb) == m_bubble_provider.end()) - { - m_bubble_provider[mb] = new BubbleEffectProvider(); - } + BubbleEffectProvider * bubble = (BubbleEffectProvider *) + irr_driver->getCallback(ES_BUBBLES); + bubble->addBubble(mb); - // Material and shaders - IGPUProgrammingServices* gpu = video_driver->getGPUProgrammingServices(); - s32 material_type = gpu->addHighLevelShaderMaterialFromFiles( - (file_manager->getShaderDir() + "bubble.vert").c_str(), - "main", video::EVST_VS_2_0, - (file_manager->getShaderDir() + "bubble.frag").c_str(), - "main", video::EPST_PS_2_0, - m_bubble_provider[mb], - (m_alpha_blending ? video::EMT_TRANSPARENT_ALPHA_CHANNEL - : video::EMT_SOLID) ); - m->MaterialType = (E_MATERIAL_TYPE)material_type; + m->MaterialType = irr_driver->getShader(ES_BUBBLES); + m->BlendOperation = video::EBO_ADD; // alpha blending and bubble shading can work together so when both are enabled // don't increment the 'modes' counter to not get the 'too many modes' warning @@ -1308,72 +868,40 @@ void Material::setMaterialProperties(video::SMaterial *m, scene::IMeshBuffer* m if (m_graphical_effect == GE_WATER_SHADER) { - IVideoDriver* video_driver = irr_driver->getVideoDriver(); - if (UserConfigParams::m_pixel_shaders && - irr_driver->isGLSL()) + if (irr_driver->isGLSL()) { - if (m_shaders[SHADER_WATER] == NULL) - { - m_shaders[SHADER_WATER] = - new WaterShaderProvider(m_water_shader_speed_1, - m_water_shader_speed_2); - } - m->setTexture(1, irr_driver->getTexture(file_manager->getTextureFile("waternormals.jpg"))); m->setTexture(2, irr_driver->getTexture(file_manager->getTextureFile("waternormals2.jpg"))); - bool fog = World::getWorld()->getTrack()->isFogEnabled(); - const char* vertex_shader = (fog ? "water_fog.vert" : "water.vert"); - const char* pixel_shader = (fog ? "water_fog.frag" : "water.frag"); + ((WaterShaderProvider *) irr_driver->getCallback(ES_WATER))-> + setSpeed(m_water_shader_speed_1/100.0f, m_water_shader_speed_2/100.0f); - ((WaterShaderProvider*)m_shaders[SHADER_WATER])->enableFog(fog); - - // Material and shaders - IGPUProgrammingServices* gpu = - irr_driver->getVideoDriver()->getGPUProgrammingServices(); - s32 material_type = gpu->addHighLevelShaderMaterialFromFiles( - (file_manager->getShaderDir() + vertex_shader).c_str(), - "main", video::EVST_VS_2_0, - (file_manager->getShaderDir() + pixel_shader ).c_str(), - "main", video::EPST_PS_2_0, - m_shaders[SHADER_WATER], - video::EMT_TRANSPARENT_ALPHA_CHANNEL); - m->MaterialType = (E_MATERIAL_TYPE)material_type; + m->MaterialType = irr_driver->getShader(ES_WATER); } modes++; } if (m_graphical_effect == GE_GRASS) { - IVideoDriver* video_driver = irr_driver->getVideoDriver(); - if (UserConfigParams::m_pixel_shaders && + if (UserConfigParams::m_weather_effects && irr_driver->isGLSL()) { - if (m_shaders[SHADER_GRASS] == NULL) - { - m_shaders[SHADER_GRASS] = - new GrassShaderProvider(m_grass_amplitude, m_grass_speed); - } - - bool fog = World::getWorld()->getTrack()->isFogEnabled(); - ((GrassShaderProvider*)m_shaders[SHADER_GRASS])->enableFog(fog); - - grass_shaders_times[grass_shaders_times_index] = (rand() % 500)/500.0f * M_PI * 2.0f; + // Only one grass speed & amplitude per map for now + ((GrassShaderProvider *) irr_driver->getCallback(ES_GRASS))-> + setSpeed(m_grass_speed); + ((GrassShaderProvider *) irr_driver->getCallback(ES_GRASS))-> + setAmplitude(m_grass_amplitude); // Material and shaders - IGPUProgrammingServices* gpu = - irr_driver->getVideoDriver()->getGPUProgrammingServices(); - s32 material_type = gpu->addHighLevelShaderMaterialFromFiles( - (file_manager->getShaderDir() + "grass.vert").c_str(), - "main", video::EVST_VS_2_0, - (file_manager->getShaderDir() + "grass.frag").c_str(), - "main", video::EPST_PS_2_0, - m_shaders[SHADER_GRASS], - video::EMT_TRANSPARENT_ALPHA_CHANNEL, - grass_shaders_times_index); - m->MaterialType = (E_MATERIAL_TYPE)material_type; + if (m_alpha_testing) + { + m->MaterialType = irr_driver->getShader(ES_GRASS_REF); + } + else { + m->MaterialType = irr_driver->getShader(ES_GRASS); + m->BlendOperation = video::EBO_ADD; + } - grass_shaders_times_index++; } } @@ -1425,11 +953,11 @@ void Material::setMaterialProperties(video::SMaterial *m, scene::IMeshBuffer* m { /** //! Texture is clamped to the last pixel - ETC_CLAMP, - //! Texture is clamped to the edge pixel - ETC_CLAMP_TO_EDGE, - //! Texture is clamped to the border pixel (if exists) - ETC_CLAMP_TO_BORDER, + ETC_CLAMP, + //! Texture is clamped to the edge pixel + ETC_CLAMP_TO_EDGE, + //! Texture is clamped to the border pixel (if exists) + ETC_CLAMP_TO_BORDER, */ for (unsigned int n=0; nisGLSL()) + return; + m->setFlag(video::EMF_FOG_ENABLE, m_fog && use_fog); if (parent != NULL) @@ -1481,10 +1013,13 @@ void Material::adjustForFog(scene::ISceneNode* parent, video::SMaterial *m, /** Callback from LOD nodes to create some effects */ void Material::onMadeVisible(scene::IMeshBuffer* who) { - if (m_bubble_provider.find(who) != m_bubble_provider.end()) - { - m_bubble_provider[who]->onMadeVisible(); - } + if (!irr_driver->isGLSL()) return; + + BubbleEffectProvider * bubble = (BubbleEffectProvider *) + irr_driver->getCallback(ES_BUBBLES); + + if (bubble != NULL) + bubble->onMadeVisible(who); } //----------------------------------------------------------------------------- @@ -1492,20 +1027,24 @@ void Material::onMadeVisible(scene::IMeshBuffer* who) /** Callback from LOD nodes to create some effects */ void Material::onHidden(scene::IMeshBuffer* who) { - if (m_bubble_provider.find(who) != m_bubble_provider.end()) - { - m_bubble_provider[who]->onHidden(); - } + if (!irr_driver->isGLSL()) return; + + BubbleEffectProvider * bubble = (BubbleEffectProvider *) + irr_driver->getCallback(ES_BUBBLES); + if (bubble != NULL) + bubble->onHidden(who); } //----------------------------------------------------------------------------- void Material::isInitiallyHidden(scene::IMeshBuffer* who) { - if (m_bubble_provider.find(who) != m_bubble_provider.end()) - { - m_bubble_provider[who]->isInitiallyHidden(); - } + if (!irr_driver->isGLSL()) return; + + BubbleEffectProvider * bubble = (BubbleEffectProvider *) + irr_driver->getCallback(ES_BUBBLES); + if (bubble != NULL) + bubble->isInitiallyHidden(who); } //----------------------------------------------------------------------------- diff --git a/src/graphics/material.hpp b/src/graphics/material.hpp index 51a6260a0..c56bc980a 100644 --- a/src/graphics/material.hpp +++ b/src/graphics/material.hpp @@ -1,6 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart // Copyright (C) 2004 Steve Baker +// Copyright (C) 2010-2013 Steve Baker, Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -27,8 +28,6 @@ #include -#define LIGHTMAP_VISUALISATION 0 - namespace irr { @@ -41,10 +40,6 @@ class XMLNode; class SFXBase; class ParticleKind; -class NormalMapProvider; -class SplattingProvider; -class BubbleEffectProvider; - /** * \ingroup graphics */ @@ -59,7 +54,8 @@ public: GE_WATER_SHADER, GE_SPHERE_MAP, GE_SPLATTING, - GE_NORMAL_MAP}; + GE_NORMAL_MAP, + GE_CAUSTICS}; enum ParticleConditions { @@ -73,23 +69,12 @@ public: { NORMAL, RESCUE, - PUSH_BACK + PUSH_BACK, + PUSH_SOCCER_BALL }; private: - enum Shaders - { - SHADER_NORMAL_MAP, - SHADER_NORMAL_MAP_WITH_LIGHTMAP, - SHADER_SPLATTING, - SHADER_WATER, - SHADER_SPHERE_MAP, - SHADER_SPLATTING_LIGHTMAP, - SHADER_GRASS, - SHADER_COUNT - }; - video::ITexture *m_texture; unsigned int m_index; std::string m_texname; @@ -232,13 +217,6 @@ private: /** If m_splatting is true, indicates the fourth splatting texture */ std::string m_splatting_texture_4; - std::string m_splatting_lightmap; - - std::vector m_shaders; - - /** Only used if bubble effect is enabled */ - std::map m_bubble_provider; - bool m_deprecated; void init (unsigned int index); @@ -253,7 +231,7 @@ public: bool complain_if_not_found=true); ~Material (); - void setSFXSpeed(SFXBase *sfx, float speed) const; + void setSFXSpeed(SFXBase *sfx, float speed, bool should_be_paused) const; void setMaterialProperties(video::SMaterial *m, scene::IMeshBuffer* mb); void adjustForFog(scene::ISceneNode* parent, video::SMaterial *m, bool use_fog) const; diff --git a/src/graphics/material_manager.cpp b/src/graphics/material_manager.cpp index 98064fdd3..553ec4a22 100644 --- a/src/graphics/material_manager.cpp +++ b/src/graphics/material_manager.cpp @@ -1,6 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004 Steve Baker +// Copyright (C) 2004-2013 Steve Baker +// Copyright (C) 2010-2013 Steve Baker, Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -59,10 +60,6 @@ MaterialManager::~MaterialManager() m_materials.clear(); } // ~MaterialManager -#if LIGHTMAP_VISUALISATION -std::set g_processed; -#endif - //----------------------------------------------------------------------------- Material* MaterialManager::getMaterialFor(video::ITexture* t, diff --git a/src/graphics/material_manager.hpp b/src/graphics/material_manager.hpp index 36fa2fdbb..27184e92a 100644 --- a/src/graphics/material_manager.hpp +++ b/src/graphics/material_manager.hpp @@ -1,6 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004 Steve Baker +// Copyright (C) 2004-2013 Steve Baker +// Copyright (C) 2010-2013 Steve Baker, Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/graphics/mesh_tools.cpp b/src/graphics/mesh_tools.cpp index ddf4ff12a..ff44674e3 100644 --- a/src/graphics/mesh_tools.cpp +++ b/src/graphics/mesh_tools.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/graphics/mesh_tools.hpp b/src/graphics/mesh_tools.hpp index 3d4df784b..7d8d6337c 100644 --- a/src/graphics/mesh_tools.hpp +++ b/src/graphics/mesh_tools.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/graphics/mlaa_areamap.hpp b/src/graphics/mlaa_areamap.hpp new file mode 100644 index 000000000..f5c636f68 --- /dev/null +++ b/src/graphics/mlaa_areamap.hpp @@ -0,0 +1,200 @@ +#ifndef AREAMAP_H +#define AREAMAP_H + +static const unsigned char AreaMap33[] = { +0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, +0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00, 0xa5, +0x08, 0x04, 0x00, 0x00, 0x00, 0x97, 0x22, 0xf5, 0x51, 0x00, 0x00, 0x00, +0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, +0x00, 0x02, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x87, 0x8f, 0xcc, 0xbf, +0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, +0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, +0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xdb, 0x06, 0x07, 0x09, 0x17, 0x12, +0x5f, 0x51, 0x45, 0x04, 0x00, 0x00, 0x08, 0x87, 0x49, 0x44, 0x41, 0x54, +0x78, 0xda, 0xed, 0x5d, 0x4b, 0x6e, 0xdb, 0x48, 0x14, 0x2c, 0x89, 0x2f, +0x4e, 0xe2, 0x09, 0x30, 0x9b, 0x38, 0x5b, 0xf9, 0x24, 0x73, 0xbb, 0xb9, +0x49, 0x6e, 0x32, 0x67, 0x98, 0x7d, 0xbc, 0xf2, 0xc2, 0x18, 0x78, 0x31, +0x81, 0xc6, 0xa6, 0xc4, 0xd7, 0xc3, 0x8f, 0x1a, 0x0d, 0x9a, 0x92, 0x5b, +0x64, 0x91, 0x7a, 0x1d, 0xa1, 0xab, 0x41, 0x28, 0x41, 0x80, 0x42, 0xd5, +0x63, 0x93, 0x32, 0x9c, 0x42, 0x35, 0xc0, 0x63, 0x03, 0x73, 0x6c, 0x60, +0x8f, 0x35, 0x78, 0xdc, 0xe3, 0x16, 0x2c, 0x78, 0x09, 0x57, 0x31, 0xca, +0x6f, 0xb8, 0xc3, 0x0d, 0x68, 0xd8, 0x4b, 0xb0, 0x1f, 0xe5, 0x2d, 0xbe, +0xe2, 0x77, 0x08, 0x48, 0xd8, 0x4b, 0xb0, 0x1f, 0xe5, 0x47, 0x7c, 0xa9, +0x7d, 0xfc, 0x86, 0x02, 0x06, 0x48, 0x46, 0x02, 0x64, 0x16, 0x8e, 0xcf, +0xb5, 0x8b, 0x17, 0x54, 0xd8, 0x42, 0x41, 0xc0, 0x5a, 0x82, 0xfd, 0x28, +0x0b, 0x7c, 0xac, 0x9d, 0xdc, 0x62, 0x07, 0xc5, 0x0b, 0xe1, 0xc4, 0x5c, +0x82, 0xfd, 0x28, 0xd7, 0xb8, 0xa9, 0x9d, 0x7c, 0xc2, 0x2b, 0xf6, 0x70, +0x78, 0x25, 0x9c, 0x98, 0x4b, 0xb0, 0x1f, 0xa5, 0x1c, 0x9c, 0xec, 0xa1, +0x50, 0x94, 0x70, 0x20, 0x60, 0x27, 0xc1, 0x7e, 0x94, 0x2b, 0x14, 0xf8, +0x50, 0xaf, 0xda, 0x4b, 0xeb, 0x04, 0x84, 0x13, 0x73, 0x09, 0xf6, 0xa3, +0x94, 0xd6, 0x47, 0x59, 0x3b, 0x51, 0x28, 0x1c, 0x76, 0x84, 0x13, 0x53, +0x09, 0xf6, 0xa3, 0x2c, 0xf0, 0xa1, 0xf5, 0xb2, 0xc7, 0xbe, 0xf5, 0xe1, +0xb0, 0x27, 0x9c, 0x98, 0x49, 0xb0, 0x1f, 0xe5, 0x1a, 0xd2, 0x38, 0xf1, +0x3e, 0x5a, 0x27, 0x20, 0x9c, 0x18, 0x4a, 0xb0, 0x1f, 0x65, 0xe7, 0x44, +0xda, 0x6d, 0x51, 0x1d, 0x9c, 0x38, 0x54, 0x84, 0x13, 0x13, 0x09, 0xf6, +0xa3, 0xf4, 0x4e, 0xe4, 0xe0, 0xc4, 0xfb, 0x00, 0xe1, 0xc4, 0x40, 0x82, +0xfd, 0x28, 0x81, 0x35, 0x8a, 0x6e, 0xb5, 0x3e, 0x2a, 0x54, 0x84, 0x13, +0x53, 0x09, 0xf6, 0xbb, 0xd2, 0x6f, 0x8a, 0xe0, 0x26, 0xf8, 0x70, 0xa8, +0xc0, 0x23, 0x7d, 0x09, 0x90, 0x79, 0x9c, 0xf4, 0x3c, 0x54, 0xa8, 0xda, +0x4f, 0x77, 0x58, 0x20, 0x9c, 0x18, 0x48, 0xb0, 0x1f, 0xa5, 0xf7, 0xb2, +0x46, 0xd8, 0x14, 0xda, 0xba, 0x00, 0xe1, 0xc4, 0x48, 0x82, 0xfd, 0x03, +0x1e, 0x9e, 0x30, 0x6d, 0x2f, 0x47, 0x6c, 0x8b, 0x5f, 0x4d, 0x02, 0x64, +0x36, 0x27, 0xc1, 0xc5, 0x3a, 0xf8, 0x68, 0x2e, 0x62, 0x5b, 0x18, 0x48, +0xb0, 0x1e, 0x25, 0x06, 0x9b, 0xa2, 0x7a, 0xe3, 0xc3, 0x2d, 0xe8, 0x84, +0x90, 0x90, 0xe6, 0xbb, 0xb2, 0xbf, 0x0a, 0x68, 0xbb, 0x0a, 0xb8, 0x76, +0x15, 0x40, 0xfb, 0xa9, 0x60, 0xc1, 0x4b, 0x48, 0xfb, 0x5d, 0x39, 0xd8, +0x14, 0x55, 0xf7, 0x19, 0x5e, 0x54, 0x07, 0x2f, 0x20, 0x9c, 0x18, 0x48, +0xb0, 0x7a, 0xc0, 0xfb, 0x4e, 0xb4, 0x59, 0xfe, 0x6f, 0xde, 0x05, 0xe1, +0x24, 0x79, 0x09, 0x32, 0xf3, 0x17, 0xa8, 0x77, 0x12, 0xf4, 0xf7, 0x9f, +0x2e, 0x47, 0x38, 0x31, 0x90, 0x60, 0xbd, 0x2b, 0x87, 0xab, 0xf0, 0x5e, +0x88, 0x6d, 0x91, 0xbc, 0x04, 0x99, 0xd7, 0xc5, 0x09, 0x2f, 0xae, 0xbd, +0xc2, 0x96, 0x70, 0x11, 0x27, 0x56, 0x12, 0xec, 0xbf, 0x76, 0x06, 0x4f, +0x58, 0x70, 0x13, 0x5e, 0x53, 0x7d, 0x17, 0x88, 0x38, 0xb1, 0x95, 0x60, +0xbf, 0x2b, 0x7b, 0x0e, 0x56, 0x6f, 0x36, 0x44, 0xe1, 0x5d, 0xb4, 0x9f, +0x8e, 0x70, 0x62, 0x20, 0xc1, 0xe0, 0x5d, 0x79, 0xf4, 0x09, 0x53, 0xac, +0xfb, 0xef, 0x7d, 0x62, 0x5b, 0x24, 0x2c, 0x41, 0xe6, 0x77, 0x32, 0xfc, +0x1a, 0xed, 0xd4, 0x7b, 0x3f, 0xde, 0x07, 0xe1, 0x24, 0x49, 0x09, 0x32, +0xf7, 0x4f, 0xc8, 0xde, 0x4b, 0xcf, 0x55, 0x70, 0xb1, 0x1e, 0xf8, 0x70, +0x70, 0xd7, 0x21, 0x61, 0x85, 0x0d, 0xee, 0xf1, 0x0d, 0xb7, 0xf8, 0x08, +0x41, 0x71, 0xb8, 0x9d, 0x61, 0x85, 0x37, 0x3a, 0xfc, 0xe7, 0xe0, 0x4f, +0x7f, 0x61, 0x45, 0x32, 0xfc, 0x09, 0x12, 0x9b, 0xcd, 0x03, 0xe9, 0x62, +0xf3, 0x9d, 0x65, 0x10, 0x3c, 0xe0, 0x09, 0x77, 0xf8, 0x8a, 0x2f, 0xf8, +0x5c, 0xd3, 0xdc, 0xb4, 0x44, 0x85, 0x27, 0xeb, 0x11, 0x22, 0x90, 0xf6, +0xc8, 0x57, 0xf8, 0x1b, 0x3f, 0x28, 0x06, 0x1a, 0xf7, 0x0f, 0x4f, 0x4f, +0x5b, 0xca, 0x05, 0xcf, 0x20, 0x00, 0xb6, 0x78, 0xc4, 0xb6, 0xcd, 0xd4, +0x75, 0x24, 0x1f, 0x5a, 0x1a, 0x69, 0x49, 0x8a, 0x37, 0x3f, 0x5d, 0xe0, +0x08, 0xe1, 0x37, 0xfc, 0xc0, 0x3f, 0x0c, 0xc3, 0x2c, 0x51, 0xd5, 0xed, +0xe3, 0x63, 0x49, 0x68, 0xe0, 0x19, 0x04, 0x0d, 0x4a, 0x3c, 0xd7, 0xd7, +0x0b, 0x6e, 0xf1, 0xa9, 0x26, 0xf9, 0xd0, 0xae, 0x8e, 0xa4, 0xe8, 0xd1, +0xd4, 0xd7, 0x60, 0x75, 0x39, 0xd1, 0x2d, 0xfe, 0x25, 0x18, 0x38, 0x78, +0x09, 0xe5, 0xf3, 0xf3, 0x7e, 0xb2, 0x06, 0x9e, 0x41, 0xd0, 0x61, 0x8f, +0x9f, 0xa8, 0xb0, 0xc3, 0x6b, 0x4d, 0x72, 0x53, 0x2f, 0x39, 0x90, 0x14, +0x07, 0x1a, 0xbf, 0x56, 0x43, 0xa2, 0x43, 0x4e, 0xb4, 0xc4, 0x7f, 0x93, +0x19, 0x58, 0x78, 0x09, 0xfb, 0x9f, 0x3f, 0xab, 0x89, 0x1a, 0x78, 0x06, +0x81, 0x47, 0x97, 0xf2, 0xdc, 0xd7, 0xeb, 0x23, 0xca, 0xf6, 0x7e, 0x88, +0x7f, 0x5f, 0xf4, 0x49, 0x06, 0xf7, 0xe5, 0x16, 0x3e, 0x27, 0xfa, 0x32, +0x8d, 0x61, 0xc6, 0xa8, 0x6a, 0xb5, 0xdd, 0xea, 0x24, 0x0d, 0x73, 0x30, +0x04, 0x68, 0xcd, 0xe4, 0xa0, 0x0d, 0x49, 0x4b, 0x25, 0x81, 0x24, 0xdc, +0x93, 0x01, 0xc9, 0xba, 0x97, 0x13, 0x2d, 0xa7, 0x30, 0xcc, 0x1a, 0x55, +0xd5, 0x97, 0x17, 0x9d, 0xa0, 0x81, 0x67, 0x90, 0x9e, 0x22, 0xc5, 0x2b, +0xb4, 0x59, 0x2d, 0x85, 0xbf, 0x1f, 0xd2, 0x12, 0x78, 0x8a, 0x21, 0x4d, +0x3f, 0x27, 0xba, 0x1b, 0xcf, 0x30, 0x73, 0x54, 0x55, 0x5f, 0x5f, 0x75, +0xb4, 0x06, 0x9e, 0x41, 0xd0, 0x87, 0xa2, 0x04, 0xd0, 0xd1, 0x54, 0x6d, +0xf8, 0xa6, 0x40, 0xd5, 0x11, 0x9c, 0x22, 0x19, 0xe4, 0x44, 0x77, 0x63, +0x19, 0x66, 0x8f, 0xaa, 0x6a, 0x59, 0xba, 0x91, 0x1a, 0x78, 0x06, 0xc1, +0x5b, 0x38, 0x94, 0x70, 0xf5, 0xf2, 0x34, 0xd2, 0x50, 0x44, 0xb6, 0xf7, +0xdb, 0x9c, 0xe8, 0x6e, 0x1c, 0xc3, 0x02, 0x51, 0x55, 0x57, 0x8f, 0x62, +0x94, 0x06, 0x9e, 0x41, 0x30, 0x84, 0xeb, 0x8d, 0x42, 0xfd, 0xff, 0xce, +0xfb, 0x3b, 0xe3, 0x29, 0x02, 0xd1, 0x91, 0x9c, 0xe8, 0x7e, 0x0c, 0xc3, +0x22, 0x51, 0x55, 0xb7, 0xdb, 0xb9, 0x11, 0x1a, 0x78, 0x06, 0xc1, 0x11, +0xb4, 0xa3, 0x00, 0x3c, 0x8d, 0x34, 0x34, 0xed, 0x52, 0xac, 0x9b, 0xab, +0x4f, 0x72, 0x22, 0x27, 0x5a, 0xa1, 0x3c, 0x97, 0x61, 0xa1, 0xa8, 0xaa, +0xdb, 0xef, 0xdd, 0xd9, 0x2e, 0x78, 0x06, 0xc1, 0x71, 0x74, 0xfb, 0xca, +0x2f, 0xf5, 0x2b, 0x50, 0x04, 0xa2, 0x13, 0x39, 0xd1, 0x12, 0xd5, 0xb9, +0x0c, 0x8b, 0x45, 0x55, 0x9b, 0x51, 0x9c, 0xa9, 0x81, 0x67, 0x10, 0x1c, +0x87, 0x8f, 0x7f, 0x79, 0x0a, 0xff, 0x59, 0x34, 0x57, 0x9f, 0xe2, 0x9d, +0x9c, 0xa8, 0x62, 0x77, 0x0e, 0xc3, 0x82, 0x51, 0x55, 0x57, 0x55, 0xee, +0x2c, 0x17, 0x3c, 0x83, 0x00, 0x91, 0x61, 0x06, 0x1a, 0x45, 0xd1, 0xfd, +0x8e, 0xaa, 0x4f, 0xf1, 0x4e, 0x4e, 0x74, 0x07, 0xc5, 0x3e, 0xce, 0xb0, +0x68, 0x54, 0xb5, 0x1d, 0x45, 0x5c, 0x03, 0xcf, 0x20, 0x40, 0x64, 0x98, +0x2d, 0x1b, 0x9c, 0x5f, 0x03, 0x8a, 0xf5, 0xbb, 0x39, 0xd1, 0x3d, 0x14, +0xbb, 0x18, 0xc3, 0x62, 0x51, 0xd5, 0x30, 0x8a, 0xa8, 0x0b, 0x9e, 0x41, +0x80, 0xe8, 0x30, 0x71, 0x94, 0xa2, 0x80, 0xeb, 0xde, 0x17, 0x91, 0x9c, +0xe8, 0x2e, 0xce, 0xb0, 0x78, 0x54, 0xd5, 0x55, 0x51, 0x0d, 0x3c, 0x83, +0x20, 0x8e, 0xaa, 0xa5, 0xf0, 0x44, 0x45, 0x77, 0x75, 0x44, 0xed, 0x67, +0x3c, 0x27, 0x1a, 0x67, 0x58, 0x3e, 0xaa, 0x1a, 0xd1, 0xc0, 0x33, 0x08, +0xce, 0x81, 0xbf, 0x23, 0x05, 0xd0, 0x11, 0xf4, 0x62, 0x0f, 0x91, 0x9c, +0x68, 0x9c, 0xe1, 0x42, 0x51, 0xd5, 0x88, 0x06, 0x96, 0x41, 0x80, 0x11, +0xc3, 0x0c, 0x34, 0xcd, 0xea, 0x48, 0xf4, 0x9c, 0x9c, 0x68, 0x84, 0xe1, +0x52, 0x51, 0xd5, 0x77, 0x34, 0xf0, 0x0c, 0x82, 0x73, 0x51, 0xf5, 0xee, +0x87, 0x27, 0x51, 0xac, 0xe3, 0x39, 0xd1, 0x18, 0xc3, 0x05, 0xa3, 0xaa, +0x27, 0x35, 0xf0, 0x0c, 0x82, 0xf3, 0x51, 0x21, 0x44, 0x1b, 0x3c, 0xf7, +0x1a, 0xee, 0xbc, 0x9c, 0x68, 0x84, 0xe1, 0x72, 0x51, 0xd5, 0x13, 0x1a, +0x78, 0x06, 0xc1, 0x18, 0x28, 0x02, 0x05, 0x0e, 0x44, 0xeb, 0xb1, 0x39, +0xd1, 0x21, 0xc3, 0x85, 0xa3, 0xaa, 0x47, 0x35, 0xf0, 0x0c, 0x82, 0x71, +0x50, 0x04, 0xb8, 0x6e, 0x11, 0x39, 0x51, 0xff, 0xaf, 0x97, 0x8e, 0xaa, +0x1e, 0xd1, 0xc0, 0x33, 0x08, 0x30, 0x71, 0x98, 0xce, 0xaf, 0xa9, 0x39, +0xd1, 0xc0, 0x60, 0x10, 0x55, 0x1d, 0x68, 0xe0, 0x19, 0x04, 0x98, 0x34, +0x4c, 0x47, 0xe7, 0x44, 0x9d, 0x71, 0x54, 0xd5, 0x6b, 0x20, 0x19, 0xd8, +0xa0, 0x8b, 0xf6, 0xee, 0xc7, 0xc4, 0x9c, 0x68, 0x60, 0x30, 0x8a, 0xaa, +0xf6, 0x34, 0xf0, 0x0c, 0x82, 0x69, 0xd0, 0xab, 0x88, 0xaa, 0xea, 0x9c, +0x0c, 0x82, 0xa9, 0xd0, 0xab, 0x88, 0xaa, 0xea, 0x7c, 0x0c, 0x42, 0xe8, +0xd7, 0xab, 0x88, 0xaa, 0xea, 0x5c, 0x0c, 0x02, 0x06, 0x7a, 0x15, 0x51, +0x55, 0x9d, 0x87, 0x41, 0xc0, 0x41, 0xe1, 0xe8, 0x9c, 0xa8, 0x33, 0x8f, +0xaa, 0x2a, 0x1c, 0xcf, 0x20, 0x60, 0xe1, 0xae, 0x22, 0xaa, 0xea, 0xc0, +0x33, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, +0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, +0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, +0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x2c, 0x83, 0x15, 0x5f, 0xaa, +0xfa, 0x7d, 0x73, 0xff, 0x60, 0x5c, 0xaa, 0x8a, 0x3f, 0xb0, 0x32, 0x77, +0x21, 0x7c, 0xa9, 0xea, 0xc3, 0xfd, 0xd3, 0xd3, 0xdd, 0x96, 0x61, 0xe0, +0xc1, 0x17, 0xbb, 0xf2, 0x2e, 0x84, 0x2f, 0x55, 0xc5, 0xb7, 0xed, 0xdd, +0xe3, 0xe3, 0xb6, 0x24, 0x18, 0x68, 0xf0, 0xc5, 0xae, 0xbc, 0x0b, 0x61, +0x4b, 0x55, 0xbb, 0x4a, 0xd3, 0x72, 0xfb, 0xfc, 0x5c, 0xee, 0x8d, 0x4a, +0x55, 0x43, 0xb1, 0xab, 0xa9, 0x0b, 0xe1, 0x4b, 0x55, 0xbb, 0x4a, 0xd3, +0x7d, 0xd9, 0xf4, 0x91, 0x1a, 0x95, 0xaa, 0x86, 0x62, 0x57, 0x43, 0x17, +0xc2, 0x97, 0xaa, 0xfa, 0x4a, 0xd3, 0xae, 0x8f, 0x74, 0x0a, 0x03, 0x0f, +0xa1, 0x8b, 0x5d, 0x79, 0x17, 0xc2, 0x97, 0xaa, 0x86, 0x4a, 0xd3, 0xa6, +0x8f, 0xd4, 0xe9, 0x78, 0x06, 0x1e, 0x7c, 0xb1, 0x2b, 0xef, 0x42, 0xe8, +0x52, 0xd5, 0x5e, 0xa5, 0xa9, 0xba, 0xa6, 0x8f, 0x74, 0x2c, 0x03, 0x0f, +0xbe, 0xd8, 0x95, 0x77, 0x21, 0x7c, 0xa9, 0x6a, 0xbf, 0xd2, 0x54, 0xb5, +0x2c, 0xe1, 0xc6, 0x31, 0xf0, 0xe0, 0x8b, 0x5d, 0x79, 0x17, 0x42, 0x97, +0xaa, 0x0e, 0x2a, 0x4d, 0x1d, 0x9a, 0x3e, 0xd2, 0x31, 0x0c, 0x3c, 0xf8, +0x62, 0x57, 0xde, 0x85, 0xf0, 0xa5, 0xaa, 0xc3, 0x4a, 0xd3, 0xae, 0x8f, +0x74, 0x04, 0x03, 0x0d, 0xbe, 0xd8, 0x95, 0x77, 0x21, 0x74, 0xa9, 0xea, +0xd1, 0x4a, 0xd3, 0xa6, 0x8f, 0x14, 0xee, 0x5c, 0x06, 0x1e, 0x7c, 0xb1, +0x2b, 0xef, 0x42, 0xe8, 0x52, 0xd5, 0x13, 0x95, 0xa6, 0x0e, 0x4d, 0x1f, +0xe9, 0x79, 0x0c, 0x3c, 0xf8, 0x62, 0x57, 0xde, 0x85, 0xd0, 0xa5, 0xaa, +0x27, 0x2b, 0x4d, 0xdb, 0xa2, 0x42, 0x77, 0x0e, 0x03, 0x0f, 0xbe, 0xd8, +0x95, 0x77, 0x21, 0x7c, 0xa9, 0xea, 0xe9, 0x4a, 0x53, 0x87, 0x46, 0x46, +0x9c, 0x81, 0x07, 0x5f, 0xec, 0xca, 0xbb, 0x10, 0xba, 0x54, 0xf5, 0x44, +0xa5, 0x69, 0x90, 0xe1, 0x5c, 0x8c, 0x81, 0x07, 0x5f, 0xec, 0xca, 0xbb, +0x10, 0xba, 0x54, 0x35, 0x52, 0x69, 0xda, 0x3c, 0x20, 0x31, 0x06, 0x1e, +0x7c, 0xb1, 0x2b, 0xef, 0x42, 0xf8, 0x52, 0xd5, 0x78, 0xa5, 0x69, 0x55, +0x45, 0x18, 0x48, 0x44, 0x25, 0x5c, 0xc4, 0x85, 0xf0, 0xa5, 0xaa, 0xf1, +0x4a, 0xd3, 0x46, 0x46, 0x84, 0x81, 0x44, 0x5c, 0xc2, 0xf2, 0x2e, 0x84, +0x2e, 0x55, 0x3d, 0xb3, 0xd2, 0xb4, 0xaa, 0x4e, 0x32, 0xcc, 0xf5, 0x80, +0x47, 0x24, 0x2c, 0xed, 0x42, 0xe8, 0x52, 0xd5, 0xb3, 0x2b, 0x4d, 0xab, +0x6a, 0xb9, 0x52, 0xd5, 0xb8, 0x84, 0xe5, 0x5d, 0x08, 0x5d, 0xaa, 0x3a, +0xa2, 0xd2, 0xb4, 0xaa, 0x16, 0x2c, 0x55, 0x8d, 0x4b, 0x58, 0xd8, 0x85, +0xd0, 0xa5, 0xaa, 0xa3, 0x2a, 0x4d, 0x55, 0x8f, 0x31, 0x5c, 0xb4, 0x55, +0x75, 0x31, 0x17, 0x42, 0x97, 0xaa, 0x8e, 0xac, 0x34, 0x55, 0x1d, 0x32, +0x5c, 0xb0, 0x55, 0x75, 0x41, 0x17, 0x42, 0x97, 0xaa, 0x8e, 0xae, 0x34, +0x55, 0x7d, 0xcb, 0x60, 0xd0, 0xaa, 0xba, 0x80, 0x0b, 0x99, 0x58, 0xaa, +0x4a, 0x55, 0x9a, 0xaa, 0x7a, 0x06, 0x93, 0x56, 0xd5, 0x85, 0x5c, 0x08, +0x5d, 0xaa, 0x3a, 0xa9, 0xd2, 0x54, 0xb5, 0xc7, 0x60, 0xd0, 0xaa, 0x3a, +0xbf, 0x0b, 0xc1, 0x24, 0x28, 0x5d, 0x69, 0xaa, 0xd6, 0xad, 0xaa, 0xb3, +0xbb, 0x10, 0x4c, 0x84, 0xd2, 0x95, 0xa6, 0x6a, 0xd9, 0xaa, 0xba, 0x80, +0x0b, 0xc1, 0x64, 0x28, 0x5d, 0x69, 0xaa, 0xb6, 0xad, 0xaa, 0x33, 0xbb, +0x10, 0x10, 0x50, 0xba, 0xd2, 0x54, 0x2d, 0x5b, 0x55, 0x67, 0x76, 0x21, +0x74, 0xa9, 0x2a, 0x59, 0x69, 0xaa, 0xea, 0x60, 0xdd, 0xaa, 0xca, 0xbb, +0x68, 0x5c, 0x08, 0x48, 0x38, 0xba, 0xd2, 0xd4, 0xd9, 0xb7, 0xaa, 0xce, +0xe2, 0x62, 0x05, 0x1a, 0x1b, 0xc3, 0xa8, 0x6a, 0xd0, 0xf0, 0x70, 0x0f, +0x63, 0x11, 0x02, 0x16, 0x49, 0x44, 0x55, 0xf9, 0xe3, 0xfb, 0x01, 0xfb, +0x51, 0x26, 0x11, 0x55, 0xe5, 0x8f, 0xef, 0xb7, 0x1f, 0x65, 0x22, 0x51, +0x55, 0xfe, 0xf8, 0xfe, 0x14, 0x46, 0x99, 0x44, 0x54, 0x95, 0x3f, 0xbe, +0x3f, 0x85, 0x51, 0x26, 0x11, 0x55, 0x25, 0x8e, 0xef, 0x4f, 0x68, 0x94, +0x49, 0x44, 0x55, 0xf9, 0xe3, 0xfb, 0x53, 0x18, 0x65, 0x12, 0x51, 0x55, +0xfe, 0xf8, 0xfe, 0x44, 0x46, 0x69, 0x1f, 0x55, 0x65, 0x8f, 0xef, 0x4f, +0x63, 0x94, 0x49, 0x44, 0x55, 0x89, 0xe3, 0xfb, 0xd3, 0x1a, 0xa5, 0x7d, +0x54, 0x95, 0x3f, 0xbe, 0x3f, 0x91, 0x51, 0xda, 0x47, 0x55, 0xf9, 0xe3, +0xfb, 0x13, 0x19, 0xa5, 0x7d, 0x54, 0x95, 0x39, 0xbe, 0x3f, 0xa9, 0x51, +0xda, 0x47, 0x55, 0x89, 0xe3, 0xfb, 0x59, 0x11, 0xf3, 0x8e, 0xd2, 0x3e, +0xaa, 0x4a, 0x1c, 0xdf, 0x9f, 0xd0, 0x28, 0x93, 0x88, 0xaa, 0xf2, 0xc7, +0xf7, 0xa7, 0x30, 0xca, 0x24, 0xa2, 0xaa, 0xdc, 0xf1, 0xfd, 0xa9, 0x8c, +0x32, 0x89, 0xa8, 0x2a, 0x7f, 0x7c, 0x7f, 0x4a, 0xa3, 0x4c, 0x3f, 0xaa, +0x1a, 0xc9, 0xaa, 0xda, 0x8f, 0x32, 0x89, 0xa8, 0x2a, 0x7f, 0x7c, 0x7f, +0x0a, 0xa3, 0x4c, 0x22, 0xaa, 0xca, 0x1f, 0xdf, 0x9f, 0xc8, 0x28, 0xed, +0xa3, 0xaa, 0xfc, 0xf1, 0xfd, 0x89, 0x8c, 0xd2, 0x3e, 0xaa, 0xca, 0x1f, +0xdf, 0x9f, 0xc2, 0x28, 0x7f, 0xc5, 0xa8, 0xaa, 0x22, 0x20, 0xa1, 0xaf, +0x9d, 0x5f, 0x33, 0xaa, 0xaa, 0x7e, 0x90, 0xf6, 0xa3, 0xfc, 0xf5, 0xa3, +0xaa, 0x8a, 0x99, 0x45, 0xc8, 0xc5, 0x73, 0xa2, 0xe9, 0x44, 0x55, 0x35, +0x8d, 0x07, 0xfc, 0x3a, 0xa2, 0xaa, 0x9a, 0xc6, 0xae, 0xbc, 0x8e, 0xa8, +0xaa, 0xa6, 0x31, 0xca, 0xeb, 0x88, 0xaa, 0x6a, 0x1a, 0xa3, 0xbc, 0x8e, +0xa8, 0xaa, 0xa6, 0x32, 0xca, 0x6b, 0x88, 0xaa, 0x6a, 0x1a, 0x5f, 0x3b, +0xd7, 0x11, 0x55, 0x75, 0xa0, 0xf1, 0x3f, 0x19, 0xc2, 0xb4, 0x90, 0x78, +0xb9, 0x76, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, +0x42, 0x60, 0x82, +}; + +#endif diff --git a/src/graphics/moving_texture.cpp b/src/graphics/moving_texture.cpp index 9e8ebc901..bb94203c6 100644 --- a/src/graphics/moving_texture.cpp +++ b/src/graphics/moving_texture.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/graphics/moving_texture.hpp b/src/graphics/moving_texture.hpp index f4f7c9870..dbce82e90 100644 --- a/src/graphics/moving_texture.hpp +++ b/src/graphics/moving_texture.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/graphics/particle_emitter.cpp b/src/graphics/particle_emitter.cpp index 0146ccb8f..46bcbadb1 100644 --- a/src/graphics/particle_emitter.cpp +++ b/src/graphics/particle_emitter.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Joerg Henrichs, Marianne Gagnon +// Copyright (C) 2011-2013 Joerg Henrichs, Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -22,9 +22,12 @@ #include "graphics/material_manager.hpp" #include "graphics/particle_kind.hpp" #include "graphics/irr_driver.hpp" +#include "graphics/shaders.hpp" +#include "graphics/wind.hpp" #include "io/file_manager.hpp" #include "tracks/track.hpp" #include "utils/constants.hpp" +#include "utils/helpers.hpp" #include #include @@ -32,6 +35,7 @@ #include #include #include +#include class FadeAwayAffector : public scene::IParticleAffector { @@ -173,6 +177,46 @@ public: } }; +// ============================================================================ + +class WindAffector : public scene::IParticleAffector +{ + /** (Squared) distance from camera at which a particle is completely faded out */ + float m_speed; + float m_seed; + +public: + WindAffector(float speed): m_speed(speed) + { + m_seed = (rand() % 1000) - 500; + } + + // ------------------------------------------------------------------------ + + virtual void affect(u32 now, scene::SParticle* particlearray, u32 count) + { + const float time = irr_driver->getDevice()->getTimer()->getTime() / 10000.0f; + core::vector3df dir = irr_driver->getWind(); + dir *= m_speed * std::min(noise2d(time, m_seed), -0.2f); + + for (u32 n = 0; n < count; n++) + { + scene::SParticle& cur = particlearray[n]; + + cur.pos += dir; + } // for ngetAbsoluteTransformation(); + core::matrix4 transform = m_node->getAbsoluteTransformation(); core::vector3df velocity(m_particle_type->getVelocityX(), m_particle_type->getVelocityY(), m_particle_type->getVelocityZ()); @@ -488,7 +532,7 @@ void ParticleEmitter::setParticleType(const ParticleKind* type) m_node->addAffector(faa); faa->drop(); } - + if (type->hasScaleAffector()) { core::dimension2df factor = core::dimension2df(type->getScaleAffectorFactorX(), @@ -498,6 +542,21 @@ void ParticleEmitter::setParticleType(const ParticleKind* type) m_node->addAffector(scale_affector); scale_affector->drop(); } + + const float windspeed = type->getWindSpeed(); + if (windspeed > 0.01f) + { + WindAffector *waf = new WindAffector(windspeed); + m_node->addAffector(waf); + waf->drop(); + } + + const bool flips = type->getFlips(); + if (flips) + { + m_node->getMaterial(0).MaterialType = irr_driver->getShader(ES_SNOW); + m_node->getMaterial(0).BlendOperation = video::EBO_ADD; + } } } // setParticleType diff --git a/src/graphics/particle_emitter.hpp b/src/graphics/particle_emitter.hpp index e0c4b6b4b..8c3dd941a 100644 --- a/src/graphics/particle_emitter.hpp +++ b/src/graphics/particle_emitter.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Joerg Henrichs, Marianne Gagnon +// Copyright (C) 2011-2013 Joerg Henrichs, Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/graphics/particle_kind.cpp b/src/graphics/particle_kind.cpp index 2d2a46a10..9d4370b18 100644 --- a/src/graphics/particle_kind.cpp +++ b/src/graphics/particle_kind.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Joerg Henrichs, Marianne Gagnon +// Copyright (C) 2011-2013 Joerg Henrichs, Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -54,6 +54,8 @@ ParticleKind::ParticleKind(const std::string file) : m_min_start_color(255,255,2 m_has_scale_affector = NULL; m_scale_affector_factor_x = 0.0f; m_scale_affector_factor_y = 0.0f; + m_wind_speed = 0; + m_flips = false; // ----- Read XML file @@ -219,6 +221,14 @@ ParticleKind::ParticleKind(const std::string file) : m_min_start_color(255,255,2 m_material_file = material_manager->getLatestMaterial()->getTexFname(); } + // ------------------------------------------------------------------------ + + const XMLNode* wind = xml->getNode("wind"); + if (wind != NULL) + { + wind->get("speed", &m_wind_speed); + wind->get("flips", &m_flips); + } // ------------------------------------------------------------------------ diff --git a/src/graphics/particle_kind.hpp b/src/graphics/particle_kind.hpp index 7d220af86..64c5c8f80 100644 --- a/src/graphics/particle_kind.hpp +++ b/src/graphics/particle_kind.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Joerg Henrichs, Marianne Gagnon +// Copyright (C) 2011-2013 Joerg Henrichs, Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -86,6 +86,11 @@ private: int m_emission_decay_rate; + /** Wind. < 0.01 if disabled. */ + float m_wind_speed; + + bool m_flips; + std::string m_name; std::string m_material_file; @@ -148,11 +153,14 @@ public: int getEmissionDecayRate() const { return m_emission_decay_rate; } - bool hasScaleAffector() const { return m_has_scale_affector; } float getScaleAffectorFactorX() const { return m_scale_affector_factor_x; } float getScaleAffectorFactorY() const { return m_scale_affector_factor_y; }; + float getWindSpeed() const { return m_wind_speed; } + + bool getFlips() const { return m_flips; } + std::string getName() const { return m_name; } }; diff --git a/src/graphics/particle_kind_manager.cpp b/src/graphics/particle_kind_manager.cpp index 93dee54fe..91ac163f8 100644 --- a/src/graphics/particle_kind_manager.cpp +++ b/src/graphics/particle_kind_manager.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Joerg Henrichs, Marianne Gagnon +// Copyright (C) 2011-2013 Joerg Henrichs, Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/graphics/particle_kind_manager.hpp b/src/graphics/particle_kind_manager.hpp index 9ded19ec2..ef7b7a2f5 100644 --- a/src/graphics/particle_kind_manager.hpp +++ b/src/graphics/particle_kind_manager.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Marianne Gagnon +// Copyright (C) 2011-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/graphics/per_camera_node.cpp b/src/graphics/per_camera_node.cpp index 4e6b1d6e7..6bccd7f41 100644 --- a/src/graphics/per_camera_node.cpp +++ b/src/graphics/per_camera_node.cpp @@ -1,6 +1,6 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Marianne Gagnon -// based on code Copyright (C) 2002-2010 Nikolaus Gebhardt +// Copyright (C) 2011-2013 Marianne Gagnon +// based on code Copyright 2002-2010 Nikolaus Gebhardt // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -24,7 +24,7 @@ #include PerCameraNode::PerCameraNode(scene::ISceneNode* parent, scene::ISceneManager* mgr, s32 id, - scene::ICameraSceneNode* camera, scene::IMesh* mesh) + scene::ICameraSceneNode* camera, scene::ISceneNode *node) : IDummyTransformationSceneNode(parent, mgr, id) { #ifdef DEBUG @@ -33,7 +33,10 @@ PerCameraNode::PerCameraNode(scene::ISceneNode* parent, scene::ISceneManager* mg #endif m_camera = camera; - m_child = mgr->addMeshSceneNode(mesh, this); + + node->setParent(this); + m_child = node; + //m_child = mgr->addCubeSceneNode(0.5f, this, -1, core::vector3df(0,0,0), core::vector3df(0,0,0), core::vector3df(3.0f,0.2f,3.0f)); //RelativeTransformationMatrix.setTranslation( core::vector3df(-0.5,-1,3) ); diff --git a/src/graphics/per_camera_node.hpp b/src/graphics/per_camera_node.hpp index fb1799a73..1a7542af6 100644 --- a/src/graphics/per_camera_node.hpp +++ b/src/graphics/per_camera_node.hpp @@ -1,6 +1,6 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Marianne Gagnon -// based on code Copyright (C) 2002-2010 Nikolaus Gebhardt +// Copyright (C) 2011-2013 Marianne Gagnon +// based on code Copyright 2002-2010 Nikolaus Gebhardt // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -54,7 +54,7 @@ private: public: PerCameraNode(scene::ISceneNode* parent, scene::ISceneManager* mgr, s32 id, - scene::ICameraSceneNode* camera, scene::IMesh* mesh); + scene::ICameraSceneNode* camera, scene::ISceneNode* node); virtual ~PerCameraNode(); //! returns the axis aligned bounding box of this node diff --git a/src/graphics/post_processing.cpp b/src/graphics/post_processing.cpp index d9a0bc6f0..48f0ccdc7 100644 --- a/src/graphics/post_processing.cpp +++ b/src/graphics/post_processing.cpp @@ -1,6 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011-2013 the SuperTuxKart team -// Copyright (C) 2013 Joerg Henrichs +// Copyright (C) 2011-2013 the SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -20,69 +19,46 @@ #include "config/user_config.hpp" #include "io/file_manager.hpp" +#include "graphics/callbacks.hpp" +#include "graphics/glwrap.hpp" #include "graphics/irr_driver.hpp" +#include "graphics/mlaa_areamap.hpp" +#include "graphics/shaders.hpp" +#include "karts/abstract_kart.hpp" +#include "karts/kart_model.hpp" +#include "modes/world.hpp" #include "race/race_manager.hpp" +#include "tracks/track.hpp" #include "utils/log.hpp" -#include -#include - -#define MOTION_BLUR_FACTOR (1.0f/15.0f) -#define MOTION_BLUR_OFFSET 20.0f +#include using namespace video; using namespace scene; -PostProcessing::PostProcessing(video::IVideoDriver* video_driver) +PostProcessing::PostProcessing(IVideoDriver* video_driver) { - // Check if post-processing is supported on this hardware - m_supported = false; - if( irr_driver->isGLSL() ) - { - m_supported = true; - } - - //Check which texture dimensions are supported on this hardware - bool nonsquare = video_driver->queryFeature(video::EVDF_TEXTURE_NSQUARE); - bool nonpower = video_driver->queryFeature(video::EVDF_TEXTURE_NPOT); - if (!nonpower) { - Log::warn("PostProcessing", - "Only power of two textures are supported."); - } - if (!nonsquare) { - Log::warn("PostProcessing", "Only square textures are supported."); - } // Initialization - if(m_supported) + m_material.Wireframe = false; + m_material.Lighting = false; + m_material.ZWriteEnable = false; + m_material.ZBuffer = ECFN_ALWAYS; + m_material.setFlag(EMF_TRILINEAR_FILTER, true); + + for (u32 i = 0; i < MATERIAL_MAX_TEXTURES; ++i) { - // Render target - core::dimension2du opt = video_driver->getScreenSize() - .getOptimalSize(!nonpower, !nonsquare); - m_render_target = - video_driver->addRenderTargetTexture(opt, "postprocess"); - if(!m_render_target) - { - Log::warn("PostProcessing", "Couldn't create the render target " - "for post-processing, disabling it."); - UserConfigParams::m_postprocess_enabled = false; + m_material.TextureLayer[i].TextureWrapU = + m_material.TextureLayer[i].TextureWrapV = ETC_CLAMP_TO_EDGE; } - // Material and shaders - IGPUProgrammingServices* gpu = - video_driver->getGPUProgrammingServices(); - s32 material_type = gpu->addHighLevelShaderMaterialFromFiles( - (file_manager->getShaderDir() + "motion_blur.vert").c_str(), - "main", video::EVST_VS_2_0, - (file_manager->getShaderDir() + "motion_blur.frag").c_str(), - "main", video::EPST_PS_2_0, - this, video::EMT_SOLID); - m_blur_material.MaterialType = (E_MATERIAL_TYPE)material_type; - m_blur_material.setTexture(0, m_render_target); - m_blur_material.Wireframe = false; - m_blur_material.Lighting = false; - m_blur_material.ZWriteEnable = false; + // Load the MLAA area map + io::IReadFile *areamap = irr_driver->getDevice()->getFileSystem()-> + createMemoryReadFile((void *) AreaMap33, sizeof(AreaMap33), + "AreaMap33", false); + if (!areamap) Log::fatal("postprocessing", "Failed to load the areamap"); + m_areamap = irr_driver->getVideoDriver()->getTexture(areamap); + areamap->drop(); - } } // PostProcessing // ---------------------------------------------------------------------------- @@ -97,12 +73,15 @@ PostProcessing::~PostProcessing() */ void PostProcessing::reset() { - unsigned int n = Camera::getNumCameras(); + const u32 n = Camera::getNumCameras(); m_boost_time.resize(n); m_vertices.resize(n); m_center.resize(n); m_direction.resize(n); + MotionBlurProvider * const cb = (MotionBlurProvider *) irr_driver-> + getCallback(ES_MOTIONBLUR); + for(unsigned int i=0; isetDirection(i, m_direction[i].X, m_direction[i].Y); + cb->setMaxHeight(i, m_vertices[i].v1.TCoords.Y); } // for i + getCallback(ES_MOTIONBLUR); - bool any_boost = false; - for(unsigned int i=0; i0.0f; + const float tex_height = m_vertices[num].v1.TCoords.Y - m_vertices[num].v0.TCoords.Y; + m_center[num].Y = m_vertices[num].v0.TCoords.Y + y * tex_height; - // Don't capture the input when we have no post-processing to add - // it will be faster and this ay we won't lose anti-aliasing - if(!any_boost) - { - m_used_pp_this_frame = false; - return; - } - - m_used_pp_this_frame = true; - irr_driver->getVideoDriver()->setRenderTarget(m_render_target, true, true); -} // beginCapture + cb->setCenter(num, m_center[num].X, m_center[num].Y); +} // ---------------------------------------------------------------------------- -/** Restore the framebuffer render target. +/** Setup some PP data. */ -void PostProcessing::endCapture() +void PostProcessing::begin() { - if(!m_supported || !UserConfigParams::m_postprocess_enabled || - !m_used_pp_this_frame) - return; - - irr_driver->getVideoDriver()->setRenderTarget(video::ERT_FRAME_BUFFER, - true, true, 0); -} // endCapture + m_any_boost = false; + for (u32 i = 0; i < m_boost_time.size(); i++) + m_any_boost |= m_boost_time[i] > 0.01f; +} // beginCapture // ---------------------------------------------------------------------------- /** Set the boost amount according to the speed of the camera */ void PostProcessing::giveBoost(unsigned int camera_index) { - m_boost_time[camera_index] = 0.75f; + if (irr_driver->isGLSL()) + { + m_boost_time[camera_index] = 0.75f; + + MotionBlurProvider * const cb = (MotionBlurProvider *)irr_driver-> + getCallback(ES_MOTIONBLUR); + cb->setBoostTime(camera_index, m_boost_time[camera_index]); + } } // giveBoost // ---------------------------------------------------------------------------- @@ -204,75 +177,590 @@ void PostProcessing::giveBoost(unsigned int camera_index) */ void PostProcessing::update(float dt) { - for(unsigned int i=0; iisGLSL()) + return; + + MotionBlurProvider* const cb = + (MotionBlurProvider*) irr_driver->getCallback(ES_MOTIONBLUR); + + if (cb == NULL) return; + + for (unsigned int i=0; i 0.0f) { m_boost_time[i] -= dt; if (m_boost_time[i] < 0.0f) m_boost_time[i] = 0.0f; } + + cb->setBoostTime(i, m_boost_time[i]); } } // update +// ---------------------------------------------------------------------------- +/** Render the post-processed scene, solids only, color to color, no stencil */ +void PostProcessing::renderSolid(const u32 cam) +{ + if (irr_driver->isGLSL()) return; + + // Early out: do nothing if at all possible + if (UserConfigParams::m_ssao < 1 && !World::getWorld()->getTrack()->isFogEnabled()) + return; + + static u8 tick = 0; + + IVideoDriver * const drv = irr_driver->getVideoDriver(); + drv->setTransform(ETS_WORLD, core::IdentityMatrix); + drv->setTransform(ETS_VIEW, core::IdentityMatrix); + drv->setTransform(ETS_PROJECTION, core::IdentityMatrix); + + GaussianBlurProvider * const gacb = (GaussianBlurProvider *) irr_driver-> + getCallback(ES_GAUSSIAN3H); + + const TypeRTT curssao = tick ? RTT_SSAO2 : RTT_SSAO1; + + if (World::getWorld()->getTrack()->isFogEnabled()) + { + m_material.MaterialType = irr_driver->getShader(ES_FOG); + m_material.setTexture(0, irr_driver->getRTT(RTT_DEPTH)); + + // Overlay + m_material.BlendOperation = EBO_ADD; + m_material.MaterialTypeParam = pack_textureBlendFunc(EBF_SRC_ALPHA, EBF_ONE_MINUS_SRC_ALPHA); + + drv->setRenderTarget(irr_driver->getRTT(RTT_COLOR), false, false); + drawQuad(cam, m_material); + + m_material.BlendOperation = EBO_NONE; + m_material.MaterialTypeParam = 0; + } + + if (UserConfigParams::m_ssao == 1) // SSAO low + { + m_material.MaterialType = irr_driver->getShader(ES_SSAO); + m_material.setTexture(0, irr_driver->getRTT(RTT_NORMAL)); + m_material.setTexture(1, irr_driver->getRTT(tick ? RTT_SSAO1 : RTT_SSAO2)); + + drv->setRenderTarget(irr_driver->getRTT(curssao), true, false, + SColor(255, 255, 255, 255)); + + drawQuad(cam, m_material); + + // Blur it to reduce noise. + { + gacb->setResolution(UserConfigParams::m_width / 4, + UserConfigParams::m_height / 4); + m_material.MaterialType = irr_driver->getShader(ES_GAUSSIAN3V); + m_material.setTexture(0, irr_driver->getRTT(curssao)); + drv->setRenderTarget(irr_driver->getRTT(RTT_QUARTER2), true, false); + + drawQuad(cam, m_material); + + m_material.MaterialType = irr_driver->getShader(ES_GAUSSIAN3H); + m_material.setTexture(0, irr_driver->getRTT(RTT_QUARTER2)); + drv->setRenderTarget(irr_driver->getRTT(curssao), false, false); + + drawQuad(cam, m_material); + } + + // Overlay + m_material.MaterialType = EMT_ONETEXTURE_BLEND; + m_material.setTexture(0, irr_driver->getRTT(curssao)); + m_material.setTexture(1, 0); + m_material.BlendOperation = EBO_ADD; + m_material.MaterialTypeParam = pack_textureBlendFunc(EBF_DST_COLOR, EBF_ZERO); + + drv->setRenderTarget(irr_driver->getRTT(RTT_COLOR), false, false); + drawQuad(cam, m_material); + + m_material.BlendOperation = EBO_NONE; + m_material.MaterialTypeParam = 0; + + } else if (UserConfigParams::m_ssao == 2) // SSAO high + { + m_material.MaterialType = irr_driver->getShader(ES_SSAO); + m_material.setTexture(0, irr_driver->getRTT(RTT_NORMAL)); + m_material.setTexture(1, irr_driver->getRTT(tick ? RTT_SSAO1 : RTT_SSAO2)); + + drv->setRenderTarget(irr_driver->getRTT(curssao), true, false, + SColor(255, 255, 255, 255)); + + drawQuad(cam, m_material); + + // Blur it to reduce noise. + { + gacb->setResolution(UserConfigParams::m_width, + UserConfigParams::m_height); + m_material.MaterialType = irr_driver->getShader(ES_GAUSSIAN6V); + m_material.setTexture(0, irr_driver->getRTT(curssao)); + drv->setRenderTarget(irr_driver->getRTT(RTT_TMP3), true, false); + + drawQuad(cam, m_material); + + m_material.MaterialType = irr_driver->getShader(ES_GAUSSIAN6H); + m_material.setTexture(0, irr_driver->getRTT(RTT_TMP3)); + drv->setRenderTarget(irr_driver->getRTT(curssao), false, false); + + drawQuad(cam, m_material); + } + + // Overlay + m_material.MaterialType = EMT_ONETEXTURE_BLEND; + m_material.setTexture(0, irr_driver->getRTT(curssao)); + m_material.setTexture(1, 0); + m_material.BlendOperation = EBO_ADD; + m_material.MaterialTypeParam = pack_textureBlendFunc(EBF_DST_COLOR, EBF_ZERO); + + drv->setRenderTarget(irr_driver->getRTT(RTT_COLOR), false, false); + drawQuad(cam, m_material); + + m_material.BlendOperation = EBO_NONE; + m_material.MaterialTypeParam = 0; + } + + tick++; + tick %= 2; +} + // ---------------------------------------------------------------------------- /** Render the post-processed scene */ void PostProcessing::render() { - if(!m_supported || !UserConfigParams::m_postprocess_enabled) - return; + if (!irr_driver->isGLSL()) return; - if (!m_used_pp_this_frame) + IVideoDriver * const drv = irr_driver->getVideoDriver(); + drv->setTransform(ETS_WORLD, core::IdentityMatrix); + drv->setTransform(ETS_VIEW, core::IdentityMatrix); + drv->setTransform(ETS_PROJECTION, core::IdentityMatrix); + + MotionBlurProvider * const mocb = (MotionBlurProvider *) irr_driver-> + getCallback(ES_MOTIONBLUR); + GaussianBlurProvider * const gacb = (GaussianBlurProvider *) irr_driver-> + getCallback(ES_GAUSSIAN3H); + + const u32 cams = Camera::getNumCameras(); + for(u32 cam = 0; cam < cams; cam++) { - return; + scene::ICameraSceneNode * const camnode = + Camera::getCamera(cam)->getCameraSceneNode(); + mocb->setCurrentCamera(cam); + ITexture *in = irr_driver->getRTT(RTT_COLOR); + ITexture *out = irr_driver->getRTT(RTT_TMP1); + // Each effect uses these as named, and sets them up for the next effect. + // This allows chaining effects where some may be disabled. + + // As the original color shouldn't be touched, the first effect can't be disabled. + + if (1) // bloom + { + // Blit the base to tmp1 + m_material.MaterialType = EMT_SOLID; + m_material.setTexture(0, in); + drv->setRenderTarget(out, true, false); + + drawQuad(cam, m_material); + + const bool globalbloom = World::getWorld()->getTrack()->getBloom(); + + BloomPowerProvider * const bloomcb = (BloomPowerProvider *) + irr_driver-> + getCallback(ES_BLOOM_POWER); + + if (globalbloom) + { + const float threshold = World::getWorld()->getTrack()->getBloomThreshold(); + ((BloomProvider *) irr_driver->getCallback(ES_BLOOM))->setThreshold(threshold); + + // Catch bright areas, and progressively minify + m_material.MaterialType = irr_driver->getShader(ES_BLOOM); + m_material.setTexture(0, in); + drv->setRenderTarget(irr_driver->getRTT(RTT_TMP3), true, false); + + drawQuad(cam, m_material); + } + + // Do we have any forced bloom nodes? If so, draw them now + const std::vector &blooms = irr_driver->getForcedBloom(); + const u32 bloomsize = blooms.size(); + + if (!globalbloom && bloomsize) + drv->setRenderTarget(irr_driver->getRTT(RTT_TMP3), true, false); + + + if (globalbloom || bloomsize) + { + // Clear the alpha to a suitable value, stencil + glClearColor(0, 0, 0, 0.1); + glColorMask(0, 0, 0, 1); + + glClear(GL_STENCIL_BUFFER_BIT | GL_COLOR_BUFFER_BIT); + + glClearColor(0, 0, 0, 0); + glColorMask(1, 1, 1, 1); + + // The forced-bloom objects are drawn again, to know which pixels to pick. + // While it's more drawcalls, there's a cost to using four MRTs over three, + // and there shouldn't be many such objects in a track. + // The stencil is already in use for the glow. The alpha channel is best + // reserved for other use (specular, etc). + // + // They are drawn with depth and color writes off, giving 4x-8x drawing speed. + if (bloomsize) + { + const core::aabbox3df &cambox = camnode-> + getViewFrustum()-> + getBoundingBox(); + + irr_driver->getSceneManager()->setCurrentRendertime(ESNRP_SOLID); + SOverrideMaterial &overridemat = drv->getOverrideMaterial(); + overridemat.EnablePasses = ESNRP_SOLID; + overridemat.EnableFlags = EMF_MATERIAL_TYPE | EMF_ZWRITE_ENABLE | EMF_COLOR_MASK; + overridemat.Enabled = true; + + overridemat.Material.MaterialType = irr_driver->getShader(ES_BLOOM_POWER); + overridemat.Material.ZWriteEnable = false; + overridemat.Material.ColorMask = ECP_ALPHA; + + glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); + glStencilFunc(GL_ALWAYS, 1, ~0); + glEnable(GL_STENCIL_TEST); + + camnode->render(); + + for (u32 i = 0; i < bloomsize; i++) + { + scene::ISceneNode * const cur = blooms[i].node; + + // Quick box-based culling + const core::aabbox3df nodebox = cur->getTransformedBoundingBox(); + if (!nodebox.intersectsWithBox(cambox)) + continue; + + bloomcb->setPower(blooms[i].power); + + cur->render(); + } + + // Second pass for transparents. No-op for solids. + irr_driver->getSceneManager()->setCurrentRendertime(ESNRP_TRANSPARENT); + for (u32 i = 0; i < bloomsize; i++) + { + scene::ISceneNode * const cur = blooms[i].node; + + // Quick box-based culling + const core::aabbox3df nodebox = cur->getTransformedBoundingBox(); + if (!nodebox.intersectsWithBox(cambox)) + continue; + + bloomcb->setPower(blooms[i].power); + + cur->render(); + } + + overridemat.Enabled = 0; + overridemat.EnablePasses = 0; + + // Ok, we have the stencil; now use it to blit from color to bloom tex + glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); + glStencilFunc(GL_EQUAL, 1, ~0); + m_material.MaterialType = EMT_SOLID; + m_material.setTexture(0, irr_driver->getRTT(RTT_COLOR)); + + // Just in case. + glColorMask(1, 1, 1, 0); + drv->setRenderTarget(irr_driver->getRTT(RTT_TMP3), false, false); + + m_material.ColorMask = ECP_RGB; + drawQuad(cam, m_material); + m_material.ColorMask = ECP_ALL; + + glColorMask(1, 1, 1, 1); + glDisable(GL_STENCIL_TEST); + } // end forced bloom + + // To half + m_material.MaterialType = EMT_SOLID; + m_material.setTexture(0, irr_driver->getRTT(RTT_TMP3)); + drv->setRenderTarget(irr_driver->getRTT(RTT_HALF1), true, false); + + drawQuad(cam, m_material); + + // To quarter + m_material.MaterialType = EMT_SOLID; + m_material.setTexture(0, irr_driver->getRTT(RTT_HALF1)); + drv->setRenderTarget(irr_driver->getRTT(RTT_QUARTER1), true, false); + + drawQuad(cam, m_material); + + // To eighth + m_material.MaterialType = EMT_SOLID; + m_material.setTexture(0, irr_driver->getRTT(RTT_QUARTER1)); + drv->setRenderTarget(irr_driver->getRTT(RTT_EIGHTH1), true, false); + + drawQuad(cam, m_material); + + // Blur it for distribution. + { + gacb->setResolution(UserConfigParams::m_width / 8, + UserConfigParams::m_height / 8); + m_material.MaterialType = irr_driver->getShader(ES_GAUSSIAN6V); + m_material.setTexture(0, irr_driver->getRTT(RTT_EIGHTH1)); + drv->setRenderTarget(irr_driver->getRTT(RTT_EIGHTH2), true, false); + + drawQuad(cam, m_material); + + m_material.MaterialType = irr_driver->getShader(ES_GAUSSIAN6H); + m_material.setTexture(0, irr_driver->getRTT(RTT_EIGHTH2)); + drv->setRenderTarget(irr_driver->getRTT(RTT_EIGHTH1), false, false); + + drawQuad(cam, m_material); + } + + // Additively blend on top of tmp1 + m_material.BlendOperation = EBO_ADD; + m_material.MaterialType = irr_driver->getShader(ES_BLOOM_BLEND); + m_material.setTexture(0, irr_driver->getRTT(RTT_EIGHTH1)); + drv->setRenderTarget(out, false, false); + + drawQuad(cam, m_material); + + m_material.BlendOperation = EBO_NONE; + } // end if bloom + + in = irr_driver->getRTT(RTT_TMP1); + out = irr_driver->getRTT(RTT_TMP2); + } + + if (World::getWorld()->getTrack()->hasGodRays() && m_sunpixels > 30) // god rays + { + // Grab the sky + drv->setRenderTarget(out, true, false); + irr_driver->getSceneManager()->drawAll(ESNRP_SKY_BOX); + + // Set the sun's color + ColorizeProvider * const colcb = (ColorizeProvider *) irr_driver->getCallback(ES_COLORIZE); + const SColor col = World::getWorld()->getTrack()->getSunColor(); + colcb->setColor(col.getRed() / 255.0f, col.getGreen() / 255.0f, col.getBlue() / 255.0f); + + // The sun interposer + IMeshSceneNode * const sun = irr_driver->getSunInterposer(); + sun->getMaterial(0).ColorMask = ECP_ALL; + irr_driver->getSceneManager()->drawAll(ESNRP_CAMERA); + irr_driver->getSceneManager()->setCurrentRendertime(ESNRP_SOLID); + + sun->render(); + + sun->getMaterial(0).ColorMask = ECP_NONE; + + // Fade to quarter + m_material.MaterialType = irr_driver->getShader(ES_GODFADE); + m_material.setTexture(0, out); + drv->setRenderTarget(irr_driver->getRTT(RTT_QUARTER1), false, false); + + drawQuad(cam, m_material); + + // Blur + { + gacb->setResolution(UserConfigParams::m_width / 4, + UserConfigParams::m_height / 4); + m_material.MaterialType = irr_driver->getShader(ES_GAUSSIAN3V); + m_material.setTexture(0, irr_driver->getRTT(RTT_QUARTER1)); + drv->setRenderTarget(irr_driver->getRTT(RTT_QUARTER2), true, false); + + drawQuad(cam, m_material); + + m_material.MaterialType = irr_driver->getShader(ES_GAUSSIAN3H); + m_material.setTexture(0, irr_driver->getRTT(RTT_QUARTER2)); + drv->setRenderTarget(irr_driver->getRTT(RTT_QUARTER1), false, false); + + drawQuad(cam, m_material); + } + + // Calculate the sun's position in texcoords + const core::vector3df pos = sun->getPosition(); + float ndc[4]; + core::matrix4 trans = camnode->getProjectionMatrix(); + trans *= camnode->getViewMatrix(); + + trans.transformVect(ndc, pos); + + const float texh = m_vertices[cam].v1.TCoords.Y - m_vertices[cam].v0.TCoords.Y; + const float texw = m_vertices[cam].v3.TCoords.X - m_vertices[cam].v0.TCoords.X; + + const float sunx = ((ndc[0] / ndc[3]) * 0.5f + 0.5f) * texw; + const float suny = ((ndc[1] / ndc[3]) * 0.5f + 0.5f) * texh; + + ((GodRayProvider *) irr_driver->getCallback(ES_GODRAY))-> + setSunPosition(sunx, suny); + + // Rays please + m_material.MaterialType = irr_driver->getShader(ES_GODRAY); + m_material.setTexture(0, irr_driver->getRTT(RTT_QUARTER1)); + drv->setRenderTarget(irr_driver->getRTT(RTT_QUARTER2), true, false); + + drawQuad(cam, m_material); + + // Blur + { + gacb->setResolution(UserConfigParams::m_width / 4, + UserConfigParams::m_height / 4); + m_material.MaterialType = irr_driver->getShader(ES_GAUSSIAN3V); + m_material.setTexture(0, irr_driver->getRTT(RTT_QUARTER2)); + drv->setRenderTarget(irr_driver->getRTT(RTT_QUARTER1), true, false); + + drawQuad(cam, m_material); + + m_material.MaterialType = irr_driver->getShader(ES_GAUSSIAN3H); + m_material.setTexture(0, irr_driver->getRTT(RTT_QUARTER1)); + drv->setRenderTarget(irr_driver->getRTT(RTT_QUARTER2), false, false); + + drawQuad(cam, m_material); + } + + // Overlay + m_material.MaterialType = EMT_TRANSPARENT_ADD_COLOR; + m_material.setTexture(0, irr_driver->getRTT(RTT_QUARTER2)); + drv->setRenderTarget(in, false, false); + + drawQuad(cam, m_material); + } + + if (UserConfigParams::m_motionblur && m_any_boost) // motion blur + { + // Calculate the kart's Y position on screen + const core::vector3df pos = + Camera::getCamera(cam)->getKart()->getNode()->getPosition(); + float ndc[4]; + core::matrix4 trans = camnode->getProjectionMatrix(); + trans *= camnode->getViewMatrix(); + + trans.transformVect(ndc, pos); + const float karty = (ndc[1] / ndc[3]) * 0.5f + 0.5f; + setMotionBlurCenterY(cam, karty); + + + m_material.MaterialType = irr_driver->getShader(ES_MOTIONBLUR); + m_material.setTexture(0, in); + drv->setRenderTarget(out, true, false); + + drawQuad(cam, m_material); + + ITexture *tmp = in; + in = out; + out = tmp; + } + + if (irr_driver->getDisplacingNodes().size()) // Displacement + { + m_material.MaterialType = irr_driver->getShader(ES_PPDISPLACE); + m_material.setFlag(EMF_BILINEAR_FILTER, false); + m_material.setTexture(0, in); + m_material.setTexture(1, irr_driver->getRTT(RTT_DISPLACE)); + drv->setRenderTarget(out, true, false); + + drawQuad(cam, m_material); + + m_material.setTexture(1, 0); + m_material.setFlag(EMF_BILINEAR_FILTER, true); + + ITexture *tmp = in; + in = out; + out = tmp; + } + + if (UserConfigParams::m_mlaa) // MLAA. Must be the last pp filter. + { + drv->setRenderTarget(out, false, false); + + glEnable(GL_STENCIL_TEST); + glClearColor(0.0, 0.0, 0.0, 1.0); + glClear(GL_STENCIL_BUFFER_BIT | GL_COLOR_BUFFER_BIT); + glStencilFunc(GL_ALWAYS, 1, ~0); + glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); + + // Pass 1: color edge detection + m_material.setFlag(EMF_BILINEAR_FILTER, false); + m_material.setFlag(EMF_TRILINEAR_FILTER, false); + m_material.MaterialType = irr_driver->getShader(ES_MLAA_COLOR1); + m_material.setTexture(0, in); + + drawQuad(cam, m_material); + m_material.setFlag(EMF_BILINEAR_FILTER, true); + m_material.setFlag(EMF_TRILINEAR_FILTER, true); + + glStencilFunc(GL_EQUAL, 1, ~0); + glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); + + // Pass 2: blend weights + drv->setRenderTarget(irr_driver->getRTT(RTT_TMP3), true, false); + + m_material.MaterialType = irr_driver->getShader(ES_MLAA_BLEND2); + m_material.setTexture(0, out); + m_material.setTexture(1, m_areamap); + m_material.TextureLayer[1].BilinearFilter = false; + m_material.TextureLayer[1].TrilinearFilter = false; + + drawQuad(cam, m_material); + + m_material.TextureLayer[1].BilinearFilter = true; + m_material.TextureLayer[1].TrilinearFilter = true; + m_material.setTexture(1, 0); + + // Pass 3: gather + drv->setRenderTarget(in, false, false); + + m_material.setFlag(EMF_BILINEAR_FILTER, false); + m_material.setFlag(EMF_TRILINEAR_FILTER, false); + m_material.MaterialType = irr_driver->getShader(ES_MLAA_NEIGH3); + m_material.setTexture(0, irr_driver->getRTT(RTT_TMP3)); + m_material.setTexture(1, irr_driver->getRTT(RTT_COLOR)); + + drawQuad(cam, m_material); + + m_material.setFlag(EMF_BILINEAR_FILTER, true); + m_material.setFlag(EMF_TRILINEAR_FILTER, true); + m_material.setTexture(1, 0); + + // Done. + glDisable(GL_STENCIL_TEST); + } + + // Final blit + + if (irr_driver->getNormals()) + { + m_material.MaterialType = irr_driver->getShader(ES_FLIP); + m_material.setTexture(0, irr_driver->getRTT(RTT_NORMAL)); + } else if (irr_driver->getSSAOViz()) + { + m_material.MaterialType = irr_driver->getShader(ES_FLIP); + m_material.setTexture(0, irr_driver->getRTT(RTT_SSAO1)); + } else if (irr_driver->getShadowViz()) + { + m_material.MaterialType = irr_driver->getShader(ES_FLIP); + m_material.setTexture(0, irr_driver->getRTT(RTT_SHADOW)); + } else + { + m_material.MaterialType = irr_driver->getShader(ES_FLIP); + m_material.setTexture(0, in); + } + + drv->setRenderTarget(ERT_FRAME_BUFFER, false, false); + + drawQuad(cam, m_material); } - - u16 indices[6] = {0, 1, 2, 3, 0, 2}; - - for(m_current_camera=0; m_current_cameragetVideoDriver(); - video_driver->setMaterial(m_blur_material); - video_driver->drawIndexedTriangleList(&(m_vertices[m_current_camera].v0), - 4, &indices[0], 2); - } - } // render -// ---------------------------------------------------------------------------- -/** Implement IShaderConstantsSetCallback. Shader constants setter for - * post-processing */ -void PostProcessing::OnSetConstants(video::IMaterialRendererServices *services, - s32 user_data) +void PostProcessing::drawQuad(u32 cam, const SMaterial &mat) { - // We need the maximum texture coordinates: - float max_tex_height = m_vertices[m_current_camera].v1.TCoords.Y; - services->setPixelShaderConstant("max_tex_height", &max_tex_height, 1); + const u16 indices[6] = {0, 1, 2, 3, 0, 2}; + IVideoDriver * const drv = irr_driver->getVideoDriver(); - // Scale the boost time to get a usable boost amount: - float boost_amount = m_boost_time[m_current_camera] * 0.7f; + drv->setTransform(ETS_WORLD, core::IdentityMatrix); + drv->setTransform(ETS_VIEW, core::IdentityMatrix); + drv->setTransform(ETS_PROJECTION, core::IdentityMatrix); - // Especially for single screen the top of the screen is less blurred - // in the fragment shader by multiplying the blurr factor by - // (max_tex_height - texcoords.t), where max_tex_height is the maximum - // texture coordinate (1.0 or 0.5). In split screen this factor is too - // small (half the value compared with non-split screen), so we - // multiply this by 2. - if(m_boost_time.size()>1) - boost_amount *= 2.0f; - - services->setPixelShaderConstant("boost_amount", &boost_amount, 1); - services->setPixelShaderConstant("center", - &(m_center[m_current_camera].X), 2); - services->setPixelShaderConstant("direction", - &(m_direction[m_current_camera].X), 2); - - // Use a radius of 0.15 when showing a single kart, otherwise (2-4 karts - // on splitscreen) use only 0.75. - float radius = Camera::getNumCameras()==1 ? 0.15f : 0.075f; - services->setPixelShaderConstant("mask_radius", &radius, 1); - const int texunit = 0; - services->setPixelShaderConstant("color_buffer", &texunit, 1); -} // OnSetConstants + drv->setMaterial(mat); + drv->drawIndexedTriangleList(&(m_vertices[cam].v0), + 4, indices, 2); +} diff --git a/src/graphics/post_processing.hpp b/src/graphics/post_processing.hpp index 136c0e1ec..020cb3ffc 100644 --- a/src/graphics/post_processing.hpp +++ b/src/graphics/post_processing.hpp @@ -1,6 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011-2013 the SuperTuxKart team -// Copyright (C) 2013 Joerg Henrichs +// Copyright (C) 2011-2013 the SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -34,61 +33,58 @@ using namespace irr; /** \brief Handles post processing, eg motion blur * \ingroup graphics */ -class PostProcessing : public video::IShaderConstantSetCallBack +class PostProcessing: public IReferenceCounted { private: - video::ITexture *m_render_target; - /** Material to be used when blurring is used. */ - video::SMaterial m_blur_material; - - bool m_supported; + video::SMaterial m_material; /** Boost time, how long the boost should be displayed. This also * affects the strength of the effect: longer boost time will * have a stronger effect. */ std::vector m_boost_time; + bool m_any_boost; + /** The center of blurring, in texture coordinates [0,1]).*/ std::vector m_center; /** The center to which the blurring is aimed at, in [0,1]. */ std::vector m_direction; - /** True if any of the cameras is using post processing. */ - bool m_used_pp_this_frame; - - /** Currently active camera during post-processing, needed in the - * OnSetConstants callback. */ - unsigned int m_current_camera; - - struct Quad { video::S3DVertex v0, v1, v2, v3; }; /** The vertices for the rectangle used for each camera. This includes * the vertex position, normal, and texture coordinate. */ std::vector m_vertices; + video::ITexture *m_areamap; + + u32 m_sunpixels; + + void setMotionBlurCenterY(const u32 num, const float y); + public: PostProcessing(video::IVideoDriver* video_driver); virtual ~PostProcessing(); void reset(); /** Those should be called around the part where we render the scene to be post-processed */ - void beginCapture(); - void endCapture(); + void begin(); void update(float dt); + /** Render the post-processed scene, solids only, color to color, no stencil */ + void renderSolid(const u32 cam); + /** Render the post-processed scene */ void render(); - /** Is the hardware able to use post-processing? */ - inline bool isSupported() const {return m_supported;} + /** Draw the quad for this camera */ + void drawQuad(u32 cam, const video::SMaterial &mat); /** Use motion blur for a short time */ void giveBoost(unsigned int cam_index); - /** Implement IShaderConstantsSetCallback. Shader constants setter for post-processing */ - virtual void OnSetConstants(video::IMaterialRendererServices *services, s32 user_data); + void setSunPixels(const u32 in) { m_sunpixels = in; } }; #endif // HEADER_POST_PROCESSING_HPP diff --git a/src/graphics/rain.cpp b/src/graphics/rain.cpp index 4edd7d9a2..9d0127872 100644 --- a/src/graphics/rain.cpp +++ b/src/graphics/rain.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Joerg Henrichs, Marianne Gagnon +// Copyright (C) 2011-2013 Joerg Henrichs, Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -18,28 +18,117 @@ #include "audio/sfx_base.hpp" #include "audio/sfx_manager.hpp" +#include "graphics/glwrap.hpp" #include "graphics/irr_driver.hpp" #include "graphics/material_manager.hpp" #include "graphics/material.hpp" #include "graphics/per_camera_node.hpp" #include "graphics/rain.hpp" +#include "graphics/shaders.hpp" #include "modes/world.hpp" #include "states_screens/race_gui.hpp" #include "utils/constants.hpp" #include "utils/random_generator.hpp" +#include #include -#include -const float RAIN_RADIUS[RAIN_RING_COUNT] = { 1.0f, 3.0f, 6.0f, 12.0f, 24.0f }; -const float RAIN_Y_TO = 25.0f; -const float RAIN_Y_FROM = -10.0f; -const float RAIN_DY = 2.5f; -const float RAIN_DX = 0.0f; +using namespace video; +using namespace scene; +using namespace core; -const float TEXTURE_X_TILES[RAIN_RING_COUNT] = { 2.0f, 2.5f, 3.5f, 5.0f, 8.0f }; -const float TEXTURE_Y_TILES[RAIN_RING_COUNT] = { 8.0f, 7.0f, 6.0f, 4.0f, 4.0f }; +// The actual rain node +class RainNode: public scene::ISceneNode +{ +public: + RainNode(scene::ISceneManager* mgr, ITexture *tex) + : scene::ISceneNode(0, mgr, -1) + { + mat.Lighting = false; + mat.ZWriteEnable = false; + mat.MaterialType = irr_driver->getShader(ES_RAIN); + mat.Thickness = 200; + mat.BlendOperation = EBO_ADD; + mat.setTexture(0, tex); + mat.TextureLayer[0].TextureWrapU = + mat.TextureLayer[0].TextureWrapV = ETC_CLAMP_TO_EDGE; + + count = 2500; + area = 3500; + + // Fill in the mesh buffer + buf.Vertices.clear(); + buf.Indices.clear(); + + buf.Vertices.set_used(count); + buf.Indices.set_used(count); + + buf.Primitive = EPT_POINT_SPRITES; + buf.setHardwareMappingHint(EHM_STATIC); + + u32 i; + float x, y, z; + for (i = 0; i < count; i++) + { + x = ((rand() % area) - area/2) / 100.0f; + y = ((rand() % 2400)) / 100.0f; + z = ((rand() % area) - area/2) / 100.0f; + + buf.Indices[i] = i; + buf.Vertices[i] = S3DVertex(x, y, z, 0, 0, 0, SColor(255, 255, 0, 0), 0, 0); + } + + box.addInternalPoint(vector3df(-area/2)); + box.addInternalPoint(vector3df(area/2)); + } + + ~RainNode() + { + } + + virtual void render() + { + glEnable(GL_VERTEX_PROGRAM_POINT_SIZE); + + IVideoDriver * const drv = irr_driver->getVideoDriver(); + drv->setTransform(ETS_WORLD, AbsoluteTransformation); + drv->setMaterial(mat); + + drv->drawMeshBuffer(&buf); + + glDisable(GL_VERTEX_PROGRAM_POINT_SIZE); + } + + virtual const core::aabbox3d& getBoundingBox() const + { + return box; + } + + virtual void OnRegisterSceneNode() + { + if (IsVisible && + (irr_driver->getRenderPass() & ESNRP_TRANSPARENT) == ESNRP_TRANSPARENT) + { + SceneManager->registerNodeForRendering(this, ESNRP_TRANSPARENT); + } + + ISceneNode::OnRegisterSceneNode(); + } + + virtual u32 getMaterialCount() const { return 1; } + virtual video::SMaterial& getMaterial(u32 i) { return mat; } + +private: + video::SMaterial mat; + core::aabbox3d box; + u32 count; + s32 area; + + scene::SMeshBuffer buf; +}; + +// The rain manager Rain::Rain(Camera *camera, irr::scene::ISceneNode* parent) { @@ -54,80 +143,17 @@ Rain::Rain(Camera *camera, irr::scene::ISceneNode* parent) RandomGenerator g; m_next_lightning = (float)g.get(35); - for (int r=0; rMaterial.setTexture(0, m->getTexture()); - m->setMaterialProperties(&buffer->Material, NULL); - buffer->Material.ZWriteEnable = false; - buffer->Material.BackfaceCulling = false; - - m_materials.push_back(&buffer->Material); - - video::S3DVertex v; - v.Color.set(255,255,255,255); - - // create a cylinder mesh - const int VERTICES = 17; - - for (int vid=0; vidVertices.push_back(v); - - v.Pos.Y = RAIN_Y_FROM; - - v.TCoords.Y = 0.0f; - buffer->Vertices.push_back(v); - - if (vid > 0) - { - buffer->Indices.push_back(vid-2); - buffer->Indices.push_back(vid-1); - buffer->Indices.push_back(vid); - buffer->Indices.push_back(vid-1); - buffer->Indices.push_back(vid); - buffer->Indices.push_back(vid+1); - } - } - - scene::SMesh* mesh = new scene::SMesh(); - mesh->addMeshBuffer(buffer); - mesh->recalculateBoundingBox(); - - m_node[r] = irr_driver->addPerCameraMesh(mesh, - camera->getCameraSceneNode(), - parent); - m_node[r]->setAutomaticCulling(0); - mesh->drop(); - - buffer->drop(); - } + RainNode *node = new RainNode(irr_driver->getSceneManager(), m->getTexture()); + m_node = irr_driver->addPerCameraNode(node, camera->getCameraSceneNode(), parent); + m_node->setAutomaticCulling(0); } // Rain // ---------------------------------------------------------------------------- Rain::~Rain() { - for (int r=0; rdrop(); // drop STK's reference - m_node[r]->remove(); // Then remove it from the scene graph. - } + m_node->drop(); // drop STK's reference + m_node->remove(); // Then remove it from the scene graph. if (m_lightning && m_thunder_sound != NULL) sfx_manager->deleteSFX(m_thunder_sound); } @@ -136,19 +162,6 @@ Rain::~Rain() void Rain::update(float dt) { - //const int count = m_materials.size(); - for (int m=0; m 1.0f) m_x[m] = fmod(m_x[m], 1.0f); - if (m_y[m] > 1.0f) m_y[m] = fmod(m_y[m], 1.0f); - - core::matrix4& matrix = m_node[m]->getChild()->getMaterial(0).getTextureMatrix(0); - - matrix.setTextureTranslate(m_x[m], m_y[m]); - } - if (m_lightning) { m_next_lightning -= dt; @@ -173,15 +186,12 @@ void Rain::update(float dt) void Rain::setPosition(const core::vector3df& position) { - for (int m=0; mgetChild()->setPosition(position); - } + m_node->getChild()->setPosition(position); } // setPosition // ---------------------------------------------------------------------------- void Rain::setCamera(scene::ICameraSceneNode* camera) { - for (int n=0; nsetCamera(camera); + m_node->setCamera(camera); } diff --git a/src/graphics/rain.hpp b/src/graphics/rain.hpp index 4f7f13f24..b8408c2a8 100644 --- a/src/graphics/rain.hpp +++ b/src/graphics/rain.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Joerg Henrichs, Marianne Gagnon +// Copyright (C) 2011-2013 Joerg Henrichs, Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -25,23 +25,16 @@ class PerCameraNode; #include namespace irr { - namespace video { class SMaterial; } + namespace video { class SMaterial; class ITexture; } namespace scene { class ICameraSceneNode; class ISceneNode; } } using namespace irr; -const int RAIN_RING_COUNT = 5; - class SFXBase; class Rain { - PerCameraNode* m_node[RAIN_RING_COUNT]; - - std::vector m_materials; - - float m_x[RAIN_RING_COUNT]; - float m_y[RAIN_RING_COUNT]; + PerCameraNode* m_node; float m_next_lightning; bool m_lightning; @@ -49,7 +42,7 @@ class Rain public: Rain(Camera* camera, irr::scene::ISceneNode* parent); - ~Rain(); + virtual ~Rain(); void update(float dt); void setPosition(const irr::core::vector3df& position); diff --git a/src/graphics/referee.cpp b/src/graphics/referee.cpp index 9f9d45520..4579991cc 100644 --- a/src/graphics/referee.cpp +++ b/src/graphics/referee.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Joerg Henrichs +// Copyright (C) 2011-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -124,6 +124,8 @@ void Referee::init() scene::IMeshBuffer *mb = m_st_referee_mesh->getMeshBuffer(i); video::SMaterial &irrMaterial = mb->getMaterial(); video::ITexture* t=irrMaterial.getTexture(0); + if(!t) continue; + std::string name=StringUtils::getBasename(t->getName() .getInternalName().c_str()); if(name==colors[0] || name==colors[1] ||name==colors[2] ) @@ -171,6 +173,8 @@ Referee::Referee() m_scene_node->setScale(m_st_scale.toIrrVector()); m_scene_node->setFrameLoop(m_st_first_start_frame, m_st_last_start_frame); + + irr_driver->applyObjectPassShader(m_scene_node); } // Referee // ---------------------------------------------------------------------------- @@ -195,6 +199,8 @@ Referee::Referee(const AbstractKart &kart) m_scene_node->setPosition(core::vector3df(0, kart.getKartHeight() + 0.4f, 0)); m_scene_node->setFrameLoop(m_st_first_rescue_frame, m_st_last_rescue_frame); + + irr_driver->applyObjectPassShader(m_scene_node); } // Referee // ---------------------------------------------------------------------------- diff --git a/src/graphics/referee.hpp b/src/graphics/referee.hpp index 1aca693ee..93941f051 100644 --- a/src/graphics/referee.hpp +++ b/src/graphics/referee.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Joerg Henrichs +// Copyright (C) 2011-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -19,7 +19,10 @@ #ifndef HEADER_REFEREE_HPP #define HEADER_REFEREE_HPP -#include "irrlicht.h" +#include +#include +#include +#include using namespace irr; #include "utils/vec3.hpp" diff --git a/src/graphics/render.cpp b/src/graphics/render.cpp new file mode 100644 index 000000000..d4531d9b4 --- /dev/null +++ b/src/graphics/render.cpp @@ -0,0 +1,826 @@ +// +// SuperTuxKart - a fun racing game with go-kart +// Copyright (C) 2009 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 "graphics/irr_driver.hpp" + +#include "config/user_config.hpp" +#include "graphics/callbacks.hpp" +#include "graphics/camera.hpp" +#include "graphics/glow.hpp" +#include "graphics/glwrap.hpp" +#include "graphics/lens_flare.hpp" +#include "graphics/light.hpp" +#include "graphics/lod_node.hpp" +#include "graphics/material_manager.hpp" +#include "graphics/particle_kind_manager.hpp" +#include "graphics/per_camera_node.hpp" +#include "graphics/post_processing.hpp" +#include "graphics/referee.hpp" +#include "graphics/rtts.hpp" +#include "graphics/screenquad.hpp" +#include "graphics/shaders.hpp" +#include "graphics/shadow_importance.hpp" +#include "graphics/wind.hpp" +#include "io/file_manager.hpp" +#include "items/item.hpp" +#include "items/item_manager.hpp" +#include "modes/world.hpp" +#include "physics/physics.hpp" +#include "tracks/track.hpp" +#include "utils/constants.hpp" +#include "utils/helpers.hpp" +#include "utils/log.hpp" +#include "utils/profiler.hpp" + +void IrrDriver::renderGLSL(float dt) +{ + World *world = World::getWorld(); // Never NULL. + + // Overrides + video::SOverrideMaterial &overridemat = m_video_driver->getOverrideMaterial(); + overridemat.EnablePasses = scene::ESNRP_SOLID | scene::ESNRP_TRANSPARENT; + overridemat.EnableFlags = 0; + + if (m_wireframe) + { + overridemat.Material.Wireframe = 1; + overridemat.EnableFlags |= video::EMF_WIREFRAME; + } + if (m_mipviz) + { + overridemat.Material.MaterialType = m_shaders->getShader(ES_MIPVIZ); + overridemat.EnableFlags |= video::EMF_MATERIAL_TYPE; + overridemat.EnablePasses = scene::ESNRP_SOLID; + } + + // Get a list of all glowing things. The driver's list contains the static ones, + // here we add items, as they may disappear each frame. + std::vector glows = m_glowing; + std::vector transparent_glow_nodes; + + ItemManager * const items = ItemManager::get(); + const u32 itemcount = items->getNumberOfItems(); + u32 i; + + // For each static node, give it a glow representation + const u32 staticglows = glows.size(); + for (i = 0; i < staticglows; i++) + { + scene::ISceneNode * const node = glows[i].node; + + const float radius = (node->getBoundingBox().getExtent().getLength() / 2) * 2.0f; + GlowNode * const repnode = new GlowNode(irr_driver->getSceneManager(), radius); + repnode->setPosition(node->getTransformedBoundingBox().getCenter()); + transparent_glow_nodes.push_back(repnode); + } + + for (i = 0; i < itemcount; i++) + { + Item * const item = items->getItem(i); + if (!item) continue; + const Item::ItemType type = item->getType(); + + if (type != Item::ITEM_NITRO_BIG && type != Item::ITEM_NITRO_SMALL && + type != Item::ITEM_BONUS_BOX) + continue; + + LODNode * const lod = (LODNode *) item->getSceneNode(); + if (!lod->isVisible()) continue; + + const int level = lod->getLevel(); + if (level < 0) continue; + + scene::ISceneNode * const node = lod->getAllNodes()[level]; + node->updateAbsolutePosition(); + + GlowData dat; + dat.node = node; + + dat.r = 1.0f; + dat.g = 1.0f; + dat.b = 1.0f; + + // Item colors + switch (type) + { + case Item::ITEM_NITRO_BIG: + case Item::ITEM_NITRO_SMALL: + dat.r = stk_config->m_nitro_glow_color[0]; + dat.g = stk_config->m_nitro_glow_color[1]; + dat.b = stk_config->m_nitro_glow_color[2]; + break; + case Item::ITEM_BONUS_BOX: + dat.r = stk_config->m_box_glow_color[0]; + dat.g = stk_config->m_box_glow_color[1]; + dat.b = stk_config->m_box_glow_color[2]; + break; + default: + Log::fatal("render", "Unknown item type got through"); + break; + } + + glows.push_back(dat); + + // Push back its representation too + const float radius = (node->getBoundingBox().getExtent().getLength() / 2) * 2.0f; + GlowNode * const repnode = new GlowNode(irr_driver->getSceneManager(), radius); + repnode->setPosition(node->getTransformedBoundingBox().getCenter()); + transparent_glow_nodes.push_back(repnode); + } + + // Start the RTT for post-processing. + // We do this before beginScene() because we want to capture the glClear() + // because of tracks that do not have skyboxes (generally add-on tracks) + m_post_processing->begin(); + m_video_driver->setRenderTarget(m_rtts->getRTT(RTT_COLOR), false, false); + + m_video_driver->beginScene(/*backBuffer clear*/ true, /*zBuffer*/ true, + world->getClearColor()); + + // Clear normal and depth to zero + m_video_driver->setRenderTarget(m_rtts->getRTT(RTT_NORMAL), true, false, video::SColor(0,0,0,0)); + m_video_driver->setRenderTarget(m_rtts->getRTT(RTT_DEPTH), true, false, video::SColor(0,0,0,0)); + + irr_driver->getVideoDriver()->enableMaterial2D(); + RaceGUIBase *rg = world->getRaceGUI(); + if (rg) rg->update(dt); + + + for(unsigned int cam = 0; cam < Camera::getNumCameras(); cam++) + { + Camera * const camera = Camera::getCamera(cam); + scene::ICameraSceneNode * const camnode = camera->getCameraSceneNode(); + +#ifdef ENABLE_PROFILER + std::ostringstream oss; + oss << "drawAll() for kart " << cam << std::flush; + PROFILER_PUSH_CPU_MARKER(oss.str().c_str(), (cam+1)*60, + 0x00, 0x00); +#endif + camera->activate(); + rg->preRenderCallback(camera); // adjusts start referee + + const u32 bgnodes = m_background.size(); + if (bgnodes) + { + // If there are background nodes (3d skybox), draw them now. + m_video_driver->setRenderTarget(m_rtts->getRTT(RTT_COLOR), false, false); + + m_renderpass = scene::ESNRP_SKY_BOX; + m_scene_manager->drawAll(m_renderpass); + + const video::SOverrideMaterial prev = overridemat; + overridemat.Enabled = 1; + overridemat.EnableFlags = video::EMF_MATERIAL_TYPE; + overridemat.Material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF; + + for (i = 0; i < bgnodes; i++) + { + m_background[i]->setPosition(camnode->getPosition() * 0.97f); + m_background[i]->updateAbsolutePosition(); + m_background[i]->render(); + } + + overridemat = prev; + m_video_driver->setRenderTarget(m_rtts->getRTT(RTT_COLOR), false, true); + } + + // Fire up the MRT + m_video_driver->setRenderTarget(m_mrt, false, false); + + m_renderpass = scene::ESNRP_CAMERA | scene::ESNRP_SOLID; + m_scene_manager->drawAll(m_renderpass); + + ShadowImportanceProvider * const sicb = (ShadowImportanceProvider *) + irr_driver->getCallback(ES_SHADOW_IMPORTANCE); + sicb->updateIPVMatrix(); + + // Used to cull glowing items & lights + const core::aabbox3df cambox = camnode->getViewFrustum()->getBoundingBox(); + + // Render anything glowing. + if (!m_mipviz && !m_wireframe) + { + m_scene_manager->setCurrentRendertime(scene::ESNRP_SOLID); + + m_video_driver->setRenderTarget(m_rtts->getRTT(RTT_TMP1), false, false); + glClearColor(0, 0, 0, 0); + glClear(GL_STENCIL_BUFFER_BIT | GL_COLOR_BUFFER_BIT); + const u32 glowcount = glows.size(); + ColorizeProvider * const cb = (ColorizeProvider *) m_shaders->m_callbacks[ES_COLORIZE]; + + GlowProvider * const glowcb = (GlowProvider *) m_shaders->m_callbacks[ES_GLOW]; + glowcb->setResolution(UserConfigParams::m_width, + UserConfigParams::m_height); + + overridemat.Material.MaterialType = m_shaders->getShader(ES_COLORIZE); + overridemat.EnableFlags = video::EMF_MATERIAL_TYPE; + overridemat.EnablePasses = scene::ESNRP_SOLID; + overridemat.Enabled = true; + + glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); + glStencilFunc(GL_ALWAYS, 1, ~0); + glEnable(GL_STENCIL_TEST); + + for (u32 i = 0; i < glowcount; i++) + { + const GlowData &dat = glows[i]; + scene::ISceneNode * const cur = dat.node; + + // Quick box-based culling + const core::aabbox3df nodebox = cur->getTransformedBoundingBox(); + if (!nodebox.intersectsWithBox(cambox)) + continue; + + cb->setColor(dat.r, dat.g, dat.b); + cur->render(); + } + + // Second round for transparents; it's a no-op for solids + m_scene_manager->setCurrentRendertime(scene::ESNRP_TRANSPARENT); + overridemat.Material.MaterialType = m_shaders->getShader(ES_COLORIZE_REF); + for (u32 i = 0; i < glowcount; i++) + { + const GlowData &dat = glows[i]; + scene::ISceneNode * const cur = dat.node; + + // Quick box-based culling + const core::aabbox3df nodebox = cur->getTransformedBoundingBox(); + if (!nodebox.intersectsWithBox(cambox)) + continue; + + cb->setColor(dat.r, dat.g, dat.b); + cur->render(); + } + overridemat.Enabled = false; + overridemat.EnablePasses = 0; + + glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); + glDisable(GL_STENCIL_TEST); + + // Cool, now we have the colors set up. Progressively minify. + video::SMaterial minimat; + minimat.Lighting = false; + minimat.ZWriteEnable = false; + minimat.ZBuffer = video::ECFN_ALWAYS; + minimat.setFlag(video::EMF_TRILINEAR_FILTER, true); + + minimat.TextureLayer[0].TextureWrapU = + minimat.TextureLayer[0].TextureWrapV = video::ETC_CLAMP_TO_EDGE; + + // To half + minimat.setTexture(0, m_rtts->getRTT(RTT_TMP1)); + m_video_driver->setRenderTarget(m_rtts->getRTT(RTT_HALF1), false, false); + m_post_processing->drawQuad(cam, minimat); + + // To quarter + minimat.setTexture(0, m_rtts->getRTT(RTT_HALF1)); + m_video_driver->setRenderTarget(m_rtts->getRTT(RTT_QUARTER1), false, false); + m_post_processing->drawQuad(cam, minimat); + + // Blur it + ((GaussianBlurProvider *) m_shaders->m_callbacks[ES_GAUSSIAN3H])->setResolution( + UserConfigParams::m_width / 4, + UserConfigParams::m_height / 4); + + minimat.MaterialType = m_shaders->getShader(ES_GAUSSIAN6H); + minimat.setTexture(0, m_rtts->getRTT(RTT_QUARTER1)); + m_video_driver->setRenderTarget(m_rtts->getRTT(RTT_QUARTER2), false, false); + m_post_processing->drawQuad(cam, minimat); + + minimat.MaterialType = m_shaders->getShader(ES_GAUSSIAN6V); + minimat.setTexture(0, m_rtts->getRTT(RTT_QUARTER2)); + m_video_driver->setRenderTarget(m_rtts->getRTT(RTT_QUARTER1), false, false); + m_post_processing->drawQuad(cam, minimat); + + // The glows will be rendered in the transparent phase + m_video_driver->setRenderTarget(m_rtts->getRTT(RTT_COLOR), false, false); + + glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); + glDisable(GL_STENCIL_TEST); + } // end glow + + // Shadows + if (!m_mipviz && !m_wireframe && UserConfigParams::m_shadows && + World::getWorld()->getTrack()->hasShadows()) + { + m_scene_manager->setCurrentRendertime(scene::ESNRP_SOLID); + static u8 tick = 0; + + const Vec3 *vmin, *vmax; + World::getWorld()->getTrack()->getAABB(&vmin, &vmax); + core::aabbox3df trackbox(vmin->toIrrVector(), vmax->toIrrVector() - + core::vector3df(0, 30, 0)); + + const float oldfar = camnode->getFarValue(); + camnode->setFarValue(std::min(100.0f, oldfar)); + camnode->render(); + const core::aabbox3df smallcambox = camnode-> + getViewFrustum()->getBoundingBox(); + camnode->setFarValue(oldfar); + camnode->render(); + + // Set up a nice ortho projection that contains our camera frustum + core::matrix4 ortho; + core::aabbox3df box = smallcambox; + box = box.intersect(trackbox); + + m_suncam->getViewMatrix().transformBoxEx(box); + m_suncam->getViewMatrix().transformBoxEx(trackbox); + + core::vector3df extent = trackbox.getExtent(); + const float w = fabsf(extent.X); + const float h = fabsf(extent.Y); + float z = box.MaxEdge.Z; + + // Snap to texels + const float units_per_w = w / m_rtts->getRTT(RTT_SHADOW)->getSize().Width; + const float units_per_h = h / m_rtts->getRTT(RTT_SHADOW)->getSize().Height; + + float left = box.MinEdge.X; + float right = box.MaxEdge.X; + float up = box.MaxEdge.Y; + float down = box.MinEdge.Y; + + left -= fmodf(left, units_per_w); + right -= fmodf(right, units_per_w); + up -= fmodf(up, units_per_h); + down -= fmodf(down, units_per_h); + z -= fmodf(z, 0.5f); + + // FIXME: quick and dirt (and wrong) workaround to avoid division by zero + if (left == right) right += 0.1f; + if (up == down) down += 0.1f; + if (z == 30) z += 0.1f; + + ortho.buildProjectionMatrixOrthoLH(left, right, + up, down, + 30, z); + + m_suncam->setProjectionMatrix(ortho, true); + m_scene_manager->setActiveCamera(m_suncam); + m_suncam->render(); + + ortho *= m_suncam->getViewMatrix(); + ((SunLightProvider *) m_shaders->m_callbacks[ES_SUNLIGHT])->setShadowMatrix(ortho); + sicb->setShadowMatrix(ortho); + + overridemat.Enabled = 0; + + // Render the importance map + m_video_driver->setRenderTarget(m_rtts->getRTT(RTT_COLLAPSE), true, true); + + m_shadow_importance->render(); + + CollapseProvider * const colcb = (CollapseProvider *) + m_shaders-> + m_callbacks[ES_COLLAPSE]; + ScreenQuad sq(m_video_driver); + sq.setMaterialType(m_shaders->getShader(ES_COLLAPSE)); + sq.setTexture(m_rtts->getRTT(RTT_COLLAPSE)); + sq.getMaterial().setFlag(EMF_BILINEAR_FILTER, false); + + const TypeRTT oldh = tick ? RTT_COLLAPSEH : RTT_COLLAPSEH2; + const TypeRTT oldv = tick ? RTT_COLLAPSEV : RTT_COLLAPSEV2; + const TypeRTT curh = tick ? RTT_COLLAPSEH2 : RTT_COLLAPSEH; + const TypeRTT curv = tick ? RTT_COLLAPSEV2 : RTT_COLLAPSEV; + + colcb->setResolution(1, m_rtts->getRTT(RTT_WARPV)->getSize().Height); + sq.setTexture(m_rtts->getRTT(oldh), 1); + sq.render(m_rtts->getRTT(RTT_WARPH)); + + colcb->setResolution(m_rtts->getRTT(RTT_WARPV)->getSize().Height, 1); + sq.setTexture(m_rtts->getRTT(oldv), 1); + sq.render(m_rtts->getRTT(RTT_WARPV)); + + sq.setTexture(0, 1); + ((GaussianBlurProvider *) m_shaders->m_callbacks[ES_GAUSSIAN3H])->setResolution( + m_rtts->getRTT(RTT_WARPV)->getSize().Height, + m_rtts->getRTT(RTT_WARPV)->getSize().Height); + + sq.setMaterialType(m_shaders->getShader(ES_GAUSSIAN6H)); + sq.setTexture(m_rtts->getRTT(RTT_WARPH)); + sq.render(m_rtts->getRTT(curh)); + + sq.setMaterialType(m_shaders->getShader(ES_GAUSSIAN6V)); + sq.setTexture(m_rtts->getRTT(RTT_WARPV)); + sq.render(m_rtts->getRTT(curv)); + + // Convert importance maps to warp maps + // + // It should be noted that while they do repeated work + // calculating the min, max, and total, it's several hundred us + // faster to do that than to do it once in a separate shader + // (shader switch overhead, measured). + colcb->setResolution(m_rtts->getRTT(RTT_WARPV)->getSize().Height, + m_rtts->getRTT(RTT_WARPV)->getSize().Height); + + sq.setMaterialType(m_shaders->getShader(ES_SHADOW_WARPH)); + sq.setTexture(m_rtts->getRTT(curh)); + sq.render(m_rtts->getRTT(RTT_WARPH)); + + sq.setMaterialType(m_shaders->getShader(ES_SHADOW_WARPV)); + sq.setTexture(m_rtts->getRTT(curv)); + sq.render(m_rtts->getRTT(RTT_WARPV)); + + // Actual shadow map + m_video_driver->setRenderTarget(m_rtts->getRTT(RTT_SHADOW), true, true); + overridemat.Material.MaterialType = m_shaders->getShader(ES_SHADOWPASS); + overridemat.EnableFlags = video::EMF_MATERIAL_TYPE | video::EMF_TEXTURE1 | + video::EMF_TEXTURE2; + overridemat.EnablePasses = scene::ESNRP_SOLID; + overridemat.Material.setTexture(1, m_rtts->getRTT(RTT_WARPH)); + overridemat.Material.setTexture(2, m_rtts->getRTT(RTT_WARPV)); + overridemat.Material.TextureLayer[1].TextureWrapU = + overridemat.Material.TextureLayer[1].TextureWrapV = + overridemat.Material.TextureLayer[2].TextureWrapU = + overridemat.Material.TextureLayer[2].TextureWrapV = video::ETC_CLAMP_TO_EDGE; + overridemat.Material.TextureLayer[1].BilinearFilter = + overridemat.Material.TextureLayer[2].BilinearFilter = true; + overridemat.Material.TextureLayer[1].TrilinearFilter = + overridemat.Material.TextureLayer[2].TrilinearFilter = false; + overridemat.Material.TextureLayer[1].AnisotropicFilter = + overridemat.Material.TextureLayer[2].AnisotropicFilter = 0; + overridemat.Material.Wireframe = 1; + overridemat.Enabled = true; + + m_scene_manager->drawAll(scene::ESNRP_SOLID); + + if (m_shadowviz) + { + overridemat.EnableFlags |= video::EMF_WIREFRAME; + m_scene_manager->drawAll(scene::ESNRP_SOLID); + } + + overridemat.EnablePasses = 0; + overridemat.Enabled = false; + camera->activate(); + + tick++; + tick %= 2; + } + + // Lights + if (!m_lightviz) + { + m_video_driver->setRenderTarget(m_rtts->getRTT(RTT_TMP1), true, false, + video::SColor(1, 0, 0, 0)); + } else + { + m_video_driver->setRenderTarget(m_rtts->getRTT(RTT_COLOR), false, false); + } + + const vector3df camcenter = cambox.getCenter(); + const float camradius = cambox.getExtent().getLength() / 2; + const vector3df campos = camnode->getPosition(); + const float camnear = camnode->getNearValue(); + + m_scene_manager->drawAll(scene::ESNRP_CAMERA); + PointLightProvider * const pcb = (PointLightProvider *) irr_driver-> + getCallback(ES_POINTLIGHT); + pcb->updateIPVMatrix(); + SunLightProvider * const scb = (SunLightProvider *) irr_driver-> + getCallback(ES_SUNLIGHT); + scb->updateIPVMatrix(); + FogProvider * const fogcb = (FogProvider *) irr_driver-> + getCallback(ES_FOG); + fogcb->updateIPVMatrix(); + + const u32 lightcount = m_lights.size(); + for (i = 0; i < lightcount; i++) + { + // Sphere culling + const float distance_sq = (m_lights[i]->getPosition() - camcenter).getLengthSQ(); + float radius_sum = camradius + m_lights[i]->getRadius(); + radius_sum *= radius_sum; + if (radius_sum < distance_sq) + continue; + + bool inside = false; + + const float camdistance_sq = (m_lights[i]->getPosition() - campos).getLengthSQ(); + float adjusted_radius = m_lights[i]->getRadius() + camnear; + adjusted_radius *= adjusted_radius; + + // Camera inside the light's radius? Needs adjustment for the near plane. + if (camdistance_sq < adjusted_radius) + { + inside = true; + + video::SMaterial &m = m_lights[i]->getMaterial(0); + m.FrontfaceCulling = true; + m.BackfaceCulling = false; + m.ZBuffer = video::ECFN_GREATER; + } + + if (m_lightviz) + { + overridemat.Enabled = true; + overridemat.EnableFlags = video::EMF_MATERIAL_TYPE | video::EMF_WIREFRAME | + video::EMF_FRONT_FACE_CULLING | + video::EMF_BACK_FACE_CULLING | + video::EMF_ZBUFFER; + overridemat.Material.MaterialType = m_shaders->getShader(ES_COLORIZE); + overridemat.Material.Wireframe = true; + overridemat.Material.BackfaceCulling = false; + overridemat.Material.FrontfaceCulling = false; + overridemat.Material.ZBuffer = video::ECFN_LESSEQUAL; + + + ColorizeProvider * const cb = (ColorizeProvider *) m_shaders->m_callbacks[ES_COLORIZE]; + float col[3]; + m_lights[i]->getColor(col); + cb->setColor(col[0], col[1], col[2]); + } + + // Action + m_lights[i]->render(); + + // Reset the inside change + if (inside) + { + video::SMaterial &m = m_lights[i]->getMaterial(0); + m.FrontfaceCulling = false; + m.BackfaceCulling = true; + m.ZBuffer = video::ECFN_LESSEQUAL; + } + + if (m_lightviz) + { + overridemat.Enabled = false; + } + + } // for i in lights + + // Blend lights to the image + video::SMaterial lightmat; + lightmat.Lighting = false; + lightmat.ZWriteEnable = false; + lightmat.ZBuffer = video::ECFN_ALWAYS; + lightmat.setFlag(video::EMF_BILINEAR_FILTER, false); + lightmat.setTexture(0, m_rtts->getRTT(RTT_TMP1)); + // Specular mapping + lightmat.setTexture(1, m_rtts->getRTT(RTT_COLOR)); + lightmat.MaterialType = m_shaders->getShader(ES_LIGHTBLEND); + lightmat.MaterialTypeParam = video::pack_textureBlendFunc(video::EBF_DST_COLOR, video::EBF_ZERO); + lightmat.BlendOperation = video::EBO_ADD; + + lightmat.TextureLayer[0].TextureWrapU = + lightmat.TextureLayer[0].TextureWrapV = video::ETC_CLAMP_TO_EDGE; + + m_video_driver->setRenderTarget(m_rtts->getRTT(RTT_COLOR), false, false); + if (!m_mipviz) + m_post_processing->drawQuad(cam, lightmat); + + if (!bgnodes) + { + // If there are no BG nodes, it's more efficient to do the skybox here. + m_renderpass = scene::ESNRP_SKY_BOX; + m_scene_manager->drawAll(m_renderpass); + } + + // Is the lens flare enabled & visible? Check last frame's query. + const bool hasflare = World::getWorld()->getTrack()->hasLensFlare(); + const bool hasgodrays = World::getWorld()->getTrack()->hasGodRays(); + if (hasflare | hasgodrays) + { + irr::video::COpenGLDriver* gl_driver = (irr::video::COpenGLDriver*)m_device->getVideoDriver(); + + GLuint res; + gl_driver->extGlGetQueryObjectuiv(m_lensflare_query, GL_QUERY_RESULT, &res); + m_post_processing->setSunPixels(res); + + // Prepare the query for the next frame. + gl_driver->extGlBeginQuery(GL_SAMPLES_PASSED_ARB, m_lensflare_query); + m_scene_manager->setCurrentRendertime(scene::ESNRP_SOLID); + m_scene_manager->drawAll(scene::ESNRP_CAMERA); + m_sun_interposer->render(); + gl_driver->extGlEndQuery(GL_SAMPLES_PASSED_ARB); + + m_lensflare->setStrength(res / 4000.0f); + + if (hasflare) + m_lensflare->OnRegisterSceneNode(); + + // Make sure the color mask is reset + glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + } + + // Render the post-processed scene for solids + m_post_processing->renderSolid(cam); + + // We need to re-render camera due to the per-cam-node hack. + m_renderpass = scene::ESNRP_CAMERA | scene::ESNRP_TRANSPARENT | + scene::ESNRP_TRANSPARENT_EFFECT; + m_scene_manager->drawAll(m_renderpass); + + // Handle displacing nodes, if any + const u32 displacingcount = m_displacing.size(); + if (displacingcount) + { + m_video_driver->setRenderTarget(m_rtts->getRTT(RTT_DISPLACE), false, false); + glClearColor(0, 0, 0, 0); + glClear(GL_STENCIL_BUFFER_BIT | GL_COLOR_BUFFER_BIT); + glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); + glStencilFunc(GL_ALWAYS, 1, ~0); + glEnable(GL_STENCIL_TEST); + + overridemat.Enabled = 1; + overridemat.EnableFlags = video::EMF_MATERIAL_TYPE | video::EMF_TEXTURE0; + overridemat.Material.MaterialType = m_shaders->getShader(ES_DISPLACE); + + overridemat.Material.TextureLayer[0].Texture = + irr_driver->getTexture((file_manager->getTextureDir() + "displace.png").c_str()); + overridemat.Material.TextureLayer[0].BilinearFilter = + overridemat.Material.TextureLayer[0].TrilinearFilter = true; + overridemat.Material.TextureLayer[0].AnisotropicFilter = 0; + overridemat.Material.TextureLayer[0].TextureWrapU = + overridemat.Material.TextureLayer[0].TextureWrapV = video::ETC_REPEAT; + + for (i = 0; i < displacingcount; i++) + { + m_scene_manager->setCurrentRendertime(scene::ESNRP_SOLID); + m_displacing[i]->render(); + + m_scene_manager->setCurrentRendertime(scene::ESNRP_TRANSPARENT); + m_displacing[i]->render(); + } + + overridemat.Enabled = 0; + + // Blur it + glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); + glStencilFunc(GL_EQUAL, 1, ~0); + + video::SMaterial minimat; + minimat.Lighting = false; + minimat.ZWriteEnable = false; + minimat.ZBuffer = video::ECFN_ALWAYS; + minimat.setFlag(video::EMF_TRILINEAR_FILTER, true); + + minimat.TextureLayer[0].TextureWrapU = + minimat.TextureLayer[0].TextureWrapV = video::ETC_CLAMP_TO_EDGE; + + ((GaussianBlurProvider *) m_shaders->m_callbacks[ES_GAUSSIAN3H])->setResolution( + UserConfigParams::m_width, + UserConfigParams::m_height); + + minimat.MaterialType = m_shaders->getShader(ES_GAUSSIAN3H); + minimat.setTexture(0, m_rtts->getRTT(RTT_DISPLACE)); + m_video_driver->setRenderTarget(m_rtts->getRTT(RTT_TMP2), true, false); + m_post_processing->drawQuad(cam, minimat); + + minimat.MaterialType = m_shaders->getShader(ES_GAUSSIAN3V); + minimat.setTexture(0, m_rtts->getRTT(RTT_TMP2)); + m_video_driver->setRenderTarget(m_rtts->getRTT(RTT_DISPLACE), true, false); + m_post_processing->drawQuad(cam, minimat); + + glDisable(GL_STENCIL_TEST); + m_video_driver->setRenderTarget(m_rtts->getRTT(RTT_COLOR), false, false); + } + + // Drawing for this cam done, cleanup + const u32 glowrepcount = transparent_glow_nodes.size(); + for (i = 0; i < glowrepcount; i++) + { + transparent_glow_nodes[i]->remove(); + transparent_glow_nodes[i]->drop(); + } + + PROFILER_POP_CPU_MARKER(); + + // Note that drawAll must be called before rendering + // the bullet debug view, since otherwise the camera + // is not set up properly. This is only used for + // the bullet debug view. + if (UserConfigParams::m_artist_debug_mode) + World::getWorld()->getPhysics()->draw(); + } // for igetNumKarts() + + // Render the post-processed scene + m_post_processing->render(); + + // Set the viewport back to the full screen for race gui + m_video_driver->setViewPort(core::recti(0, 0, + UserConfigParams::m_width, + UserConfigParams::m_height)); + + for(unsigned int i=0; irenderPlayerView(camera, dt); + + PROFILER_POP_CPU_MARKER(); + } // for iendScene(); + + getPostProcessing()->update(dt); +} + +// -------------------------------------------- + +void IrrDriver::renderFixed(float dt) +{ + World *world = World::getWorld(); // Never NULL. + + m_video_driver->beginScene(/*backBuffer clear*/ true, /*zBuffer*/ true, + world->getClearColor()); + + irr_driver->getVideoDriver()->enableMaterial2D(); + + RaceGUIBase *rg = world->getRaceGUI(); + if (rg) rg->update(dt); + + + for(unsigned int i=0; iactivate(); + rg->preRenderCallback(camera); // adjusts start referee + + m_renderpass = ~0; + m_scene_manager->drawAll(); + + PROFILER_POP_CPU_MARKER(); + + // Note that drawAll must be called before rendering + // the bullet debug view, since otherwise the camera + // is not set up properly. This is only used for + // the bullet debug view. + if (UserConfigParams::m_artist_debug_mode) + World::getWorld()->getPhysics()->draw(); + } // for igetNumKarts() + + // Set the viewport back to the full screen for race gui + m_video_driver->setViewPort(core::recti(0, 0, + UserConfigParams::m_width, + UserConfigParams::m_height)); + + for(unsigned int i=0; irenderPlayerView(camera, dt); + PROFILER_POP_CPU_MARKER(); + + } // for iendScene(); +} diff --git a/src/graphics/rtts.cpp b/src/graphics/rtts.cpp new file mode 100644 index 000000000..2fa92f575 --- /dev/null +++ b/src/graphics/rtts.cpp @@ -0,0 +1,141 @@ +// SuperTuxKart - a fun racing game with go-kart +// Copyright (C) 2013 Lauri Kasanen +// +// 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 "graphics/rtts.hpp" + +#include "config/user_config.hpp" +#include "graphics/glwrap.hpp" +#include "graphics/irr_driver.hpp" +#include "utils/log.hpp" + +RTT::RTT() +{ + using namespace video; + using namespace core; + + IVideoDriver * const drv = irr_driver->getVideoDriver(); + const dimension2du res(UserConfigParams::m_width, UserConfigParams::m_height); + const dimension2du half = res/2; + const dimension2du quarter = res/4; + const dimension2du eighth = res/8; + const dimension2du sixteenth = res/16; + + const dimension2du ssaosize = UserConfigParams::m_ssao == 2 ? res : quarter; + + const u16 shadowside = UserConfigParams::m_shadows == 2 ? 2048 : 512; + const dimension2du shadowsize(shadowside, shadowside); + const dimension2du warpvsize(1, 512); + const dimension2du warphsize(512, 1); + + // The last parameter stands for "has stencil". The name is used in the texture + // cache, and when saving textures to files as the default name. + // + // All RTTs are currently RGBA8 with stencil. The four tmp RTTs are the same size + // as the screen, for use in post-processing. + // + // Optionally, the collapse ones use a smaller format. + + rtts[RTT_TMP1] = drv->addRenderTargetTexture(res, "rtt.tmp1", ECF_A8R8G8B8, true); + rtts[RTT_TMP2] = drv->addRenderTargetTexture(res, "rtt.tmp2", ECF_A8R8G8B8, true); + rtts[RTT_TMP3] = drv->addRenderTargetTexture(res, "rtt.tmp3", ECF_A8R8G8B8, true); + rtts[RTT_TMP4] = drv->addRenderTargetTexture(res, "rtt.tmp4", ECF_A8R8G8B8, true); + rtts[RTT_DEPTH] = drv->addRenderTargetTexture(res, "rtt.depth", ECF_A8R8G8B8, true); + rtts[RTT_NORMAL] = drv->addRenderTargetTexture(res, "rtt.normal", ECF_A8R8G8B8, true); + rtts[RTT_COLOR] = drv->addRenderTargetTexture(res, "rtt.color", ECF_A8R8G8B8, true); + + rtts[RTT_HALF1] = drv->addRenderTargetTexture(half, "rtt.half1", ECF_A8R8G8B8, true); + rtts[RTT_HALF2] = drv->addRenderTargetTexture(half, "rtt.half2", ECF_A8R8G8B8, true); + + rtts[RTT_QUARTER1] = drv->addRenderTargetTexture(quarter, "rtt.q1", ECF_A8R8G8B8, true); + rtts[RTT_QUARTER2] = drv->addRenderTargetTexture(quarter, "rtt.q2", ECF_A8R8G8B8, true); + rtts[RTT_QUARTER3] = drv->addRenderTargetTexture(quarter, "rtt.q3", ECF_A8R8G8B8, true); + + rtts[RTT_EIGHTH1] = drv->addRenderTargetTexture(eighth, "rtt.e1", ECF_A8R8G8B8, true); + rtts[RTT_EIGHTH2] = drv->addRenderTargetTexture(eighth, "rtt.e2", ECF_A8R8G8B8, true); + + rtts[RTT_SIXTEENTH1] = drv->addRenderTargetTexture(sixteenth, "rtt.s1", ECF_A8R8G8B8, true); + rtts[RTT_SIXTEENTH2] = drv->addRenderTargetTexture(sixteenth, "rtt.s2", ECF_A8R8G8B8, true); + + rtts[RTT_SSAO1] = drv->addRenderTargetTexture(ssaosize, "rtt.ssao1", ECF_A8R8G8B8, true); + rtts[RTT_SSAO2] = drv->addRenderTargetTexture(ssaosize, "rtt.ssao2", ECF_A8R8G8B8, true); + + rtts[RTT_SHADOW] = drv->addRenderTargetTexture(shadowsize, "rtt.shadow", ECF_A8R8G8B8, true); + rtts[RTT_WARPV] = drv->addRenderTargetTexture(warpvsize, "rtt.warpv", ECF_A8R8G8B8, true); + rtts[RTT_WARPH] = drv->addRenderTargetTexture(warphsize, "rtt.warph", ECF_A8R8G8B8, true); + + rtts[RTT_DISPLACE] = drv->addRenderTargetTexture(res, "rtt.displace", ECF_A8R8G8B8, true); + + if (((COpenGLDriver *) drv)->queryOpenGLFeature(COpenGLDriver::IRR_ARB_texture_rg)) + { + // Use optimized formats if supported + rtts[RTT_COLLAPSE] = drv->addRenderTargetTexture(shadowsize, "rtt.collapse", ECF_R8, true); + + rtts[RTT_COLLAPSEV] = drv->addRenderTargetTexture(warpvsize, "rtt.collapsev", ECF_R8, true); + rtts[RTT_COLLAPSEH] = drv->addRenderTargetTexture(warphsize, "rtt.collapseh", ECF_R8, true); + rtts[RTT_COLLAPSEV2] = drv->addRenderTargetTexture(warpvsize, "rtt.collapsev2", ECF_R8, true); + rtts[RTT_COLLAPSEH2] = drv->addRenderTargetTexture(warphsize, "rtt.collapseh2", ECF_R8, true); + + rtts[RTT_HALF_SOFT] = drv->addRenderTargetTexture(half, "rtt.halfsoft", ECF_R8, true); + } else + { + rtts[RTT_COLLAPSE] = drv->addRenderTargetTexture(shadowsize, "rtt.collapse", ECF_A8R8G8B8, true); + + rtts[RTT_COLLAPSEV] = drv->addRenderTargetTexture(warpvsize, "rtt.collapsev", ECF_A8R8G8B8, true); + rtts[RTT_COLLAPSEH] = drv->addRenderTargetTexture(warphsize, "rtt.collapseh", ECF_A8R8G8B8, true); + rtts[RTT_COLLAPSEV2] = drv->addRenderTargetTexture(warpvsize, "rtt.collapsev2", ECF_A8R8G8B8, true); + rtts[RTT_COLLAPSEH2] = drv->addRenderTargetTexture(warphsize, "rtt.collapseh2", ECF_A8R8G8B8, true); + + rtts[RTT_HALF_SOFT] = drv->addRenderTargetTexture(half, "rtt.halfsoft", ECF_A8R8G8B8, true); + } + + u32 i; + for (i = 0; i < RTT_COUNT; i++) + { + if (!rtts[i]) + Log::fatal("RTT", "Failed to create a RTT"); + } + + // Clear those that should be cleared + drv->beginScene(false, false); + + drv->setRenderTarget(rtts[RTT_SSAO1], true, false, SColor(255, 255, 255, 255)); + drv->setRenderTarget(rtts[RTT_SSAO2], true, false, SColor(255, 255, 255, 255)); + + drv->setRenderTarget(rtts[RTT_COLLAPSEV], true, false); + drv->setRenderTarget(rtts[RTT_COLLAPSEH], true, false); + drv->setRenderTarget(rtts[RTT_COLLAPSEV2], true, false); + drv->setRenderTarget(rtts[RTT_COLLAPSEH2], true, false); + + drv->setRenderTarget(0, false, false); + + drv->endScene(); +} + +RTT::~RTT() +{ + u32 i; + for (i = 0; i < RTT_COUNT; i++) + { + irr_driver->removeTexture(rtts[i]); + } +} + +ITexture *RTT::getRTT(TypeRTT which) +{ + assert(which < RTT_COUNT); + return rtts[which]; +} diff --git a/src/graphics/rtts.hpp b/src/graphics/rtts.hpp new file mode 100644 index 000000000..8000c02b9 --- /dev/null +++ b/src/graphics/rtts.hpp @@ -0,0 +1,83 @@ +// SuperTuxKart - a fun racing game with go-kart +// +// 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_RTTS_HPP +#define HEADER_RTTS_HPP + +namespace irr { + namespace video { + class ITexture; + }; +}; + +using irr::video::ITexture; + +enum TypeRTT +{ + RTT_TMP1 = 0, + RTT_TMP2, + RTT_TMP3, + RTT_TMP4, + RTT_DEPTH, + RTT_NORMAL, + RTT_COLOR, + + RTT_HALF1, + RTT_HALF2, + + RTT_QUARTER1, + RTT_QUARTER2, + RTT_QUARTER3, + + RTT_EIGHTH1, + RTT_EIGHTH2, + + RTT_SIXTEENTH1, + RTT_SIXTEENTH2, + + RTT_SSAO1, + RTT_SSAO2, + + RTT_SHADOW, + RTT_COLLAPSE, + RTT_COLLAPSEH, + RTT_COLLAPSEV, + RTT_COLLAPSEH2, + RTT_COLLAPSEV2, + RTT_WARPH, + RTT_WARPV, + + RTT_HALF_SOFT, + + RTT_DISPLACE, + + RTT_COUNT +}; + +class RTT +{ +public: + RTT(); + ~RTT(); + + ITexture *getRTT(TypeRTT which); + +private: + ITexture *rtts[RTT_COUNT]; +}; + +#endif + diff --git a/src/graphics/screenquad.cpp b/src/graphics/screenquad.cpp new file mode 100644 index 000000000..da2a8a176 --- /dev/null +++ b/src/graphics/screenquad.cpp @@ -0,0 +1,30 @@ +// SuperTuxKart - a fun racing game with go-kart +// +// 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 "graphics/screenquad.hpp" + +// Just the static parts to our screenquad + +const u16 ScreenQuad::indices[4] = {0, 1, 2, 3}; + +static const SColor white(255, 255, 255, 255); + +const S3DVertex ScreenQuad::vertices[4] = { + S3DVertex(-1, 1, 0, 0, 1, 0, white, 0, 1), + S3DVertex(1, 1, 0, 0, 1, 0, white, 1, 1), + S3DVertex(-1, -1, 0, 0, 1, 0, white, 0, 0), + S3DVertex(1, -1, 0, 0, 1, 0, white, 1, 0), + }; diff --git a/src/graphics/screenquad.hpp b/src/graphics/screenquad.hpp new file mode 100644 index 000000000..478500946 --- /dev/null +++ b/src/graphics/screenquad.hpp @@ -0,0 +1,91 @@ +// SuperTuxKart - a fun racing game with go-kart +// +// 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_SCREENQUAD_H +#define HEADER_SCREENQUAD_H + +#include "graphics/glwrap.hpp" + +#include +#include + +using namespace irr; +using namespace video; + +class ScreenQuad { + +public: + ScreenQuad(IVideoDriver *xy) + { + vd = xy; + + mat.Lighting = false; + mat.ZBuffer = video::ECFN_ALWAYS; + mat.ZWriteEnable = false; + + for(u32 c = 0; c < MATERIAL_MAX_TEXTURES; c++) + { + mat.TextureLayer[c].TextureWrapU = video::ETC_CLAMP_TO_EDGE; + mat.TextureLayer[c].TextureWrapV = video::ETC_CLAMP_TO_EDGE; + } + } + + SMaterial& getMaterial() { return mat; } + + //Set the texture to render with the quad + void setTexture(ITexture* tex, u32 layer = 0) + { + mat.TextureLayer[layer].Texture = tex; + } + + ITexture* getTexture(u32 layer = 0) const { return mat.TextureLayer[layer].Texture; } + + void setMaterialType(E_MATERIAL_TYPE mt) { mat.MaterialType = mt; } + + void render(bool setRTToFrameBuff = true) const + { + if(setRTToFrameBuff) + vd->setRenderTarget(video::ERT_FRAME_BUFFER); + + sq_dorender(); + } + + void render(ITexture* rt) const + { + vd->setRenderTarget(rt); + + sq_dorender(); + } + +protected: + static const S3DVertex vertices[4]; + static const u16 indices[4]; + SMaterial mat; + + IVideoDriver* vd; + + void sq_dorender() const + { + vd->setMaterial(mat); + vd->setTransform(ETS_WORLD, core::IdentityMatrix); + vd->setTransform(ETS_VIEW, core::IdentityMatrix); + vd->setTransform(ETS_PROJECTION, core::IdentityMatrix); + vd->drawVertexPrimitiveList(vertices, 4, indices, 2, EVT_STANDARD, + scene::EPT_TRIANGLE_STRIP); + } +}; + +#endif diff --git a/src/graphics/shaders.cpp b/src/graphics/shaders.cpp new file mode 100644 index 000000000..8a26cab4b --- /dev/null +++ b/src/graphics/shaders.cpp @@ -0,0 +1,260 @@ +// SuperTuxKart - a fun racing game with go-kart +// +// 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. + +#define SHADER_NAMES + +#include "graphics/callbacks.hpp" +#include "graphics/irr_driver.hpp" +#include "graphics/shaders.hpp" +#include "io/file_manager.hpp" +#include "utils/log.hpp" + +#include +#include + +using namespace video; + +Shaders::Shaders() +{ + const std::string &dir = file_manager->getShaderDir(); + + IGPUProgrammingServices * const gpu = irr_driver->getVideoDriver()->getGPUProgrammingServices(); + + #define glsl(a, b, c) gpu->addHighLevelShaderMaterialFromFiles((a).c_str(), (b).c_str(), (IShaderConstantSetCallBack*) c) + #define glslmat(a, b, c, d) gpu->addHighLevelShaderMaterialFromFiles((a).c_str(), (b).c_str(), (IShaderConstantSetCallBack*) c, d) + #define glsl_noinput(a, b) gpu->addHighLevelShaderMaterialFromFiles((a).c_str(), (b).c_str(), (IShaderConstantSetCallBack*) 0) + + // Callbacks + memset(m_callbacks, 0, sizeof(m_callbacks)); + + m_callbacks[ES_NORMAL_MAP_LIGHTMAP] = new NormalMapProvider(true); + m_callbacks[ES_NORMAL_MAP] = new NormalMapProvider(false); + m_callbacks[ES_SPLATTING] = new SplattingProvider(); + m_callbacks[ES_WATER] = new WaterShaderProvider(); + m_callbacks[ES_GRASS] = new GrassShaderProvider(); + m_callbacks[ES_BUBBLES] = new BubbleEffectProvider(); + m_callbacks[ES_RAIN] = new RainEffectProvider(); + m_callbacks[ES_SNOW] = new SnowEffectProvider(); + m_callbacks[ES_MOTIONBLUR] = new MotionBlurProvider(); + m_callbacks[ES_GAUSSIAN3V] = m_callbacks[ES_GAUSSIAN3H] = new GaussianBlurProvider(); + m_callbacks[ES_MIPVIZ] = new MipVizProvider(); + m_callbacks[ES_COLORIZE] = new ColorizeProvider(); + m_callbacks[ES_GLOW] = new GlowProvider(); + m_callbacks[ES_OBJECTPASS] = new ObjectPassProvider(); + m_callbacks[ES_LIGHTBLEND] = new LightBlendProvider(); + m_callbacks[ES_POINTLIGHT] = new PointLightProvider(); + m_callbacks[ES_SUNLIGHT] = new SunLightProvider(); + m_callbacks[ES_BLOOM] = new BloomProvider(); + m_callbacks[ES_MLAA_COLOR1] = new MLAAColor1Provider(); + m_callbacks[ES_MLAA_BLEND2] = new MLAABlend2Provider(); + m_callbacks[ES_MLAA_NEIGH3] = new MLAANeigh3Provider(); + m_callbacks[ES_SSAO] = new SSAOProvider(); + m_callbacks[ES_GODRAY] = new GodRayProvider(); + m_callbacks[ES_SHADOWPASS] = new ShadowPassProvider(); + m_callbacks[ES_SHADOW_IMPORTANCE] = new ShadowImportanceProvider(); + m_callbacks[ES_COLLAPSE] = new CollapseProvider(); + m_callbacks[ES_BLOOM_POWER] = new BloomPowerProvider(); + m_callbacks[ES_MULTIPLY_ADD] = new MultiplyProvider(); + m_callbacks[ES_SHADOWGEN] = new ShadowGenProvider(); + m_callbacks[ES_CAUSTICS] = new CausticsProvider(); + m_callbacks[ES_DISPLACE] = new DisplaceProvider(); + m_callbacks[ES_PPDISPLACE] = new PPDisplaceProvider(); + m_callbacks[ES_FOG] = new FogProvider(); + + // Ok, go + m_shaders[ES_NORMAL_MAP] = glslmat(dir + "normalmap.vert", dir + "normalmap.frag", + m_callbacks[ES_NORMAL_MAP], EMT_SOLID_2_LAYER); + + m_shaders[ES_NORMAL_MAP_LIGHTMAP] = glslmat(dir + "normalmap.vert", dir + "normalmap.frag", + m_callbacks[ES_NORMAL_MAP_LIGHTMAP], EMT_SOLID_2_LAYER); + + m_shaders[ES_SPLATTING] = glsl(dir + "objectpass.vert", dir + "splatting.frag", + m_callbacks[ES_SPLATTING]); + + m_shaders[ES_WATER] = glslmat(dir + "water.vert", dir + "water.frag", + m_callbacks[ES_WATER], EMT_TRANSPARENT_ALPHA_CHANNEL); + m_shaders[ES_WATER_SURFACE] = glsl(dir + "water.vert", dir + "pass.frag", + m_callbacks[ES_WATER]); + + m_shaders[ES_SPHERE_MAP] = glslmat(dir + "objectpass_rimlit.vert", dir + "objectpass_spheremap.frag", + m_callbacks[ES_OBJECTPASS], EMT_SOLID); + + m_shaders[ES_GRASS] = glslmat(dir + "grass.vert", dir + "grass.frag", + m_callbacks[ES_GRASS], EMT_TRANSPARENT_ALPHA_CHANNEL); + m_shaders[ES_GRASS_REF] = glslmat(dir + "grass.vert", dir + "grass.frag", + m_callbacks[ES_GRASS], EMT_TRANSPARENT_ALPHA_CHANNEL_REF); + + m_shaders[ES_BUBBLES] = glslmat(dir + "bubble.vert", dir + "bubble.frag", + m_callbacks[ES_BUBBLES], EMT_TRANSPARENT_ALPHA_CHANNEL); + + m_shaders[ES_RAIN] = glslmat(dir + "rain.vert", dir + "rain.frag", + m_callbacks[ES_RAIN], EMT_TRANSPARENT_ALPHA_CHANNEL); + + m_shaders[ES_SNOW] = glslmat(dir + "snow.vert", dir + "snow.frag", + m_callbacks[ES_SNOW], EMT_TRANSPARENT_ALPHA_CHANNEL); + + m_shaders[ES_MOTIONBLUR] = glsl(std::string(""), dir + "motion_blur.frag", + m_callbacks[ES_MOTIONBLUR]); + + m_shaders[ES_GAUSSIAN3H] = glslmat(std::string(""), dir + "gaussian3h.frag", + m_callbacks[ES_GAUSSIAN3H], EMT_SOLID); + m_shaders[ES_GAUSSIAN3V] = glslmat(std::string(""), dir + "gaussian3v.frag", + m_callbacks[ES_GAUSSIAN3V], EMT_SOLID); + + m_shaders[ES_GAUSSIAN6H] = glslmat(std::string(""), dir + "gaussian6h.frag", + m_callbacks[ES_GAUSSIAN3H], EMT_SOLID); + m_shaders[ES_GAUSSIAN6V] = glslmat(std::string(""), dir + "gaussian6v.frag", + m_callbacks[ES_GAUSSIAN3V], EMT_SOLID); + + m_shaders[ES_MIPVIZ] = glslmat(std::string(""), dir + "mipviz.frag", + m_callbacks[ES_MIPVIZ], EMT_SOLID); + + m_shaders[ES_FLIP] = glslmat(std::string(""), dir + "flip.frag", + 0, EMT_SOLID); + m_shaders[ES_FLIP_ADDITIVE] = glslmat(std::string(""), dir + "flip.frag", + 0, EMT_TRANSPARENT_ADD_COLOR); + + m_shaders[ES_BLOOM] = glslmat(std::string(""), dir + "bloom.frag", + m_callbacks[ES_BLOOM], EMT_SOLID); + + m_shaders[ES_COLORIZE] = glslmat(std::string(""), dir + "colorize.frag", + m_callbacks[ES_COLORIZE], EMT_SOLID); + m_shaders[ES_COLORIZE_REF] = glslmat(std::string(""), dir + "colorize_ref.frag", + m_callbacks[ES_COLORIZE], EMT_SOLID); + + m_shaders[ES_PASS] = glslmat(std::string(""), dir + "pass.frag", + 0, EMT_SOLID); + m_shaders[ES_PASS_ADDITIVE] = glslmat(std::string(""), dir + "pass.frag", + 0, EMT_TRANSPARENT_ADD_COLOR); + + m_shaders[ES_GLOW] = glslmat(std::string(""), dir + "glow.frag", + m_callbacks[ES_GLOW], EMT_TRANSPARENT_ALPHA_CHANNEL); + + m_shaders[ES_OBJECTPASS] = glslmat(dir + "objectpass.vert", dir + "objectpass.frag", + m_callbacks[ES_OBJECTPASS], EMT_SOLID); + m_shaders[ES_OBJECTPASS_REF] = glslmat(dir + "objectpass.vert", dir + "objectpass_ref.frag", + m_callbacks[ES_OBJECTPASS], EMT_SOLID); + m_shaders[ES_OBJECTPASS_RIMLIT] = glslmat(dir + "objectpass_rimlit.vert", dir + "objectpass_rimlit.frag", + m_callbacks[ES_OBJECTPASS], EMT_SOLID); + + m_shaders[ES_LIGHTBLEND] = glslmat(std::string(""), dir + "lightblend.frag", + m_callbacks[ES_LIGHTBLEND], EMT_ONETEXTURE_BLEND); + + m_shaders[ES_POINTLIGHT] = glslmat(std::string(""), dir + "pointlight.frag", + m_callbacks[ES_POINTLIGHT], EMT_ONETEXTURE_BLEND); + + m_shaders[ES_SUNLIGHT] = glslmat(std::string(""), dir + "sunlight.frag", + m_callbacks[ES_SUNLIGHT], EMT_SOLID); + m_shaders[ES_SUNLIGHT_SHADOW] = glslmat(dir + "pass.vert", dir + "sunlightshadow.frag", + m_callbacks[ES_SUNLIGHT], EMT_SOLID); + + m_shaders[ES_MLAA_COLOR1] = glsl(dir + "mlaa_offset.vert", dir + "mlaa_color1.frag", + m_callbacks[ES_MLAA_COLOR1]); + m_shaders[ES_MLAA_BLEND2] = glsl(dir + "pass.vert", dir + "mlaa_blend2.frag", + m_callbacks[ES_MLAA_BLEND2]); + m_shaders[ES_MLAA_NEIGH3] = glsl(dir + "mlaa_offset.vert", dir + "mlaa_neigh3.frag", + m_callbacks[ES_MLAA_NEIGH3]); + + m_shaders[ES_SSAO] = glsl(std::string(""), dir + "ssao.frag", m_callbacks[ES_SSAO]); + + m_shaders[ES_GODFADE] = glsl(std::string(""), dir + "godfade.frag", m_callbacks[ES_COLORIZE]); + m_shaders[ES_GODRAY] = glsl(std::string(""), dir + "godray.frag", m_callbacks[ES_GODRAY]); + + m_shaders[ES_SHADOWPASS] = glsl(dir + "shadowpass.vert", dir + "shadowpass.frag", + m_callbacks[ES_SHADOWPASS]); + + m_shaders[ES_SHADOW_IMPORTANCE] = glsl(dir + "shadowimportance.vert", + dir + "shadowimportance.frag", + m_callbacks[ES_SHADOW_IMPORTANCE]); + + m_shaders[ES_COLLAPSE] = glsl(std::string(""), dir + "collapse.frag", + m_callbacks[ES_COLLAPSE]); + m_shaders[ES_SHADOW_WARPH] = glsl(std::string(""), dir + "shadowwarph.frag", + m_callbacks[ES_COLLAPSE]); + m_shaders[ES_SHADOW_WARPV] = glsl(std::string(""), dir + "shadowwarpv.frag", + m_callbacks[ES_COLLAPSE]); + + m_shaders[ES_BLOOM_POWER] = glsl(std::string(""), dir + "bloompower.frag", + m_callbacks[ES_BLOOM_POWER]); + m_shaders[ES_BLOOM_BLEND] = glslmat(std::string(""), dir + "bloomblend.frag", + 0, EMT_TRANSPARENT_ADD_COLOR); + + m_shaders[ES_MULTIPLY_ADD] = glslmat(std::string(""), dir + "multiply.frag", + m_callbacks[ES_MULTIPLY_ADD], EMT_ONETEXTURE_BLEND); + + m_shaders[ES_PENUMBRAH] = glslmat(std::string(""), dir + "penumbrah.frag", + m_callbacks[ES_GAUSSIAN3H], EMT_SOLID); + m_shaders[ES_PENUMBRAV] = glslmat(std::string(""), dir + "penumbrav.frag", + m_callbacks[ES_GAUSSIAN3H], EMT_SOLID); + m_shaders[ES_SHADOWGEN] = glslmat(std::string(""), dir + "shadowgen.frag", + m_callbacks[ES_SHADOWGEN], EMT_SOLID); + + m_shaders[ES_CAUSTICS] = glslmat(std::string(""), dir + "caustics.frag", + m_callbacks[ES_CAUSTICS], EMT_TRANSPARENT_ALPHA_CHANNEL); + + m_shaders[ES_DISPLACE] = glsl(dir + "displace.vert", dir + "displace.frag", + m_callbacks[ES_DISPLACE]); + m_shaders[ES_PPDISPLACE] = glsl(std::string(""), dir + "ppdisplace.frag", + m_callbacks[ES_PPDISPLACE]); + + m_shaders[ES_PASSFAR] = glsl(dir + "farplane.vert", dir + "colorize.frag", + m_callbacks[ES_COLORIZE]); + + m_shaders[ES_FOG] = glslmat(std::string(""), dir + "fog.frag", + m_callbacks[ES_FOG], EMT_ONETEXTURE_BLEND); + + // Check that all successfully loaded + u32 i; + for (i = 0; i < ES_COUNT; i++) { + + // Old Intel Windows drivers fail here. + // It's an artist option, so not necessary to play. + if (i == ES_MIPVIZ) + continue; + + check(i); + } + + #undef glsl + #undef glslmat + #undef glsl_noinput +} + +Shaders::~Shaders() +{ + u32 i; + for (i = 0; i < ES_COUNT; i++) + { + if (i == ES_GAUSSIAN3V || !m_callbacks[i]) continue; + delete m_callbacks[i]; + } +} + +E_MATERIAL_TYPE Shaders::getShader(const ShaderType num) const +{ + assert(num < ES_COUNT); + + return (E_MATERIAL_TYPE) m_shaders[num]; +} + +void Shaders::check(const int num) const +{ + if (m_shaders[num] == -1) + { + Log::fatal("shaders", "Shader %s failed to load. Update your drivers, if the issue " + "persists, report a bug to us.", shader_names[num] + 3); + } +} diff --git a/src/graphics/shaders.hpp b/src/graphics/shaders.hpp new file mode 100644 index 000000000..80794a95f --- /dev/null +++ b/src/graphics/shaders.hpp @@ -0,0 +1,117 @@ +// SuperTuxKart - a fun racing game with go-kart +// +// 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_SHADERS_HPP +#define HEADER_SHADERS_HPP + +#include +#include +#include +using namespace irr; + +#define FOREACH_SHADER(ACT) \ + ACT(ES_NORMAL_MAP) \ + ACT(ES_NORMAL_MAP_LIGHTMAP) \ + ACT(ES_SPLATTING) \ + ACT(ES_WATER) \ + ACT(ES_WATER_SURFACE) \ + ACT(ES_SPHERE_MAP) \ + ACT(ES_GRASS) \ + ACT(ES_GRASS_REF) \ + ACT(ES_BUBBLES) \ + ACT(ES_RAIN) \ + ACT(ES_SNOW) \ + ACT(ES_MOTIONBLUR) \ + ACT(ES_GAUSSIAN3H) \ + ACT(ES_GAUSSIAN3V) \ + ACT(ES_MIPVIZ) \ + ACT(ES_FLIP) \ + ACT(ES_FLIP_ADDITIVE) \ + ACT(ES_BLOOM) \ + ACT(ES_GAUSSIAN6H) \ + ACT(ES_GAUSSIAN6V) \ + ACT(ES_COLORIZE) \ + ACT(ES_COLORIZE_REF) \ + ACT(ES_PASS) \ + ACT(ES_PASS_ADDITIVE) \ + ACT(ES_GLOW) \ + ACT(ES_OBJECTPASS) \ + ACT(ES_OBJECTPASS_REF) \ + ACT(ES_LIGHTBLEND) \ + ACT(ES_POINTLIGHT) \ + ACT(ES_SUNLIGHT) \ + ACT(ES_SUNLIGHT_SHADOW) \ + ACT(ES_OBJECTPASS_RIMLIT) \ + ACT(ES_MLAA_COLOR1) \ + ACT(ES_MLAA_BLEND2) \ + ACT(ES_MLAA_NEIGH3) \ + ACT(ES_SSAO) \ + ACT(ES_GODFADE) \ + ACT(ES_GODRAY) \ + ACT(ES_SHADOWPASS) \ + ACT(ES_SHADOW_IMPORTANCE) \ + ACT(ES_COLLAPSE) \ + ACT(ES_SHADOW_WARPH) \ + ACT(ES_SHADOW_WARPV) \ + ACT(ES_BLOOM_POWER) \ + ACT(ES_BLOOM_BLEND) \ + ACT(ES_MULTIPLY_ADD) \ + ACT(ES_PENUMBRAH) \ + ACT(ES_PENUMBRAV) \ + ACT(ES_SHADOWGEN) \ + ACT(ES_CAUSTICS) \ + ACT(ES_DISPLACE) \ + ACT(ES_PPDISPLACE) \ + ACT(ES_PASSFAR) \ + ACT(ES_FOG) + +#define ENUM(a) a, +#define STR(a) #a, + +enum ShaderType +{ + FOREACH_SHADER(ENUM) + + ES_COUNT +}; + +#ifdef SHADER_NAMES +static const char *shader_names[] = { + FOREACH_SHADER(STR) +}; +#endif + +class Shaders +{ +public: + Shaders(); + ~Shaders(); + + video::E_MATERIAL_TYPE getShader(const ShaderType num) const; + + video::IShaderConstantSetCallBack * m_callbacks[ES_COUNT]; + +private: + void check(const int num) const; + + int m_shaders[ES_COUNT]; +}; + +#undef ENUM +#undef STR +#undef FOREACH_SHADER + +#endif diff --git a/src/graphics/shadow.cpp b/src/graphics/shadow.cpp index 464453eb8..e092f8284 100644 --- a/src/graphics/shadow.cpp +++ b/src/graphics/shadow.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -29,6 +29,7 @@ Shadow::Shadow(video::ITexture *texture, scene::ISceneNode *node, float scale = m.setTexture(0, texture); m.BackfaceCulling = false; m.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; + m.setFlag(video::EMF_ZWRITE_ENABLE , false); m_mesh = irr_driver->createQuadMesh(&m, /*create_one_quad*/true); scene::IMeshBuffer *buffer = m_mesh->getMeshBuffer(0); irr::video::S3DVertex* v=(video::S3DVertex*)buffer->getVertices(); diff --git a/src/graphics/shadow.hpp b/src/graphics/shadow.hpp index 4a7d23e8c..d55977bde 100644 --- a/src/graphics/shadow.hpp +++ b/src/graphics/shadow.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/graphics/shadow_importance.cpp b/src/graphics/shadow_importance.cpp new file mode 100644 index 000000000..2e09c6a59 --- /dev/null +++ b/src/graphics/shadow_importance.cpp @@ -0,0 +1,169 @@ +// +// SuperTuxKart - a fun racing game with go-kart +// Copyright (C) 2013 Lauri Kasanen +// +// 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/user_config.hpp" +#include "graphics/glwrap.hpp" +#include "graphics/irr_driver.hpp" +#include "graphics/large_mesh_buffer.hpp" +#include "graphics/material_manager.hpp" +#include "graphics/material.hpp" +#include "graphics/per_camera_node.hpp" +#include "graphics/shadow_importance.hpp" +#include "graphics/shaders.hpp" +#include "graphics/rtts.hpp" +#include "utils/vs.hpp" + +#include + +using namespace video; +using namespace scene; +using namespace core; + +// The actual ShadowImportance node +class ShadowImportanceNode: public scene::ISceneNode +{ +public: + ShadowImportanceNode(scene::ISceneManager* mgr) + : scene::ISceneNode(0, mgr, -1) + { + mat.Lighting = false; + mat.ZWriteEnable = false; + mat.MaterialType = irr_driver->getShader(ES_SHADOW_IMPORTANCE); + + mat.setTexture(0, irr_driver->getRTT(RTT_NORMAL)); + mat.setTexture(1, irr_driver->getRTT(RTT_DEPTH)); + mat.setTexture(2, irr_driver->getRTT(RTT_COLOR)); + + mat.setFlag(EMF_BILINEAR_FILTER, false); + + u32 i; + for (i = 0; i < MATERIAL_MAX_TEXTURES; i++) + { + mat.TextureLayer[i].TextureWrapU = + mat.TextureLayer[i].TextureWrapV = ETC_CLAMP_TO_EDGE; + } + + // Low shadows only back-project every other pixel + const u32 incr = UserConfigParams::m_shadows < 2 ? 2 : 1; + + count = (UserConfigParams::m_width * UserConfigParams::m_height) / (incr * incr); + + // Fill in the mesh buffer + buf.Vertices.clear(); + buf.Indices.clear(); + + buf.Vertices.set_used(count); + buf.Indices.set_used(count); + + buf.Primitive = EPT_POINTS; + buf.setHardwareMappingHint(EHM_STATIC); + + const float halfx = 0.5f / UserConfigParams::m_width; + const float halfy = 0.5f / UserConfigParams::m_height; + + list = glGenLists(1); + + s32 x, y; + i = 0; + glNewList(list, GL_COMPILE); + glBegin(GL_POINTS); + for (x = 0; x < UserConfigParams::m_width; x += incr) + { + const float xpos = ((float) x) / UserConfigParams::m_width + halfx; + + for (y = 0; y < UserConfigParams::m_height; y += incr) + { + const float ypos = ((float) y) / UserConfigParams::m_height + halfy; + + buf.Indices[i] = i; + buf.Vertices[i] = S3DVertex(xpos, ypos, 0, 0, 0, 0, + SColor(255, 255, 255, 255), 0, 0); + + glVertex2s(roundf(xpos * 32767), roundf(ypos * 32767)); + i++; + } + } + glEnd(); + glEndList(); + + box.addInternalPoint(vector3df(-1)); + box.addInternalPoint(vector3df(1)); + } + + ~ShadowImportanceNode() + { + } + + virtual void render() + { + IVideoDriver * const drv = irr_driver->getVideoDriver(); + drv->setMaterial(mat); + + drv->setTransform(ETS_WORLD, IdentityMatrix); + +// drv->drawMeshBuffer(&buf); + // Setup the env for drawing our list by drawing one point + drv->drawVertexPrimitiveList(buf.getVertices(), 1, buf.getIndices(), 1, + EVT_STANDARD, EPT_POINTS); + glCallList(list); + } + + virtual const core::aabbox3d& getBoundingBox() const + { + return box; + } + + virtual void OnRegisterSceneNode() + { + ISceneNode::OnRegisterSceneNode(); + } + + virtual u32 getMaterialCount() const { return 1; } + virtual video::SMaterial& getMaterial(u32 i) { return mat; } + +private: + video::SMaterial mat; + core::aabbox3d box; + u32 count; + GLuint list; + + scene::LargeMeshBuffer buf; +}; + +// The ShadowImportance manager + +ShadowImportance::ShadowImportance() +{ + m_node = new ShadowImportanceNode(irr_driver->getSceneManager()); + m_node->setAutomaticCulling(0); +} // ShadowImportance + +// ---------------------------------------------------------------------------- + +ShadowImportance::~ShadowImportance() +{ + m_node->drop(); // drop STK's reference + m_node->remove(); // Then remove it from the scene graph. +} + +// ---------------------------------------------------------------------------- + +void ShadowImportance::render() +{ + m_node->render(); +} diff --git a/src/graphics/shadow_importance.hpp b/src/graphics/shadow_importance.hpp new file mode 100644 index 000000000..3d5c2dba0 --- /dev/null +++ b/src/graphics/shadow_importance.hpp @@ -0,0 +1,41 @@ +// +// SuperTuxKart - a fun racing game with go-kart +// Copyright (C) 2013 Lauri Kasanen +// +// 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_SHADOW_IMPORTANCE_HPP +#define HEADER_SHADOW_IMPORTANCE_HPP + +#include +namespace irr +{ + namespace video { class SMaterial; class ITexture; } + namespace scene { class ICameraSceneNode; class ISceneNode; } +} +using namespace irr; + +class ShadowImportance +{ + scene::ISceneNode *m_node; + +public: + ShadowImportance(); + ~ShadowImportance(); + + void render(); +}; + +#endif diff --git a/src/graphics/show_curve.cpp b/src/graphics/show_curve.cpp index f372cd613..f4113dcd9 100644 --- a/src/graphics/show_curve.cpp +++ b/src/graphics/show_curve.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/graphics/show_curve.hpp b/src/graphics/show_curve.hpp index 6a6086819..d3b63bf70 100644 --- a/src/graphics/show_curve.hpp +++ b/src/graphics/show_curve.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/graphics/skid_marks.cpp b/src/graphics/skid_marks.cpp index b87d3915a..e8f0eb40a 100644 --- a/src/graphics/skid_marks.cpp +++ b/src/graphics/skid_marks.cpp @@ -1,6 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004 Ingo Ruhnke +// Copyright (C) 2004-2013 Ingo Ruhnke +// Copyright (C) 2013-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -37,10 +38,20 @@ SkidMarks::SkidMarks(const AbstractKart& kart, float width) : m_kart(kart) { m_width = width; m_material = new video::SMaterial(); - m_material->MaterialType = video::EMT_TRANSPARENT_VERTEX_ALPHA; + m_material->MaterialType = video::EMT_ONETEXTURE_BLEND; + m_material->MaterialTypeParam = + pack_textureBlendFunc(video::EBF_SRC_ALPHA, + video::EBF_ONE_MINUS_SRC_ALPHA, + video::EMFN_MODULATE_1X, + video::EAS_TEXTURE | video::EAS_VERTEX_COLOR); m_material->AmbientColor = video::SColor(128, 0, 0, 0); m_material->DiffuseColor = video::SColor(128, 16, 16, 16); + //m_material->AmbientColor = video::SColor(255, 255, 255, 255); + //m_material->DiffuseColor = video::SColor(255, 255, 255, 255); + m_material->setFlag(video::EMF_ANISOTROPIC_FILTER, true); + m_material->setFlag(video::EMF_ZWRITE_ENABLE, false); m_material->Shininess = 0; + m_material->TextureLayer[0].Texture = irr_driver->getTexture("skidmarks.png"); m_skid_marking = false; m_current = -1; } // SkidMark @@ -92,12 +103,11 @@ void SkidMarks::update(float dt, bool force_skid_marks, // Get raycast information // ----------------------- - const btWheelInfo::RaycastInfo &raycast_right = - m_kart.getVehicle()->getWheelInfo(2).m_raycastInfo; - const btWheelInfo::RaycastInfo raycast_left = - m_kart.getVehicle()->getWheelInfo(3).m_raycastInfo; - Vec3 delta = raycast_right.m_contactPointWS - - raycast_left.m_contactPointWS; + const btKart *vehicle = m_kart.getVehicle(); + const Vec3& raycast_right = vehicle->getVisualContactPoint(2); + const Vec3& raycast_left = vehicle->getVisualContactPoint(3); + + Vec3 delta = raycast_right - raycast_left; // The kart is making skid marks when it's: // - forced to leave skid marks, or all of: @@ -108,7 +118,7 @@ void SkidMarks::update(float dt, bool force_skid_marks, // If only one wheel touches the ground, the 2nd one gets the same // raycast result --> delta is 0, which is considered to be not skidding. const Skidding *skid = m_kart.getSkidding(); - bool is_skidding = raycast_right.m_isInContact && + bool is_skidding = vehicle->visualWheelsTouchGround() && ( force_skid_marks || ( (skid->getSkidState()==Skidding::SKID_ACCUMULATE_LEFT|| skid->getSkidState()==Skidding::SKID_ACCUMULATE_RIGHT ) @@ -131,12 +141,19 @@ void SkidMarks::update(float dt, bool force_skid_marks, // ------------------------------------------------- delta.normalize(); - delta *= m_width; + delta *= m_width*0.5f; - m_left [m_current]->add(raycast_left.m_contactPointWS, - raycast_left.m_contactPointWS + delta); - m_right[m_current]->add(raycast_right.m_contactPointWS-delta, - raycast_right.m_contactPointWS); + float distance = 0.0f; + Vec3 start = m_left[m_current]->getCenterStart(); + Vec3 newPoint = (raycast_left + raycast_right)/2; + // this linear distance does not account for the kart turning, it's true, + // but it produces good enough results + distance = (newPoint - start).length(); + + m_left [m_current]->add(raycast_left-delta, raycast_left+delta, + distance); + m_right[m_current]->add(raycast_right-delta, raycast_right+delta, + distance); // Adjust the boundary box of the mesh to include the // adjusted aabb of its buffers. core::aabbox3df aabb=m_nodes[m_current]->getMesh() @@ -154,22 +171,20 @@ void SkidMarks::update(float dt, bool force_skid_marks, // Start new skid marks // -------------------- // No skidmarking if wheels don't have contact - if(!raycast_right.m_isInContact) return; + if(!vehicle->visualWheelsTouchGround()) return; if(delta.length2()<0.0001) return; delta.normalize(); - delta *= m_width; + delta *= m_width*0.5f; SkidMarkQuads *smq_left = - new SkidMarkQuads(raycast_left.m_contactPointWS, - raycast_left.m_contactPointWS + delta, + new SkidMarkQuads(raycast_left-delta, raycast_left+delta , m_material, m_avoid_z_fighting, custom_color); scene::SMesh *new_mesh = new scene::SMesh(); new_mesh->addMeshBuffer(smq_left); SkidMarkQuads *smq_right = - new SkidMarkQuads(raycast_right.m_contactPointWS - delta, - raycast_right.m_contactPointWS, + new SkidMarkQuads(raycast_right-delta, raycast_right+delta, m_material, m_avoid_z_fighting, custom_color); new_mesh->addMeshBuffer(smq_right); scene::IMeshSceneNode *new_node = irr_driver->addMesh(new_mesh); @@ -179,7 +194,7 @@ void SkidMarks::update(float dt, bool force_skid_marks, #endif // We don't keep a reference to the mesh here, so we have to decrement - // the reference count (which is set to 1 when doing "new SMesh()". + // the reference count (which is set to 1 when doing "new SMesh())". // The scene node will keep the mesh alive. new_mesh->drop(); m_current++; @@ -219,6 +234,7 @@ SkidMarks::SkidMarkQuads::SkidMarkQuads(const Vec3 &left, video::SColor* custom_color) : scene::SMeshBuffer() { + m_center_start = (left + right)/2; m_z_offset = z_offset; m_fade_out = 0.0f; @@ -230,7 +246,7 @@ SkidMarks::SkidMarkQuads::SkidMarkQuads(const Vec3 &left, Material = *material; m_aabb = core::aabbox3df(left.toIrrVector()); - add(left, right); + add(left, right, 0.0f); } // SkidMarkQuads @@ -240,7 +256,8 @@ SkidMarks::SkidMarkQuads::SkidMarkQuads(const Vec3 &left, * \param left,right Left and right coordinates. */ void SkidMarks::SkidMarkQuads::add(const Vec3 &left, - const Vec3 &right) + const Vec3 &right, + float distance) { // The skid marks must be raised slightly higher, otherwise it blends // too much with the track. @@ -248,13 +265,25 @@ void SkidMarks::SkidMarkQuads::add(const Vec3 &left, video::S3DVertex v; v.Color = m_start_color; - v.Color.setAlpha(m_start_alpha); + v.Color.setAlpha(0); // initially create all vertices at alpha=0... + + // then when adding a new set of vertices, make the previous 2 opaque. + // this ensures that the last two vertices are always at alpha=0, + // producing a fade-out effect + if (n > 4) + { + Vertices[n - 1].Color.setAlpha(m_start_alpha); + Vertices[n - 2].Color.setAlpha(m_start_alpha); + } + v.Pos = left.toIrrVector(); v.Pos.Y += m_z_offset; v.Normal = core::vector3df(0, 1, 0); + v.TCoords = core::vector2df(0.0f, distance*0.5f); Vertices.push_back(v); v.Pos = right.toIrrVector(); v.Pos.Y += m_z_offset; + v.TCoords = core::vector2df(1.0f, distance*0.5f); Vertices.push_back(v); // Out of the box Irrlicht only supports triangle meshes and not // triangle strips. Since this is a strip it would be more efficient @@ -292,7 +321,8 @@ void SkidMarks::SkidMarkQuads::fade(float f) a -= (a < m_fade_out ? a : (int)m_fade_out); c.setAlpha(a); - for(unsigned int i=0; i +// Copyright (C) 2004-2013 Ingo Ruhnke +// Copyright (C) 2013-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -79,15 +80,20 @@ private: video::SColor m_start_color; + /** Vector marking the start of the skidmarks (located between left and right wheel) */ + Vec3 m_center_start; + public: SkidMarkQuads (const Vec3 &left, const Vec3 &right, video::SMaterial *material, float z_offset, video::SColor* custom_color = NULL); void add (const Vec3 &left, - const Vec3 &right); + const Vec3 &right, + float distance); void fade (float f); /** Returns the aabb of this skid mark quads. */ const core::aabbox3df &getAABB() { return m_aabb; } + const Vec3& getCenterStart() const { return m_center_start; } }; // SkidMarkQuads // ------------------------------------------------------------------------ @@ -102,7 +108,7 @@ private: static float m_avoid_z_fighting; public: - SkidMarks(const AbstractKart& kart, float width=0.2f); + SkidMarks(const AbstractKart& kart, float width=0.32f); ~SkidMarks(); void update (float dt, bool force_skid_marks=false, video::SColor* custom_color = NULL); diff --git a/src/graphics/slip_stream.cpp b/src/graphics/slip_stream.cpp index d06f020eb..e2cccdc4f 100644 --- a/src/graphics/slip_stream.cpp +++ b/src/graphics/slip_stream.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Joerg Henrichs +// Copyright (C) 2010-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/graphics/slip_stream.hpp b/src/graphics/slip_stream.hpp index 57d40483f..4de166027 100644 --- a/src/graphics/slip_stream.hpp +++ b/src/graphics/slip_stream.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Joerg Henrichs +// Copyright (C) 2010-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/graphics/stars.cpp b/src/graphics/stars.cpp index b0570287c..3361835ef 100644 --- a/src/graphics/stars.cpp +++ b/src/graphics/stars.cpp @@ -1,5 +1,7 @@ // SuperTuxKart - a fun racing game with go-kart // +// Copyright (C) 2012-2013 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 diff --git a/src/graphics/stars.hpp b/src/graphics/stars.hpp index 5f8dbfc03..a100ee518 100644 --- a/src/graphics/stars.hpp +++ b/src/graphics/stars.hpp @@ -1,5 +1,7 @@ // SuperTuxKart - a fun racing game with go-kart // +// Copyright (C) 2012-2013 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 diff --git a/src/graphics/sun.cpp b/src/graphics/sun.cpp new file mode 100644 index 000000000..e9c029822 --- /dev/null +++ b/src/graphics/sun.cpp @@ -0,0 +1,161 @@ +// +// SuperTuxKart - a fun racing game with go-kart +// Copyright (C) 2013 Lauri Kasanen +// +// 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 "graphics/sun.hpp" + +#include "graphics/callbacks.hpp" +#include "graphics/glwrap.hpp" +#include "graphics/irr_driver.hpp" +#include "graphics/material_manager.hpp" +#include "graphics/material.hpp" +#include "graphics/rtts.hpp" +#include "graphics/screenquad.hpp" +#include "graphics/shaders.hpp" +#include "io/file_manager.hpp" +#include "modes/world.hpp" +#include "tracks/track.hpp" + +using namespace video; +using namespace scene; +using namespace core; + +SunNode::SunNode(scene::ISceneManager* mgr, float r, float g, float b): + LightNode(mgr, 10000, r, g, b) +{ + + sq = new ScreenQuad(irr_driver->getVideoDriver()); + + SMaterial &m = sq->getMaterial(); + + m.MaterialType = irr_driver->getShader(ES_SUNLIGHT); + m.setTexture(0, irr_driver->getRTT(RTT_NORMAL)); + m.setTexture(1, irr_driver->getRTT(RTT_DEPTH)); + m.setTexture(2, irr_driver->getTexture((file_manager->getTextureDir() + "cloudshadow.png").c_str())); + m.setFlag(EMF_BILINEAR_FILTER, false); + + if (UserConfigParams::m_shadows) + { + m.setTexture(3, irr_driver->getRTT(RTT_SHADOW)); + m.setTexture(4, irr_driver->getRTT(RTT_WARPH)); + m.setTexture(5, irr_driver->getRTT(RTT_WARPV)); + + m.TextureLayer[4].BilinearFilter = + m.TextureLayer[5].BilinearFilter = true; + + m.MaterialType = irr_driver->getShader(ES_SUNLIGHT_SHADOW); + } + + for (u32 i = 0; i < MATERIAL_MAX_TEXTURES; i++) + { + m.TextureLayer[i].TextureWrapU = m.TextureLayer[i].TextureWrapV = + ETC_CLAMP_TO_EDGE; + } + + m.TextureLayer[2].TextureWrapU = m.TextureLayer[2].TextureWrapV = ETC_REPEAT; + + m.TextureLayer[2].TrilinearFilter = true; + + m_color[0] = r; + m_color[1] = g; + m_color[2] = b; +} + +SunNode::~SunNode() +{ + delete sq; +} + +void SunNode::render() +{ + SunLightProvider * const cb = (SunLightProvider *) irr_driver->getCallback(ES_SUNLIGHT); + cb->setColor(m_color[0], m_color[1], m_color[2]); + + vector3df pos = getPosition(); + pos.normalize(); + cb->setPosition(pos.X, pos.Y, pos.Z); + + if (!UserConfigParams::m_shadows || !World::getWorld()->getTrack()->hasShadows()) + { + sq->render(false); + return; + } + + array mrt; + mrt.reallocate(2); + mrt.push_back(irr_driver->getRTT(RTT_TMP2)); + mrt.push_back(irr_driver->getRTT(RTT_TMP3)); + irr_driver->getVideoDriver()->setRenderTarget(mrt, true, false); + + // Render the sun lighting to tmp2, shadow map to tmp3 + sq->render(false); + + // Filter the shadow map for soft shadows + // Note that quarter1 is reserved for glow during this time. + // Having a separate RTT for glow would work, but be wasted VRAM due to less reuse. + ScreenQuad tmpsq(irr_driver->getVideoDriver()); + GaussianBlurProvider * const gcb = (GaussianBlurProvider *) irr_driver->getCallback(ES_GAUSSIAN3H); + + gcb->setResolution(UserConfigParams::m_width / 2, UserConfigParams::m_height / 2); + tmpsq.setMaterialType(irr_driver->getShader(ES_PENUMBRAH)); + tmpsq.setTexture(irr_driver->getRTT(RTT_TMP3)); + tmpsq.render(irr_driver->getRTT(RTT_HALF1)); + tmpsq.setMaterialType(irr_driver->getShader(ES_PENUMBRAV)); + tmpsq.setTexture(irr_driver->getRTT(RTT_HALF1)); + tmpsq.render(irr_driver->getRTT(RTT_HALF2)); + + gcb->setResolution(UserConfigParams::m_width / 4, UserConfigParams::m_height / 4); + tmpsq.setMaterialType(irr_driver->getShader(ES_PENUMBRAH)); + tmpsq.setTexture(irr_driver->getRTT(RTT_HALF2)); + tmpsq.render(irr_driver->getRTT(RTT_QUARTER2)); + tmpsq.setMaterialType(irr_driver->getShader(ES_PENUMBRAV)); + tmpsq.setTexture(irr_driver->getRTT(RTT_QUARTER2)); + tmpsq.render(irr_driver->getRTT(RTT_QUARTER3)); + + gcb->setResolution(UserConfigParams::m_width / 8, UserConfigParams::m_height / 8); + tmpsq.setMaterialType(irr_driver->getShader(ES_PENUMBRAH)); + tmpsq.setTexture(irr_driver->getRTT(RTT_QUARTER3)); + tmpsq.render(irr_driver->getRTT(RTT_EIGHTH1)); + tmpsq.setMaterialType(irr_driver->getShader(ES_PENUMBRAV)); + tmpsq.setTexture(irr_driver->getRTT(RTT_EIGHTH1)); + tmpsq.render(irr_driver->getRTT(RTT_EIGHTH2)); + + // Use these to generate a new soft shadow map + tmpsq.setMaterialType(irr_driver->getShader(ES_SHADOWGEN)); + tmpsq.setTexture(irr_driver->getRTT(RTT_HALF2), 0); + tmpsq.setTexture(irr_driver->getRTT(RTT_QUARTER3), 1); + tmpsq.setTexture(irr_driver->getRTT(RTT_EIGHTH2), 2); + + irr_driver->getVideoDriver()->setRenderTarget(irr_driver->getRTT(RTT_HALF_SOFT), true, false); + tmpsq.render(false); + + tmpsq.setTexture(0, 0); + tmpsq.setTexture(0, 1); + tmpsq.setTexture(0, 2); + tmpsq.setTexture(0, 3); + + // Combine them back to the lighting RTT + tmpsq.setMaterialType(irr_driver->getShader(ES_MULTIPLY_ADD)); + tmpsq.setTexture(irr_driver->getRTT(RTT_TMP2), 0); + tmpsq.setTexture(irr_driver->getRTT(RTT_HALF_SOFT), 1); + + tmpsq.getMaterial().MaterialTypeParam = pack_textureBlendFunc(EBF_ONE, EBF_ONE); + tmpsq.getMaterial().BlendOperation = EBO_ADD; + + irr_driver->getVideoDriver()->setRenderTarget(irr_driver->getRTT(RTT_TMP1), false, false); + tmpsq.render(false); +} diff --git a/src/graphics/sun.hpp b/src/graphics/sun.hpp new file mode 100644 index 000000000..387444c30 --- /dev/null +++ b/src/graphics/sun.hpp @@ -0,0 +1,40 @@ +// +// SuperTuxKart - a fun racing game with go-kart +// Copyright (C) 2013 Lauri Kasanen +// +// 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_SUN_HPP +#define HEADER_SUN_HPP + +#include "graphics/light.hpp" +#include "utils/cpp2011.h" + +class ScreenQuad; + +// The actual rain node +class SunNode: public LightNode +{ +public: + SunNode(scene::ISceneManager* mgr, float r, float g, float b); + virtual ~SunNode(); + + virtual void render() OVERRIDE; + +private: + ScreenQuad *sq; +}; + +#endif diff --git a/src/graphics/water.cpp b/src/graphics/water.cpp new file mode 100644 index 000000000..3ac11d981 --- /dev/null +++ b/src/graphics/water.cpp @@ -0,0 +1,94 @@ +// +// SuperTuxKart - a fun racing game with go-kart +// Copyright (C) 2013 Lauri Kasanen +// +// 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 "graphics/water.hpp" + +#include "graphics/callbacks.hpp" +#include "graphics/glwrap.hpp" +#include "graphics/irr_driver.hpp" +#include "graphics/material_manager.hpp" +#include "graphics/material.hpp" +#include "graphics/rtts.hpp" +#include "graphics/shaders.hpp" + +using namespace video; +using namespace scene; +using namespace core; + +WaterNode::WaterNode(scene::ISceneManager* mgr, IMesh *mesh, float height, float speed, + float length): + IMeshSceneNode(mgr->getRootSceneNode(), mgr, -1) +{ + m_mat = mesh->getMeshBuffer(0)->getMaterial(); + + m_mat.Lighting = false; + + if (m_mat.MaterialType != irr_driver->getShader(ES_WATER)) + { + m_mat.MaterialType = irr_driver->getShader(ES_WATER_SURFACE); + } else + { + m_mat.BlendOperation = EBO_ADD; + } + + m_mat.setFlag(EMF_ZWRITE_ENABLE, false); + + m_mesh = mesh; + mesh->grab(); + mesh->setHardwareMappingHint(EHM_STATIC); + m_box = mesh->getBoundingBox(); + + m_height = height; + m_speed = speed; + m_length = length; +} + +WaterNode::~WaterNode() +{ + m_mesh->drop(); +} + +void WaterNode::render() +{ + if (SceneManager->getSceneNodeRenderPass() != scene::ESNRP_TRANSPARENT) + return; + + WaterShaderProvider * const cb = (WaterShaderProvider *) irr_driver->getCallback(ES_WATER); + cb->setSpeed(m_speed); + cb->setHeight(m_height); + cb->setLength(m_length); + + IVideoDriver * const drv = irr_driver->getVideoDriver(); + drv->setTransform(ETS_WORLD, AbsoluteTransformation); + drv->setMaterial(m_mat); + + const u32 max = m_mesh->getMeshBufferCount(); + for (u32 i = 0; i < max; i++) + { + drv->drawMeshBuffer(m_mesh->getMeshBuffer(i)); + } +} + +void WaterNode::OnRegisterSceneNode() +{ + if (IsVisible) + { + SceneManager->registerNodeForRendering(this, scene::ESNRP_TRANSPARENT); + ISceneNode::OnRegisterSceneNode(); + } +} diff --git a/src/graphics/water.hpp b/src/graphics/water.hpp new file mode 100644 index 000000000..15acacb6f --- /dev/null +++ b/src/graphics/water.hpp @@ -0,0 +1,72 @@ +// +// SuperTuxKart - a fun racing game with go-kart +// Copyright (C) 2013 Lauri Kasanen +// +// 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_WATER_HPP +#define HEADER_WATER_HPP + +#include +#include + +using namespace irr; + +namespace irr +{ + namespace scene { class IMesh; } +} + +// The actual node +class WaterNode: public scene::IMeshSceneNode +{ +public: + WaterNode(scene::ISceneManager* mgr, scene::IMesh *mesh, float height, float speed, + float length); + virtual ~WaterNode(); + + virtual void render() OVERRIDE; + + virtual const core::aabbox3d& getBoundingBox() const OVERRIDE + { + return m_box; + } + + virtual void OnRegisterSceneNode() OVERRIDE; + + virtual u32 getMaterialCount() const OVERRIDE { return 1; } + virtual video::SMaterial& getMaterial(u32 i) OVERRIDE { return m_mat; } + + virtual scene::ESCENE_NODE_TYPE getType() const OVERRIDE { return scene::ESNT_MESH; } + + virtual void setMesh(scene::IMesh *) OVERRIDE {} + virtual scene::IMesh *getMesh() OVERRIDE { return m_mesh; } + virtual void setReadOnlyMaterials(bool) OVERRIDE {} + virtual bool isReadOnlyMaterials() const OVERRIDE { return false; } + virtual scene::IShadowVolumeSceneNode* addShadowVolumeSceneNode + (const scene::IMesh*, int, bool, f32) OVERRIDE { return NULL; } + +protected: + video::SMaterial m_mat; + core::aabbox3df m_box; + + scene::IMesh *m_mesh; + + float m_height; + float m_speed; + float m_length; +}; + +#endif diff --git a/src/graphics/wind.cpp b/src/graphics/wind.cpp new file mode 100644 index 000000000..cab30b15a --- /dev/null +++ b/src/graphics/wind.cpp @@ -0,0 +1,40 @@ +// SuperTuxKart - a fun racing game with go-kart +// +// 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 "graphics/irr_driver.hpp" +#include "graphics/wind.hpp" +#include "utils/helpers.hpp" + +Wind::Wind() +{ + m_seed = (rand() % 1000) - 500; +} + +vector3df Wind::getWind() const +{ + return m_wind; +} + +void Wind::update() +{ + vector3df dir(0, 0, 1); + const u32 now = irr_driver->getDevice()->getTimer()->getTime(); + + const float rotation = asinf(noise2d(m_seed, now / 100000.0f)) * RAD_TO_DEGREE; + dir.rotateXZBy(rotation); + + m_wind = dir; +} diff --git a/src/graphics/wind.hpp b/src/graphics/wind.hpp new file mode 100644 index 000000000..651258f2b --- /dev/null +++ b/src/graphics/wind.hpp @@ -0,0 +1,38 @@ +// SuperTuxKart - a fun racing game with go-kart +// +// 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_WIND_HPP +#define HEADER_WIND_HPP + +#include +using namespace irr; +using core::vector3df; + +class Wind +{ +public: + Wind(); + + vector3df getWind() const; + void update(); + +private: + vector3df m_wind; + float m_seed; +}; + +#endif + diff --git a/src/guiengine/CGUISpriteBank.cpp b/src/guiengine/CGUISpriteBank.cpp index 0bcadeb89..8c756453a 100644 --- a/src/guiengine/CGUISpriteBank.cpp +++ b/src/guiengine/CGUISpriteBank.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2002-2009 Nikolaus Gebhardt, modified by Marianne Gagnon +// Copyright (C) 2002-2013 Nikolaus Gebhardt, modified by Marianne Gagnon // This file is part of the "Irrlicht Engine". // For conditions of distribution and use, see copyright notice in irrlicht.h diff --git a/src/guiengine/abstract_state_manager.cpp b/src/guiengine/abstract_state_manager.cpp index af93d5397..e27a54d14 100644 --- a/src/guiengine/abstract_state_manager.cpp +++ b/src/guiengine/abstract_state_manager.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/guiengine/abstract_state_manager.hpp b/src/guiengine/abstract_state_manager.hpp index 98a054862..e280103ac 100644 --- a/src/guiengine/abstract_state_manager.hpp +++ b/src/guiengine/abstract_state_manager.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 SuperTuxKart-Team +// Copyright (C) 2010-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/guiengine/abstract_top_level_container.cpp b/src/guiengine/abstract_top_level_container.cpp index 1210ace7d..72073ed94 100644 --- a/src/guiengine/abstract_top_level_container.cpp +++ b/src/guiengine/abstract_top_level_container.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Marianne Gagnon +// Copyright (C) 2010-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -19,6 +19,7 @@ #include "guiengine/engine.hpp" #include "guiengine/scalable_font.hpp" #include "guiengine/widget.hpp" +#include "graphics/irr_driver.hpp" #include "io/file_manager.hpp" #include "utils/ptr_vector.hpp" @@ -28,10 +29,10 @@ using namespace GUIEngine; +using namespace irr; using namespace core; using namespace gui; using namespace io; -using namespace irr; using namespace scene; using namespace video; diff --git a/src/guiengine/abstract_top_level_container.hpp b/src/guiengine/abstract_top_level_container.hpp index e75d3cb71..1f7bb874f 100644 --- a/src/guiengine/abstract_top_level_container.hpp +++ b/src/guiengine/abstract_top_level_container.hpp @@ -1,5 +1,6 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -76,12 +77,12 @@ namespace GUIEngine Widget* getWidget(const int id); /** This function searches and returns a widget by name, cast as specified type, - * if that widget is found and the type is correct. - * \param name The name of the widget to find - * \return an object by name, casted to specified type, or NULL if + * if that widget is found and the type is correct. + * \param name The name of the widget to find + * \return an object by name, casted to specified type, or NULL if * not found/wrong type */ template - T* getWidget(const char* name) + T* getWidget(const char* name) { Widget* out = getWidget(name); T* outCasted = dynamic_cast( out ); diff --git a/src/guiengine/engine.cpp b/src/guiengine/engine.cpp index 826d127f6..56691ad6f 100644 --- a/src/guiengine/engine.cpp +++ b/src/guiengine/engine.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Marianne Gagnon +// Copyright (C) 2010-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -839,6 +839,17 @@ namespace GUIEngine DialogQueue::get()->update(); } + // Hack : on the first frame, irrlicht processes all events that have been queued + // during the loading screen. So way until the second frame to start processing events. + // (Events queues during the loading screens are likely the user clicking on the + // frame to focus it, or similar, and should not be used as a game event) + static int frame = 0; + if (frame < 2) + { + frame++; + if (frame == 2) + GUIEngine::EventHandler::get()->startAcceptingEvents(); + } } // ------------------------------------------------------------------------ @@ -963,6 +974,8 @@ namespace GUIEngine //delete g_small_font; g_small_font->drop(); g_small_font = NULL; + g_large_font->drop(); + g_large_font = NULL; g_digit_font->drop(); g_digit_font = NULL; @@ -1038,10 +1051,12 @@ namespace GUIEngine // normal text will range from 0.2, in 640x* resolutions (won't scale // below that) to 0.4, in 1024x* resolutions, and linearly up const int screen_width = irr_driver->getFrameSize().Width; - const float normal_text_scale = - 0.7f + 0.2f*std::max(0, screen_width - 640)/564.0f; - const float title_text_scale = - 0.2f + 0.2f*std::max(0, screen_width - 640)/564.0f; + const int screen_height = irr_driver->getFrameSize().Height; + float scale = std::max(0, screen_width - 640)/564.0f; + if (screen_height < 700) scale = std::min(scale, 0.25f); // attempt to compensate for small screens + + float normal_text_scale = 0.7f + 0.2f*scale; + float title_text_scale = 0.2f + 0.2f*scale; ScalableFont* sfont = new ScalableFont(g_env, @@ -1267,6 +1282,11 @@ namespace GUIEngine ITexture* loading = irr_driver->getTexture(file_manager->getGUIDir()+"loading.png"); + if(!loading) + { + Log::fatal("Engine", "Can not find loading.png texture, aborting."); + exit(-1); + } const int texture_w = loading->getSize().Width; const int texture_h = loading->getSize().Height; diff --git a/src/guiengine/engine.hpp b/src/guiengine/engine.hpp index d4916d533..e3fad5da7 100644 --- a/src/guiengine/engine.hpp +++ b/src/guiengine/engine.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Marianne Gagnon +// Copyright (C) 2010-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/guiengine/event_handler.cpp b/src/guiengine/event_handler.cpp index f0924eddb..6720113cf 100644 --- a/src/guiengine/event_handler.cpp +++ b/src/guiengine/event_handler.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Marianne Gagnon +// Copyright (C) 2010-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -22,6 +22,7 @@ #include #include +#include "graphics/irr_driver.hpp" #include "guiengine/abstract_state_manager.hpp" #include "guiengine/engine.hpp" #include "guiengine/modaldialog.hpp" @@ -44,6 +45,7 @@ using namespace irr::gui; EventHandler::EventHandler() { + m_accept_events = false; } // ----------------------------------------------------------------------------- @@ -56,6 +58,8 @@ EventHandler::~EventHandler() bool EventHandler::OnEvent (const SEvent &event) { + if (!m_accept_events && event.EventType != EET_LOG_TEXT_EVENT) return true; + // TO DEBUG HATS (when you don't actually have a hat) /* if (event.EventType == EET_KEY_INPUT_EVENT) @@ -189,14 +193,18 @@ bool EventHandler::OnEvent (const SEvent &event) #else return true; // EVENT_BLOCK #endif - + const std::string &error_info = irr_driver->getTextureErrorMessage(); if (event.LogEvent.Level == irr::ELL_WARNING) { - printf("[Irrlicht Warning] %s\n", event.LogEvent.Text); + if(error_info.size()>0) + Log::warn("EventHandler", error_info.c_str()); + Log::warn("Irrlicht", event.LogEvent.Text); } else if (event.LogEvent.Level == irr::ELL_ERROR) { - printf("[Irrlicht Error] %s\n", event.LogEvent.Text); + if(error_info.size()>0) + Log::error("EventHandler", error_info.c_str()); + Log::error("Irrlicht", event.LogEvent.Text); } } return true; diff --git a/src/guiengine/event_handler.hpp b/src/guiengine/event_handler.hpp index 59362ea6b..f4207f4e8 100644 --- a/src/guiengine/event_handler.hpp +++ b/src/guiengine/event_handler.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Marianne Gagnon +// Copyright (C) 2010-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -55,6 +55,11 @@ namespace GUIEngine */ class EventHandler : public irr::IEventReceiver { + /** This variable is used to ignore events during the initial load screen, so that + a player cannot trigger an action by clicking on the window during loading screen + for example */ + bool m_accept_events; + EventPropagation onGUIEvent(const irr::SEvent& event); EventPropagation onWidgetActivated(Widget* w, const int playerID); void navigateUp(const int playerID, Input::InputType type, const bool pressedDown); @@ -97,6 +102,8 @@ namespace GUIEngine /** singleton access */ static EventHandler* get(); static void deallocate(); + + void startAcceptingEvents() { m_accept_events = true; } }; } diff --git a/src/guiengine/layout_manager.cpp b/src/guiengine/layout_manager.cpp index c917188ff..b5cb4634c 100644 --- a/src/guiengine/layout_manager.cpp +++ b/src/guiengine/layout_manager.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Marianne Gagnon +// Copyright (C) 2010-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -33,13 +33,10 @@ using namespace video; #include "io/file_manager.hpp" #include "utils/ptr_vector.hpp" #include "utils/string_utils.hpp" +#include "utils/vs.hpp" using namespace GUIEngine; -#ifndef round -# define round(x) (floor(x+0.5f)) -#endif - /** Like atoi, but on error prints an error message to stderr */ int atoi_p(const char* val) { @@ -59,12 +56,8 @@ int atoi_p(const char* val) bool LayoutManager::convertToCoord(std::string& x, int* absolute /* out */, int* percentage /* out */) { - bool is_number; - int i; - std::istringstream myStream(x); - is_number = (myStream >> i)!=0; - - if(!is_number) return false; + int i = 0; + if (!StringUtils::fromString(x, i /* out */)) return false; if( x[x.size()-1] == '%' ) // percentage { diff --git a/src/guiengine/layout_manager.hpp b/src/guiengine/layout_manager.hpp index 4a009bb3e..4d338e864 100644 --- a/src/guiengine/layout_manager.hpp +++ b/src/guiengine/layout_manager.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/guiengine/modaldialog.cpp b/src/guiengine/modaldialog.cpp index 8aad9621d..21d8e5734 100644 --- a/src/guiengine/modaldialog.cpp +++ b/src/guiengine/modaldialog.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/guiengine/modaldialog.hpp b/src/guiengine/modaldialog.hpp index da3f966a5..e5e81e4b1 100644 --- a/src/guiengine/modaldialog.hpp +++ b/src/guiengine/modaldialog.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/guiengine/scalable_font.cpp b/src/guiengine/scalable_font.cpp index ddb5a65f1..a58dd7f31 100644 --- a/src/guiengine/scalable_font.cpp +++ b/src/guiengine/scalable_font.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2002-2009 Nikolaus Gebhardt +// Copyright (C) 2002-2013 Nikolaus Gebhardt // This file is part of the "Irrlicht Engine". // For conditions of distribution and use, see copyright notice in irrlicht.h diff --git a/src/guiengine/scalable_font.hpp b/src/guiengine/scalable_font.hpp index 85017b58d..431dad384 100644 --- a/src/guiengine/scalable_font.hpp +++ b/src/guiengine/scalable_font.hpp @@ -1,4 +1,4 @@ -// Copyright (C) 2002-2009 Nikolaus Gebhardt +// Copyright (C) 2002-2013 Nikolaus Gebhardt // This file is part of the "Irrlicht Engine". // For conditions of distribution and use, see copyright notice in irrlicht.h diff --git a/src/guiengine/screen.cpp b/src/guiengine/screen.cpp index 21b5d4c72..687c0f477 100644 --- a/src/guiengine/screen.cpp +++ b/src/guiengine/screen.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Marianne Gagnon +// Copyright (C) 2010-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/guiengine/screen.hpp b/src/guiengine/screen.hpp index 59ddc82cb..f9552ae74 100644 --- a/src/guiengine/screen.hpp +++ b/src/guiengine/screen.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Marianne Gagnon +// Copyright (C) 2010-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/guiengine/screen_loader.cpp b/src/guiengine/screen_loader.cpp index 06fb47ce5..62d426595 100644 --- a/src/guiengine/screen_loader.cpp +++ b/src/guiengine/screen_loader.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/guiengine/skin.cpp b/src/guiengine/skin.cpp index 57e0e2dbf..2e8e3536f 100644 --- a/src/guiengine/skin.cpp +++ b/src/guiengine/skin.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -20,6 +20,7 @@ #include #include #include +#include #include "config/user_config.hpp" #include "graphics/irr_driver.hpp" @@ -127,7 +128,7 @@ namespace SkinConfig if(node->get("type", &type) == 0) { - Log::error("skin", "All elements must have a type\n"); + Log::error("skin", "All elements must have a type\n"); return; } node->get("state", &state); @@ -154,7 +155,7 @@ namespace SkinConfig if(!root) { Log::error("skin", "Could not read XML file '%s'.", - file.c_str()); + file.c_str()); throw std::runtime_error("Invalid skin file"); } @@ -174,7 +175,7 @@ namespace SkinConfig else { Log::error("skin", "Unknown node in XML file '%s'.", - node->getName().c_str()); + node->getName().c_str()); } }// nend for @@ -1557,9 +1558,9 @@ void Skin::drawListSelection(const core::recti &rect, Widget* widget, void Skin::drawListHeader(const irr::core::rect< irr::s32 > &rect, Widget* widget) { - bool isSelected =(((ListWidget*)widget->m_event_handler)->m_selected_column - == widget); - + bool isSelected = + (((ListWidget*)widget->m_event_handler)->m_selected_column == widget && + ((ListWidget*)widget->m_event_handler)->m_sort_default == false); drawBoxFromStretchableTexture(widget, rect, (isSelected ? SkinConfig::m_render_params["list_header::down"] @@ -1572,10 +1573,11 @@ void Skin::drawListHeader(const irr::core::rect< irr::s32 > &rect, ITexture* img; if (((ListWidget*)widget->m_event_handler)->m_sort_desc) img = - SkinConfig::m_render_params["list_sort_down::neutral"].getImage(); + SkinConfig::m_render_params["list_sort_up::neutral"].getImage(); else img = - SkinConfig::m_render_params["list_sort_up::neutral"].getImage(); + SkinConfig::m_render_params["list_sort_down::neutral"].getImage(); + core::recti destRect(rect.UpperLeftCorner, core::dimension2di(rect.getHeight(), rect.getHeight())); @@ -1635,6 +1637,14 @@ void Skin::renderSections(PtrVector* within_vector) ITexture* tex = irr_driver->getTexture( file_manager->getGUIDir() + "bar.png" ); + if(!tex) + { + std::string file = file_manager->getGUIDir() + "main_help.png"; + tex = irr_driver->getTexture(file); + if(!tex) + Log::fatal("Skin", + "Can't find fallback texture 'main_help.png, aborting."); + } core::recti r1(0, (int)(widget.m_y - 40*y_size), framesize.Width, framesize.Height); core::recti r2(core::dimension2di(0,0), tex->getSize()); @@ -1900,6 +1910,9 @@ void Skin::process3DPane(IGUIElement *element, const core::recti &rect, void doDrawBadge(ITexture* texture, const core::recti& rect, float max_icon_size, bool badge_at_left) { + // In case of a problem + if(!texture) return; + const core::dimension2d& texture_size = texture->getSize(); const float aspectRatio = (float)texture_size.Width / (float)texture_size.Height; @@ -1930,6 +1943,8 @@ void Skin::drawBadgeOn(const Widget* widget, const core::recti& rect) if (widget->m_badges & LOCKED_BADGE) { video::ITexture* texture = irr_driver->getTexture( + file_manager->getTextureFile("gui_lock.png"), + "Can't find '%s'.", file_manager->getTextureFile("gui_lock.png")); float max_icon_size = 0.5f; // Lock badge can be quite big doDrawBadge(texture, rect, max_icon_size, true); @@ -1937,6 +1952,8 @@ void Skin::drawBadgeOn(const Widget* widget, const core::recti& rect) if (widget->m_badges & OK_BADGE) { video::ITexture* texture = irr_driver->getTexture( + file_manager->getTextureFile("green_check.png"), + "Can't find '%s'.", file_manager->getTextureFile("green_check.png")); float max_icon_size = 0.35f; doDrawBadge(texture, rect, max_icon_size, true); @@ -1944,7 +1961,8 @@ void Skin::drawBadgeOn(const Widget* widget, const core::recti& rect) if (widget->m_badges & BAD_BADGE) { video::ITexture* texture = irr_driver->getTexture( - file_manager->getTextureFile("red_mark.png")); + file_manager->getTextureFile("red_mark.png"), + "Can't find red_mark.png"); float max_icon_size = 0.35f; doDrawBadge(texture, rect, max_icon_size, false); } @@ -1952,13 +1970,16 @@ void Skin::drawBadgeOn(const Widget* widget, const core::recti& rect) { float max_icon_size = 0.43f; video::ITexture* texture = irr_driver->getTexture( - file_manager->getTextureFile("cup_bronze.png")); + file_manager->getTextureFile("cup_bronze.png"), + "Can't find cup_bronze.png."); doDrawBadge(texture, rect, max_icon_size, false); } if (widget->m_badges & KEYBOARD_BADGE) { float max_icon_size = 0.43f; video::ITexture* texture = irr_driver->getTexture( + file_manager->getGUIDir() + "keyboard.png", + "Can't find '%s'.", file_manager->getGUIDir() + "keyboard.png"); doDrawBadge(texture, rect, max_icon_size, true); } @@ -1966,6 +1987,8 @@ void Skin::drawBadgeOn(const Widget* widget, const core::recti& rect) { float max_icon_size = 0.43f; video::ITexture* texture = irr_driver->getTexture( + file_manager->getGUIDir() + "gamepad.png", + "Can't find '%s'.", file_manager->getGUIDir() + "gamepad.png"); doDrawBadge(texture, rect, max_icon_size, true); } @@ -1973,6 +1996,8 @@ void Skin::drawBadgeOn(const Widget* widget, const core::recti& rect) { float max_icon_size = 0.43f; video::ITexture* texture = irr_driver->getTexture( + file_manager->getGUIDir() + "hourglass.png", + "Can't find '%s'.", file_manager->getGUIDir() + "hourglass.png"); doDrawBadge(texture, rect, max_icon_size, true); } diff --git a/src/guiengine/skin.hpp b/src/guiengine/skin.hpp index 51657d660..9d4bebc04 100644 --- a/src/guiengine/skin.hpp +++ b/src/guiengine/skin.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/guiengine/widget.cpp b/src/guiengine/widget.cpp index 9a35d47b0..2b67c1f39 100644 --- a/src/guiengine/widget.cpp +++ b/src/guiengine/widget.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -34,11 +34,7 @@ using namespace gui; #include "io/file_manager.hpp" #include "utils/string_utils.hpp" #include "utils/translation.hpp" - - -#ifndef round -# define round(x) (floor(x+0.5f)) -#endif +#include "utils/vs.hpp" namespace GUIEngine { diff --git a/src/guiengine/widget.hpp b/src/guiengine/widget.hpp index 8dcb12755..874ca87cd 100644 --- a/src/guiengine/widget.hpp +++ b/src/guiengine/widget.hpp @@ -1,5 +1,6 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/guiengine/widgets.hpp b/src/guiengine/widgets.hpp index a2da6c9cc..749cf2f0c 100644 --- a/src/guiengine/widgets.hpp +++ b/src/guiengine/widgets.hpp @@ -1,3 +1,20 @@ +// SuperTuxKart - a fun racing game with go-kart +// +// Copyright (C) 2009-2013 Marianne Gagnon +// +// 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. // A shortcut header to get all widgets diff --git a/src/guiengine/widgets/CGUIEditBox.cpp b/src/guiengine/widgets/CGUIEditBox.cpp index cc548d655..5f852c194 100644 --- a/src/guiengine/widgets/CGUIEditBox.cpp +++ b/src/guiengine/widgets/CGUIEditBox.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2002-2011 Nikolaus Gebhardt +// Copyright (C) 2002-2013 Nikolaus Gebhardt // This file is part of the "Irrlicht Engine". // For conditions of distribution and use, see copyright notice in irrlicht.h @@ -17,352 +17,352 @@ #include "utils/time.hpp" /* - todo: - optional scrollbars - ctrl+left/right to select word - double click/ctrl click: word select + drag to select whole words, triple click to select line - optional? dragging selected text - numerical + todo: + optional scrollbars + ctrl+left/right to select word + double click/ctrl click: word select + drag to select whole words, triple click to select line + optional? dragging selected text + numerical */ -Time::TimeType getTime() +StkTime::TimeType getTime() { - return Time::getTimeSinceEpoch(); + return StkTime::getTimeSinceEpoch(); } //! constructor CGUIEditBox::CGUIEditBox(const wchar_t* text, bool border, - IGUIEnvironment* environment, IGUIElement* parent, s32 id, - const core::rect& rectangle, bool is_rtl) - : IGUIEditBox(environment, parent, id, rectangle), MouseMarking(false), - Border(border), OverrideColorEnabled(false), MarkBegin(0), MarkEnd(0), - OverrideColor(video::SColor(101,255,255,255)), OverrideFont(0), LastBreakFont(0), - Operator(0), BlinkStartTime(0), CursorPos(0), HScrollPos(0), VScrollPos(0), Max(0), - WordWrap(false), MultiLine(false), AutoScroll(true), PasswordBox(false), - PasswordChar(L'*'), HAlign(EGUIA_UPPERLEFT), VAlign(EGUIA_CENTER), - CurrentTextRect(0,0,1,1), FrameRect(rectangle) + IGUIEnvironment* environment, IGUIElement* parent, s32 id, + const core::rect& rectangle, bool is_rtl) + : IGUIEditBox(environment, parent, id, rectangle), MouseMarking(false), + Border(border), OverrideColorEnabled(false), MarkBegin(0), MarkEnd(0), + OverrideColor(video::SColor(101,255,255,255)), OverrideFont(0), LastBreakFont(0), + Operator(0), BlinkStartTime(0), CursorPos(0), HScrollPos(0), VScrollPos(0), Max(0), + WordWrap(false), MultiLine(false), AutoScroll(true), PasswordBox(false), + PasswordChar(L'*'), HAlign(EGUIA_UPPERLEFT), VAlign(EGUIA_CENTER), + CurrentTextRect(0,0,1,1), FrameRect(rectangle) { m_rtl = is_rtl; - #ifdef _DEBUG - setDebugName("CGUIEditBox"); - #endif + #ifdef _DEBUG + setDebugName("CGUIEditBox"); + #endif - Text = text; + Text = text; - if (Environment) - Operator = Environment->getOSOperator(); + if (Environment) + Operator = Environment->getOSOperator(); - if (Operator) - Operator->grab(); + if (Operator) + Operator->grab(); - // this element can be tabbed to - setTabStop(true); - setTabOrder(-1); + // this element can be tabbed to + setTabStop(true); + setTabOrder(-1); - IGUISkin *skin = 0; - if (Environment) - skin = Environment->getSkin(); - if (Border && skin) - { - FrameRect.UpperLeftCorner.X += skin->getSize(EGDS_TEXT_DISTANCE_X)+1; - FrameRect.UpperLeftCorner.Y += skin->getSize(EGDS_TEXT_DISTANCE_Y)+1; - FrameRect.LowerRightCorner.X -= skin->getSize(EGDS_TEXT_DISTANCE_X)+1; - FrameRect.LowerRightCorner.Y -= skin->getSize(EGDS_TEXT_DISTANCE_Y)+1; - } + IGUISkin *skin = 0; + if (Environment) + skin = Environment->getSkin(); + if (Border && skin) + { + FrameRect.UpperLeftCorner.X += skin->getSize(EGDS_TEXT_DISTANCE_X)+1; + FrameRect.UpperLeftCorner.Y += skin->getSize(EGDS_TEXT_DISTANCE_Y)+1; + FrameRect.LowerRightCorner.X -= skin->getSize(EGDS_TEXT_DISTANCE_X)+1; + FrameRect.LowerRightCorner.Y -= skin->getSize(EGDS_TEXT_DISTANCE_Y)+1; + } - breakText(); + breakText(); - calculateScrollPos(); + calculateScrollPos(); } //! destructor CGUIEditBox::~CGUIEditBox() { - if (OverrideFont) - OverrideFont->drop(); + if (OverrideFont) + OverrideFont->drop(); - if (Operator) - Operator->drop(); + if (Operator) + Operator->drop(); } //! Sets another skin independent font. void CGUIEditBox::setOverrideFont(IGUIFont* font) { - if (OverrideFont == font) - return; + if (OverrideFont == font) + return; - if (OverrideFont) - OverrideFont->drop(); + if (OverrideFont) + OverrideFont->drop(); - OverrideFont = font; + OverrideFont = font; - if (OverrideFont) - OverrideFont->grab(); + if (OverrideFont) + OverrideFont->grab(); - breakText(); + breakText(); } //! Sets another color for the text. void CGUIEditBox::setOverrideColor(video::SColor color) { - OverrideColor = color; - OverrideColorEnabled = true; + OverrideColor = color; + OverrideColorEnabled = true; } video::SColor CGUIEditBox::getOverrideColor() const { - return OverrideColor; + return OverrideColor; } //! Turns the border on or off void CGUIEditBox::setDrawBorder(bool border) { - Border = border; + Border = border; } //! Sets if the text should use the overide color or the color in the gui skin. void CGUIEditBox::enableOverrideColor(bool enable) { - OverrideColorEnabled = enable; + OverrideColorEnabled = enable; } bool CGUIEditBox::isOverrideColorEnabled() const { - _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; - return OverrideColorEnabled; + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return OverrideColorEnabled; } //! Enables or disables word wrap void CGUIEditBox::setWordWrap(bool enable) { - WordWrap = enable; - breakText(); + WordWrap = enable; + breakText(); } void CGUIEditBox::updateAbsolutePosition() { core::rect oldAbsoluteRect(AbsoluteRect); - IGUIElement::updateAbsolutePosition(); - if ( oldAbsoluteRect != AbsoluteRect ) - { + IGUIElement::updateAbsolutePosition(); + if ( oldAbsoluteRect != AbsoluteRect ) + { breakText(); - } + } } //! Checks if word wrap is enabled bool CGUIEditBox::isWordWrapEnabled() const { - _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; - return WordWrap; + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return WordWrap; } //! Enables or disables newlines. void CGUIEditBox::setMultiLine(bool enable) { - MultiLine = enable; + MultiLine = enable; } //! Checks if multi line editing is enabled bool CGUIEditBox::isMultiLineEnabled() const { - _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; - return MultiLine; + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return MultiLine; } void CGUIEditBox::setPasswordBox(bool passwordBox, wchar_t passwordChar) { - PasswordBox = passwordBox; - if (PasswordBox) - { - PasswordChar = passwordChar; - setMultiLine(false); - setWordWrap(false); - BrokenText.clear(); - } + PasswordBox = passwordBox; + if (PasswordBox) + { + PasswordChar = passwordChar; + setMultiLine(false); + setWordWrap(false); + BrokenText.clear(); + } } bool CGUIEditBox::isPasswordBox() const { - _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; - return PasswordBox; + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return PasswordBox; } //! Sets text justification void CGUIEditBox::setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) { - HAlign = horizontal; - VAlign = vertical; + HAlign = horizontal; + VAlign = vertical; } //! called if an event happened. bool CGUIEditBox::OnEvent(const SEvent& event) { - if (isEnabled()) - { + if (isEnabled()) + { - switch(event.EventType) - { - case EET_GUI_EVENT: - if (event.GUIEvent.EventType == EGET_ELEMENT_FOCUS_LOST) - { - if (event.GUIEvent.Caller == this) - { - MouseMarking = false; - setTextMarkers(0,0); - } - } - break; - case EET_KEY_INPUT_EVENT: - if (processKey(event)) - return true; - break; - case EET_MOUSE_INPUT_EVENT: - if (processMouse(event)) - return true; - break; - default: - break; - } - } + switch(event.EventType) + { + case EET_GUI_EVENT: + if (event.GUIEvent.EventType == EGET_ELEMENT_FOCUS_LOST) + { + if (event.GUIEvent.Caller == this) + { + MouseMarking = false; + setTextMarkers(0,0); + } + } + break; + case EET_KEY_INPUT_EVENT: + if (processKey(event)) + return true; + break; + case EET_MOUSE_INPUT_EVENT: + if (processMouse(event)) + return true; + break; + default: + break; + } + } - return IGUIElement::OnEvent(event); + return IGUIElement::OnEvent(event); } bool CGUIEditBox::processKey(const SEvent& event) { - if (!event.KeyInput.PressedDown) - return false; + if (!event.KeyInput.PressedDown) + return false; - bool textChanged = false; - s32 newMarkBegin = MarkBegin; - s32 newMarkEnd = MarkEnd; + bool textChanged = false; + s32 newMarkBegin = MarkBegin; + s32 newMarkEnd = MarkEnd; - // control shortcut handling + // control shortcut handling - if (event.KeyInput.Control) - { - // german backlash '\' entered with control + '?' - if ( event.KeyInput.Char == '\\' ) - { - inputChar(event.KeyInput.Char); - return true; - } + if (event.KeyInput.Control) + { + // german backlash '\' entered with control + '?' + if ( event.KeyInput.Char == '\\' ) + { + inputChar(event.KeyInput.Char); + return true; + } - switch(event.KeyInput.Key) - { - case KEY_KEY_A: - // select all - newMarkBegin = 0; - newMarkEnd = Text.size(); - break; - case KEY_KEY_C: - // copy to clipboard - if (!PasswordBox && Operator && MarkBegin != MarkEnd) - { - const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; - const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; + switch(event.KeyInput.Key) + { + case KEY_KEY_A: + // select all + newMarkBegin = 0; + newMarkEnd = Text.size(); + break; + case KEY_KEY_C: + // copy to clipboard + if (!PasswordBox && Operator && MarkBegin != MarkEnd) + { + const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; + const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; - core::stringc s; - s = Text.subString(realmbgn, realmend - realmbgn).c_str(); - Operator->copyToClipboard(s.c_str()); - } - break; - case KEY_KEY_X: - // cut to the clipboard - if (!PasswordBox && Operator && MarkBegin != MarkEnd) - { - const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; - const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; + core::stringc s; + s = Text.subString(realmbgn, realmend - realmbgn).c_str(); + Operator->copyToClipboard(s.c_str()); + } + break; + case KEY_KEY_X: + // cut to the clipboard + if (!PasswordBox && Operator && MarkBegin != MarkEnd) + { + const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; + const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; - // copy - core::stringc sc; - sc = Text.subString(realmbgn, realmend - realmbgn).c_str(); - Operator->copyToClipboard(sc.c_str()); + // copy + core::stringc sc; + sc = Text.subString(realmbgn, realmend - realmbgn).c_str(); + Operator->copyToClipboard(sc.c_str()); - if (isEnabled()) - { - // delete - core::stringw s; - s = Text.subString(0, realmbgn); - s.append( Text.subString(realmend, Text.size()-realmend) ); - Text = s; + if (isEnabled()) + { + // delete + core::stringw s; + s = Text.subString(0, realmbgn); + s.append( Text.subString(realmend, Text.size()-realmend) ); + Text = s; - CursorPos = realmbgn; - newMarkBegin = 0; - newMarkEnd = 0; - textChanged = true; - } - } - break; + CursorPos = realmbgn; + newMarkBegin = 0; + newMarkEnd = 0; + textChanged = true; + } + } + break; - case KEY_KEY_V: - if ( !isEnabled() ) - break; + case KEY_KEY_V: + if ( !isEnabled() ) + break; - // paste from the clipboard - if (Operator) - { - const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; - const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; + // paste from the clipboard + if (Operator) + { + const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; + const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; - // add new character - const c8* p = Operator->getTextFromClipboard(); - if (p) - { - if (MarkBegin == MarkEnd) - { - // insert text - core::stringw s = Text.subString(0, CursorPos); - s.append(p); - s.append( Text.subString(CursorPos, Text.size()-CursorPos) ); + // add new character + const c8* p = Operator->getTextFromClipboard(); + if (p) + { + if (MarkBegin == MarkEnd) + { + // insert text + core::stringw s = Text.subString(0, CursorPos); + s.append(p); + s.append( Text.subString(CursorPos, Text.size()-CursorPos) ); - if (!Max || s.size()<=Max) // thx to Fish FH for fix - { - Text = s; - s = p; - CursorPos += s.size(); - } - } - else - { - // replace text + if (!Max || s.size()<=Max) // thx to Fish FH for fix + { + Text = s; + s = p; + CursorPos += s.size(); + } + } + else + { + // replace text - core::stringw s = Text.subString(0, realmbgn); - s.append(p); - s.append( Text.subString(realmend, Text.size()-realmend) ); + core::stringw s = Text.subString(0, realmbgn); + s.append(p); + s.append( Text.subString(realmend, Text.size()-realmend) ); - if (!Max || s.size()<=Max) // thx to Fish FH for fix - { - Text = s; - s = p; - CursorPos = realmbgn + s.size(); - } - } - } + if (!Max || s.size()<=Max) // thx to Fish FH for fix + { + Text = s; + s = p; + CursorPos = realmbgn + s.size(); + } + } + } - newMarkBegin = 0; - newMarkEnd = 0; - textChanged = true; - } - break; - case KEY_HOME: + newMarkBegin = 0; + newMarkEnd = 0; + textChanged = true; + } + break; + case KEY_HOME: if (!m_rtl) { // move/highlight to start of text @@ -379,8 +379,8 @@ bool CGUIEditBox::processKey(const SEvent& event) newMarkEnd = 0; } } - break; - case KEY_END: + break; + case KEY_END: if (!m_rtl) { // move/highlight to end of text @@ -397,15 +397,15 @@ bool CGUIEditBox::processKey(const SEvent& event) newMarkEnd = 0; } } - break; - default: - return false; - } - } - // default keyboard handling - else - switch(event.KeyInput.Key) - { + break; + default: + return false; + } + } + // default keyboard handling + else + switch(event.KeyInput.Key) + { /* case KEY_KEY_Q: inputChar(L'\u05DC'); @@ -433,72 +433,72 @@ bool CGUIEditBox::processKey(const SEvent& event) return true; */ - case KEY_END: - if (!m_rtl) - { - s32 p = Text.size(); - if (WordWrap || MultiLine) - { - p = getLineFromPos(CursorPos); - p = BrokenTextPositions[p] + (s32)BrokenText[p].size(); - if (p > 0 && (Text[p-1] == L'\r' || Text[p-1] == L'\n' )) - p-=1; - } - - if (event.KeyInput.Shift) - { - if (MarkBegin == MarkEnd) - newMarkBegin = CursorPos; - - newMarkEnd = p; - } - else - { - newMarkBegin = 0; - newMarkEnd = 0; - } - CursorPos = p; - BlinkStartTime = getTime(); - } - break; - case KEY_HOME: + case KEY_END: if (!m_rtl) - { + { + s32 p = Text.size(); + if (WordWrap || MultiLine) + { + p = getLineFromPos(CursorPos); + p = BrokenTextPositions[p] + (s32)BrokenText[p].size(); + if (p > 0 && (Text[p-1] == L'\r' || Text[p-1] == L'\n' )) + p-=1; + } - s32 p = 0; - if (WordWrap || MultiLine) - { - p = getLineFromPos(CursorPos); - p = BrokenTextPositions[p]; - } + if (event.KeyInput.Shift) + { + if (MarkBegin == MarkEnd) + newMarkBegin = CursorPos; - if (event.KeyInput.Shift) - { - if (MarkBegin == MarkEnd) - newMarkBegin = CursorPos; - newMarkEnd = p; - } - else - { - newMarkBegin = 0; - newMarkEnd = 0; - } - CursorPos = p; - BlinkStartTime = getTime(); - } - break; - case KEY_RETURN: - if (MultiLine) - { - inputChar(L'\n'); - return true; - } - else - { - sendGuiEvent( EGET_EDITBOX_ENTER ); - } - break; - case KEY_LEFT: + newMarkEnd = p; + } + else + { + newMarkBegin = 0; + newMarkEnd = 0; + } + CursorPos = p; + BlinkStartTime = getTime(); + } + break; + case KEY_HOME: + if (!m_rtl) + { + + s32 p = 0; + if (WordWrap || MultiLine) + { + p = getLineFromPos(CursorPos); + p = BrokenTextPositions[p]; + } + + if (event.KeyInput.Shift) + { + if (MarkBegin == MarkEnd) + newMarkBegin = CursorPos; + newMarkEnd = p; + } + else + { + newMarkBegin = 0; + newMarkEnd = 0; + } + CursorPos = p; + BlinkStartTime = getTime(); + } + break; + case KEY_RETURN: + if (MultiLine) + { + inputChar(L'\n'); + return true; + } + else + { + sendGuiEvent( EGET_EDITBOX_ENTER ); + } + break; + case KEY_LEFT: if (!m_rtl) { if (event.KeyInput.Shift) @@ -520,9 +520,9 @@ bool CGUIEditBox::processKey(const SEvent& event) if (CursorPos > 0) CursorPos--; BlinkStartTime = getTime(); } - break; + break; - case KEY_RIGHT: + case KEY_RIGHT: if (!m_rtl) { if (event.KeyInput.Shift) @@ -544,309 +544,309 @@ bool CGUIEditBox::processKey(const SEvent& event) if (Text.size() > (u32)CursorPos) CursorPos++; BlinkStartTime = getTime(); } - break; - case KEY_UP: - if (MultiLine || (WordWrap && BrokenText.size() > 1) ) - { - s32 lineNo = getLineFromPos(CursorPos); - s32 mb = (MarkBegin == MarkEnd) ? CursorPos : (MarkBegin > MarkEnd ? MarkBegin : MarkEnd); - if (lineNo > 0) - { - s32 cp = CursorPos - BrokenTextPositions[lineNo]; - if ((s32)BrokenText[lineNo-1].size() < cp) - CursorPos = BrokenTextPositions[lineNo-1] + (s32)BrokenText[lineNo-1].size()-1; - else - CursorPos = BrokenTextPositions[lineNo-1] + cp; - } + break; + case KEY_UP: + if (MultiLine || (WordWrap && BrokenText.size() > 1) ) + { + s32 lineNo = getLineFromPos(CursorPos); + s32 mb = (MarkBegin == MarkEnd) ? CursorPos : (MarkBegin > MarkEnd ? MarkBegin : MarkEnd); + if (lineNo > 0) + { + s32 cp = CursorPos - BrokenTextPositions[lineNo]; + if ((s32)BrokenText[lineNo-1].size() < cp) + CursorPos = BrokenTextPositions[lineNo-1] + (s32)BrokenText[lineNo-1].size()-1; + else + CursorPos = BrokenTextPositions[lineNo-1] + cp; + } - if (event.KeyInput.Shift) - { - newMarkBegin = mb; - newMarkEnd = CursorPos; - } - else - { - newMarkBegin = 0; - newMarkEnd = 0; - } + if (event.KeyInput.Shift) + { + newMarkBegin = mb; + newMarkEnd = CursorPos; + } + else + { + newMarkBegin = 0; + newMarkEnd = 0; + } - } - else - { - return false; - } - break; - case KEY_DOWN: - if (MultiLine || (WordWrap && BrokenText.size() > 1) ) - { - s32 lineNo = getLineFromPos(CursorPos); - s32 mb = (MarkBegin == MarkEnd) ? CursorPos : (MarkBegin < MarkEnd ? MarkBegin : MarkEnd); - if (lineNo < (s32)BrokenText.size()-1) - { - s32 cp = CursorPos - BrokenTextPositions[lineNo]; - if ((s32)BrokenText[lineNo+1].size() < cp) - CursorPos = BrokenTextPositions[lineNo+1] + BrokenText[lineNo+1].size()-1; - else - CursorPos = BrokenTextPositions[lineNo+1] + cp; - } + } + else + { + return false; + } + break; + case KEY_DOWN: + if (MultiLine || (WordWrap && BrokenText.size() > 1) ) + { + s32 lineNo = getLineFromPos(CursorPos); + s32 mb = (MarkBegin == MarkEnd) ? CursorPos : (MarkBegin < MarkEnd ? MarkBegin : MarkEnd); + if (lineNo < (s32)BrokenText.size()-1) + { + s32 cp = CursorPos - BrokenTextPositions[lineNo]; + if ((s32)BrokenText[lineNo+1].size() < cp) + CursorPos = BrokenTextPositions[lineNo+1] + BrokenText[lineNo+1].size()-1; + else + CursorPos = BrokenTextPositions[lineNo+1] + cp; + } - if (event.KeyInput.Shift) - { - newMarkBegin = mb; - newMarkEnd = CursorPos; - } - else - { - newMarkBegin = 0; - newMarkEnd = 0; - } + if (event.KeyInput.Shift) + { + newMarkBegin = mb; + newMarkEnd = CursorPos; + } + else + { + newMarkBegin = 0; + newMarkEnd = 0; + } - } - else - { - return false; - } - break; + } + else + { + return false; + } + break; - case KEY_BACK: - if ( !isEnabled() ) - break; + case KEY_BACK: + if ( !isEnabled() ) + break; - if (Text.size()) - { - core::stringw s; + if (Text.size()) + { + core::stringw s; - if (MarkBegin != MarkEnd) - { - // delete marked text - const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; - const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; + if (MarkBegin != MarkEnd) + { + // delete marked text + const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; + const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; - s = Text.subString(0, realmbgn); - s.append( Text.subString(realmend, Text.size()-realmend) ); - Text = s; + s = Text.subString(0, realmbgn); + s.append( Text.subString(realmend, Text.size()-realmend) ); + Text = s; - CursorPos = realmbgn; - } - else - { - // delete text behind cursor - if (CursorPos>0) - s = Text.subString(0, CursorPos-1); - else - s = L""; - s.append( Text.subString(CursorPos, Text.size()-CursorPos) ); - Text = s; - --CursorPos; - } + CursorPos = realmbgn; + } + else + { + // delete text behind cursor + if (CursorPos>0) + s = Text.subString(0, CursorPos-1); + else + s = L""; + s.append( Text.subString(CursorPos, Text.size()-CursorPos) ); + Text = s; + --CursorPos; + } - if (CursorPos < 0) - CursorPos = 0; - BlinkStartTime = getTime(); - newMarkBegin = 0; - newMarkEnd = 0; - textChanged = true; - } - break; - case KEY_DELETE: - if ( !isEnabled() ) - break; + if (CursorPos < 0) + CursorPos = 0; + BlinkStartTime = getTime(); + newMarkBegin = 0; + newMarkEnd = 0; + textChanged = true; + } + break; + case KEY_DELETE: + if ( !isEnabled() ) + break; - if (Text.size() != 0) - { - core::stringw s; + if (Text.size() != 0) + { + core::stringw s; - if (MarkBegin != MarkEnd) - { - // delete marked text - const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; - const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; + if (MarkBegin != MarkEnd) + { + // delete marked text + const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; + const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; - s = Text.subString(0, realmbgn); - s.append( Text.subString(realmend, Text.size()-realmend) ); - Text = s; + s = Text.subString(0, realmbgn); + s.append( Text.subString(realmend, Text.size()-realmend) ); + Text = s; - CursorPos = realmbgn; - } - else - { - // delete text before cursor - s = Text.subString(0, CursorPos); - s.append( Text.subString(CursorPos+1, Text.size()-CursorPos-1) ); - Text = s; - } + CursorPos = realmbgn; + } + else + { + // delete text before cursor + s = Text.subString(0, CursorPos); + s.append( Text.subString(CursorPos+1, Text.size()-CursorPos-1) ); + Text = s; + } - if (CursorPos > (s32)Text.size()) - CursorPos = (s32)Text.size(); + if (CursorPos > (s32)Text.size()) + CursorPos = (s32)Text.size(); - BlinkStartTime = getTime(); - newMarkBegin = 0; - newMarkEnd = 0; - textChanged = true; - } - break; + BlinkStartTime = getTime(); + newMarkBegin = 0; + newMarkEnd = 0; + textChanged = true; + } + break; - case KEY_ESCAPE: - case KEY_TAB: - case KEY_SHIFT: - case KEY_F1: - case KEY_F2: - case KEY_F3: - case KEY_F4: - case KEY_F5: - case KEY_F6: - case KEY_F7: - case KEY_F8: - case KEY_F9: - case KEY_F10: - case KEY_F11: - case KEY_F12: - case KEY_F13: - case KEY_F14: - case KEY_F15: - case KEY_F16: - case KEY_F17: - case KEY_F18: - case KEY_F19: - case KEY_F20: - case KEY_F21: - case KEY_F22: - case KEY_F23: - case KEY_F24: - // ignore these keys - return false; + case KEY_ESCAPE: + case KEY_TAB: + case KEY_SHIFT: + case KEY_F1: + case KEY_F2: + case KEY_F3: + case KEY_F4: + case KEY_F5: + case KEY_F6: + case KEY_F7: + case KEY_F8: + case KEY_F9: + case KEY_F10: + case KEY_F11: + case KEY_F12: + case KEY_F13: + case KEY_F14: + case KEY_F15: + case KEY_F16: + case KEY_F17: + case KEY_F18: + case KEY_F19: + case KEY_F20: + case KEY_F21: + case KEY_F22: + case KEY_F23: + case KEY_F24: + // ignore these keys + return false; - default: - inputChar(event.KeyInput.Char); - return true; - } + default: + inputChar(event.KeyInput.Char); + return true; + } // Set new text markers setTextMarkers( newMarkBegin, newMarkEnd ); - // break the text if it has changed - if (textChanged) - { - breakText(); - sendGuiEvent(EGET_EDITBOX_CHANGED); - } + // break the text if it has changed + if (textChanged) + { + breakText(); + sendGuiEvent(EGET_EDITBOX_CHANGED); + } - calculateScrollPos(); + calculateScrollPos(); - return true; + return true; } //! draws the element and its children void CGUIEditBox::draw() { - if (!IsVisible) - return; + if (!IsVisible) + return; - const bool focus = Environment->hasFocus(this); + const bool focus = Environment->hasFocus(this); - IGUISkin* skin = Environment->getSkin(); - if (!skin) - return; + IGUISkin* skin = Environment->getSkin(); + if (!skin) + return; - FrameRect = AbsoluteRect; + FrameRect = AbsoluteRect; - // draw the border + // draw the border - if (Border) - { - EGUI_DEFAULT_COLOR col = EGDC_GRAY_EDITABLE; - if ( isEnabled() ) - col = focus ? EGDC_FOCUSED_EDITABLE : EGDC_EDITABLE; - skin->draw3DSunkenPane(this, skin->getColor(col), - false, true, FrameRect, &AbsoluteClippingRect); + if (Border) + { + EGUI_DEFAULT_COLOR col = EGDC_GRAY_EDITABLE; + if ( isEnabled() ) + col = focus ? EGDC_FOCUSED_EDITABLE : EGDC_EDITABLE; + skin->draw3DSunkenPane(this, skin->getColor(col), + false, true, FrameRect, &AbsoluteClippingRect); - FrameRect.UpperLeftCorner.X += skin->getSize(EGDS_TEXT_DISTANCE_X)+1; - FrameRect.UpperLeftCorner.Y += skin->getSize(EGDS_TEXT_DISTANCE_Y)+1; - FrameRect.LowerRightCorner.X -= skin->getSize(EGDS_TEXT_DISTANCE_X)+1; - FrameRect.LowerRightCorner.Y -= skin->getSize(EGDS_TEXT_DISTANCE_Y)+1; - } - core::rect localClipRect = FrameRect; - localClipRect.clipAgainst(AbsoluteClippingRect); + FrameRect.UpperLeftCorner.X += skin->getSize(EGDS_TEXT_DISTANCE_X)+1; + FrameRect.UpperLeftCorner.Y += skin->getSize(EGDS_TEXT_DISTANCE_Y)+1; + FrameRect.LowerRightCorner.X -= skin->getSize(EGDS_TEXT_DISTANCE_X)+1; + FrameRect.LowerRightCorner.Y -= skin->getSize(EGDS_TEXT_DISTANCE_Y)+1; + } + core::rect localClipRect = FrameRect; + localClipRect.clipAgainst(AbsoluteClippingRect); - // draw the text + // draw the text - IGUIFont* font = OverrideFont; - if (!OverrideFont) - font = skin->getFont(); + IGUIFont* font = OverrideFont; + if (!OverrideFont) + font = skin->getFont(); - s32 cursorLine = 0; - s32 charcursorpos = 0; + s32 cursorLine = 0; + s32 charcursorpos = 0; - if (font) - { - if (LastBreakFont != font) - { - breakText(); - } + if (font) + { + if (LastBreakFont != font) + { + breakText(); + } - // calculate cursor pos + // calculate cursor pos - core::stringw *txtLine = &Text; - s32 startPos = 0; + core::stringw *txtLine = &Text; + s32 startPos = 0; - core::stringw s, s2; + core::stringw s, s2; - // get mark position - const bool ml = (!PasswordBox && (WordWrap || MultiLine)); - const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; - const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; - const s32 hlineStart = ml ? getLineFromPos(realmbgn) : 0; - const s32 hlineCount = ml ? getLineFromPos(realmend) - hlineStart + 1 : 1; - const s32 lineCount = ml ? BrokenText.size() : 1; + // get mark position + const bool ml = (!PasswordBox && (WordWrap || MultiLine)); + const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; + const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; + const s32 hlineStart = ml ? getLineFromPos(realmbgn) : 0; + const s32 hlineCount = ml ? getLineFromPos(realmend) - hlineStart + 1 : 1; + const s32 lineCount = ml ? BrokenText.size() : 1; - // Save the override color information. - // Then, alter it if the edit box is disabled. - const bool prevOver = OverrideColorEnabled; - const video::SColor prevColor = OverrideColor; + // Save the override color information. + // Then, alter it if the edit box is disabled. + const bool prevOver = OverrideColorEnabled; + const video::SColor prevColor = OverrideColor; - if (Text.size()) - { - if (!isEnabled() && !OverrideColorEnabled) - { - OverrideColorEnabled = true; - OverrideColor = skin->getColor(EGDC_GRAY_TEXT); - } + if (Text.size()) + { + if (!isEnabled() && !OverrideColorEnabled) + { + OverrideColorEnabled = true; + OverrideColor = skin->getColor(EGDC_GRAY_TEXT); + } - for (s32 i=0; i < lineCount; ++i) - { - setTextRect(i); + for (s32 i=0; i < lineCount; ++i) + { + setTextRect(i); - // clipping test - don't draw anything outside the visible area - core::rect c = localClipRect; - c.clipAgainst(CurrentTextRect); - if (!c.isValid()) - continue; + // clipping test - don't draw anything outside the visible area + core::rect c = localClipRect; + c.clipAgainst(CurrentTextRect); + if (!c.isValid()) + continue; - // get current line - if (PasswordBox) - { - if (BrokenText.size() != 1) - { - BrokenText.clear(); - BrokenText.push_back(core::stringw()); - } - if (BrokenText[0].size() != Text.size()) - { - BrokenText[0] = Text; - for (u32 q = 0; q < Text.size(); ++q) - { - BrokenText[0] [q] = PasswordChar; - } - } - txtLine = &BrokenText[0]; - startPos = 0; - } - else - { - txtLine = ml ? &BrokenText[i] : &Text; - startPos = ml ? BrokenTextPositions[i] : 0; - } + // get current line + if (PasswordBox) + { + if (BrokenText.size() != 1) + { + BrokenText.clear(); + BrokenText.push_back(core::stringw()); + } + if (BrokenText[0].size() != Text.size()) + { + BrokenText[0] = Text; + for (u32 q = 0; q < Text.size(); ++q) + { + BrokenText[0] [q] = PasswordChar; + } + } + txtLine = &BrokenText[0]; + startPos = 0; + } + else + { + txtLine = ml ? &BrokenText[i] : &Text; + startPos = ml ? BrokenTextPositions[i] : 0; + } if (m_rtl) @@ -863,74 +863,74 @@ void CGUIEditBox::draw() false, true, &localClipRect); } - // draw mark and marked text - if (focus && MarkBegin != MarkEnd && i >= hlineStart && i < hlineStart + hlineCount) - { + // draw mark and marked text + if (focus && MarkBegin != MarkEnd && i >= hlineStart && i < hlineStart + hlineCount) + { - s32 mbegin = 0, mend = 0; - s32 lineStartPos = 0, lineEndPos = txtLine->size(); + s32 mbegin = 0, mend = 0; + s32 lineStartPos = 0, lineEndPos = txtLine->size(); - if (i == hlineStart) - { - // highlight start is on this line - s = txtLine->subString(0, realmbgn - startPos); - mbegin = font->getDimension(s.c_str()).Width; + if (i == hlineStart) + { + // highlight start is on this line + s = txtLine->subString(0, realmbgn - startPos); + mbegin = font->getDimension(s.c_str()).Width; - // deal with kerning - mbegin += font->getKerningWidth( - &((*txtLine)[realmbgn - startPos]), - realmbgn - startPos > 0 ? &((*txtLine)[realmbgn - startPos - 1]) : 0); + // deal with kerning + mbegin += font->getKerningWidth( + &((*txtLine)[realmbgn - startPos]), + realmbgn - startPos > 0 ? &((*txtLine)[realmbgn - startPos - 1]) : 0); - lineStartPos = realmbgn - startPos; - } - if (i == hlineStart + hlineCount - 1) - { - // highlight end is on this line - s2 = txtLine->subString(0, realmend - startPos); - mend = font->getDimension(s2.c_str()).Width; - lineEndPos = (s32)s2.size(); - } - else - mend = font->getDimension(txtLine->c_str()).Width; + lineStartPos = realmbgn - startPos; + } + if (i == hlineStart + hlineCount - 1) + { + // highlight end is on this line + s2 = txtLine->subString(0, realmend - startPos); + mend = font->getDimension(s2.c_str()).Width; + lineEndPos = (s32)s2.size(); + } + else + mend = font->getDimension(txtLine->c_str()).Width; - CurrentTextRect.UpperLeftCorner.X += mbegin; - CurrentTextRect.LowerRightCorner.X = CurrentTextRect.UpperLeftCorner.X + mend - mbegin; + CurrentTextRect.UpperLeftCorner.X += mbegin; + CurrentTextRect.LowerRightCorner.X = CurrentTextRect.UpperLeftCorner.X + mend - mbegin; - // draw mark - skin->draw2DRectangle(this, skin->getColor(EGDC_HIGH_LIGHT), CurrentTextRect, &localClipRect); + // draw mark + skin->draw2DRectangle(this, skin->getColor(EGDC_HIGH_LIGHT), CurrentTextRect, &localClipRect); - // draw marked text - s = txtLine->subString(lineStartPos, lineEndPos - lineStartPos); + // draw marked text + s = txtLine->subString(lineStartPos, lineEndPos - lineStartPos); - if (s.size()) - font->draw(s.c_str(), CurrentTextRect, - OverrideColorEnabled ? OverrideColor : skin->getColor(EGDC_HIGH_LIGHT_TEXT), - false, true, &localClipRect); + if (s.size()) + font->draw(s.c_str(), CurrentTextRect, + OverrideColorEnabled ? OverrideColor : skin->getColor(EGDC_HIGH_LIGHT_TEXT), + false, true, &localClipRect); - } - } + } + } - // Return the override color information to its previous settings. - OverrideColorEnabled = prevOver; - OverrideColor = prevColor; - } + // Return the override color information to its previous settings. + OverrideColorEnabled = prevOver; + OverrideColor = prevColor; + } - // draw cursor + // draw cursor - if (WordWrap || MultiLine) - { - cursorLine = getLineFromPos(CursorPos); - txtLine = &BrokenText[cursorLine]; - startPos = BrokenTextPositions[cursorLine]; - } - s = txtLine->subString(0,CursorPos-startPos); - charcursorpos = font->getDimension(s.c_str()).Width ; + if (WordWrap || MultiLine) + { + cursorLine = getLineFromPos(CursorPos); + txtLine = &BrokenText[cursorLine]; + startPos = BrokenTextPositions[cursorLine]; + } + s = txtLine->subString(0,CursorPos-startPos); + charcursorpos = font->getDimension(s.c_str()).Width ; // + font->getKerningWidth(L"_", CursorPos-startPos > 0 ? &((*txtLine)[CursorPos-startPos-1]) : 0); - if (focus && (getTime() - BlinkStartTime) % 2 == 0 && !m_rtl) - { - //setTextRect(cursorLine); - //CurrentTextRect.UpperLeftCorner.X += charcursorpos; + if (focus && (getTime() - BlinkStartTime) % 2 == 0 && !m_rtl) + { + //setTextRect(cursorLine); + //CurrentTextRect.UpperLeftCorner.X += charcursorpos; setTextRect(0); @@ -940,26 +940,26 @@ void CGUIEditBox::draw() irr_driver->getVideoDriver()->draw2DRectangle( video::SColor(255,0,0,0), caret_rect ); /* - font->draw(L"_", CurrentTextRect, - OverrideColorEnabled ? OverrideColor : skin->getColor(EGDC_BUTTON_TEXT), - false, true, &localClipRect); + font->draw(L"_", CurrentTextRect, + OverrideColorEnabled ? OverrideColor : skin->getColor(EGDC_BUTTON_TEXT), + false, true, &localClipRect); */ - } - } + } + } - // draw children - IGUIElement::draw(); + // draw children + IGUIElement::draw(); } //! Sets the new caption of this element. void CGUIEditBox::setText(const wchar_t* text) { - Text = text; - if (u32(CursorPos) > Text.size()) - CursorPos = Text.size(); - HScrollPos = 0; - breakText(); + Text = text; + if (u32(CursorPos) > Text.size()) + CursorPos = Text.size(); + HScrollPos = 0; + breakText(); } @@ -967,7 +967,7 @@ void CGUIEditBox::setText(const wchar_t* text) //! \param enable: If set to true, the text will move around with the cursor position void CGUIEditBox::setAutoScroll(bool enable) { - AutoScroll = enable; + AutoScroll = enable; } @@ -975,8 +975,8 @@ void CGUIEditBox::setAutoScroll(bool enable) //! \return true if automatic scrolling is enabled, false if not bool CGUIEditBox::isAutoScrollEnabled() const { - _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; - return AutoScroll; + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return AutoScroll; } @@ -984,19 +984,19 @@ bool CGUIEditBox::isAutoScrollEnabled() const //! \return Returns the size in pixels of the text core::dimension2du CGUIEditBox::getTextDimension() { - core::rect ret; + core::rect ret; - setTextRect(0); - ret = CurrentTextRect; + setTextRect(0); + ret = CurrentTextRect; - for (u32 i=1; i < BrokenText.size(); ++i) - { - setTextRect(i); - ret.addInternalPoint(CurrentTextRect.UpperLeftCorner); - ret.addInternalPoint(CurrentTextRect.LowerRightCorner); - } + for (u32 i=1; i < BrokenText.size(); ++i) + { + setTextRect(i); + ret.addInternalPoint(CurrentTextRect.UpperLeftCorner); + ret.addInternalPoint(CurrentTextRect.LowerRightCorner); + } - return core::dimension2du(ret.getSize()); + return core::dimension2du(ret.getSize()); } @@ -1005,428 +1005,428 @@ core::dimension2du CGUIEditBox::getTextDimension() //! infinity. void CGUIEditBox::setMax(u32 max) { - Max = max; + Max = max; - if (Text.size() > Max && Max != 0) - Text = Text.subString(0, Max); + if (Text.size() > Max && Max != 0) + Text = Text.subString(0, Max); } //! Returns maximum amount of characters, previously set by setMax(); u32 CGUIEditBox::getMax() const { - return Max; + return Max; } bool CGUIEditBox::processMouse(const SEvent& event) { - switch(event.MouseInput.Event) - { - case irr::EMIE_LMOUSE_LEFT_UP: - if (Environment->hasFocus(this) && !m_rtl) - { - CursorPos = getCursorPos(event.MouseInput.X, event.MouseInput.Y); - if (MouseMarking) - { - setTextMarkers( MarkBegin, CursorPos ); - } - MouseMarking = false; - calculateScrollPos(); - return true; - } - break; - case irr::EMIE_MOUSE_MOVED: - { - if (MouseMarking) - { - CursorPos = getCursorPos(event.MouseInput.X, event.MouseInput.Y); - setTextMarkers( MarkBegin, CursorPos ); - calculateScrollPos(); - return true; - } - } - break; - case EMIE_LMOUSE_PRESSED_DOWN: - if (!Environment->hasFocus(this)) - { - BlinkStartTime = getTime(); - MouseMarking = true; - CursorPos = getCursorPos(event.MouseInput.X, event.MouseInput.Y); - setTextMarkers(CursorPos, CursorPos ); - calculateScrollPos(); - return true; - } - else if (!m_rtl) - { - if (!AbsoluteClippingRect.isPointInside( - core::position2d(event.MouseInput.X, event.MouseInput.Y))) - { - return false; - } - else - { - // move cursor - CursorPos = getCursorPos(event.MouseInput.X, event.MouseInput.Y); + switch(event.MouseInput.Event) + { + case irr::EMIE_LMOUSE_LEFT_UP: + if (Environment->hasFocus(this) && !m_rtl) + { + CursorPos = getCursorPos(event.MouseInput.X, event.MouseInput.Y); + if (MouseMarking) + { + setTextMarkers( MarkBegin, CursorPos ); + } + MouseMarking = false; + calculateScrollPos(); + return true; + } + break; + case irr::EMIE_MOUSE_MOVED: + { + if (MouseMarking) + { + CursorPos = getCursorPos(event.MouseInput.X, event.MouseInput.Y); + setTextMarkers( MarkBegin, CursorPos ); + calculateScrollPos(); + return true; + } + } + break; + case EMIE_LMOUSE_PRESSED_DOWN: + if (!Environment->hasFocus(this)) + { + BlinkStartTime = getTime(); + MouseMarking = true; + CursorPos = getCursorPos(event.MouseInput.X, event.MouseInput.Y); + setTextMarkers(CursorPos, CursorPos ); + calculateScrollPos(); + return true; + } + else if (!m_rtl) + { + if (!AbsoluteClippingRect.isPointInside( + core::position2d(event.MouseInput.X, event.MouseInput.Y))) + { + return false; + } + else + { + // move cursor + CursorPos = getCursorPos(event.MouseInput.X, event.MouseInput.Y); s32 newMarkBegin = MarkBegin; - if (!MouseMarking) - newMarkBegin = CursorPos; + if (!MouseMarking) + newMarkBegin = CursorPos; - MouseMarking = true; - setTextMarkers( newMarkBegin, CursorPos); - calculateScrollPos(); - return true; - } - } - default: - break; - } + MouseMarking = true; + setTextMarkers( newMarkBegin, CursorPos); + calculateScrollPos(); + return true; + } + } + default: + break; + } - return false; + return false; } s32 CGUIEditBox::getCursorPos(s32 x, s32 y) { - IGUIFont* font = OverrideFont; - IGUISkin* skin = Environment->getSkin(); - if (!OverrideFont) - font = skin->getFont(); + IGUIFont* font = OverrideFont; + IGUISkin* skin = Environment->getSkin(); + if (!OverrideFont) + font = skin->getFont(); - const u32 lineCount = (WordWrap || MultiLine) ? BrokenText.size() : 1; + const u32 lineCount = (WordWrap || MultiLine) ? BrokenText.size() : 1; - core::stringw *txtLine=0; - s32 startPos=0; - x+=3; + core::stringw *txtLine=0; + s32 startPos=0; + x+=3; - for (u32 i=0; i < lineCount; ++i) - { - setTextRect(i); - if (i == 0 && y < CurrentTextRect.UpperLeftCorner.Y) - y = CurrentTextRect.UpperLeftCorner.Y; - if (i == lineCount - 1 && y > CurrentTextRect.LowerRightCorner.Y ) - y = CurrentTextRect.LowerRightCorner.Y; + for (u32 i=0; i < lineCount; ++i) + { + setTextRect(i); + if (i == 0 && y < CurrentTextRect.UpperLeftCorner.Y) + y = CurrentTextRect.UpperLeftCorner.Y; + if (i == lineCount - 1 && y > CurrentTextRect.LowerRightCorner.Y ) + y = CurrentTextRect.LowerRightCorner.Y; - // is it inside this region? - if (y >= CurrentTextRect.UpperLeftCorner.Y && y <= CurrentTextRect.LowerRightCorner.Y) - { - // we've found the clicked line - txtLine = (WordWrap || MultiLine) ? &BrokenText[i] : &Text; - startPos = (WordWrap || MultiLine) ? BrokenTextPositions[i] : 0; - break; - } - } + // is it inside this region? + if (y >= CurrentTextRect.UpperLeftCorner.Y && y <= CurrentTextRect.LowerRightCorner.Y) + { + // we've found the clicked line + txtLine = (WordWrap || MultiLine) ? &BrokenText[i] : &Text; + startPos = (WordWrap || MultiLine) ? BrokenTextPositions[i] : 0; + break; + } + } - if (x < CurrentTextRect.UpperLeftCorner.X) - x = CurrentTextRect.UpperLeftCorner.X; + if (x < CurrentTextRect.UpperLeftCorner.X) + x = CurrentTextRect.UpperLeftCorner.X; - s32 idx = txtLine ? font->getCharacterFromPos(txtLine->c_str(), x - CurrentTextRect.UpperLeftCorner.X) : -1; + s32 idx = txtLine ? font->getCharacterFromPos(txtLine->c_str(), x - CurrentTextRect.UpperLeftCorner.X) : -1; - // click was on or left of the line - if (idx != -1) - return idx + startPos; + // click was on or left of the line + if (idx != -1) + return idx + startPos; - // click was off the right edge of the line, go to end. - return txtLine->size() + startPos; + // click was off the right edge of the line, go to end. + return txtLine->size() + startPos; } //! Breaks the single text line. void CGUIEditBox::breakText() { - IGUISkin* skin = Environment->getSkin(); + IGUISkin* skin = Environment->getSkin(); - if ((!WordWrap && !MultiLine) || !skin) - return; + if ((!WordWrap && !MultiLine) || !skin) + return; - BrokenText.clear(); // need to reallocate :/ - BrokenTextPositions.set_used(0); + BrokenText.clear(); // need to reallocate :/ + BrokenTextPositions.set_used(0); - IGUIFont* font = OverrideFont; - if (!OverrideFont) - font = skin->getFont(); + IGUIFont* font = OverrideFont; + if (!OverrideFont) + font = skin->getFont(); - if (!font) - return; + if (!font) + return; - LastBreakFont = font; + LastBreakFont = font; - core::stringw line; - core::stringw word; - core::stringw whitespace; - s32 lastLineStart = 0; - s32 size = Text.size(); - s32 length = 0; - s32 elWidth = RelativeRect.getWidth() - 6; - wchar_t c; + core::stringw line; + core::stringw word; + core::stringw whitespace; + s32 lastLineStart = 0; + s32 size = Text.size(); + s32 length = 0; + s32 elWidth = RelativeRect.getWidth() - 6; + wchar_t c; - for (s32 i=0; igetDimension(whitespace.c_str()).Width; - s32 worldlgth = font->getDimension(word.c_str()).Width; + if (c == L' ' || c == 0 || i == (size-1)) + { + if (word.size()) + { + // here comes the next whitespace, look if + // we can break the last word to the next line. + s32 whitelgth = font->getDimension(whitespace.c_str()).Width; + s32 worldlgth = font->getDimension(word.c_str()).Width; - if (WordWrap && length + worldlgth + whitelgth > elWidth) - { - // break to next line - length = worldlgth; - BrokenText.push_back(line); - BrokenTextPositions.push_back(lastLineStart); - lastLineStart = i - (s32)word.size(); - line = word; - } - else - { - // add word to line - line += whitespace; - line += word; - length += whitelgth + worldlgth; - } + if (WordWrap && length + worldlgth + whitelgth > elWidth) + { + // break to next line + length = worldlgth; + BrokenText.push_back(line); + BrokenTextPositions.push_back(lastLineStart); + lastLineStart = i - (s32)word.size(); + line = word; + } + else + { + // add word to line + line += whitespace; + line += word; + length += whitelgth + worldlgth; + } - word = L""; - whitespace = L""; - } + word = L""; + whitespace = L""; + } - whitespace += c; + whitespace += c; - // compute line break - if (lineBreak) - { - line += whitespace; - line += word; - BrokenText.push_back(line); - BrokenTextPositions.push_back(lastLineStart); - lastLineStart = i+1; - line = L""; - word = L""; - whitespace = L""; - length = 0; - } - } - else - { - // yippee this is a word.. - word += c; - } - } + // compute line break + if (lineBreak) + { + line += whitespace; + line += word; + BrokenText.push_back(line); + BrokenTextPositions.push_back(lastLineStart); + lastLineStart = i+1; + line = L""; + word = L""; + whitespace = L""; + length = 0; + } + } + else + { + // yippee this is a word.. + word += c; + } + } - line += whitespace; - line += word; - BrokenText.push_back(line); - BrokenTextPositions.push_back(lastLineStart); + line += whitespace; + line += word; + BrokenText.push_back(line); + BrokenTextPositions.push_back(lastLineStart); } void CGUIEditBox::setTextRect(s32 line) { - core::dimension2du d; + core::dimension2du d; - IGUISkin* skin = Environment->getSkin(); - if (!skin) - return; + IGUISkin* skin = Environment->getSkin(); + if (!skin) + return; - IGUIFont* font = OverrideFont ? OverrideFont : skin->getFont(); + IGUIFont* font = OverrideFont ? OverrideFont : skin->getFont(); - if (!font) - return; + if (!font) + return; - // get text dimension - const u32 lineCount = (WordWrap || MultiLine) ? BrokenText.size() : 1; - if (WordWrap || MultiLine) - { - d = font->getDimension(BrokenText[line].c_str()); - } - else - { - d = font->getDimension(Text.c_str()); - d.Height = AbsoluteRect.getHeight(); - } - d.Height += font->getKerningHeight(); + // get text dimension + const u32 lineCount = (WordWrap || MultiLine) ? BrokenText.size() : 1; + if (WordWrap || MultiLine) + { + d = font->getDimension(BrokenText[line].c_str()); + } + else + { + d = font->getDimension(Text.c_str()); + d.Height = AbsoluteRect.getHeight(); + } + d.Height += font->getKerningHeight(); - // justification - switch (HAlign) - { - case EGUIA_CENTER: - // align to h centre - CurrentTextRect.UpperLeftCorner.X = (FrameRect.getWidth()/2) - (d.Width/2); - CurrentTextRect.LowerRightCorner.X = (FrameRect.getWidth()/2) + (d.Width/2); - break; - case EGUIA_LOWERRIGHT: - // align to right edge - CurrentTextRect.UpperLeftCorner.X = FrameRect.getWidth() - d.Width; - CurrentTextRect.LowerRightCorner.X = FrameRect.getWidth(); - break; - default: - // align to left edge - CurrentTextRect.UpperLeftCorner.X = 0; - CurrentTextRect.LowerRightCorner.X = d.Width; + // justification + switch (HAlign) + { + case EGUIA_CENTER: + // align to h centre + CurrentTextRect.UpperLeftCorner.X = (FrameRect.getWidth()/2) - (d.Width/2); + CurrentTextRect.LowerRightCorner.X = (FrameRect.getWidth()/2) + (d.Width/2); + break; + case EGUIA_LOWERRIGHT: + // align to right edge + CurrentTextRect.UpperLeftCorner.X = FrameRect.getWidth() - d.Width; + CurrentTextRect.LowerRightCorner.X = FrameRect.getWidth(); + break; + default: + // align to left edge + CurrentTextRect.UpperLeftCorner.X = 0; + CurrentTextRect.LowerRightCorner.X = d.Width; - } + } - switch (VAlign) - { - case EGUIA_CENTER: - // align to v centre - CurrentTextRect.UpperLeftCorner.Y = - (FrameRect.getHeight()/2) - (lineCount*d.Height)/2 + d.Height*line; - break; - case EGUIA_LOWERRIGHT: - // align to bottom edge - CurrentTextRect.UpperLeftCorner.Y = - FrameRect.getHeight() - lineCount*d.Height + d.Height*line; - break; - default: - // align to top edge - CurrentTextRect.UpperLeftCorner.Y = d.Height*line; - break; - } + switch (VAlign) + { + case EGUIA_CENTER: + // align to v centre + CurrentTextRect.UpperLeftCorner.Y = + (FrameRect.getHeight()/2) - (lineCount*d.Height)/2 + d.Height*line; + break; + case EGUIA_LOWERRIGHT: + // align to bottom edge + CurrentTextRect.UpperLeftCorner.Y = + FrameRect.getHeight() - lineCount*d.Height + d.Height*line; + break; + default: + // align to top edge + CurrentTextRect.UpperLeftCorner.Y = d.Height*line; + break; + } - CurrentTextRect.UpperLeftCorner.X -= HScrollPos; - CurrentTextRect.LowerRightCorner.X -= HScrollPos; - CurrentTextRect.UpperLeftCorner.Y -= VScrollPos; - CurrentTextRect.LowerRightCorner.Y = CurrentTextRect.UpperLeftCorner.Y + d.Height; + CurrentTextRect.UpperLeftCorner.X -= HScrollPos; + CurrentTextRect.LowerRightCorner.X -= HScrollPos; + CurrentTextRect.UpperLeftCorner.Y -= VScrollPos; + CurrentTextRect.LowerRightCorner.Y = CurrentTextRect.UpperLeftCorner.Y + d.Height; - CurrentTextRect += FrameRect.UpperLeftCorner; + CurrentTextRect += FrameRect.UpperLeftCorner; } s32 CGUIEditBox::getLineFromPos(s32 pos) { - if (!WordWrap && !MultiLine) - return 0; + if (!WordWrap && !MultiLine) + return 0; - s32 i=0; - while (i < (s32)BrokenTextPositions.size()) - { - if (BrokenTextPositions[i] > pos) - return i-1; - ++i; - } - return (s32)BrokenTextPositions.size() - 1; + s32 i=0; + while (i < (s32)BrokenTextPositions.size()) + { + if (BrokenTextPositions[i] > pos) + return i-1; + ++i; + } + return (s32)BrokenTextPositions.size() - 1; } void CGUIEditBox::inputChar(wchar_t c) { - if (!isEnabled()) - return; + if (!isEnabled()) + return; - if (c != 0) - { - if (Text.size() < Max || Max == 0) - { - core::stringw s; + if (c != 0) + { + if (Text.size() < Max || Max == 0) + { + core::stringw s; - if (MarkBegin != MarkEnd) - { - // replace marked text - const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; - const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; + if (MarkBegin != MarkEnd) + { + // replace marked text + const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; + const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; - s = Text.subString(0, realmbgn); - s.append(c); - s.append( Text.subString(realmend, Text.size()-realmend) ); - Text = s; - CursorPos = realmbgn+1; - } - else - { - // add new character - s = Text.subString(0, CursorPos); - s.append(c); - s.append( Text.subString(CursorPos, Text.size()-CursorPos) ); - Text = s; - ++CursorPos; - } + s = Text.subString(0, realmbgn); + s.append(c); + s.append( Text.subString(realmend, Text.size()-realmend) ); + Text = s; + CursorPos = realmbgn+1; + } + else + { + // add new character + s = Text.subString(0, CursorPos); + s.append(c); + s.append( Text.subString(CursorPos, Text.size()-CursorPos) ); + Text = s; + ++CursorPos; + } - BlinkStartTime = getTime(); - setTextMarkers(0, 0); - } - } - breakText(); - sendGuiEvent(EGET_EDITBOX_CHANGED); - calculateScrollPos(); + BlinkStartTime = getTime(); + setTextMarkers(0, 0); + } + } + breakText(); + sendGuiEvent(EGET_EDITBOX_CHANGED); + calculateScrollPos(); } void CGUIEditBox::calculateScrollPos() { - if (!AutoScroll) - return; + if (!AutoScroll) + return; - // calculate horizontal scroll position - s32 cursLine = getLineFromPos(CursorPos); - setTextRect(cursLine); + // calculate horizontal scroll position + s32 cursLine = getLineFromPos(CursorPos); + setTextRect(cursLine); - // don't do horizontal scrolling when wordwrap is enabled. - if (!WordWrap) - { - // get cursor position - IGUISkin* skin = Environment->getSkin(); - if (!skin) - return; - IGUIFont* font = OverrideFont ? OverrideFont : skin->getFont(); - if (!font) - return; + // don't do horizontal scrolling when wordwrap is enabled. + if (!WordWrap) + { + // get cursor position + IGUISkin* skin = Environment->getSkin(); + if (!skin) + return; + IGUIFont* font = OverrideFont ? OverrideFont : skin->getFont(); + if (!font) + return; - core::stringw *txtLine = MultiLine ? &BrokenText[cursLine] : &Text; - s32 cPos = MultiLine ? CursorPos - BrokenTextPositions[cursLine] : CursorPos; + core::stringw *txtLine = MultiLine ? &BrokenText[cursLine] : &Text; + s32 cPos = MultiLine ? CursorPos - BrokenTextPositions[cursLine] : CursorPos; - s32 cStart = CurrentTextRect.UpperLeftCorner.X + HScrollPos + - font->getDimension(txtLine->subString(0, cPos).c_str()).Width; + s32 cStart = CurrentTextRect.UpperLeftCorner.X + HScrollPos + + font->getDimension(txtLine->subString(0, cPos).c_str()).Width; - s32 cEnd = cStart + font->getDimension(L"_ ").Width; + s32 cEnd = cStart + font->getDimension(L"_ ").Width; - if (FrameRect.LowerRightCorner.X < cEnd) - HScrollPos = cEnd - FrameRect.LowerRightCorner.X; - else if (FrameRect.UpperLeftCorner.X > cStart) - HScrollPos = cStart - FrameRect.UpperLeftCorner.X; - else - HScrollPos = 0; + if (FrameRect.LowerRightCorner.X < cEnd) + HScrollPos = cEnd - FrameRect.LowerRightCorner.X; + else if (FrameRect.UpperLeftCorner.X > cStart) + HScrollPos = cStart - FrameRect.UpperLeftCorner.X; + else + HScrollPos = 0; - // todo: adjust scrollbar - } + // todo: adjust scrollbar + } - // vertical scroll position - if (FrameRect.LowerRightCorner.Y < CurrentTextRect.LowerRightCorner.Y + VScrollPos) - VScrollPos = CurrentTextRect.LowerRightCorner.Y - FrameRect.LowerRightCorner.Y + VScrollPos; + // vertical scroll position + if (FrameRect.LowerRightCorner.Y < CurrentTextRect.LowerRightCorner.Y + VScrollPos) + VScrollPos = CurrentTextRect.LowerRightCorner.Y - FrameRect.LowerRightCorner.Y + VScrollPos; - else if (FrameRect.UpperLeftCorner.Y > CurrentTextRect.UpperLeftCorner.Y + VScrollPos) - VScrollPos = CurrentTextRect.UpperLeftCorner.Y - FrameRect.UpperLeftCorner.Y + VScrollPos; - else - VScrollPos = 0; + else if (FrameRect.UpperLeftCorner.Y > CurrentTextRect.UpperLeftCorner.Y + VScrollPos) + VScrollPos = CurrentTextRect.UpperLeftCorner.Y - FrameRect.UpperLeftCorner.Y + VScrollPos; + else + VScrollPos = 0; - // todo: adjust scrollbar + // todo: adjust scrollbar } //! set text markers @@ -1443,8 +1443,8 @@ void CGUIEditBox::setTextMarkers(s32 begin, s32 end) //! send some gui event to parent void CGUIEditBox::sendGuiEvent(EGUI_EVENT_TYPE type) { - if ( Parent ) - { + if ( Parent ) + { SEvent e; e.EventType = EET_GUI_EVENT; e.GUIEvent.Caller = this; @@ -1452,53 +1452,53 @@ void CGUIEditBox::sendGuiEvent(EGUI_EVENT_TYPE type) e.GUIEvent.EventType = type; Parent->OnEvent(e); - } + } } //! Writes attributes of the element. void CGUIEditBox::serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const { - // IGUIEditBox::serializeAttributes(out,options); + // IGUIEditBox::serializeAttributes(out,options); - out->addBool ("OverrideColorEnabled",OverrideColorEnabled ); - out->addColor ("OverrideColor", OverrideColor); - // out->addFont("OverrideFont",OverrideFont); - out->addInt ("MaxChars", Max); - out->addBool ("WordWrap", WordWrap); - out->addBool ("MultiLine", MultiLine); - out->addBool ("AutoScroll", AutoScroll); - out->addBool ("PasswordBox", PasswordBox); - core::stringw ch = L" "; - ch[0] = PasswordChar; - out->addString("PasswordChar", ch.c_str()); - out->addEnum ("HTextAlign", HAlign, GUIAlignmentNames); - out->addEnum ("VTextAlign", VAlign, GUIAlignmentNames); + out->addBool ("OverrideColorEnabled",OverrideColorEnabled ); + out->addColor ("OverrideColor", OverrideColor); + // out->addFont("OverrideFont",OverrideFont); + out->addInt ("MaxChars", Max); + out->addBool ("WordWrap", WordWrap); + out->addBool ("MultiLine", MultiLine); + out->addBool ("AutoScroll", AutoScroll); + out->addBool ("PasswordBox", PasswordBox); + core::stringw ch = L" "; + ch[0] = PasswordChar; + out->addString("PasswordChar", ch.c_str()); + out->addEnum ("HTextAlign", HAlign, GUIAlignmentNames); + out->addEnum ("VTextAlign", VAlign, GUIAlignmentNames); - IGUIEditBox::serializeAttributes(out,options); + IGUIEditBox::serializeAttributes(out,options); } //! Reads attributes of the element void CGUIEditBox::deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0) { - IGUIEditBox::deserializeAttributes(in,options); + IGUIEditBox::deserializeAttributes(in,options); - setOverrideColor(in->getAttributeAsColor("OverrideColor")); - enableOverrideColor(in->getAttributeAsBool("OverrideColorEnabled")); - setMax(in->getAttributeAsInt("MaxChars")); - setWordWrap(in->getAttributeAsBool("WordWrap")); - setMultiLine(in->getAttributeAsBool("MultiLine")); - setAutoScroll(in->getAttributeAsBool("AutoScroll")); - core::stringw ch = in->getAttributeAsStringW("PasswordChar"); + setOverrideColor(in->getAttributeAsColor("OverrideColor")); + enableOverrideColor(in->getAttributeAsBool("OverrideColorEnabled")); + setMax(in->getAttributeAsInt("MaxChars")); + setWordWrap(in->getAttributeAsBool("WordWrap")); + setMultiLine(in->getAttributeAsBool("MultiLine")); + setAutoScroll(in->getAttributeAsBool("AutoScroll")); + core::stringw ch = in->getAttributeAsStringW("PasswordChar"); - if (!ch.size()) - setPasswordBox(in->getAttributeAsBool("PasswordBox")); - else - setPasswordBox(in->getAttributeAsBool("PasswordBox"), ch[0]); + if (!ch.size()) + setPasswordBox(in->getAttributeAsBool("PasswordBox")); + else + setPasswordBox(in->getAttributeAsBool("PasswordBox"), ch[0]); - setTextAlignment( (EGUI_ALIGNMENT) in->getAttributeAsEnumeration("HTextAlign", GUIAlignmentNames), - (EGUI_ALIGNMENT) in->getAttributeAsEnumeration("VTextAlign", GUIAlignmentNames)); + setTextAlignment( (EGUI_ALIGNMENT) in->getAttributeAsEnumeration("HTextAlign", GUIAlignmentNames), + (EGUI_ALIGNMENT) in->getAttributeAsEnumeration("VTextAlign", GUIAlignmentNames)); - // setOverrideFont(in->getAttributeAsFont("OverrideFont")); + // setOverrideFont(in->getAttributeAsFont("OverrideFont")); } diff --git a/src/guiengine/widgets/CGUIEditBox.h b/src/guiengine/widgets/CGUIEditBox.h index c2cf7c5aa..763780c9a 100644 --- a/src/guiengine/widgets/CGUIEditBox.h +++ b/src/guiengine/widgets/CGUIEditBox.h @@ -149,7 +149,7 @@ using namespace gui; gui::IGUIFont *OverrideFont, *LastBreakFont; IOSOperator* Operator; - Time::TimeType BlinkStartTime; + StkTime::TimeType BlinkStartTime; s32 CursorPos; s32 HScrollPos, VScrollPos; // scroll position in characters u32 Max; diff --git a/src/guiengine/widgets/CGUISTKListBox.cpp b/src/guiengine/widgets/CGUISTKListBox.cpp index c23e88475..9c6b597aa 100644 --- a/src/guiengine/widgets/CGUISTKListBox.cpp +++ b/src/guiengine/widgets/CGUISTKListBox.cpp @@ -115,7 +115,7 @@ void CGUISTKListBox::removeItem(u32 id) else if ((u32)Selected > id) { Selected -= 1; - selectTime = (u32)Time::getTimeSinceEpoch(); + selectTime = (u32)StkTime::getTimeSinceEpoch(); } Items.erase(id); @@ -205,7 +205,7 @@ void CGUISTKListBox::setSelected(s32 id) else Selected = id; - selectTime = (u32)Time::getTimeSinceEpoch(); + selectTime = (u32)StkTime::getTimeSinceEpoch(); recalculateScrollPos(); } @@ -397,7 +397,7 @@ bool CGUISTKListBox::OnEvent(const SEvent& event) void CGUISTKListBox::selectNew(s32 ypos, bool onlyHover) { - u32 now = (u32)Time::getTimeSinceEpoch(); + u32 now = (u32)StkTime::getTimeSinceEpoch(); s32 oldSelected = Selected; Selected = getItemAt(AbsoluteRect.UpperLeftCorner.X, ypos); @@ -511,7 +511,7 @@ void CGUISTKListBox::draw() iconPos, &clientClip, hasItemOverrideColor(i, EGUI_LBC_ICON_HIGHLIGHT) ? getItemOverrideColor(i, EGUI_LBC_ICON_HIGHLIGHT) : getItemDefaultColor(EGUI_LBC_ICON_HIGHLIGHT), - selectTime, (u32)Time::getTimeSinceEpoch(), false, true); + selectTime, (u32)StkTime::getTimeSinceEpoch(), false, true); } else { @@ -520,7 +520,7 @@ void CGUISTKListBox::draw() iconPos, &clientClip, hasItemOverrideColor(i, EGUI_LBC_ICON) ? getItemOverrideColor(i, EGUI_LBC_ICON) : getItemDefaultColor(EGUI_LBC_ICON), - 0 , (i==Selected) ? (u32)Time::getTimeSinceEpoch() : 0, false, true); + 0 , (i==Selected) ? (u32)StkTime::getTimeSinceEpoch() : 0, false, true); } textRect.UpperLeftCorner.X += ItemsIconWidth; } diff --git a/src/guiengine/widgets/bubble_widget.cpp b/src/guiengine/widgets/bubble_widget.cpp index a5cc0cfe1..82fd4fbbb 100644 --- a/src/guiengine/widgets/bubble_widget.cpp +++ b/src/guiengine/widgets/bubble_widget.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Marianne Gagnon +// Copyright (C) 2010-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -18,6 +18,7 @@ #include "guiengine/engine.hpp" #include "guiengine/widgets/bubble_widget.hpp" #include "utils/translation.hpp" +#include #include #include diff --git a/src/guiengine/widgets/bubble_widget.hpp b/src/guiengine/widgets/bubble_widget.hpp index f9fc20ad8..ee3f1e92f 100644 --- a/src/guiengine/widgets/bubble_widget.hpp +++ b/src/guiengine/widgets/bubble_widget.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Marianne Gagnon +// Copyright (C) 2010-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/guiengine/widgets/button_widget.cpp b/src/guiengine/widgets/button_widget.cpp index 4ac93deea..feb18af83 100644 --- a/src/guiengine/widgets/button_widget.cpp +++ b/src/guiengine/widgets/button_widget.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/guiengine/widgets/button_widget.hpp b/src/guiengine/widgets/button_widget.hpp index 0dfa20690..98141bdc4 100644 --- a/src/guiengine/widgets/button_widget.hpp +++ b/src/guiengine/widgets/button_widget.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/guiengine/widgets/check_box_widget.cpp b/src/guiengine/widgets/check_box_widget.cpp index ada1ccd8c..35ee7308f 100644 --- a/src/guiengine/widgets/check_box_widget.cpp +++ b/src/guiengine/widgets/check_box_widget.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/guiengine/widgets/check_box_widget.hpp b/src/guiengine/widgets/check_box_widget.hpp index 806ce4825..e982fa113 100644 --- a/src/guiengine/widgets/check_box_widget.hpp +++ b/src/guiengine/widgets/check_box_widget.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/guiengine/widgets/dynamic_ribbon_widget.cpp b/src/guiengine/widgets/dynamic_ribbon_widget.cpp index 617edd8e3..ddaae8673 100644 --- a/src/guiengine/widgets/dynamic_ribbon_widget.cpp +++ b/src/guiengine/widgets/dynamic_ribbon_widget.cpp @@ -1,5 +1,5 @@ -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Supertuxkart - a fun racing game with go-kart +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -19,19 +19,17 @@ #include "guiengine/widgets/dynamic_ribbon_widget.hpp" #include "io/file_manager.hpp" #include "states_screens/state_manager.hpp" +#include "utils/vs.hpp" #include #include #include +#include using namespace GUIEngine; using namespace irr::core; using namespace irr::gui; -#ifndef round -# define round(x) (floor(x+0.5f)) -#endif - DynamicRibbonWidget::DynamicRibbonWidget(const bool combo, const bool multi_row) : Widget(WTYPE_DYNAMIC_RIBBON) { m_scroll_offset = 0; @@ -944,37 +942,37 @@ void DynamicRibbonWidget::updateItemDisplay() IconButtonWidget* icon = dynamic_cast(&row.m_children[i]); assert(icon != NULL); - //FIXME : it is a bit hackish - if(i < item_placement[n].size()) - { - icon_id = item_placement[n][i]; - if (icon_id < item_amount && icon_id != -1) - { - std::string item_icon = (m_items[icon_id].m_animated ? - m_items[icon_id].m_all_images[0] : - m_items[icon_id].m_sshot_file); - icon->setImage( item_icon.c_str(), m_items[icon_id].m_image_path_type ); + //FIXME : it is a bit hackish + if(i < item_placement[n].size()) + { + icon_id = item_placement[n][i]; + if (icon_id < item_amount && icon_id != -1) + { + std::string item_icon = (m_items[icon_id].m_animated ? + m_items[icon_id].m_all_images[0] : + m_items[icon_id].m_sshot_file); + icon->setImage( item_icon.c_str(), m_items[icon_id].m_image_path_type ); - icon->m_properties[PROP_ID] = m_items[icon_id].m_code_name; - icon->setLabel(m_items[icon_id].m_user_name); - icon->m_text = m_items[icon_id].m_user_name; - icon->m_badges = m_items[icon_id].m_badges; + icon->m_properties[PROP_ID] = m_items[icon_id].m_code_name; + icon->setLabel(m_items[icon_id].m_user_name); + icon->m_text = m_items[icon_id].m_user_name; + icon->m_badges = m_items[icon_id].m_badges; - //std::cout << " item " << i << " is " << m_items[icon_id].m_code_name << "\n"; + //std::cout << " item " << i << " is " << m_items[icon_id].m_code_name << "\n"; - //std::wcout << L"Setting widget text '" << icon->m_text.c_str() << L"'\n"; + //std::wcout << L"Setting widget text '" << icon->m_text.c_str() << L"'\n"; - // if the ribbon has no "ribbon-wide" label, call will do nothing - row.setLabel(i, m_items[icon_id].m_user_name); - } - else - { - icon->setImage( "textures/transparence.png", IconButtonWidget::ICON_PATH_TYPE_RELATIVE ); - icon->resetAllBadges(); - icon->m_properties[PROP_ID] = RibbonWidget::NO_ITEM_ID; - //std::cout << " item " << i << " is a FILLER\n"; - } - } + // if the ribbon has no "ribbon-wide" label, call will do nothing + row.setLabel(i, m_items[icon_id].m_user_name); + } + else + { + icon->setImage( "textures/transparence.png", IconButtonWidget::ICON_PATH_TYPE_RELATIVE ); + icon->resetAllBadges(); + icon->m_properties[PROP_ID] = RibbonWidget::NO_ITEM_ID; + //std::cout << " item " << i << " is a FILLER\n"; + } + } } // next column } // next row } diff --git a/src/guiengine/widgets/dynamic_ribbon_widget.hpp b/src/guiengine/widgets/dynamic_ribbon_widget.hpp index d55f96939..3b7796ef9 100644 --- a/src/guiengine/widgets/dynamic_ribbon_widget.hpp +++ b/src/guiengine/widgets/dynamic_ribbon_widget.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/guiengine/widgets/icon_button_widget.cpp b/src/guiengine/widgets/icon_button_widget.cpp index ef773790f..ad287b58e 100644 --- a/src/guiengine/widgets/icon_button_widget.cpp +++ b/src/guiengine/widgets/icon_button_widget.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -72,8 +72,11 @@ void IconButtonWidget::add() Log::error("icon_button", "add() : error, cannot find texture '%s'.", m_properties[PROP_ICON].c_str()); - std::string file = file_manager->getDataDir() + "gui/main_help.png"; + std::string file = file_manager->getGUIDir() + "main_help.png"; m_texture = irr_driver->getTexture(file); + if(!m_texture) + Log::fatal("IconButtonWidget", + "Can't find fallback texture 'gui/main_help.png, aborting."); } m_texture_w = m_texture->getSize().Width; m_texture_h = m_texture->getSize().Height; diff --git a/src/guiengine/widgets/icon_button_widget.hpp b/src/guiengine/widgets/icon_button_widget.hpp index f400eb18d..745d45566 100644 --- a/src/guiengine/widgets/icon_button_widget.hpp +++ b/src/guiengine/widgets/icon_button_widget.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/guiengine/widgets/label_widget.cpp b/src/guiengine/widgets/label_widget.cpp index c35561541..f7c202014 100644 --- a/src/guiengine/widgets/label_widget.cpp +++ b/src/guiengine/widgets/label_widget.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/guiengine/widgets/label_widget.hpp b/src/guiengine/widgets/label_widget.hpp index 5e94b39fd..674c4e641 100644 --- a/src/guiengine/widgets/label_widget.hpp +++ b/src/guiengine/widgets/label_widget.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/guiengine/widgets/list_widget.cpp b/src/guiengine/widgets/list_widget.cpp index 7aad575f0..cbd35016f 100644 --- a/src/guiengine/widgets/list_widget.cpp +++ b/src/guiengine/widgets/list_widget.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -40,7 +40,8 @@ ListWidget::ListWidget() : Widget(WTYPE_LIST) m_icons = NULL; m_listener = NULL; m_selected_column = NULL; - m_sort_desc = true; + m_sort_desc = false; + m_sort_default = true; } // ----------------------------------------------------------------------------- @@ -358,6 +359,8 @@ void ListWidget::elementRemoved() } m_header_elements.clearAndDeleteAll(); m_selected_column = NULL; + m_sort_desc = false; + m_sort_default = true; } // ----------------------------------------------------------------------------- @@ -413,12 +416,22 @@ EventPropagation ListWidget::transmitEvent(Widget* w, if (originator.find(m_properties[PROP_ID] + "_column_") != std::string::npos) { - int col = originator[ (m_properties[PROP_ID] + "_column_").size() ] - '0'; + if (m_sort_col != originator[(m_properties[PROP_ID] + "_column_").size()] - '0') + { + m_sort_desc = false; + m_sort_default = false; + } + else + { + if (!m_sort_default) m_sort_desc = !m_sort_desc; + m_sort_default = !m_sort_desc && !m_sort_default; + } - m_selected_column = m_header_elements.get(col); + m_sort_col = originator[(m_properties[PROP_ID] + "_column_").size()] - '0'; + m_selected_column = m_header_elements.get(m_sort_col); /** \brief Allows sort icon to change depending on sort order **/ - m_sort_desc = !m_sort_desc; + /* for (int n=0; n()->setPressed(true); */ - if (m_listener) m_listener->onColumnClicked(col); + if (m_listener) m_listener->onColumnClicked(m_sort_col); return EVENT_BLOCK; } diff --git a/src/guiengine/widgets/list_widget.hpp b/src/guiengine/widgets/list_widget.hpp index c56cd450a..fd56316ae 100644 --- a/src/guiengine/widgets/list_widget.hpp +++ b/src/guiengine/widgets/list_widget.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -64,6 +64,12 @@ namespace GUIEngine /** \brief whether this list is sorted in descending order */ bool m_sort_desc; + /** true when deault sorting is enabled */ + bool m_sort_default; + + /** index of column*/ + int m_sort_col; + struct Column { irr::core::stringw m_text; diff --git a/src/guiengine/widgets/model_view_widget.cpp b/src/guiengine/widgets/model_view_widget.cpp index 555a543ad..569f8ca2a 100644 --- a/src/guiengine/widgets/model_view_widget.cpp +++ b/src/guiengine/widgets/model_view_widget.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -17,6 +17,7 @@ #include "guiengine/engine.hpp" #include "guiengine/widgets/model_view_widget.hpp" +#include using namespace GUIEngine; using namespace irr::core; using namespace irr::gui; diff --git a/src/guiengine/widgets/model_view_widget.hpp b/src/guiengine/widgets/model_view_widget.hpp index e86934f60..b6c554cd7 100644 --- a/src/guiengine/widgets/model_view_widget.hpp +++ b/src/guiengine/widgets/model_view_widget.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/guiengine/widgets/progress_bar_widget.cpp b/src/guiengine/widgets/progress_bar_widget.cpp index 5aa0667aa..fc79403c5 100644 --- a/src/guiengine/widgets/progress_bar_widget.cpp +++ b/src/guiengine/widgets/progress_bar_widget.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/guiengine/widgets/progress_bar_widget.hpp b/src/guiengine/widgets/progress_bar_widget.hpp index db0c1cede..88dd7dd88 100644 --- a/src/guiengine/widgets/progress_bar_widget.hpp +++ b/src/guiengine/widgets/progress_bar_widget.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/guiengine/widgets/rating_bar_widget.cpp b/src/guiengine/widgets/rating_bar_widget.cpp index e7c7e0bf4..1acbb09f9 100644 --- a/src/guiengine/widgets/rating_bar_widget.cpp +++ b/src/guiengine/widgets/rating_bar_widget.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/guiengine/widgets/rating_bar_widget.hpp b/src/guiengine/widgets/rating_bar_widget.hpp index eda777e3d..3f94493c7 100644 --- a/src/guiengine/widgets/rating_bar_widget.hpp +++ b/src/guiengine/widgets/rating_bar_widget.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // 2013 Glenn De Jonghe // // This program is free software; you can redistribute it and/or diff --git a/src/guiengine/widgets/ribbon_widget.cpp b/src/guiengine/widgets/ribbon_widget.cpp index 4bd2a491a..8655566f0 100644 --- a/src/guiengine/widgets/ribbon_widget.cpp +++ b/src/guiengine/widgets/ribbon_widget.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -28,6 +28,7 @@ #include "io/file_manager.hpp" #include "states_screens/state_manager.hpp" #include "utils/string_utils.hpp" +#include "utils/vs.hpp" #include #include @@ -37,10 +38,6 @@ using namespace GUIEngine; using namespace irr::core; using namespace irr::gui; -#ifndef round -# define round(x) (floor(x+0.5f)) -#endif - const char RibbonWidget::NO_ITEM_ID[] = "?"; @@ -313,6 +310,15 @@ void RibbonWidget::add() + m_active_children[i].m_properties[PROP_ICON]; video::ITexture* image = irr_driver->getTexture((filename).c_str()); + if(!image) + { + std::string file = file_manager->getGUIDir() + "main_help.png"; + image = irr_driver->getTexture(file); + if(!image) + Log::fatal("RibbonWidget", + "Can't find fallback texture 'gui/main_help.png, aborting."); + } + float image_h = (float)image->getSize().Height; float image_w = image_h*imageRatio; @@ -589,7 +595,7 @@ void RibbonWidget::unfocused(const int playerID, Widget* new_focus) { if (new_focus != NULL && new_focus != this && !m_active_children.contains(new_focus)) { - if (m_selection[playerID] != -1) + if (m_selection[playerID] >= 0 && m_selection[playerID] < m_children.size()) { m_active_children.get(m_selection[playerID])->unfocused(playerID, new_focus); } diff --git a/src/guiengine/widgets/ribbon_widget.hpp b/src/guiengine/widgets/ribbon_widget.hpp index 44d602378..954d6dd76 100644 --- a/src/guiengine/widgets/ribbon_widget.hpp +++ b/src/guiengine/widgets/ribbon_widget.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/guiengine/widgets/spinner_widget.cpp b/src/guiengine/widgets/spinner_widget.cpp index 8da71eec7..0b0c058a2 100644 --- a/src/guiengine/widgets/spinner_widget.cpp +++ b/src/guiengine/widgets/spinner_widget.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -62,31 +62,17 @@ void SpinnerWidget::add() if (min_s.size() > 0) { - int i; - std::istringstream myStream(min_s); - bool is_number = (myStream >> i)!=0; - if (is_number) + if (!StringUtils::parseString(min_s, &m_min)) { - m_min = i; - } - else - { - std::cerr << "WARNING : invalid value for spinner widget minimum value : '" << min_s << "'\n"; + Log::warn("invalid value for spinner widget minimum value : %s", min_s.c_str()); } } if (max_s.size() > 0) { - int i; - std::istringstream myStream(max_s); - bool is_number = (myStream >> i)!=0; - if (is_number) - { - m_max = i; - } - else - { - std::cerr << "WARNING : invalid value for spinner widget maximal value : '" << max_s << "'\n"; + if (!StringUtils::parseString(max_s, &m_max)) + { + Log::warn("invalid value for spinner widget maximum value : %s", max_s.c_str()); } } diff --git a/src/guiengine/widgets/spinner_widget.hpp b/src/guiengine/widgets/spinner_widget.hpp index 51733127e..364dad936 100644 --- a/src/guiengine/widgets/spinner_widget.hpp +++ b/src/guiengine/widgets/spinner_widget.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -161,6 +161,8 @@ namespace GUIEngine /** Override method from base class Widget */ virtual void setDeactivated(); + bool isActivated() { return !m_deactivated; } + /** Display custom text in spinner */ void setCustomText(const core::stringw& text); }; diff --git a/src/guiengine/widgets/text_box_widget.cpp b/src/guiengine/widgets/text_box_widget.cpp index 94166baf1..494e73c38 100644 --- a/src/guiengine/widgets/text_box_widget.cpp +++ b/src/guiengine/widgets/text_box_widget.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/guiengine/widgets/text_box_widget.hpp b/src/guiengine/widgets/text_box_widget.hpp index 5d0dd224e..78426c772 100644 --- a/src/guiengine/widgets/text_box_widget.hpp +++ b/src/guiengine/widgets/text_box_widget.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/ide/Makefile.am b/src/ide/Makefile.am deleted file mode 100644 index 55e52e932..000000000 --- a/src/ide/Makefile.am +++ /dev/null @@ -1,23 +0,0 @@ -# src/ide/ - -EXTRA_DIST = \ - $(shell find $(srcdir)/codeblocks -name "*.cbp") \ - $(shell find $(srcdir)/codeblocks -name "*.depend") \ - $(shell find $(srcdir)/codeblocks -name "*.layout") \ - codeblocks/README \ - codeblocks/supertuxkart.workspace \ - vc9/supertuxkart.sln \ - vc9/supertuxkart.vcproj \ - vc9/bullet_lib.vcproj \ - vc9/enet.vcproj \ - vc9/README \ - vc10/bullet_lib.vcxproj \ - vc10/enet.vcxproj \ - vc10/supertuxkart.sln \ - vc10/supertuxkart.vcxproj \ - vc10/supertuxkart.vcxproj.filters \ - Xcode/cleanupRelease.sh \ - Xcode/Config.xcconfig \ - Xcode/stk.icns \ - Xcode/SuperTuxKart-Info.plist \ - Xcode/STK_XCode.xcodeproj/project.pbxproj diff --git a/src/ide/Xcode/Config.xcconfig b/src/ide/Xcode/Config.xcconfig deleted file mode 100644 index f4df319c6..000000000 --- a/src/ide/Xcode/Config.xcconfig +++ /dev/null @@ -1,8 +0,0 @@ -// Xcode build configuration - -HEADER_SEARCH_PATHS = /Library/Frameworks/IrrFramework.framework/Versions/A/Headers/ "$(PROJECT_DIR)/../../" "$(PROJECT_DIR)/../../../lib/bullet/src" "$(PROJECT_DIR)/../../../lib/enet/include" /Library/Frameworks/fribidi.framework/Headers /Library/Frameworks/Ogg.framework/Headers /Library/Frameworks/Vorbis.framework/Headers /usr/local/include /usr/include - -OTHER_CFLAGS = -Wall -DHAVE_OGGVORBIS=1 -DHAS_SOCKLEN_T -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAS_POLL=1 -DHAS_FCNTL=1 -DHAS_INET_PTON=1 -DHAS_INET_NTOP=1 -DHAS_MSGHDR_FLAGS=1 -DENABLE_NLS=1 -DHAVE_GETTEXT=1 -DHAVE_GLUT=1 -DHAVE_IRRLICHT=1 -DPACKAGE="\"supertuxkart\"" -D__MACOSX__=1 -DHAVE_RTT=0 -DENABLE_BIDI=1 -fvisibility=hidden -DENABLE_WIIUSE=1 - -OTHER_LDFLAGS = -lcurl -LIBRARY_SEARCH_PATHS = /usr/lib /usr/local/lib diff --git a/src/ide/Xcode/STK_XCode.xcodeproj/project.pbxproj b/src/ide/Xcode/STK_XCode.xcodeproj/project.pbxproj deleted file mode 100644 index 65ac58400..000000000 --- a/src/ide/Xcode/STK_XCode.xcodeproj/project.pbxproj +++ /dev/null @@ -1,3678 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 42; - objects = { - -/* Begin PBXBuildFile section */ - 95017B41124698C400C90D56 /* help_screen_4.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95017B3F124698C400C90D56 /* help_screen_4.cpp */; }; - 9507E9B70FC1CCE900BD2B92 /* stk.icns in Resources */ = {isa = PBXBuildFile; fileRef = 9507E9B60FC1CCE900BD2B92 /* stk.icns */; }; - 9507E9D10FC1CDCE00BD2B92 /* Ogg.framework in Copy frameworks */ = {isa = PBXBuildFile; fileRef = 9551C7F90FC1B63C00DB481B /* Ogg.framework */; }; - 9507E9D20FC1CDCE00BD2B92 /* OpenAL.framework in Copy frameworks */ = {isa = PBXBuildFile; fileRef = 9551C7FA0FC1B63C00DB481B /* OpenAL.framework */; }; - 9507E9DB0FC1CDD500BD2B92 /* Vorbis.framework in Copy frameworks */ = {isa = PBXBuildFile; fileRef = 9551C7FB0FC1B63C00DB481B /* Vorbis.framework */; }; - 950D448C118DEE3C006CFC41 /* CGUISpriteBank.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 950D448A118DEE3C006CFC41 /* CGUISpriteBank.cpp */; }; - 950D45D1118E040E006CFC41 /* options_screen_input2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 950D45CF118E040E006CFC41 /* options_screen_input2.cpp */; }; - 9516B07E12629C4E005F9493 /* sfx_buffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9516B07C12629C4E005F9493 /* sfx_buffer.cpp */; }; - 951B50AE12C9698B004F6993 /* xml_writer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 951B50AD12C9698B004F6993 /* xml_writer.cpp */; }; - 951BC65E0FFAF290006B5FF1 /* ipo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 951BC65C0FFAF290006B5FF1 /* ipo.cpp */; }; - 9522F125107948AD0067ECF5 /* main_menu_screen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9522F124107948AD0067ECF5 /* main_menu_screen.cpp */; }; - 9522F15B107949780067ECF5 /* race_setup_screen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9522F15A107949780067ECF5 /* race_setup_screen.cpp */; }; - 9522F15E10794A350067ECF5 /* tracks_screen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9522F15C10794A350067ECF5 /* tracks_screen.cpp */; }; - 9522F1E010795E8A0067ECF5 /* help_screen_1.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9522F1DE10795E8A0067ECF5 /* help_screen_1.cpp */; }; - 9522F1E510795EFF0067ECF5 /* help_screen_2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9522F1E210795EFF0067ECF5 /* help_screen_2.cpp */; }; - 9522F1E610795EFF0067ECF5 /* help_screen_3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9522F1E410795EFF0067ECF5 /* help_screen_3.cpp */; }; - 9522F1F0107961560067ECF5 /* options_screen_input.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9522F1EB107961560067ECF5 /* options_screen_input.cpp */; }; - 9522F1F1107961560067ECF5 /* options_screen_players.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9522F1ED107961560067ECF5 /* options_screen_players.cpp */; }; - 9524739610497C75000C197E /* dynamic_ribbon_widget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9524739510497C75000C197E /* dynamic_ribbon_widget.cpp */; }; - 95251F3D12554AB200505BA5 /* check_lap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95251F3B12554AB200505BA5 /* check_lap.cpp */; }; - 9525B71411C851D30094BD96 /* CBatchingMesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9525B71211C851D30094BD96 /* CBatchingMesh.cpp */; }; - 95263DEC0FD7471900CF5F92 /* grand_prix_data.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95263DE00FD7471900CF5F92 /* grand_prix_data.cpp */; }; - 95263DED0FD7471900CF5F92 /* grand_prix_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95263DE20FD7471900CF5F92 /* grand_prix_manager.cpp */; }; - 95263DEE0FD7471900CF5F92 /* highscore_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95263DE40FD7471900CF5F92 /* highscore_manager.cpp */; }; - 95263DEF0FD7471900CF5F92 /* highscores.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95263DE60FD7471900CF5F92 /* highscores.cpp */; }; - 95263DF00FD7471900CF5F92 /* history.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95263DE80FD7471900CF5F92 /* history.cpp */; }; - 95263DF10FD7471900CF5F92 /* race_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95263DEA0FD7471900CF5F92 /* race_manager.cpp */; }; - 9527AA4513CFC345009188DB /* IrrFramework.framework in Copy frameworks */ = {isa = PBXBuildFile; fileRef = 9538E2E812C2682B00172896 /* IrrFramework.framework */; }; - 9528C71612D69494006E9167 /* particle_kind_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9528C71412D69494006E9167 /* particle_kind_manager.cpp */; }; - 9528CC241291E7A10078A5EF /* binding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9528CC221291E7A10078A5EF /* binding.cpp */; }; - 952997C715B205DE0028301A /* cutscene_world.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 952997BF15B205DE0028301A /* cutscene_world.cpp */; }; - 952997C815B205DE0028301A /* demo_world.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 952997C115B205DE0028301A /* demo_world.cpp */; }; - 952997C915B205DE0028301A /* game_tutorial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 952997C315B205DE0028301A /* game_tutorial.cpp */; }; - 952997ED15B206890028301A /* skidding_ai.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 952997EA15B206890028301A /* skidding_ai.cpp */; }; - 952997FB15B206D90028301A /* abstract_kart_animation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 952997F315B206D90028301A /* abstract_kart_animation.cpp */; }; - 952997FC15B206D90028301A /* cannon_animation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 952997F515B206D90028301A /* cannon_animation.cpp */; }; - 952997FD15B206D90028301A /* explosion_animation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 952997F715B206D90028301A /* explosion_animation.cpp */; }; - 952997FE15B206D90028301A /* rescue_animation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 952997F915B206D90028301A /* rescue_animation.cpp */; }; - 9529980315B2070C0028301A /* cutscene_gui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9529980115B2070C0028301A /* cutscene_gui.cpp */; }; - 9529980715B2072E0028301A /* player.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9529980615B2072E0028301A /* player.cpp */; }; - 9529980C15B207450028301A /* check_cannon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9529980A15B207450028301A /* check_cannon.cpp */; }; - 9529981115B207740028301A /* show_curve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9529980F15B207740028301A /* show_curve.cpp */; }; - 952A1545103F66D600B1895D /* camera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 952A152D103F66D600B1895D /* camera.cpp */; }; - 952A1546103F66D600B1895D /* explosion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 952A152F103F66D600B1895D /* explosion.cpp */; }; - 952A1547103F66D600B1895D /* irr_driver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 952A1531103F66D600B1895D /* irr_driver.cpp */; }; - 952A1548103F66D600B1895D /* material.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 952A1533103F66D600B1895D /* material.cpp */; }; - 952A1549103F66D600B1895D /* material_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 952A1535103F66D600B1895D /* material_manager.cpp */; }; - 952A154A103F66D600B1895D /* mesh_tools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 952A1537103F66D600B1895D /* mesh_tools.cpp */; }; - 952A154B103F66D600B1895D /* moving_texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 952A1539103F66D600B1895D /* moving_texture.cpp */; }; - 952A154D103F66D600B1895D /* shadow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 952A153D103F66D600B1895D /* shadow.cpp */; }; - 952A154E103F66D600B1895D /* skid_marks.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 952A153F103F66D600B1895D /* skid_marks.cpp */; }; - 952A1554103F68D000B1895D /* profile_world.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 952A1552103F68D000B1895D /* profile_world.cpp */; }; - 95376CAF1320784100C842A4 /* lod_node.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95376CAD1320784100C842A4 /* lod_node.cpp */; }; - 953789730FC7829100DD1F8E /* graph_node.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 953789720FC7829100DD1F8E /* graph_node.cpp */; }; - 953789820FC7831400DD1F8E /* quad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 953789810FC7831400DD1F8E /* quad.cpp */; }; - 9538A56012CD094200CE3220 /* addon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9538A55E12CD094200CE3220 /* addon.cpp */; }; - 9538E2B912C25D6800172896 /* addons_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9538E2B512C25D6800172896 /* addons_manager.cpp */; }; - 9538E2BA12C25D6800172896 /* network_http.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9538E2B712C25D6800172896 /* network_http.cpp */; }; - 9538E2E912C2682B00172896 /* IrrFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9538E2E812C2682B00172896 /* IrrFramework.framework */; }; - 95395A77129DFE130079BCE7 /* message_dialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95395A75129DFE130079BCE7 /* message_dialog.cpp */; }; - 953A959D13367D6E00D86B4D /* options_screen_ui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 953A959B13367D6E00D86B4D /* options_screen_ui.cpp */; }; - 953F8B2111F7C13C00205E66 /* scalable_font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 953F8B1F11F7C13C00205E66 /* scalable_font.cpp */; }; - 9542FC7712D3BDB000C00366 /* particle_emitter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9542FC7512D3BDB000C00366 /* particle_emitter.cpp */; }; - 9542FD4C12D3E0D700C00366 /* particle_kind.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9542FD4A12D3E0D700C00366 /* particle_kind.cpp */; }; - 9543D58F14D36EE3000B0888 /* kart_gfx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9543D58D14D36EE3000B0888 /* kart_gfx.cpp */; }; - 9543D59E14D38831000B0888 /* select_challenge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9543D59D14D38831000B0888 /* select_challenge.cpp */; }; - 9545ABCA11E3E38300D3C37A /* progress_bar_widget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9545ABC811E3E38300D3C37A /* progress_bar_widget.cpp */; }; - 954E486A11B19C4100B1DF63 /* fribidi.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 954E486911B19C4100B1DF63 /* fribidi.framework */; }; - 954E4C2D0FF98B6F0047FE3E /* animation_base.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 954E4C250FF98B6E0047FE3E /* animation_base.cpp */; }; - 954E4C2F0FF98B6F0047FE3E /* billboard_animation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 954E4C290FF98B6E0047FE3E /* billboard_animation.cpp */; }; - 954E4C300FF98B6F0047FE3E /* three_d_animation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 954E4C2B0FF98B6E0047FE3E /* three_d_animation.cpp */; }; - 9551B27111DC0D4D002DD140 /* addons_screen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9551B26D11DC0D4D002DD140 /* addons_screen.cpp */; }; - 9551B27C11DC0D6A002DD140 /* zip.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9551B27811DC0D6A002DD140 /* zip.cpp */; }; - 9551C8270FC1B72500DB481B /* music_information.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AC280F296540000D3E5D /* music_information.cpp */; }; - 9551C8280FC1B72500DB481B /* music_ogg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AC2A0F296540000D3E5D /* music_ogg.cpp */; }; - 9551C8290FC1B72500DB481B /* sfx_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AC2D0F296540000D3E5D /* sfx_manager.cpp */; }; - 9551C82A0FC1B72500DB481B /* sfx_openal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AC2F0F296540000D3E5D /* sfx_openal.cpp */; }; - 9551C8900FC1B72500DB481B /* challenge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AE260F296541000D3E5D /* challenge.cpp */; }; - 9551C8910FC1B72500DB481B /* challenge_data.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AE280F296541000D3E5D /* challenge_data.cpp */; }; - 9551C8920FC1B72500DB481B /* unlock_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2AE2A0F296541000D3E5D /* unlock_manager.cpp */; }; - 9551C8A20FC1B72500DB481B /* attachment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B0F60F296545000D3E5D /* attachment.cpp */; }; - 9551C8A30FC1B72500DB481B /* attachment_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B0F80F296545000D3E5D /* attachment_manager.cpp */; }; - 9551C8A40FC1B72500DB481B /* bowling.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B0FA0F296545000D3E5D /* bowling.cpp */; }; - 9551C8A60FC1B72500DB481B /* cake.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B0FE0F296545000D3E5D /* cake.cpp */; }; - 9551C8A70FC1B72500DB481B /* flyable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B1000F296545000D3E5D /* flyable.cpp */; }; - 9551C8A80FC1B72500DB481B /* item.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B1020F296545000D3E5D /* item.cpp */; }; - 9551C8A90FC1B72500DB481B /* item_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B1040F296545000D3E5D /* item_manager.cpp */; }; - 9551C8AA0FC1B72500DB481B /* plunger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B1060F296545000D3E5D /* plunger.cpp */; }; - 9551C8AB0FC1B72500DB481B /* powerup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B1080F296545000D3E5D /* powerup.cpp */; }; - 9551C8AC0FC1B72500DB481B /* powerup_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B10A0F296545000D3E5D /* powerup_manager.cpp */; }; - 9551C8AD0FC1B72500DB481B /* projectile_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B10C0F296545000D3E5D /* projectile_manager.cpp */; }; - 9551C8AE0FC1B72500DB481B /* rubber_band.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B10E0F296545000D3E5D /* rubber_band.cpp */; }; - 9551C8AF0FC1B72500DB481B /* kart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B1180F296545000D3E5D /* kart.cpp */; }; - 9551C8B00FC1B72500DB481B /* kart_model.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B11B0F296545000D3E5D /* kart_model.cpp */; }; - 9551C8B10FC1B72500DB481B /* kart_properties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B11D0F296545000D3E5D /* kart_properties.cpp */; }; - 9551C8B20FC1B72500DB481B /* kart_properties_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B11F0F296545000D3E5D /* kart_properties_manager.cpp */; }; - 9551C8B30FC1B72500DB481B /* moveable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B1210F296545000D3E5D /* moveable.cpp */; }; - 9551C8B90FC1B72500DB481B /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B1360F296545000D3E5D /* main.cpp */; }; - 9551C8BA0FC1B72500DB481B /* main_loop.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B1380F296545000D3E5D /* main_loop.cpp */; }; - 9551C8BE0FC1B72500DB481B /* follow_the_leader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B14A0F296545000D3E5D /* follow_the_leader.cpp */; }; - 9551C8BF0FC1B72500DB481B /* linear_world.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B14C0F296545000D3E5D /* linear_world.cpp */; }; - 9551C8C00FC1B72500DB481B /* standard_race.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B14E0F296545000D3E5D /* standard_race.cpp */; }; - 9551C8C10FC1B72500DB481B /* three_strikes_battle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B1500F296545000D3E5D /* three_strikes_battle.cpp */; }; - 9551C8C20FC1B72500DB481B /* world.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B1520F296545000D3E5D /* world.cpp */; }; - 9551C8C30FC1B72500DB481B /* connect_message.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B15D0F296545000D3E5D /* connect_message.cpp */; }; - 9551C8C40FC1B72500DB481B /* kart_control_message.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B1610F296545000D3E5D /* kart_control_message.cpp */; }; - 9551C8C50FC1B72500DB481B /* kart_update_message.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B1630F296545000D3E5D /* kart_update_message.cpp */; }; - 9551C8C60FC1B72500DB481B /* message.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B1650F296545000D3E5D /* message.cpp */; }; - 9551C8C70FC1B72500DB481B /* network_kart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B1670F296545000D3E5D /* network_kart.cpp */; }; - 9551C8C80FC1B72500DB481B /* network_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B1690F296545000D3E5D /* network_manager.cpp */; }; - 9551C8C90FC1B72500DB481B /* race_info_message.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B16C0F296545000D3E5D /* race_info_message.cpp */; }; - 9551C8CA0FC1B72500DB481B /* race_result_message.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B16F0F296545000D3E5D /* race_result_message.cpp */; }; - 9551C8CB0FC1B72500DB481B /* race_state.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B1720F296545000D3E5D /* race_state.cpp */; }; - 9551C8CC0FC1B72500DB481B /* btKart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B1800F296545000D3E5D /* btKart.cpp */; }; - 9551C8CD0FC1B72500DB481B /* btUprightConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B1820F296545000D3E5D /* btUprightConstraint.cpp */; }; - 9551C8CE0FC1B72500DB481B /* physics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B1870F296545000D3E5D /* physics.cpp */; }; - 9551C8D70FC1B72500DB481B /* track.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B1CF0F296545000D3E5D /* track.cpp */; }; - 9551C8D80FC1B72500DB481B /* track_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B1D10F296545000D3E5D /* track_manager.cpp */; }; - 9551C8DA0FC1B72500DB481B /* random_generator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B1E20F296546000D3E5D /* random_generator.cpp */; }; - 9551C8DC0FC1B72500DB481B /* string_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B1E60F296546000D3E5D /* string_utils.cpp */; }; - 9551C8DD0FC1B72500DB481B /* vec3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C2B1E80F296546000D3E5D /* vec3.cpp */; }; - 9551C8DE0FC1B72500DB481B /* terrain_info.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 953EAAAE0F30A4220000D57D /* terrain_info.cpp */; }; - 9551C8DF0FC1B72500DB481B /* triangle_mesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 953EAAB10F30A4410000D57D /* triangle_mesh.cpp */; }; - 9551C8E00FC1B72500DB481B /* translation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 953EAAB50F30A4650000D57D /* translation.cpp */; }; - 9551C8E10FC1B72500DB481B /* xml_node.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C65D760F532F7D00BE7BA7 /* xml_node.cpp */; }; - 9551C8EC0FC1B72500DB481B /* file_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9505570E0F6963790056E88C /* file_manager.cpp */; }; - 9551C8F60FC1B72500DB481B /* input_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95A1182A0F77EA3100B18B3D /* input_manager.cpp */; }; - 9551C8F70FC1B72500DB481B /* input_device.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95A1184A0F77FC3900B18B3D /* input_device.cpp */; }; - 9551C8F80FC1B72500DB481B /* device_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95A1187A0F78024E00B18B3D /* device_manager.cpp */; }; - 9551C8F90FC1B72500DB481B /* physical_object.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95CA59F70F82FCB7003323DB /* physical_object.cpp */; }; - 9551C8FA0FC1B72500DB481B /* quad_set.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 951C357E0FC05BF400A48379 /* quad_set.cpp */; }; - 9551C8FB0FC1B72500DB481B /* quad_graph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 951C35800FC05BF400A48379 /* quad_graph.cpp */; }; - 9551C9F10FC1B7EE00DB481B /* Ogg.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9551C7F90FC1B63C00DB481B /* Ogg.framework */; }; - 9551C9F20FC1B7EE00DB481B /* OpenAL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9551C7FA0FC1B63C00DB481B /* OpenAL.framework */; }; - 9551C9F30FC1B7EE00DB481B /* Vorbis.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9551C7FB0FC1B63C00DB481B /* Vorbis.framework */; }; - 9551CBD10FC1BB7600DB481B /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 950557640F6968BE0056E88C /* IOKit.framework */; }; - 9551CBD20FC1BB7600DB481B /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9505575F0F6968A50056E88C /* QuickTime.framework */; }; - 9551CBD30FC1BB7600DB481B /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 950557570F6968860056E88C /* Carbon.framework */; }; - 9551CBD40FC1BB7600DB481B /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9505574E0F69684D0056E88C /* AudioUnit.framework */; }; - 9551CBD50FC1BB7600DB481B /* GLUT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95F423400E26E65B00692113 /* GLUT.framework */; }; - 9551CBD60FC1BB7600DB481B /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95F4231E0E26E44800692113 /* Cocoa.framework */; }; - 9551CBD70FC1BB7600DB481B /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95F423120E26E3DC00692113 /* OpenGL.framework */; }; - 9551CBDA0FC1BB9200DB481B /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9551CBD90FC1BB9200DB481B /* AGL.framework */; }; - 9552C1FB1231249000347B6C /* world_with_rank.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9552C1F91231249000347B6C /* world_with_rank.cpp */; }; - 9553823A10FD4FEC00737979 /* constants.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9553823910FD4FEC00737979 /* constants.cpp */; }; - 9554C4A611F1188000906416 /* race_result_gui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9554C4A411F1188000906416 /* race_result_gui.cpp */; }; - 9556A880119EF976009C558F /* options_screen_audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9556A87C119EF976009C558F /* options_screen_audio.cpp */; }; - 9556A881119EF976009C558F /* options_screen_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9556A87E119EF976009C558F /* options_screen_video.cpp */; }; - 955764E612FB67EF005CE479 /* btKartRaycast.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 955764E412FB67EF005CE479 /* btKartRaycast.cpp */; }; - 95591C4412A5E91E00FB1E95 /* fribidi.framework in Copy frameworks */ = {isa = PBXBuildFile; fileRef = 954E486911B19C4100B1DF63 /* fribidi.framework */; }; - 9559DE7F12FF777600350DE8 /* rain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9559DE7E12FF777600350DE8 /* rain.cpp */; }; - 955DE88310042701006A4F3C /* check_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 955DE88110042701006A4F3C /* check_manager.cpp */; }; - 955DE88C1004273B006A4F3C /* check_structure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 955DE8871004273B006A4F3C /* check_structure.cpp */; }; - 9560368C12187EFB00EB96C4 /* layout_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9560368A12187EFB00EB96C4 /* layout_manager.cpp */; }; - 956039BA1218C09E00EB96C4 /* abstract_top_level_container.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 956039B81218C09E00EB96C4 /* abstract_top_level_container.cpp */; }; - 95634EF21126272C009C145D /* gp_info_dialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95634EF01126272C009C145D /* gp_info_dialog.cpp */; }; - 956541BB10DD5F0A00C83E99 /* arenas_screen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 956541B910DD5F0A00C83E99 /* arenas_screen.cpp */; }; - 956541E110DD628C00C83E99 /* add_device_dialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 956541DF10DD628C00C83E99 /* add_device_dialog.cpp */; }; - 956830E01132EC9E00088D14 /* irr_debug_drawer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 956830DE1132EC9E00088D14 /* irr_debug_drawer.cpp */; }; - 956B0A9F1232D2E900767CCD /* bubble_widget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 956B0A9E1232D2E900767CCD /* bubble_widget.cpp */; }; - 956C6ED31128D3FB004336C8 /* controller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 956C6EC81128D3FB004336C8 /* controller.cpp */; }; - 956C6ED51128D3FB004336C8 /* end_controller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 956C6ECC1128D3FB004336C8 /* end_controller.cpp */; }; - 956C6ED71128D3FB004336C8 /* player_controller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 956C6ED11128D3FB004336C8 /* player_controller.cpp */; }; - 956F557513527E4B005C291D /* race_gui_base.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 956F557313527E4B005C291D /* race_gui_base.cpp */; }; - 9574F17C11206881008D202E /* world_status.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9574F17A11206881008D202E /* world_status.cpp */; }; - 95757211134F5B890037747B /* CGUIEditBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9575720F134F5B890037747B /* CGUIEditBox.cpp */; }; - 957817DC142142C500AD07B2 /* referee.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 957817DA142142C500AD07B2 /* referee.cpp */; }; - 957899B813C8E05F007AA5A3 /* profiler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 957899B613C8E05F007AA5A3 /* profiler.cpp */; }; - 957957A214A3CA3900E72497 /* custom_video_settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 957957A014A3CA3900E72497 /* custom_video_settings.cpp */; }; - 957A2D291405E21D00F45B22 /* hit_sfx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 957A2D271405E21D00F45B22 /* hit_sfx.cpp */; }; - 957ED4801163FF18002AB42C /* ai_base_controller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 957ED47E1163FF18002AB42C /* ai_base_controller.cpp */; }; - 958330CC10122B4A00C5137E /* engine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 958330B210122B4A00C5137E /* engine.cpp */; }; - 958330CD10122B4A00C5137E /* event_handler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 958330B410122B4A00C5137E /* event_handler.cpp */; }; - 958330CE10122B4A00C5137E /* modaldialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 958330B610122B4A00C5137E /* modaldialog.cpp */; }; - 958330D010122B4A00C5137E /* screen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 958330BA10122B4A00C5137E /* screen.cpp */; }; - 958330D110122B4A00C5137E /* screen_loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 958330BC10122B4A00C5137E /* screen_loader.cpp */; }; - 958330D210122B4A00C5137E /* skin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 958330BD10122B4A00C5137E /* skin.cpp */; }; - 958330D310122B4A00C5137E /* widget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 958330BF10122B4A00C5137E /* widget.cpp */; }; - 958330D410122B4A00C5137E /* credits.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 958330C210122B4A00C5137E /* credits.cpp */; }; - 958330D510122B4A00C5137E /* kart_selection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 958330C410122B4A00C5137E /* kart_selection.cpp */; }; - 958330D710122B4A00C5137E /* race_gui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 958330C810122B4A00C5137E /* race_gui.cpp */; }; - 958330D810122B4A00C5137E /* state_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 958330CA10122B4A00C5137E /* state_manager.cpp */; }; - 9583319910123B0200C5137E /* abstract_state_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9583319810123B0200C5137E /* abstract_state_manager.cpp */; }; - 9583323F101243ED00C5137E /* enter_player_name_dialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95833237101243ED00C5137E /* enter_player_name_dialog.cpp */; }; - 95833240101243ED00C5137E /* player_info_dialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95833239101243ED00C5137E /* player_info_dialog.cpp */; }; - 95833241101243ED00C5137E /* press_a_key_dialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9583323B101243ED00C5137E /* press_a_key_dialog.cpp */; }; - 95833242101243ED00C5137E /* track_info_dialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9583323D101243ED00C5137E /* track_info_dialog.cpp */; }; - 9584449E1330F89100CEA60A /* dictionary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9584448A1330F89100CEA60A /* dictionary.cpp */; }; - 9584449F1330F89100CEA60A /* dictionary_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9584448C1330F89100CEA60A /* dictionary_manager.cpp */; }; - 958444A01330F89100CEA60A /* iconv.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9584448F1330F89100CEA60A /* iconv.cpp */; }; - 958444A11330F89100CEA60A /* language.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 958444911330F89100CEA60A /* language.cpp */; }; - 958444A31330F89100CEA60A /* plural_forms.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 958444961330F89100CEA60A /* plural_forms.cpp */; }; - 958444A41330F89100CEA60A /* po_parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 958444981330F89100CEA60A /* po_parser.cpp */; }; - 958444A51330F89100CEA60A /* stk_file_system.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9584449A1330F89100CEA60A /* stk_file_system.cpp */; }; - 958444A61330F89100CEA60A /* tinygettext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9584449C1330F89100CEA60A /* tinygettext.cpp */; }; - 9584B30D137CAC12008565D7 /* news_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9584B309137CAC12008565D7 /* news_manager.cpp */; }; - 9584B30E137CAC12008565D7 /* request.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9584B30B137CAC12008565D7 /* request.cpp */; }; - 9586318411B1EC9F00B8B4AF /* grand_prix_lose.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9586318011B1EC9F00B8B4AF /* grand_prix_lose.cpp */; }; - 9586318511B1EC9F00B8B4AF /* grand_prix_win.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9586318211B1EC9F00B8B4AF /* grand_prix_win.cpp */; }; - 958806E913EB675F005F90FE /* track_sector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 958806E713EB675F005F90FE /* track_sector.cpp */; }; - 958949A9163F52FB00957345 /* inetwork_http.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 958949A8163F52FB00957345 /* inetwork_http.cpp */; }; - 958BD770117F6AE90095B483 /* music_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 958BD76E117F6AE90095B483 /* music_manager.cpp */; }; - 958D8C54104F523000A81934 /* race_paused_dialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 958D8C53104F523000A81934 /* race_paused_dialog.cpp */; }; - 958D924213DA48A70097BC82 /* post_processing.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 958D924013DA48A70097BC82 /* post_processing.cpp */; }; - 9592DC6D13021B350039DBC8 /* minimal_race_gui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9592DC6B13021B350039DBC8 /* minimal_race_gui.cpp */; }; - 9593366B149EC9B10031FD41 /* overworld.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95933669149EC9B10031FD41 /* overworld.cpp */; }; - 9593A2551609386100AB5EEB /* btAxisSweep3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A11C1609386100AB5EEB /* btAxisSweep3.cpp */; }; - 9593A2561609386100AB5EEB /* btBroadphaseProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A11F1609386100AB5EEB /* btBroadphaseProxy.cpp */; }; - 9593A2571609386100AB5EEB /* btCollisionAlgorithm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1211609386100AB5EEB /* btCollisionAlgorithm.cpp */; }; - 9593A2581609386100AB5EEB /* btDbvt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1231609386100AB5EEB /* btDbvt.cpp */; }; - 9593A2591609386100AB5EEB /* btDbvtBroadphase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1251609386100AB5EEB /* btDbvtBroadphase.cpp */; }; - 9593A25A1609386100AB5EEB /* btDispatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1271609386100AB5EEB /* btDispatcher.cpp */; }; - 9593A25B1609386100AB5EEB /* btMultiSapBroadphase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1291609386100AB5EEB /* btMultiSapBroadphase.cpp */; }; - 9593A25C1609386100AB5EEB /* btOverlappingPairCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A12B1609386100AB5EEB /* btOverlappingPairCache.cpp */; }; - 9593A25D1609386100AB5EEB /* btQuantizedBvh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A12E1609386100AB5EEB /* btQuantizedBvh.cpp */; }; - 9593A25E1609386100AB5EEB /* btSimpleBroadphase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1301609386100AB5EEB /* btSimpleBroadphase.cpp */; }; - 9593A25F1609386100AB5EEB /* btActivatingCollisionAlgorithm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1331609386100AB5EEB /* btActivatingCollisionAlgorithm.cpp */; }; - 9593A2601609386100AB5EEB /* btBox2dBox2dCollisionAlgorithm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1351609386100AB5EEB /* btBox2dBox2dCollisionAlgorithm.cpp */; }; - 9593A2611609386100AB5EEB /* btBoxBoxCollisionAlgorithm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1371609386100AB5EEB /* btBoxBoxCollisionAlgorithm.cpp */; }; - 9593A2621609386100AB5EEB /* btBoxBoxDetector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1391609386100AB5EEB /* btBoxBoxDetector.cpp */; }; - 9593A2631609386100AB5EEB /* btCollisionDispatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A13D1609386100AB5EEB /* btCollisionDispatcher.cpp */; }; - 9593A2641609386100AB5EEB /* btCollisionObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A13F1609386100AB5EEB /* btCollisionObject.cpp */; }; - 9593A2651609386100AB5EEB /* btCollisionWorld.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1411609386100AB5EEB /* btCollisionWorld.cpp */; }; - 9593A2661609386100AB5EEB /* btCompoundCollisionAlgorithm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1431609386100AB5EEB /* btCompoundCollisionAlgorithm.cpp */; }; - 9593A2671609386100AB5EEB /* btConvex2dConvex2dAlgorithm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1451609386100AB5EEB /* btConvex2dConvex2dAlgorithm.cpp */; }; - 9593A2681609386100AB5EEB /* btConvexConcaveCollisionAlgorithm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1471609386100AB5EEB /* btConvexConcaveCollisionAlgorithm.cpp */; }; - 9593A2691609386100AB5EEB /* btConvexConvexAlgorithm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1491609386100AB5EEB /* btConvexConvexAlgorithm.cpp */; }; - 9593A26A1609386100AB5EEB /* btConvexPlaneCollisionAlgorithm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A14B1609386100AB5EEB /* btConvexPlaneCollisionAlgorithm.cpp */; }; - 9593A26B1609386100AB5EEB /* btDefaultCollisionConfiguration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A14D1609386100AB5EEB /* btDefaultCollisionConfiguration.cpp */; }; - 9593A26C1609386100AB5EEB /* btEmptyCollisionAlgorithm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A14F1609386100AB5EEB /* btEmptyCollisionAlgorithm.cpp */; }; - 9593A26D1609386100AB5EEB /* btGhostObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1511609386100AB5EEB /* btGhostObject.cpp */; }; - 9593A26E1609386100AB5EEB /* btInternalEdgeUtility.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1531609386100AB5EEB /* btInternalEdgeUtility.cpp */; }; - 9593A26F1609386100AB5EEB /* btManifoldResult.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1551609386100AB5EEB /* btManifoldResult.cpp */; }; - 9593A2701609386100AB5EEB /* btSimulationIslandManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1571609386100AB5EEB /* btSimulationIslandManager.cpp */; }; - 9593A2711609386100AB5EEB /* btSphereBoxCollisionAlgorithm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1591609386100AB5EEB /* btSphereBoxCollisionAlgorithm.cpp */; }; - 9593A2721609386100AB5EEB /* btSphereSphereCollisionAlgorithm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A15B1609386100AB5EEB /* btSphereSphereCollisionAlgorithm.cpp */; }; - 9593A2731609386100AB5EEB /* btSphereTriangleCollisionAlgorithm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A15D1609386100AB5EEB /* btSphereTriangleCollisionAlgorithm.cpp */; }; - 9593A2741609386100AB5EEB /* btUnionFind.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A15F1609386100AB5EEB /* btUnionFind.cpp */; }; - 9593A2751609386100AB5EEB /* SphereTriangleDetector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1611609386100AB5EEB /* SphereTriangleDetector.cpp */; }; - 9593A2761609386100AB5EEB /* btBox2dShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1641609386100AB5EEB /* btBox2dShape.cpp */; }; - 9593A2771609386100AB5EEB /* btBoxShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1661609386100AB5EEB /* btBoxShape.cpp */; }; - 9593A2781609386100AB5EEB /* btBvhTriangleMeshShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1681609386100AB5EEB /* btBvhTriangleMeshShape.cpp */; }; - 9593A2791609386100AB5EEB /* btCapsuleShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A16A1609386100AB5EEB /* btCapsuleShape.cpp */; }; - 9593A27A1609386100AB5EEB /* btCollisionShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A16D1609386100AB5EEB /* btCollisionShape.cpp */; }; - 9593A27B1609386100AB5EEB /* btCompoundShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A16F1609386100AB5EEB /* btCompoundShape.cpp */; }; - 9593A27C1609386100AB5EEB /* btConcaveShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1711609386100AB5EEB /* btConcaveShape.cpp */; }; - 9593A27D1609386100AB5EEB /* btConeShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1731609386100AB5EEB /* btConeShape.cpp */; }; - 9593A27E1609386100AB5EEB /* btConvex2dShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1751609386100AB5EEB /* btConvex2dShape.cpp */; }; - 9593A27F1609386100AB5EEB /* btConvexHullShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1771609386100AB5EEB /* btConvexHullShape.cpp */; }; - 9593A2801609386100AB5EEB /* btConvexInternalShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1791609386100AB5EEB /* btConvexInternalShape.cpp */; }; - 9593A2811609386100AB5EEB /* btConvexPointCloudShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A17B1609386100AB5EEB /* btConvexPointCloudShape.cpp */; }; - 9593A2821609386100AB5EEB /* btConvexPolyhedron.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A17D1609386100AB5EEB /* btConvexPolyhedron.cpp */; }; - 9593A2831609386100AB5EEB /* btConvexShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A17F1609386100AB5EEB /* btConvexShape.cpp */; }; - 9593A2841609386100AB5EEB /* btConvexTriangleMeshShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1811609386100AB5EEB /* btConvexTriangleMeshShape.cpp */; }; - 9593A2851609386100AB5EEB /* btCylinderShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1831609386100AB5EEB /* btCylinderShape.cpp */; }; - 9593A2861609386100AB5EEB /* btEmptyShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1851609386100AB5EEB /* btEmptyShape.cpp */; }; - 9593A2871609386100AB5EEB /* btHeightfieldTerrainShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1871609386100AB5EEB /* btHeightfieldTerrainShape.cpp */; }; - 9593A2881609386100AB5EEB /* btMinkowskiSumShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A18A1609386100AB5EEB /* btMinkowskiSumShape.cpp */; }; - 9593A2891609386100AB5EEB /* btMultimaterialTriangleMeshShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A18C1609386100AB5EEB /* btMultimaterialTriangleMeshShape.cpp */; }; - 9593A28A1609386100AB5EEB /* btMultiSphereShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A18E1609386100AB5EEB /* btMultiSphereShape.cpp */; }; - 9593A28B1609386100AB5EEB /* btOptimizedBvh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1901609386100AB5EEB /* btOptimizedBvh.cpp */; }; - 9593A28C1609386100AB5EEB /* btPolyhedralConvexShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1921609386100AB5EEB /* btPolyhedralConvexShape.cpp */; }; - 9593A28D1609386100AB5EEB /* btScaledBvhTriangleMeshShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1941609386100AB5EEB /* btScaledBvhTriangleMeshShape.cpp */; }; - 9593A28E1609386100AB5EEB /* btShapeHull.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1961609386100AB5EEB /* btShapeHull.cpp */; }; - 9593A28F1609386100AB5EEB /* btSphereShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1981609386100AB5EEB /* btSphereShape.cpp */; }; - 9593A2901609386100AB5EEB /* btStaticPlaneShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A19A1609386100AB5EEB /* btStaticPlaneShape.cpp */; }; - 9593A2911609386100AB5EEB /* btStridingMeshInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A19C1609386100AB5EEB /* btStridingMeshInterface.cpp */; }; - 9593A2921609386100AB5EEB /* btTetrahedronShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A19E1609386100AB5EEB /* btTetrahedronShape.cpp */; }; - 9593A2931609386100AB5EEB /* btTriangleBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1A01609386100AB5EEB /* btTriangleBuffer.cpp */; }; - 9593A2941609386100AB5EEB /* btTriangleCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1A21609386100AB5EEB /* btTriangleCallback.cpp */; }; - 9593A2951609386100AB5EEB /* btTriangleIndexVertexArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1A41609386100AB5EEB /* btTriangleIndexVertexArray.cpp */; }; - 9593A2961609386100AB5EEB /* btTriangleIndexVertexMaterialArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1A61609386100AB5EEB /* btTriangleIndexVertexMaterialArray.cpp */; }; - 9593A2971609386100AB5EEB /* btTriangleMesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1A91609386100AB5EEB /* btTriangleMesh.cpp */; }; - 9593A2981609386100AB5EEB /* btTriangleMeshShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1AB1609386100AB5EEB /* btTriangleMeshShape.cpp */; }; - 9593A2991609386100AB5EEB /* btUniformScalingShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1AE1609386100AB5EEB /* btUniformScalingShape.cpp */; }; - 9593A29A1609386100AB5EEB /* btContactProcessing.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1B31609386100AB5EEB /* btContactProcessing.cpp */; }; - 9593A29B1609386100AB5EEB /* btGenericPoolAllocator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1B51609386100AB5EEB /* btGenericPoolAllocator.cpp */; }; - 9593A29C1609386100AB5EEB /* btGImpactBvh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1B81609386100AB5EEB /* btGImpactBvh.cpp */; }; - 9593A29D1609386100AB5EEB /* btGImpactCollisionAlgorithm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1BA1609386100AB5EEB /* btGImpactCollisionAlgorithm.cpp */; }; - 9593A29E1609386100AB5EEB /* btGImpactQuantizedBvh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1BD1609386100AB5EEB /* btGImpactQuantizedBvh.cpp */; }; - 9593A29F1609386100AB5EEB /* btGImpactShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1BF1609386100AB5EEB /* btGImpactShape.cpp */; }; - 9593A2A01609386100AB5EEB /* btTriangleShapeEx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1C21609386100AB5EEB /* btTriangleShapeEx.cpp */; }; - 9593A2A11609386100AB5EEB /* gim_box_set.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1C81609386100AB5EEB /* gim_box_set.cpp */; }; - 9593A2A21609386100AB5EEB /* gim_contact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1CB1609386100AB5EEB /* gim_contact.cpp */; }; - 9593A2A31609386100AB5EEB /* gim_memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1D21609386100AB5EEB /* gim_memory.cpp */; }; - 9593A2A41609386100AB5EEB /* gim_tri_collision.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1D51609386100AB5EEB /* gim_tri_collision.cpp */; }; - 9593A2A51609386100AB5EEB /* btContinuousConvexCollision.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1D81609386100AB5EEB /* btContinuousConvexCollision.cpp */; }; - 9593A2A61609386100AB5EEB /* btConvexCast.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1DA1609386100AB5EEB /* btConvexCast.cpp */; }; - 9593A2A71609386100AB5EEB /* btGjkConvexCast.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1DE1609386100AB5EEB /* btGjkConvexCast.cpp */; }; - 9593A2A81609386100AB5EEB /* btGjkEpa2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1E01609386100AB5EEB /* btGjkEpa2.cpp */; }; - 9593A2A91609386100AB5EEB /* btGjkEpaPenetrationDepthSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1E21609386100AB5EEB /* btGjkEpaPenetrationDepthSolver.cpp */; }; - 9593A2AA1609386100AB5EEB /* btGjkPairDetector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1E41609386100AB5EEB /* btGjkPairDetector.cpp */; }; - 9593A2AB1609386100AB5EEB /* btMinkowskiPenetrationDepthSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1E71609386100AB5EEB /* btMinkowskiPenetrationDepthSolver.cpp */; }; - 9593A2AC1609386100AB5EEB /* btPersistentManifold.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1E91609386100AB5EEB /* btPersistentManifold.cpp */; }; - 9593A2AD1609386100AB5EEB /* btPolyhedralContactClipping.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1EC1609386100AB5EEB /* btPolyhedralContactClipping.cpp */; }; - 9593A2AE1609386100AB5EEB /* btRaycastCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1EE1609386100AB5EEB /* btRaycastCallback.cpp */; }; - 9593A2AF1609386100AB5EEB /* btSubSimplexConvexCast.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1F11609386100AB5EEB /* btSubSimplexConvexCast.cpp */; }; - 9593A2B01609386100AB5EEB /* btVoronoiSimplexSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1F31609386100AB5EEB /* btVoronoiSimplexSolver.cpp */; }; - 9593A2B11609386100AB5EEB /* btKinematicCharacterController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1F81609386100AB5EEB /* btKinematicCharacterController.cpp */; }; - 9593A2B21609386100AB5EEB /* btConeTwistConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1FB1609386100AB5EEB /* btConeTwistConstraint.cpp */; }; - 9593A2B31609386100AB5EEB /* btContactConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A1FE1609386100AB5EEB /* btContactConstraint.cpp */; }; - 9593A2B41609386100AB5EEB /* btGeneric6DofConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A2011609386100AB5EEB /* btGeneric6DofConstraint.cpp */; }; - 9593A2B51609386100AB5EEB /* btGeneric6DofSpringConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A2031609386100AB5EEB /* btGeneric6DofSpringConstraint.cpp */; }; - 9593A2B61609386100AB5EEB /* btHinge2Constraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A2051609386100AB5EEB /* btHinge2Constraint.cpp */; }; - 9593A2B71609386100AB5EEB /* btHingeConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A2071609386100AB5EEB /* btHingeConstraint.cpp */; }; - 9593A2B81609386100AB5EEB /* btPoint2PointConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A20A1609386100AB5EEB /* btPoint2PointConstraint.cpp */; }; - 9593A2B91609386100AB5EEB /* btSequentialImpulseConstraintSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A20C1609386100AB5EEB /* btSequentialImpulseConstraintSolver.cpp */; }; - 9593A2BA1609386100AB5EEB /* btSliderConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A20E1609386100AB5EEB /* btSliderConstraint.cpp */; }; - 9593A2BB1609386100AB5EEB /* btSolve2LinearConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A2101609386100AB5EEB /* btSolve2LinearConstraint.cpp */; }; - 9593A2BC1609386100AB5EEB /* btTypedConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A2141609386100AB5EEB /* btTypedConstraint.cpp */; }; - 9593A2BD1609386100AB5EEB /* btUniversalConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A2161609386100AB5EEB /* btUniversalConstraint.cpp */; }; - 9593A2BE1609386100AB5EEB /* btContinuousDynamicsWorld.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A21A1609386100AB5EEB /* btContinuousDynamicsWorld.cpp */; }; - 9593A2BF1609386100AB5EEB /* btDiscreteDynamicsWorld.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A21C1609386100AB5EEB /* btDiscreteDynamicsWorld.cpp */; }; - 9593A2C01609386100AB5EEB /* btRigidBody.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A21F1609386100AB5EEB /* btRigidBody.cpp */; }; - 9593A2C11609386100AB5EEB /* btSimpleDynamicsWorld.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A2211609386100AB5EEB /* btSimpleDynamicsWorld.cpp */; }; - 9593A2C21609386100AB5EEB /* Bullet-C-API.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A2231609386100AB5EEB /* Bullet-C-API.cpp */; }; - 9593A2C31609386100AB5EEB /* btRaycastVehicle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A2251609386100AB5EEB /* btRaycastVehicle.cpp */; }; - 9593A2C41609386100AB5EEB /* btWheelInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A2281609386100AB5EEB /* btWheelInfo.cpp */; }; - 9593A2C51609386100AB5EEB /* btAlignedAllocator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A22C1609386100AB5EEB /* btAlignedAllocator.cpp */; }; - 9593A2C61609386100AB5EEB /* btConvexHull.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A22F1609386100AB5EEB /* btConvexHull.cpp */; }; - 9593A2C71609386100AB5EEB /* btConvexHullComputer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A2311609386100AB5EEB /* btConvexHullComputer.cpp */; }; - 9593A2C81609386100AB5EEB /* btGeometryUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A2341609386100AB5EEB /* btGeometryUtil.cpp */; }; - 9593A2C91609386100AB5EEB /* btQuickprof.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A2401609386100AB5EEB /* btQuickprof.cpp */; }; - 9593A2CA1609386100AB5EEB /* btSerializer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A2441609386100AB5EEB /* btSerializer.cpp */; }; - 9593A2CB1609386100AB5EEB /* Makefile.am in Resources */ = {isa = PBXBuildFile; fileRef = 9593A24A1609386100AB5EEB /* Makefile.am */; }; - 9593A2F91609388C00AB5EEB /* aclocal.m4 in Resources */ = {isa = PBXBuildFile; fileRef = 9593A2CF1609388C00AB5EEB /* aclocal.m4 */; }; - 9593A2FA1609388C00AB5EEB /* callbacks.c in Sources */ = {isa = PBXBuildFile; fileRef = 9593A2D01609388C00AB5EEB /* callbacks.c */; }; - 9593A2FB1609388C00AB5EEB /* ChangeLog in Resources */ = {isa = PBXBuildFile; fileRef = 9593A2D11609388C00AB5EEB /* ChangeLog */; }; - 9593A2FC1609388C00AB5EEB /* CMakeLists.txt in Resources */ = {isa = PBXBuildFile; fileRef = 9593A2D21609388C00AB5EEB /* CMakeLists.txt */; }; - 9593A2FD1609388C00AB5EEB /* compress.c in Sources */ = {isa = PBXBuildFile; fileRef = 9593A2D31609388C00AB5EEB /* compress.c */; }; - 9593A2FE1609388C00AB5EEB /* configure in Resources */ = {isa = PBXBuildFile; fileRef = 9593A2D41609388C00AB5EEB /* configure */; }; - 9593A2FF1609388C00AB5EEB /* configure.in in Resources */ = {isa = PBXBuildFile; fileRef = 9593A2D51609388C00AB5EEB /* configure.in */; }; - 9593A3001609388C00AB5EEB /* depcomp in Resources */ = {isa = PBXBuildFile; fileRef = 9593A2D61609388C00AB5EEB /* depcomp */; }; - 9593A3011609388C00AB5EEB /* design.txt in Resources */ = {isa = PBXBuildFile; fileRef = 9593A2D71609388C00AB5EEB /* design.txt */; }; - 9593A3081609388C00AB5EEB /* Doxyfile in Resources */ = {isa = PBXBuildFile; fileRef = 9593A2DF1609388C00AB5EEB /* Doxyfile */; }; - 9593A3091609388C00AB5EEB /* enet.dsp in Resources */ = {isa = PBXBuildFile; fileRef = 9593A2E01609388C00AB5EEB /* enet.dsp */; }; - 9593A30A1609388C00AB5EEB /* host.c in Sources */ = {isa = PBXBuildFile; fileRef = 9593A2E11609388C00AB5EEB /* host.c */; }; - 9593A30B1609388C00AB5EEB /* install-sh in Resources */ = {isa = PBXBuildFile; fileRef = 9593A2ED1609388C00AB5EEB /* install-sh */; }; - 9593A30C1609388C00AB5EEB /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 9593A2EE1609388C00AB5EEB /* LICENSE */; }; - 9593A30D1609388C00AB5EEB /* list.c in Sources */ = {isa = PBXBuildFile; fileRef = 9593A2EF1609388C00AB5EEB /* list.c */; }; - 9593A30E1609388C00AB5EEB /* Makefile.am in Resources */ = {isa = PBXBuildFile; fileRef = 9593A2F01609388C00AB5EEB /* Makefile.am */; }; - 9593A30F1609388C00AB5EEB /* missing in Resources */ = {isa = PBXBuildFile; fileRef = 9593A2F11609388C00AB5EEB /* missing */; }; - 9593A3101609388C00AB5EEB /* packet.c in Sources */ = {isa = PBXBuildFile; fileRef = 9593A2F21609388C00AB5EEB /* packet.c */; }; - 9593A3111609388C00AB5EEB /* peer.c in Sources */ = {isa = PBXBuildFile; fileRef = 9593A2F31609388C00AB5EEB /* peer.c */; }; - 9593A3121609388C00AB5EEB /* protocol.c in Sources */ = {isa = PBXBuildFile; fileRef = 9593A2F41609388C00AB5EEB /* protocol.c */; }; - 9593A3131609388C00AB5EEB /* README in Resources */ = {isa = PBXBuildFile; fileRef = 9593A2F51609388C00AB5EEB /* README */; }; - 9593A3141609388C00AB5EEB /* tutorial.txt in Resources */ = {isa = PBXBuildFile; fileRef = 9593A2F61609388C00AB5EEB /* tutorial.txt */; }; - 9593A3151609388C00AB5EEB /* unix.c in Sources */ = {isa = PBXBuildFile; fileRef = 9593A2F71609388C00AB5EEB /* unix.c */; }; - 9593A3161609388C00AB5EEB /* win32.c in Sources */ = {isa = PBXBuildFile; fileRef = 9593A2F81609388C00AB5EEB /* win32.c */; }; - 9593A32016093A7300AB5EEB /* ai_properties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9593A31E16093A7300AB5EEB /* ai_properties.cpp */; }; - 959482D310EBC0790031BADF /* track_object_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 959482CF10EBC0790031BADF /* track_object_manager.cpp */; }; - 959482D410EBC0790031BADF /* track_object.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 959482D110EBC0790031BADF /* track_object.cpp */; }; - 9598A5B613CFBA83000B83EA /* hardware_skinning.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9598A5B413CFBA83000B83EA /* hardware_skinning.cpp */; }; - 959DE0C613C297B90068ED78 /* swatter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 959DE0C413C297B90068ED78 /* swatter.cpp */; }; - 95A0BA2413E63F6700620EA6 /* kart_with_stats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95A0BA2213E63F6700620EA6 /* kart_with_stats.cpp */; }; - 95A1966214FC422D0074B892 /* ghost_kart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95A1966014FC422D0074B892 /* ghost_kart.cpp */; }; - 95A1978E1502E5020074B892 /* replay_base.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95A197881502E5020074B892 /* replay_base.cpp */; }; - 95A1978F1502E5020074B892 /* replay_play.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95A1978A1502E5020074B892 /* replay_play.cpp */; }; - 95A197901502E5020074B892 /* replay_recorder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95A1978C1502E5020074B892 /* replay_recorder.cpp */; }; - 95A197951502E5320074B892 /* skidding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95A197931502E5320074B892 /* skidding.cpp */; }; - 95AA4C67148AF2CC0053771D /* lod_node_loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95AA4C65148AF2CC0053771D /* lod_node_loader.cpp */; }; - 95B0E8A816A4DC060037391C /* log.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95B0E8A616A4DC060037391C /* log.cpp */; }; - 95B0E8B016A4DC390037391C /* tgt_log.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95B0E8AE16A4DC390037391C /* tgt_log.cpp */; }; - 95B0E8B716A4DC9E0037391C /* easter_egg_hunt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95B0E8B316A4DC9E0037391C /* easter_egg_hunt.cpp */; }; - 95B0E8B816A4DC9E0037391C /* tutorial_world.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95B0E8B516A4DC9E0037391C /* tutorial_world.cpp */; }; - 95B5CD14102DE08F00EF2001 /* device_config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95B5CD13102DE08F00EF2001 /* device_config.cpp */; }; - 95BF1E68127513A100F78AE7 /* max_speed.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95BF1E66127513A100F78AE7 /* max_speed.cpp */; }; - 95C631A4142AC79500416D47 /* leak_check.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C631A3142AC79500416D47 /* leak_check.cpp */; }; - 95C77D631069589B0080838E /* ambient_light_sphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C77D621069589B0080838E /* ambient_light_sphere.cpp */; }; - 95C77D66106958A50080838E /* check_line.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C77D65106958A50080838E /* check_line.cpp */; }; - 95C77D6F106958E10080838E /* check_sphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C77D6D106958E10080838E /* check_sphere.cpp */; }; - 95C9C97210E93456005A418D /* stars.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95C9C97010E93456005A418D /* stars.cpp */; }; - 95CB476C0FF30EF400413BAE /* bezier_curve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95CB476B0FF30EF400413BAE /* bezier_curve.cpp */; }; - 95D2343F1078227A00625256 /* feature_unlocked.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95D2343E1078227A00625256 /* feature_unlocked.cpp */; }; - 95D2C43013D6605600E84032 /* rubber_ball.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95D2C42E13D6605600E84032 /* rubber_ball.cpp */; }; - 95D69A7415226E4700D598D8 /* abstract_kart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95D69A7215226E4700D598D8 /* abstract_kart.cpp */; }; - 95D71F8B16BF380900C0F691 /* classic.c in Sources */ = {isa = PBXBuildFile; fileRef = 95D71F6416BF380900C0F691 /* classic.c */; }; - 95D71F8C16BF380900C0F691 /* CMakeLists.txt in Resources */ = {isa = PBXBuildFile; fileRef = 95D71F6616BF380900C0F691 /* CMakeLists.txt */; }; - 95D71F8D16BF380900C0F691 /* dynamics.c in Sources */ = {isa = PBXBuildFile; fileRef = 95D71F6916BF380900C0F691 /* dynamics.c */; }; - 95D71F8E16BF380900C0F691 /* events.c in Sources */ = {isa = PBXBuildFile; fileRef = 95D71F6B16BF380900C0F691 /* events.c */; }; - 95D71F8F16BF380900C0F691 /* guitar_hero_3.c in Sources */ = {isa = PBXBuildFile; fileRef = 95D71F6D16BF380900C0F691 /* guitar_hero_3.c */; }; - 95D71F9016BF380900C0F691 /* io.c in Sources */ = {isa = PBXBuildFile; fileRef = 95D71F6F16BF380900C0F691 /* io.c */; }; - 95D71F9216BF380900C0F691 /* io_win.c in Sources */ = {isa = PBXBuildFile; fileRef = 95D71F7216BF380900C0F691 /* io_win.c */; }; - 95D71F9316BF380900C0F691 /* ir.c in Sources */ = {isa = PBXBuildFile; fileRef = 95D71F7316BF380900C0F691 /* ir.c */; }; - 95D71F9416BF380900C0F691 /* motion_plus.c in Sources */ = {isa = PBXBuildFile; fileRef = 95D71F7516BF380900C0F691 /* motion_plus.c */; }; - 95D71F9516BF380900C0F691 /* nunchuk.c in Sources */ = {isa = PBXBuildFile; fileRef = 95D71F7716BF380900C0F691 /* nunchuk.c */; }; - 95D71F9616BF380900C0F691 /* os_mac.m in Sources */ = {isa = PBXBuildFile; fileRef = 95D71F7C16BF380900C0F691 /* os_mac.m */; }; - 95D71F9716BF380900C0F691 /* os_mac_find.m in Sources */ = {isa = PBXBuildFile; fileRef = 95D71F7D16BF380900C0F691 /* os_mac_find.m */; }; - 95D71F9816BF380900C0F691 /* os_mac_interface.m in Sources */ = {isa = PBXBuildFile; fileRef = 95D71F7E16BF380900C0F691 /* os_mac_interface.m */; }; - 95D71F9916BF380900C0F691 /* os_nix.c in Sources */ = {isa = PBXBuildFile; fileRef = 95D71F7F16BF380900C0F691 /* os_nix.c */; }; - 95D71F9A16BF380900C0F691 /* os_win.c in Sources */ = {isa = PBXBuildFile; fileRef = 95D71F8016BF380900C0F691 /* os_win.c */; }; - 95D71F9B16BF380900C0F691 /* README in Resources */ = {isa = PBXBuildFile; fileRef = 95D71F8116BF380900C0F691 /* README */; }; - 95D71F9C16BF380900C0F691 /* util.c in Sources */ = {isa = PBXBuildFile; fileRef = 95D71F8216BF380900C0F691 /* util.c */; }; - 95D71F9D16BF380900C0F691 /* wiiboard.c in Sources */ = {isa = PBXBuildFile; fileRef = 95D71F8316BF380900C0F691 /* wiiboard.c */; }; - 95D71F9E16BF380900C0F691 /* wiiuse.vcproj in Resources */ = {isa = PBXBuildFile; fileRef = 95D71F8616BF380900C0F691 /* wiiuse.vcproj */; }; - 95D71F9F16BF380900C0F691 /* wiiuse.c in Sources */ = {isa = PBXBuildFile; fileRef = 95D71F8716BF380900C0F691 /* wiiuse.c */; }; - 95D71FA916BF3A4F00C0F691 /* IOBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95D71FA816BF3A4F00C0F691 /* IOBluetooth.framework */; }; - 95D71FB216BF3A9E00C0F691 /* wiimote_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95D71FB016BF3A9E00C0F691 /* wiimote_manager.cpp */; }; - 95D71FB716BF3C7800C0F691 /* tutorial_message_dialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95D71FB516BF3C7800C0F691 /* tutorial_message_dialog.cpp */; }; - 95D950D20FE473CA002E10AD /* stk_config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95D950CE0FE473CA002E10AD /* stk_config.cpp */; }; - 95D950D30FE473CA002E10AD /* user_config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95D950D00FE473CA002E10AD /* user_config.cpp */; }; - 95DFC5021106933B00A043A9 /* slip_stream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95DFC5001106933B00A043A9 /* slip_stream.cpp */; }; - 95E1FCDF130369EB004D83CC /* per_camera_node.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95E1FCDD130369EB004D83CC /* per_camera_node.cpp */; }; - 95E246BE111A2959000C965D /* confirm_resolution_dialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95E246BC111A2959000C965D /* confirm_resolution_dialog.cpp */; }; - 95E5C318148C17E500AD3FCC /* story_mode_lobby.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95E5C316148C17E500AD3FCC /* story_mode_lobby.cpp */; }; - 95E5C335148C19F500AD3FCC /* story_mode_new.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95E5C333148C19F500AD3FCC /* story_mode_new.cpp */; }; - 95E5C3C2148C418100AD3FCC /* game_slot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95E5C3C0148C418100AD3FCC /* game_slot.cpp */; }; - 95E6A0C011DCF37800AE088A /* addons_loading.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95E6A0BE11DCF37800AE088A /* addons_loading.cpp */; }; - 95ECA10010124C5000D47C5F /* button_widget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95ECA0EC10124C5000D47C5F /* button_widget.cpp */; }; - 95ECA10110124C5000D47C5F /* check_box_widget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95ECA0EE10124C5000D47C5F /* check_box_widget.cpp */; }; - 95ECA10210124C5000D47C5F /* icon_button_widget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95ECA0F010124C5000D47C5F /* icon_button_widget.cpp */; }; - 95ECA10310124C5000D47C5F /* label_widget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95ECA0F210124C5000D47C5F /* label_widget.cpp */; }; - 95ECA10410124C5000D47C5F /* list_widget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95ECA0F410124C5000D47C5F /* list_widget.cpp */; }; - 95ECA10510124C5000D47C5F /* model_view_widget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95ECA0F610124C5000D47C5F /* model_view_widget.cpp */; }; - 95ECA10710124C5000D47C5F /* ribbon_widget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95ECA0FA10124C5000D47C5F /* ribbon_widget.cpp */; }; - 95ECA10810124C5000D47C5F /* spinner_widget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95ECA0FC10124C5000D47C5F /* spinner_widget.cpp */; }; - 95ECA10910124C5000D47C5F /* text_box_widget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95ECA0FE10124C5000D47C5F /* text_box_widget.cpp */; }; - 95EF178E14AFBC91005FFEEB /* race_gui_overworld.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95EF178C14AFBC91005FFEEB /* race_gui_overworld.cpp */; }; - 95EF1E0A1506D6CF0041AC79 /* skidding_properties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95EF1E081506D6CF0041AC79 /* skidding_properties.cpp */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 9507E9E70FC1CDDF00BD2B92 /* Copy frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 95591C4412A5E91E00FB1E95 /* fribidi.framework in Copy frameworks */, - 9507E9DB0FC1CDD500BD2B92 /* Vorbis.framework in Copy frameworks */, - 9507E9D10FC1CDCE00BD2B92 /* Ogg.framework in Copy frameworks */, - 9507E9D20FC1CDCE00BD2B92 /* OpenAL.framework in Copy frameworks */, - 9527AA4513CFC345009188DB /* IrrFramework.framework in Copy frameworks */, - ); - name = "Copy frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 95017B3F124698C400C90D56 /* help_screen_4.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = help_screen_4.cpp; path = ../../states_screens/help_screen_4.cpp; sourceTree = SOURCE_ROOT; }; - 95017B40124698C400C90D56 /* help_screen_4.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = help_screen_4.hpp; path = ../../states_screens/help_screen_4.hpp; sourceTree = SOURCE_ROOT; }; - 9505570E0F6963790056E88C /* file_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = file_manager.cpp; path = ../../io/file_manager.cpp; sourceTree = SOURCE_ROOT; }; - 9505570F0F6963790056E88C /* file_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = file_manager.hpp; path = ../../io/file_manager.hpp; sourceTree = SOURCE_ROOT; }; - 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 = ""; }; - 9507E9B60FC1CCE900BD2B92 /* stk.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = stk.icns; sourceTree = SOURCE_ROOT; }; - 950D448A118DEE3C006CFC41 /* CGUISpriteBank.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CGUISpriteBank.cpp; path = ../../guiengine/CGUISpriteBank.cpp; sourceTree = SOURCE_ROOT; }; - 950D448B118DEE3C006CFC41 /* CGUISpriteBank.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CGUISpriteBank.h; path = ../../guiengine/CGUISpriteBank.h; sourceTree = SOURCE_ROOT; }; - 950D45CF118E040E006CFC41 /* options_screen_input2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = options_screen_input2.cpp; path = ../../states_screens/options_screen_input2.cpp; sourceTree = SOURCE_ROOT; }; - 950D45D0118E040E006CFC41 /* options_screen_input2.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = options_screen_input2.hpp; path = ../../states_screens/options_screen_input2.hpp; sourceTree = SOURCE_ROOT; }; - 9516B07C12629C4E005F9493 /* sfx_buffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sfx_buffer.cpp; path = ../../audio/sfx_buffer.cpp; sourceTree = SOURCE_ROOT; }; - 9516B07D12629C4E005F9493 /* sfx_buffer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = sfx_buffer.hpp; path = ../../audio/sfx_buffer.hpp; sourceTree = SOURCE_ROOT; }; - 951B50AD12C9698B004F6993 /* xml_writer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = xml_writer.cpp; path = ../../io/xml_writer.cpp; sourceTree = SOURCE_ROOT; }; - 951B50AF12C96A13004F6993 /* xml_writer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = xml_writer.hpp; path = ../../io/xml_writer.hpp; sourceTree = SOURCE_ROOT; }; - 951BC65C0FFAF290006B5FF1 /* ipo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ipo.cpp; path = ../../animations/ipo.cpp; sourceTree = SOURCE_ROOT; }; - 951BC65D0FFAF290006B5FF1 /* ipo.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ipo.hpp; path = ../../animations/ipo.hpp; sourceTree = SOURCE_ROOT; }; - 951C357D0FC05BF400A48379 /* quad_set.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = quad_set.hpp; path = ../../tracks/quad_set.hpp; sourceTree = SOURCE_ROOT; }; - 951C357E0FC05BF400A48379 /* quad_set.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = quad_set.cpp; path = ../../tracks/quad_set.cpp; sourceTree = SOURCE_ROOT; }; - 951C357F0FC05BF400A48379 /* quad_graph.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = quad_graph.hpp; path = ../../tracks/quad_graph.hpp; sourceTree = SOURCE_ROOT; }; - 951C35800FC05BF400A48379 /* quad_graph.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = quad_graph.cpp; path = ../../tracks/quad_graph.cpp; sourceTree = SOURCE_ROOT; }; - 9522F123107948AD0067ECF5 /* main_menu_screen.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = main_menu_screen.hpp; path = ../../states_screens/main_menu_screen.hpp; sourceTree = SOURCE_ROOT; }; - 9522F124107948AD0067ECF5 /* main_menu_screen.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main_menu_screen.cpp; path = ../../states_screens/main_menu_screen.cpp; sourceTree = SOURCE_ROOT; }; - 9522F159107949780067ECF5 /* race_setup_screen.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = race_setup_screen.hpp; path = ../../states_screens/race_setup_screen.hpp; sourceTree = SOURCE_ROOT; }; - 9522F15A107949780067ECF5 /* race_setup_screen.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = race_setup_screen.cpp; path = ../../states_screens/race_setup_screen.cpp; sourceTree = SOURCE_ROOT; }; - 9522F15C10794A350067ECF5 /* tracks_screen.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tracks_screen.cpp; path = ../../states_screens/tracks_screen.cpp; sourceTree = SOURCE_ROOT; }; - 9522F15D10794A350067ECF5 /* tracks_screen.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = tracks_screen.hpp; path = ../../states_screens/tracks_screen.hpp; sourceTree = SOURCE_ROOT; }; - 9522F1DE10795E8A0067ECF5 /* help_screen_1.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = help_screen_1.cpp; path = ../../states_screens/help_screen_1.cpp; sourceTree = SOURCE_ROOT; }; - 9522F1DF10795E8A0067ECF5 /* help_screen_1.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = help_screen_1.hpp; path = ../../states_screens/help_screen_1.hpp; sourceTree = SOURCE_ROOT; }; - 9522F1E110795EFF0067ECF5 /* help_screen_2.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = help_screen_2.hpp; path = ../../states_screens/help_screen_2.hpp; sourceTree = SOURCE_ROOT; }; - 9522F1E210795EFF0067ECF5 /* help_screen_2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = help_screen_2.cpp; path = ../../states_screens/help_screen_2.cpp; sourceTree = SOURCE_ROOT; }; - 9522F1E310795EFF0067ECF5 /* help_screen_3.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = help_screen_3.hpp; path = ../../states_screens/help_screen_3.hpp; sourceTree = SOURCE_ROOT; }; - 9522F1E410795EFF0067ECF5 /* help_screen_3.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = help_screen_3.cpp; path = ../../states_screens/help_screen_3.cpp; sourceTree = SOURCE_ROOT; }; - 9522F1EB107961560067ECF5 /* options_screen_input.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = options_screen_input.cpp; path = ../../states_screens/options_screen_input.cpp; sourceTree = SOURCE_ROOT; }; - 9522F1EC107961560067ECF5 /* options_screen_players.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = options_screen_players.hpp; path = ../../states_screens/options_screen_players.hpp; sourceTree = SOURCE_ROOT; }; - 9522F1ED107961560067ECF5 /* options_screen_players.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = options_screen_players.cpp; path = ../../states_screens/options_screen_players.cpp; sourceTree = SOURCE_ROOT; }; - 9522F1EE107961560067ECF5 /* options_screen_input.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = options_screen_input.hpp; path = ../../states_screens/options_screen_input.hpp; sourceTree = SOURCE_ROOT; }; - 9524739410497C75000C197E /* dynamic_ribbon_widget.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = dynamic_ribbon_widget.hpp; path = ../../guiengine/widgets/dynamic_ribbon_widget.hpp; sourceTree = SOURCE_ROOT; }; - 9524739510497C75000C197E /* dynamic_ribbon_widget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dynamic_ribbon_widget.cpp; path = ../../guiengine/widgets/dynamic_ribbon_widget.cpp; sourceTree = SOURCE_ROOT; }; - 95251F3B12554AB200505BA5 /* check_lap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = check_lap.cpp; path = ../../tracks/check_lap.cpp; sourceTree = SOURCE_ROOT; }; - 95251F3C12554AB200505BA5 /* check_lap.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = check_lap.hpp; path = ../../tracks/check_lap.hpp; sourceTree = SOURCE_ROOT; }; - 9525B71211C851D30094BD96 /* CBatchingMesh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CBatchingMesh.cpp; path = ../../graphics/CBatchingMesh.cpp; sourceTree = SOURCE_ROOT; }; - 9525B71311C851D30094BD96 /* CBatchingMesh.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CBatchingMesh.hpp; path = ../../graphics/CBatchingMesh.hpp; sourceTree = SOURCE_ROOT; }; - 95263DE00FD7471900CF5F92 /* grand_prix_data.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = grand_prix_data.cpp; path = ../../race/grand_prix_data.cpp; sourceTree = SOURCE_ROOT; }; - 95263DE10FD7471900CF5F92 /* grand_prix_data.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = grand_prix_data.hpp; path = ../../race/grand_prix_data.hpp; sourceTree = SOURCE_ROOT; }; - 95263DE20FD7471900CF5F92 /* grand_prix_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = grand_prix_manager.cpp; path = ../../race/grand_prix_manager.cpp; sourceTree = SOURCE_ROOT; }; - 95263DE30FD7471900CF5F92 /* grand_prix_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = grand_prix_manager.hpp; path = ../../race/grand_prix_manager.hpp; sourceTree = SOURCE_ROOT; }; - 95263DE40FD7471900CF5F92 /* highscore_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = highscore_manager.cpp; path = ../../race/highscore_manager.cpp; sourceTree = SOURCE_ROOT; }; - 95263DE50FD7471900CF5F92 /* highscore_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = highscore_manager.hpp; path = ../../race/highscore_manager.hpp; sourceTree = SOURCE_ROOT; }; - 95263DE60FD7471900CF5F92 /* highscores.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = highscores.cpp; path = ../../race/highscores.cpp; sourceTree = SOURCE_ROOT; }; - 95263DE70FD7471900CF5F92 /* highscores.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = highscores.hpp; path = ../../race/highscores.hpp; sourceTree = SOURCE_ROOT; }; - 95263DE80FD7471900CF5F92 /* history.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = history.cpp; path = ../../race/history.cpp; sourceTree = SOURCE_ROOT; }; - 95263DE90FD7471900CF5F92 /* history.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = history.hpp; path = ../../race/history.hpp; sourceTree = SOURCE_ROOT; }; - 95263DEA0FD7471900CF5F92 /* race_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = race_manager.cpp; path = ../../race/race_manager.cpp; sourceTree = SOURCE_ROOT; }; - 95263DEB0FD7471900CF5F92 /* race_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = race_manager.hpp; path = ../../race/race_manager.hpp; sourceTree = SOURCE_ROOT; }; - 9528C71412D69494006E9167 /* particle_kind_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = particle_kind_manager.cpp; path = ../../graphics/particle_kind_manager.cpp; sourceTree = SOURCE_ROOT; }; - 9528C71512D69494006E9167 /* particle_kind_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = particle_kind_manager.hpp; path = ../../graphics/particle_kind_manager.hpp; sourceTree = SOURCE_ROOT; }; - 9528CC221291E7A10078A5EF /* binding.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = binding.cpp; path = ../../input/binding.cpp; sourceTree = SOURCE_ROOT; }; - 9528CC231291E7A10078A5EF /* binding.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = binding.hpp; path = ../../input/binding.hpp; sourceTree = SOURCE_ROOT; }; - 952997BF15B205DE0028301A /* cutscene_world.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = cutscene_world.cpp; path = ../../modes/cutscene_world.cpp; sourceTree = SOURCE_ROOT; }; - 952997C015B205DE0028301A /* cutscene_world.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = cutscene_world.hpp; path = ../../modes/cutscene_world.hpp; sourceTree = SOURCE_ROOT; }; - 952997C115B205DE0028301A /* demo_world.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = demo_world.cpp; path = ../../modes/demo_world.cpp; sourceTree = SOURCE_ROOT; }; - 952997C215B205DE0028301A /* demo_world.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = demo_world.hpp; path = ../../modes/demo_world.hpp; sourceTree = SOURCE_ROOT; }; - 952997C315B205DE0028301A /* game_tutorial.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = game_tutorial.cpp; path = ../../modes/game_tutorial.cpp; sourceTree = SOURCE_ROOT; }; - 952997C415B205DE0028301A /* game_tutorial.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = game_tutorial.hpp; path = ../../modes/game_tutorial.hpp; sourceTree = SOURCE_ROOT; }; - 952997EA15B206890028301A /* skidding_ai.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = skidding_ai.cpp; path = ../../karts/controller/skidding_ai.cpp; sourceTree = SOURCE_ROOT; }; - 952997EB15B206890028301A /* skidding_ai.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = skidding_ai.hpp; path = ../../karts/controller/skidding_ai.hpp; sourceTree = SOURCE_ROOT; }; - 952997F315B206D90028301A /* abstract_kart_animation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = abstract_kart_animation.cpp; path = ../../karts/abstract_kart_animation.cpp; sourceTree = SOURCE_ROOT; }; - 952997F415B206D90028301A /* abstract_kart_animation.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = abstract_kart_animation.hpp; path = ../../karts/abstract_kart_animation.hpp; sourceTree = SOURCE_ROOT; }; - 952997F515B206D90028301A /* cannon_animation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = cannon_animation.cpp; path = ../../karts/cannon_animation.cpp; sourceTree = SOURCE_ROOT; }; - 952997F615B206D90028301A /* cannon_animation.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = cannon_animation.hpp; path = ../../karts/cannon_animation.hpp; sourceTree = SOURCE_ROOT; }; - 952997F715B206D90028301A /* explosion_animation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = explosion_animation.cpp; path = ../../karts/explosion_animation.cpp; sourceTree = SOURCE_ROOT; }; - 952997F815B206D90028301A /* explosion_animation.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = explosion_animation.hpp; path = ../../karts/explosion_animation.hpp; sourceTree = SOURCE_ROOT; }; - 952997F915B206D90028301A /* rescue_animation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rescue_animation.cpp; path = ../../karts/rescue_animation.cpp; sourceTree = SOURCE_ROOT; }; - 952997FA15B206D90028301A /* rescue_animation.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = rescue_animation.hpp; path = ../../karts/rescue_animation.hpp; sourceTree = SOURCE_ROOT; }; - 9529980115B2070C0028301A /* cutscene_gui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = cutscene_gui.cpp; path = ../../states_screens/cutscene_gui.cpp; sourceTree = SOURCE_ROOT; }; - 9529980215B2070C0028301A /* cutscene_gui.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = cutscene_gui.hpp; path = ../../states_screens/cutscene_gui.hpp; sourceTree = SOURCE_ROOT; }; - 9529980615B2072E0028301A /* player.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = player.cpp; path = ../../config/player.cpp; sourceTree = SOURCE_ROOT; }; - 9529980A15B207450028301A /* check_cannon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = check_cannon.cpp; path = ../../tracks/check_cannon.cpp; sourceTree = SOURCE_ROOT; }; - 9529980B15B207450028301A /* check_cannon.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = check_cannon.hpp; path = ../../tracks/check_cannon.hpp; sourceTree = SOURCE_ROOT; }; - 9529980F15B207740028301A /* show_curve.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = show_curve.cpp; path = ../../graphics/show_curve.cpp; sourceTree = SOURCE_ROOT; }; - 9529981015B207740028301A /* show_curve.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = show_curve.hpp; path = ../../graphics/show_curve.hpp; sourceTree = SOURCE_ROOT; }; - 952A152D103F66D600B1895D /* camera.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = camera.cpp; path = ../../graphics/camera.cpp; sourceTree = SOURCE_ROOT; }; - 952A152E103F66D600B1895D /* camera.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = camera.hpp; path = ../../graphics/camera.hpp; sourceTree = SOURCE_ROOT; }; - 952A152F103F66D600B1895D /* explosion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = explosion.cpp; path = ../../graphics/explosion.cpp; sourceTree = SOURCE_ROOT; }; - 952A1530103F66D600B1895D /* explosion.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = explosion.hpp; path = ../../graphics/explosion.hpp; sourceTree = SOURCE_ROOT; }; - 952A1531103F66D600B1895D /* irr_driver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = irr_driver.cpp; path = ../../graphics/irr_driver.cpp; sourceTree = SOURCE_ROOT; }; - 952A1532103F66D600B1895D /* irr_driver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = irr_driver.hpp; path = ../../graphics/irr_driver.hpp; sourceTree = SOURCE_ROOT; }; - 952A1533103F66D600B1895D /* material.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = material.cpp; path = ../../graphics/material.cpp; sourceTree = SOURCE_ROOT; }; - 952A1534103F66D600B1895D /* material.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = material.hpp; path = ../../graphics/material.hpp; sourceTree = SOURCE_ROOT; }; - 952A1535103F66D600B1895D /* material_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = material_manager.cpp; path = ../../graphics/material_manager.cpp; sourceTree = SOURCE_ROOT; }; - 952A1536103F66D600B1895D /* material_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = material_manager.hpp; path = ../../graphics/material_manager.hpp; sourceTree = SOURCE_ROOT; }; - 952A1537103F66D600B1895D /* mesh_tools.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mesh_tools.cpp; path = ../../graphics/mesh_tools.cpp; sourceTree = SOURCE_ROOT; }; - 952A1538103F66D600B1895D /* mesh_tools.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = mesh_tools.hpp; path = ../../graphics/mesh_tools.hpp; sourceTree = SOURCE_ROOT; }; - 952A1539103F66D600B1895D /* moving_texture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moving_texture.cpp; path = ../../graphics/moving_texture.cpp; sourceTree = SOURCE_ROOT; }; - 952A153A103F66D600B1895D /* moving_texture.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = moving_texture.hpp; path = ../../graphics/moving_texture.hpp; sourceTree = SOURCE_ROOT; }; - 952A153D103F66D600B1895D /* shadow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = shadow.cpp; path = ../../graphics/shadow.cpp; sourceTree = SOURCE_ROOT; }; - 952A153E103F66D600B1895D /* shadow.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = shadow.hpp; path = ../../graphics/shadow.hpp; sourceTree = SOURCE_ROOT; }; - 952A153F103F66D600B1895D /* skid_marks.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = skid_marks.cpp; path = ../../graphics/skid_marks.cpp; sourceTree = SOURCE_ROOT; }; - 952A1540103F66D600B1895D /* skid_marks.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = skid_marks.hpp; path = ../../graphics/skid_marks.hpp; sourceTree = SOURCE_ROOT; }; - 952A1552103F68D000B1895D /* profile_world.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = profile_world.cpp; path = ../../modes/profile_world.cpp; sourceTree = SOURCE_ROOT; }; - 952A1553103F68D000B1895D /* profile_world.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = profile_world.hpp; path = ../../modes/profile_world.hpp; sourceTree = SOURCE_ROOT; }; - 95376CAD1320784100C842A4 /* lod_node.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = lod_node.cpp; path = ../../graphics/lod_node.cpp; sourceTree = SOURCE_ROOT; }; - 95376CAE1320784100C842A4 /* lod_node.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = lod_node.hpp; path = ../../graphics/lod_node.hpp; sourceTree = SOURCE_ROOT; }; - 953789710FC7829100DD1F8E /* graph_node.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = graph_node.hpp; path = ../../tracks/graph_node.hpp; sourceTree = SOURCE_ROOT; }; - 953789720FC7829100DD1F8E /* graph_node.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = graph_node.cpp; path = ../../tracks/graph_node.cpp; sourceTree = SOURCE_ROOT; }; - 953789800FC7831400DD1F8E /* quad.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = quad.hpp; path = ../../tracks/quad.hpp; sourceTree = SOURCE_ROOT; }; - 953789810FC7831400DD1F8E /* quad.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = quad.cpp; path = ../../tracks/quad.cpp; sourceTree = SOURCE_ROOT; }; - 9538A55E12CD094200CE3220 /* addon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = addon.cpp; path = ../../addons/addon.cpp; sourceTree = SOURCE_ROOT; }; - 9538A55F12CD094200CE3220 /* addon.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = addon.hpp; path = ../../addons/addon.hpp; sourceTree = SOURCE_ROOT; }; - 9538E2B512C25D6800172896 /* addons_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = addons_manager.cpp; path = ../../addons/addons_manager.cpp; sourceTree = SOURCE_ROOT; }; - 9538E2B612C25D6800172896 /* addons_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = addons_manager.hpp; path = ../../addons/addons_manager.hpp; sourceTree = SOURCE_ROOT; }; - 9538E2B712C25D6800172896 /* network_http.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = network_http.cpp; path = ../../addons/network_http.cpp; sourceTree = SOURCE_ROOT; }; - 9538E2B812C25D6800172896 /* network_http.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = network_http.hpp; path = ../../addons/network_http.hpp; sourceTree = SOURCE_ROOT; }; - 9538E2E812C2682B00172896 /* IrrFramework.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IrrFramework.framework; path = /Library/Frameworks/IrrFramework.framework; sourceTree = ""; }; - 95395A75129DFE130079BCE7 /* message_dialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = message_dialog.cpp; path = ../../states_screens/dialogs/message_dialog.cpp; sourceTree = SOURCE_ROOT; }; - 95395A76129DFE130079BCE7 /* message_dialog.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = message_dialog.hpp; path = ../../states_screens/dialogs/message_dialog.hpp; sourceTree = SOURCE_ROOT; }; - 953A959B13367D6E00D86B4D /* options_screen_ui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = options_screen_ui.cpp; path = ../../states_screens/options_screen_ui.cpp; sourceTree = SOURCE_ROOT; }; - 953A959C13367D6E00D86B4D /* options_screen_ui.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = options_screen_ui.hpp; path = ../../states_screens/options_screen_ui.hpp; sourceTree = SOURCE_ROOT; }; - 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; }; - 953EAAB00F30A4410000D57D /* triangle_mesh.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = triangle_mesh.hpp; path = ../../physics/triangle_mesh.hpp; sourceTree = SOURCE_ROOT; }; - 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; }; - 953F8B1F11F7C13C00205E66 /* scalable_font.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = scalable_font.cpp; path = ../../guiengine/scalable_font.cpp; sourceTree = SOURCE_ROOT; }; - 953F8B2011F7C13C00205E66 /* scalable_font.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = scalable_font.hpp; path = ../../guiengine/scalable_font.hpp; sourceTree = SOURCE_ROOT; }; - 9540E2560FD5F8FD002985B8 /* ptr_vector.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ptr_vector.hpp; path = ../../utils/ptr_vector.hpp; sourceTree = SOURCE_ROOT; }; - 9540E2570FD5F8FD002985B8 /* no_copy.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = no_copy.hpp; path = ../../utils/no_copy.hpp; sourceTree = SOURCE_ROOT; }; - 9542FC7512D3BDB000C00366 /* particle_emitter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = particle_emitter.cpp; path = ../../graphics/particle_emitter.cpp; sourceTree = SOURCE_ROOT; }; - 9542FC7612D3BDB000C00366 /* particle_emitter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = particle_emitter.hpp; path = ../../graphics/particle_emitter.hpp; sourceTree = SOURCE_ROOT; }; - 9542FD4A12D3E0D700C00366 /* particle_kind.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = particle_kind.cpp; path = ../../graphics/particle_kind.cpp; sourceTree = SOURCE_ROOT; }; - 9542FD4B12D3E0D700C00366 /* particle_kind.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = particle_kind.hpp; path = ../../graphics/particle_kind.hpp; sourceTree = SOURCE_ROOT; }; - 9543D58D14D36EE3000B0888 /* kart_gfx.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = kart_gfx.cpp; path = ../../karts/kart_gfx.cpp; sourceTree = SOURCE_ROOT; }; - 9543D58E14D36EE3000B0888 /* kart_gfx.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = kart_gfx.hpp; path = ../../karts/kart_gfx.hpp; sourceTree = SOURCE_ROOT; }; - 9543D59D14D38831000B0888 /* select_challenge.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = select_challenge.cpp; path = ../../states_screens/dialogs/select_challenge.cpp; sourceTree = SOURCE_ROOT; }; - 9543D5A514D3885F000B0888 /* select_challenge.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = select_challenge.hpp; path = ../../states_screens/dialogs/select_challenge.hpp; sourceTree = SOURCE_ROOT; }; - 9545ABC811E3E38300D3C37A /* progress_bar_widget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = progress_bar_widget.cpp; path = ../../guiengine/widgets/progress_bar_widget.cpp; sourceTree = SOURCE_ROOT; }; - 9545ABC911E3E38300D3C37A /* progress_bar_widget.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = progress_bar_widget.hpp; path = ../../guiengine/widgets/progress_bar_widget.hpp; sourceTree = SOURCE_ROOT; }; - 954E486911B19C4100B1DF63 /* fribidi.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = fribidi.framework; path = /Library/Frameworks/fribidi.framework; sourceTree = ""; }; - 954E4C250FF98B6E0047FE3E /* animation_base.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = animation_base.cpp; path = ../../animations/animation_base.cpp; sourceTree = SOURCE_ROOT; }; - 954E4C260FF98B6E0047FE3E /* animation_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = animation_base.hpp; path = ../../animations/animation_base.hpp; sourceTree = SOURCE_ROOT; }; - 954E4C290FF98B6E0047FE3E /* billboard_animation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = billboard_animation.cpp; path = ../../animations/billboard_animation.cpp; sourceTree = SOURCE_ROOT; }; - 954E4C2A0FF98B6E0047FE3E /* billboard_animation.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = billboard_animation.hpp; path = ../../animations/billboard_animation.hpp; sourceTree = SOURCE_ROOT; }; - 954E4C2B0FF98B6E0047FE3E /* three_d_animation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = three_d_animation.cpp; path = ../../animations/three_d_animation.cpp; sourceTree = SOURCE_ROOT; }; - 954E4C2C0FF98B6E0047FE3E /* three_d_animation.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = three_d_animation.hpp; path = ../../animations/three_d_animation.hpp; sourceTree = SOURCE_ROOT; }; - 9551B26D11DC0D4D002DD140 /* addons_screen.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = addons_screen.cpp; path = ../../states_screens/addons_screen.cpp; sourceTree = SOURCE_ROOT; }; - 9551B26E11DC0D4D002DD140 /* addons_screen.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = addons_screen.hpp; path = ../../states_screens/addons_screen.hpp; sourceTree = SOURCE_ROOT; }; - 9551B27811DC0D6A002DD140 /* zip.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = zip.cpp; path = ../../addons/zip.cpp; sourceTree = SOURCE_ROOT; }; - 9551B27911DC0D6A002DD140 /* zip.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = zip.hpp; path = ../../addons/zip.hpp; sourceTree = SOURCE_ROOT; }; - 9551C7F90FC1B63C00DB481B /* Ogg.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Ogg.framework; path = /Library/Frameworks/Ogg.framework; sourceTree = ""; }; - 9551C7FA0FC1B63C00DB481B /* OpenAL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenAL.framework; path = /Library/Frameworks/OpenAL.framework; sourceTree = ""; }; - 9551C7FB0FC1B63C00DB481B /* Vorbis.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Vorbis.framework; path = /Library/Frameworks/Vorbis.framework; sourceTree = ""; }; - 9551C8210FC1B6FF00DB481B /* SuperTuxKart.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SuperTuxKart.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 9551C9F80FC1B87600DB481B /* Config.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Config.xcconfig; sourceTree = SOURCE_ROOT; wrapsLines = 1; }; - 9551CA100FC1BB6400DB481B /* SuperTuxKart-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "SuperTuxKart-Info.plist"; sourceTree = SOURCE_ROOT; }; - 9551CBD90FC1BB9200DB481B /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; - 9552C1F91231249000347B6C /* world_with_rank.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = world_with_rank.cpp; path = ../../modes/world_with_rank.cpp; sourceTree = SOURCE_ROOT; }; - 9552C1FA1231249000347B6C /* world_with_rank.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = world_with_rank.hpp; path = ../../modes/world_with_rank.hpp; sourceTree = SOURCE_ROOT; }; - 9553823910FD4FEC00737979 /* constants.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = constants.cpp; path = ../../utils/constants.cpp; sourceTree = SOURCE_ROOT; }; - 9554C4A411F1188000906416 /* race_result_gui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = race_result_gui.cpp; path = ../../states_screens/race_result_gui.cpp; sourceTree = SOURCE_ROOT; }; - 9554C4A511F1188000906416 /* race_result_gui.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = race_result_gui.hpp; path = ../../states_screens/race_result_gui.hpp; sourceTree = SOURCE_ROOT; }; - 9556A87C119EF976009C558F /* options_screen_audio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = options_screen_audio.cpp; path = ../../states_screens/options_screen_audio.cpp; sourceTree = SOURCE_ROOT; }; - 9556A87D119EF976009C558F /* options_screen_audio.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = options_screen_audio.hpp; path = ../../states_screens/options_screen_audio.hpp; sourceTree = SOURCE_ROOT; }; - 9556A87E119EF976009C558F /* options_screen_video.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = options_screen_video.cpp; path = ../../states_screens/options_screen_video.cpp; sourceTree = SOURCE_ROOT; }; - 9556A87F119EF976009C558F /* options_screen_video.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = options_screen_video.hpp; path = ../../states_screens/options_screen_video.hpp; sourceTree = SOURCE_ROOT; }; - 955764E412FB67EF005CE479 /* btKartRaycast.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btKartRaycast.cpp; path = ../../physics/btKartRaycast.cpp; sourceTree = SOURCE_ROOT; }; - 955764E512FB67EF005CE479 /* btKartRaycast.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = btKartRaycast.hpp; path = ../../physics/btKartRaycast.hpp; sourceTree = SOURCE_ROOT; }; - 9559DE7E12FF777600350DE8 /* rain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rain.cpp; path = ../../graphics/rain.cpp; sourceTree = SOURCE_ROOT; }; - 955DE88110042701006A4F3C /* check_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = check_manager.cpp; path = ../../tracks/check_manager.cpp; sourceTree = SOURCE_ROOT; }; - 955DE88210042701006A4F3C /* check_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = check_manager.hpp; path = ../../tracks/check_manager.hpp; sourceTree = SOURCE_ROOT; }; - 955DE8871004273B006A4F3C /* check_structure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = check_structure.cpp; path = ../../tracks/check_structure.cpp; sourceTree = SOURCE_ROOT; }; - 955DE8881004273B006A4F3C /* check_structure.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = check_structure.hpp; path = ../../tracks/check_structure.hpp; sourceTree = SOURCE_ROOT; }; - 9560368A12187EFB00EB96C4 /* layout_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = layout_manager.cpp; path = ../../guiengine/layout_manager.cpp; sourceTree = SOURCE_ROOT; }; - 9560368B12187EFB00EB96C4 /* layout_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = layout_manager.hpp; path = ../../guiengine/layout_manager.hpp; sourceTree = SOURCE_ROOT; }; - 956039B81218C09E00EB96C4 /* abstract_top_level_container.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = abstract_top_level_container.cpp; path = ../../guiengine/abstract_top_level_container.cpp; sourceTree = SOURCE_ROOT; }; - 956039B91218C09E00EB96C4 /* abstract_top_level_container.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = abstract_top_level_container.hpp; path = ../../guiengine/abstract_top_level_container.hpp; sourceTree = SOURCE_ROOT; }; - 95634EF01126272C009C145D /* gp_info_dialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gp_info_dialog.cpp; path = ../../states_screens/dialogs/gp_info_dialog.cpp; sourceTree = SOURCE_ROOT; }; - 95634EF11126272C009C145D /* gp_info_dialog.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = gp_info_dialog.hpp; path = ../../states_screens/dialogs/gp_info_dialog.hpp; sourceTree = SOURCE_ROOT; }; - 956541B910DD5F0A00C83E99 /* arenas_screen.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = arenas_screen.cpp; path = ../../states_screens/arenas_screen.cpp; sourceTree = SOURCE_ROOT; }; - 956541BA10DD5F0A00C83E99 /* arenas_screen.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = arenas_screen.hpp; path = ../../states_screens/arenas_screen.hpp; sourceTree = SOURCE_ROOT; }; - 956541DF10DD628C00C83E99 /* add_device_dialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = add_device_dialog.cpp; path = ../../states_screens/dialogs/add_device_dialog.cpp; sourceTree = SOURCE_ROOT; }; - 956541E010DD628C00C83E99 /* add_device_dialog.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = add_device_dialog.hpp; path = ../../states_screens/dialogs/add_device_dialog.hpp; sourceTree = SOURCE_ROOT; }; - 956830DE1132EC9E00088D14 /* irr_debug_drawer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = irr_debug_drawer.cpp; path = ../../physics/irr_debug_drawer.cpp; sourceTree = SOURCE_ROOT; }; - 956830DF1132EC9E00088D14 /* irr_debug_drawer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = irr_debug_drawer.hpp; path = ../../physics/irr_debug_drawer.hpp; sourceTree = SOURCE_ROOT; }; - 956B0A9E1232D2E900767CCD /* bubble_widget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bubble_widget.cpp; path = ../../guiengine/widgets/bubble_widget.cpp; sourceTree = SOURCE_ROOT; }; - 956B0AA21232D45D00767CCD /* bubble_widget.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = bubble_widget.hpp; path = ../../guiengine/widgets/bubble_widget.hpp; sourceTree = SOURCE_ROOT; }; - 956C6EC81128D3FB004336C8 /* controller.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = controller.cpp; path = ../../karts/controller/controller.cpp; sourceTree = SOURCE_ROOT; }; - 956C6EC91128D3FB004336C8 /* controller.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = controller.hpp; path = ../../karts/controller/controller.hpp; sourceTree = SOURCE_ROOT; }; - 956C6ECC1128D3FB004336C8 /* end_controller.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = end_controller.cpp; path = ../../karts/controller/end_controller.cpp; sourceTree = SOURCE_ROOT; }; - 956C6ECD1128D3FB004336C8 /* end_controller.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = end_controller.hpp; path = ../../karts/controller/end_controller.hpp; sourceTree = SOURCE_ROOT; }; - 956C6ECE1128D3FB004336C8 /* kart_control.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = kart_control.hpp; path = ../../karts/controller/kart_control.hpp; sourceTree = SOURCE_ROOT; }; - 956C6ED11128D3FB004336C8 /* player_controller.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = player_controller.cpp; path = ../../karts/controller/player_controller.cpp; sourceTree = SOURCE_ROOT; }; - 956C6ED21128D3FB004336C8 /* player_controller.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = player_controller.hpp; path = ../../karts/controller/player_controller.hpp; sourceTree = SOURCE_ROOT; }; - 956F557313527E4B005C291D /* race_gui_base.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = race_gui_base.cpp; path = ../../states_screens/race_gui_base.cpp; sourceTree = SOURCE_ROOT; }; - 956F557413527E4B005C291D /* race_gui_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = race_gui_base.hpp; path = ../../states_screens/race_gui_base.hpp; sourceTree = SOURCE_ROOT; }; - 95702AE51306076100EEC3A0 /* aabbox3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = aabbox3d.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/aabbox3d.h; sourceTree = SOURCE_ROOT; }; - 95702AE61306076100EEC3A0 /* CDynamicMeshBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDynamicMeshBuffer.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/CDynamicMeshBuffer.h; sourceTree = SOURCE_ROOT; }; - 95702AE71306076100EEC3A0 /* CIndexBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CIndexBuffer.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/CIndexBuffer.h; sourceTree = SOURCE_ROOT; }; - 95702AE81306076100EEC3A0 /* CMeshBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CMeshBuffer.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/CMeshBuffer.h; sourceTree = SOURCE_ROOT; }; - 95702AE91306076100EEC3A0 /* coreutil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = coreutil.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/coreutil.h; sourceTree = SOURCE_ROOT; }; - 95702AEA1306076100EEC3A0 /* CVertexBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CVertexBuffer.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/CVertexBuffer.h; sourceTree = SOURCE_ROOT; }; - 95702AEB1306076100EEC3A0 /* dimension2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dimension2d.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/dimension2d.h; sourceTree = SOURCE_ROOT; }; - 95702AEC1306076100EEC3A0 /* driverChoice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = driverChoice.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/driverChoice.h; sourceTree = SOURCE_ROOT; }; - 95702AED1306076100EEC3A0 /* EAttributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EAttributes.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/EAttributes.h; sourceTree = SOURCE_ROOT; }; - 95702AEE1306076100EEC3A0 /* ECullingTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ECullingTypes.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/ECullingTypes.h; sourceTree = SOURCE_ROOT; }; - 95702AEF1306076100EEC3A0 /* EDebugSceneTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EDebugSceneTypes.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/EDebugSceneTypes.h; sourceTree = SOURCE_ROOT; }; - 95702AF01306076100EEC3A0 /* EDeviceTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EDeviceTypes.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/EDeviceTypes.h; sourceTree = SOURCE_ROOT; }; - 95702AF11306076100EEC3A0 /* EDriverFeatures.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EDriverFeatures.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/EDriverFeatures.h; sourceTree = SOURCE_ROOT; }; - 95702AF21306076100EEC3A0 /* EDriverTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EDriverTypes.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/EDriverTypes.h; sourceTree = SOURCE_ROOT; }; - 95702AF31306076100EEC3A0 /* EGUIAlignment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EGUIAlignment.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/EGUIAlignment.h; sourceTree = SOURCE_ROOT; }; - 95702AF41306076100EEC3A0 /* EGUIElementTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EGUIElementTypes.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/EGUIElementTypes.h; sourceTree = SOURCE_ROOT; }; - 95702AF51306076100EEC3A0 /* EHardwareBufferFlags.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EHardwareBufferFlags.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/EHardwareBufferFlags.h; sourceTree = SOURCE_ROOT; }; - 95702AF61306076100EEC3A0 /* EMaterialFlags.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EMaterialFlags.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/EMaterialFlags.h; sourceTree = SOURCE_ROOT; }; - 95702AF71306076100EEC3A0 /* EMaterialTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EMaterialTypes.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/EMaterialTypes.h; sourceTree = SOURCE_ROOT; }; - 95702AF81306076100EEC3A0 /* EMeshWriterEnums.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EMeshWriterEnums.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/EMeshWriterEnums.h; sourceTree = SOURCE_ROOT; }; - 95702AF91306076100EEC3A0 /* EMessageBoxFlags.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EMessageBoxFlags.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/EMessageBoxFlags.h; sourceTree = SOURCE_ROOT; }; - 95702AFA1306076100EEC3A0 /* EPrimitiveTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EPrimitiveTypes.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/EPrimitiveTypes.h; sourceTree = SOURCE_ROOT; }; - 95702AFB1306076100EEC3A0 /* ESceneNodeAnimatorTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ESceneNodeAnimatorTypes.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/ESceneNodeAnimatorTypes.h; sourceTree = SOURCE_ROOT; }; - 95702AFC1306076100EEC3A0 /* ESceneNodeTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ESceneNodeTypes.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/ESceneNodeTypes.h; sourceTree = SOURCE_ROOT; }; - 95702AFD1306076100EEC3A0 /* EShaderTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EShaderTypes.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/EShaderTypes.h; sourceTree = SOURCE_ROOT; }; - 95702AFE1306076100EEC3A0 /* ETerrainElements.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ETerrainElements.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/ETerrainElements.h; sourceTree = SOURCE_ROOT; }; - 95702AFF1306076100EEC3A0 /* fast_atof.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fast_atof.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/fast_atof.h; sourceTree = SOURCE_ROOT; }; - 95702B001306076100EEC3A0 /* heapsort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = heapsort.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/heapsort.h; sourceTree = SOURCE_ROOT; }; - 95702B011306076100EEC3A0 /* IAnimatedMesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IAnimatedMesh.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IAnimatedMesh.h; sourceTree = SOURCE_ROOT; }; - 95702B021306076100EEC3A0 /* IAnimatedMeshMD2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IAnimatedMeshMD2.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IAnimatedMeshMD2.h; sourceTree = SOURCE_ROOT; }; - 95702B031306076100EEC3A0 /* IAnimatedMeshMD3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IAnimatedMeshMD3.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IAnimatedMeshMD3.h; sourceTree = SOURCE_ROOT; }; - 95702B041306076100EEC3A0 /* IAnimatedMeshSceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IAnimatedMeshSceneNode.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IAnimatedMeshSceneNode.h; sourceTree = SOURCE_ROOT; }; - 95702B051306076100EEC3A0 /* IAttributeExchangingObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IAttributeExchangingObject.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IAttributeExchangingObject.h; sourceTree = SOURCE_ROOT; }; - 95702B061306076100EEC3A0 /* IAttributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IAttributes.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IAttributes.h; sourceTree = SOURCE_ROOT; }; - 95702B071306076100EEC3A0 /* IBillboardSceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IBillboardSceneNode.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IBillboardSceneNode.h; sourceTree = SOURCE_ROOT; }; - 95702B081306076100EEC3A0 /* IBillboardTextSceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IBillboardTextSceneNode.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IBillboardTextSceneNode.h; sourceTree = SOURCE_ROOT; }; - 95702B091306076100EEC3A0 /* IBoneSceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IBoneSceneNode.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IBoneSceneNode.h; sourceTree = SOURCE_ROOT; }; - 95702B0A1306076100EEC3A0 /* ICameraSceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ICameraSceneNode.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/ICameraSceneNode.h; sourceTree = SOURCE_ROOT; }; - 95702B0B1306076100EEC3A0 /* ICursorControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ICursorControl.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/ICursorControl.h; sourceTree = SOURCE_ROOT; }; - 95702B0C1306076100EEC3A0 /* IDummyTransformationSceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IDummyTransformationSceneNode.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IDummyTransformationSceneNode.h; sourceTree = SOURCE_ROOT; }; - 95702B0D1306076100EEC3A0 /* IDynamicMeshBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IDynamicMeshBuffer.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IDynamicMeshBuffer.h; sourceTree = SOURCE_ROOT; }; - 95702B0E1306076100EEC3A0 /* IEventReceiver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IEventReceiver.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IEventReceiver.h; sourceTree = SOURCE_ROOT; }; - 95702B0F1306076100EEC3A0 /* IFileArchive.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IFileArchive.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IFileArchive.h; sourceTree = SOURCE_ROOT; }; - 95702B101306076100EEC3A0 /* IFileList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IFileList.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IFileList.h; sourceTree = SOURCE_ROOT; }; - 95702B111306076100EEC3A0 /* IFileSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IFileSystem.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IFileSystem.h; sourceTree = SOURCE_ROOT; }; - 95702B121306076100EEC3A0 /* IGeometryCreator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGeometryCreator.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IGeometryCreator.h; sourceTree = SOURCE_ROOT; }; - 95702B131306076100EEC3A0 /* IGPUProgrammingServices.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGPUProgrammingServices.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IGPUProgrammingServices.h; sourceTree = SOURCE_ROOT; }; - 95702B141306076100EEC3A0 /* IGUIButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIButton.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IGUIButton.h; sourceTree = SOURCE_ROOT; }; - 95702B151306076100EEC3A0 /* IGUICheckBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUICheckBox.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IGUICheckBox.h; sourceTree = SOURCE_ROOT; }; - 95702B161306076100EEC3A0 /* IGUIColorSelectDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIColorSelectDialog.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IGUIColorSelectDialog.h; sourceTree = SOURCE_ROOT; }; - 95702B171306076100EEC3A0 /* IGUIComboBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIComboBox.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IGUIComboBox.h; sourceTree = SOURCE_ROOT; }; - 95702B181306076100EEC3A0 /* IGUIContextMenu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIContextMenu.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IGUIContextMenu.h; sourceTree = SOURCE_ROOT; }; - 95702B191306076100EEC3A0 /* IGUIEditBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIEditBox.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IGUIEditBox.h; sourceTree = SOURCE_ROOT; }; - 95702B1A1306076100EEC3A0 /* IGUIElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIElement.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IGUIElement.h; sourceTree = SOURCE_ROOT; }; - 95702B1B1306076100EEC3A0 /* IGUIElementFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIElementFactory.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IGUIElementFactory.h; sourceTree = SOURCE_ROOT; }; - 95702B1C1306076100EEC3A0 /* IGUIEnvironment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIEnvironment.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IGUIEnvironment.h; sourceTree = SOURCE_ROOT; }; - 95702B1D1306076100EEC3A0 /* IGUIFileOpenDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIFileOpenDialog.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IGUIFileOpenDialog.h; sourceTree = SOURCE_ROOT; }; - 95702B1E1306076100EEC3A0 /* IGUIFont.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIFont.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IGUIFont.h; sourceTree = SOURCE_ROOT; }; - 95702B1F1306076100EEC3A0 /* IGUIFontBitmap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIFontBitmap.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IGUIFontBitmap.h; sourceTree = SOURCE_ROOT; }; - 95702B201306076100EEC3A0 /* IGUIImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIImage.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IGUIImage.h; sourceTree = SOURCE_ROOT; }; - 95702B211306076100EEC3A0 /* IGUIImageList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIImageList.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IGUIImageList.h; sourceTree = SOURCE_ROOT; }; - 95702B221306076100EEC3A0 /* IGUIInOutFader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIInOutFader.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IGUIInOutFader.h; sourceTree = SOURCE_ROOT; }; - 95702B231306076100EEC3A0 /* IGUIListBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIListBox.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IGUIListBox.h; sourceTree = SOURCE_ROOT; }; - 95702B241306076100EEC3A0 /* IGUIMeshViewer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIMeshViewer.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IGUIMeshViewer.h; sourceTree = SOURCE_ROOT; }; - 95702B251306076100EEC3A0 /* IGUIScrollBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIScrollBar.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IGUIScrollBar.h; sourceTree = SOURCE_ROOT; }; - 95702B261306076100EEC3A0 /* IGUISkin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUISkin.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IGUISkin.h; sourceTree = SOURCE_ROOT; }; - 95702B271306076100EEC3A0 /* IGUISpinBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUISpinBox.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IGUISpinBox.h; sourceTree = SOURCE_ROOT; }; - 95702B281306076100EEC3A0 /* IGUISpriteBank.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUISpriteBank.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IGUISpriteBank.h; sourceTree = SOURCE_ROOT; }; - 95702B291306076100EEC3A0 /* IGUIStaticText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIStaticText.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IGUIStaticText.h; sourceTree = SOURCE_ROOT; }; - 95702B2A1306076100EEC3A0 /* IGUITabControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUITabControl.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IGUITabControl.h; sourceTree = SOURCE_ROOT; }; - 95702B2B1306076100EEC3A0 /* IGUITable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUITable.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IGUITable.h; sourceTree = SOURCE_ROOT; }; - 95702B2C1306076100EEC3A0 /* IGUIToolbar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIToolbar.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IGUIToolbar.h; sourceTree = SOURCE_ROOT; }; - 95702B2D1306076100EEC3A0 /* IGUITreeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUITreeView.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IGUITreeView.h; sourceTree = SOURCE_ROOT; }; - 95702B2E1306076100EEC3A0 /* IGUIWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IGUIWindow.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IGUIWindow.h; sourceTree = SOURCE_ROOT; }; - 95702B2F1306076100EEC3A0 /* IImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IImage.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IImage.h; sourceTree = SOURCE_ROOT; }; - 95702B301306076100EEC3A0 /* IImageLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IImageLoader.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IImageLoader.h; sourceTree = SOURCE_ROOT; }; - 95702B311306076100EEC3A0 /* IImageWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IImageWriter.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IImageWriter.h; sourceTree = SOURCE_ROOT; }; - 95702B321306076100EEC3A0 /* IIndexBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IIndexBuffer.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IIndexBuffer.h; sourceTree = SOURCE_ROOT; }; - 95702B331306076100EEC3A0 /* ILightManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ILightManager.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/ILightManager.h; sourceTree = SOURCE_ROOT; }; - 95702B341306076100EEC3A0 /* ILightSceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ILightSceneNode.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/ILightSceneNode.h; sourceTree = SOURCE_ROOT; }; - 95702B351306076100EEC3A0 /* ILogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ILogger.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/ILogger.h; sourceTree = SOURCE_ROOT; }; - 95702B361306076100EEC3A0 /* IMaterialRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IMaterialRenderer.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IMaterialRenderer.h; sourceTree = SOURCE_ROOT; }; - 95702B371306076100EEC3A0 /* IMaterialRendererServices.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IMaterialRendererServices.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IMaterialRendererServices.h; sourceTree = SOURCE_ROOT; }; - 95702B381306076100EEC3A0 /* IMesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IMesh.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IMesh.h; sourceTree = SOURCE_ROOT; }; - 95702B391306076100EEC3A0 /* IMeshBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IMeshBuffer.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IMeshBuffer.h; sourceTree = SOURCE_ROOT; }; - 95702B3A1306076100EEC3A0 /* IMeshCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IMeshCache.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IMeshCache.h; sourceTree = SOURCE_ROOT; }; - 95702B3B1306076100EEC3A0 /* IMeshLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IMeshLoader.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IMeshLoader.h; sourceTree = SOURCE_ROOT; }; - 95702B3C1306076100EEC3A0 /* IMeshManipulator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IMeshManipulator.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IMeshManipulator.h; sourceTree = SOURCE_ROOT; }; - 95702B3D1306076100EEC3A0 /* IMeshSceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IMeshSceneNode.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IMeshSceneNode.h; sourceTree = SOURCE_ROOT; }; - 95702B3E1306076100EEC3A0 /* IMeshWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IMeshWriter.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IMeshWriter.h; sourceTree = SOURCE_ROOT; }; - 95702B3F1306076100EEC3A0 /* IMetaTriangleSelector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IMetaTriangleSelector.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IMetaTriangleSelector.h; sourceTree = SOURCE_ROOT; }; - 95702B401306076100EEC3A0 /* IOSOperator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IOSOperator.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IOSOperator.h; sourceTree = SOURCE_ROOT; }; - 95702B411306076100EEC3A0 /* IParticleAffector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IParticleAffector.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IParticleAffector.h; sourceTree = SOURCE_ROOT; }; - 95702B421306076100EEC3A0 /* IParticleAnimatedMeshSceneNodeEmitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IParticleAnimatedMeshSceneNodeEmitter.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IParticleAnimatedMeshSceneNodeEmitter.h; sourceTree = SOURCE_ROOT; }; - 95702B431306076100EEC3A0 /* IParticleAttractionAffector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IParticleAttractionAffector.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IParticleAttractionAffector.h; sourceTree = SOURCE_ROOT; }; - 95702B441306076100EEC3A0 /* IParticleBoxEmitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IParticleBoxEmitter.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IParticleBoxEmitter.h; sourceTree = SOURCE_ROOT; }; - 95702B451306076100EEC3A0 /* IParticleCylinderEmitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IParticleCylinderEmitter.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IParticleCylinderEmitter.h; sourceTree = SOURCE_ROOT; }; - 95702B461306076100EEC3A0 /* IParticleEmitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IParticleEmitter.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IParticleEmitter.h; sourceTree = SOURCE_ROOT; }; - 95702B471306076100EEC3A0 /* IParticleFadeOutAffector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IParticleFadeOutAffector.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IParticleFadeOutAffector.h; sourceTree = SOURCE_ROOT; }; - 95702B481306076100EEC3A0 /* IParticleGravityAffector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IParticleGravityAffector.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IParticleGravityAffector.h; sourceTree = SOURCE_ROOT; }; - 95702B491306076100EEC3A0 /* IParticleMeshEmitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IParticleMeshEmitter.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IParticleMeshEmitter.h; sourceTree = SOURCE_ROOT; }; - 95702B4A1306076100EEC3A0 /* IParticleRingEmitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IParticleRingEmitter.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IParticleRingEmitter.h; sourceTree = SOURCE_ROOT; }; - 95702B4B1306076100EEC3A0 /* IParticleRotationAffector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IParticleRotationAffector.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IParticleRotationAffector.h; sourceTree = SOURCE_ROOT; }; - 95702B4C1306076100EEC3A0 /* IParticleSphereEmitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IParticleSphereEmitter.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IParticleSphereEmitter.h; sourceTree = SOURCE_ROOT; }; - 95702B4D1306076100EEC3A0 /* IParticleSystemSceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IParticleSystemSceneNode.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IParticleSystemSceneNode.h; sourceTree = SOURCE_ROOT; }; - 95702B4E1306076100EEC3A0 /* IQ3LevelMesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IQ3LevelMesh.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IQ3LevelMesh.h; sourceTree = SOURCE_ROOT; }; - 95702B4F1306076100EEC3A0 /* IQ3Shader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IQ3Shader.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IQ3Shader.h; sourceTree = SOURCE_ROOT; }; - 95702B501306076100EEC3A0 /* IReadFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IReadFile.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IReadFile.h; sourceTree = SOURCE_ROOT; }; - 95702B511306076100EEC3A0 /* IReferenceCounted.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IReferenceCounted.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IReferenceCounted.h; sourceTree = SOURCE_ROOT; }; - 95702B521306076100EEC3A0 /* irrAllocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = irrAllocator.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/irrAllocator.h; sourceTree = SOURCE_ROOT; }; - 95702B531306076100EEC3A0 /* irrArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = irrArray.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/irrArray.h; sourceTree = SOURCE_ROOT; }; - 95702B541306076100EEC3A0 /* IrrCompileConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IrrCompileConfig.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IrrCompileConfig.h; sourceTree = SOURCE_ROOT; }; - 95702B551306076100EEC3A0 /* irrlicht.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = irrlicht.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/irrlicht.h; sourceTree = SOURCE_ROOT; }; - 95702B561306076100EEC3A0 /* IrrlichtDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IrrlichtDevice.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IrrlichtDevice.h; sourceTree = SOURCE_ROOT; }; - 95702B571306076100EEC3A0 /* irrList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = irrList.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/irrList.h; sourceTree = SOURCE_ROOT; }; - 95702B581306076100EEC3A0 /* irrMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = irrMap.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/irrMap.h; sourceTree = SOURCE_ROOT; }; - 95702B591306076100EEC3A0 /* irrMath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = irrMath.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/irrMath.h; sourceTree = SOURCE_ROOT; }; - 95702B5A1306076100EEC3A0 /* irrString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = irrString.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/irrString.h; sourceTree = SOURCE_ROOT; }; - 95702B5B1306076100EEC3A0 /* irrTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = irrTypes.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/irrTypes.h; sourceTree = SOURCE_ROOT; }; - 95702B5C1306076100EEC3A0 /* irrXML.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = irrXML.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/irrXML.h; sourceTree = SOURCE_ROOT; }; - 95702B5D1306076100EEC3A0 /* ISceneCollisionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISceneCollisionManager.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/ISceneCollisionManager.h; sourceTree = SOURCE_ROOT; }; - 95702B5E1306076100EEC3A0 /* ISceneManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISceneManager.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/ISceneManager.h; sourceTree = SOURCE_ROOT; }; - 95702B5F1306076100EEC3A0 /* ISceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISceneNode.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/ISceneNode.h; sourceTree = SOURCE_ROOT; }; - 95702B601306076100EEC3A0 /* ISceneNodeAnimator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISceneNodeAnimator.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/ISceneNodeAnimator.h; sourceTree = SOURCE_ROOT; }; - 95702B611306076100EEC3A0 /* ISceneNodeAnimatorCameraFPS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISceneNodeAnimatorCameraFPS.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/ISceneNodeAnimatorCameraFPS.h; sourceTree = SOURCE_ROOT; }; - 95702B621306076100EEC3A0 /* ISceneNodeAnimatorCameraMaya.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISceneNodeAnimatorCameraMaya.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/ISceneNodeAnimatorCameraMaya.h; sourceTree = SOURCE_ROOT; }; - 95702B631306076100EEC3A0 /* ISceneNodeAnimatorCollisionResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISceneNodeAnimatorCollisionResponse.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/ISceneNodeAnimatorCollisionResponse.h; sourceTree = SOURCE_ROOT; }; - 95702B641306076100EEC3A0 /* ISceneNodeAnimatorFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISceneNodeAnimatorFactory.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/ISceneNodeAnimatorFactory.h; sourceTree = SOURCE_ROOT; }; - 95702B651306076100EEC3A0 /* ISceneNodeFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISceneNodeFactory.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/ISceneNodeFactory.h; sourceTree = SOURCE_ROOT; }; - 95702B661306076100EEC3A0 /* ISceneUserDataSerializer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISceneUserDataSerializer.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/ISceneUserDataSerializer.h; sourceTree = SOURCE_ROOT; }; - 95702B671306076100EEC3A0 /* IShaderConstantSetCallBack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IShaderConstantSetCallBack.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IShaderConstantSetCallBack.h; sourceTree = SOURCE_ROOT; }; - 95702B681306076100EEC3A0 /* IShadowVolumeSceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IShadowVolumeSceneNode.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IShadowVolumeSceneNode.h; sourceTree = SOURCE_ROOT; }; - 95702B691306076100EEC3A0 /* ISkinnedMesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ISkinnedMesh.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/ISkinnedMesh.h; sourceTree = SOURCE_ROOT; }; - 95702B6A1306076100EEC3A0 /* ITerrainSceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ITerrainSceneNode.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/ITerrainSceneNode.h; sourceTree = SOURCE_ROOT; }; - 95702B6B1306076100EEC3A0 /* ITextSceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ITextSceneNode.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/ITextSceneNode.h; sourceTree = SOURCE_ROOT; }; - 95702B6C1306076100EEC3A0 /* ITexture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ITexture.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/ITexture.h; sourceTree = SOURCE_ROOT; }; - 95702B6D1306076100EEC3A0 /* ITimer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ITimer.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/ITimer.h; sourceTree = SOURCE_ROOT; }; - 95702B6E1306076100EEC3A0 /* ITriangleSelector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ITriangleSelector.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/ITriangleSelector.h; sourceTree = SOURCE_ROOT; }; - 95702B6F1306076100EEC3A0 /* IVertexBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IVertexBuffer.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IVertexBuffer.h; sourceTree = SOURCE_ROOT; }; - 95702B701306076100EEC3A0 /* IVideoDriver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IVideoDriver.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IVideoDriver.h; sourceTree = SOURCE_ROOT; }; - 95702B711306076100EEC3A0 /* IVideoModeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IVideoModeList.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IVideoModeList.h; sourceTree = SOURCE_ROOT; }; - 95702B721306076100EEC3A0 /* IVolumeLightSceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IVolumeLightSceneNode.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IVolumeLightSceneNode.h; sourceTree = SOURCE_ROOT; }; - 95702B731306076100EEC3A0 /* IWriteFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IWriteFile.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IWriteFile.h; sourceTree = SOURCE_ROOT; }; - 95702B741306076100EEC3A0 /* IXMLReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IXMLReader.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IXMLReader.h; sourceTree = SOURCE_ROOT; }; - 95702B751306076100EEC3A0 /* IXMLWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IXMLWriter.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/IXMLWriter.h; sourceTree = SOURCE_ROOT; }; - 95702B761306076100EEC3A0 /* Keycodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Keycodes.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/Keycodes.h; sourceTree = SOURCE_ROOT; }; - 95702B771306076100EEC3A0 /* line2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = line2d.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/line2d.h; sourceTree = SOURCE_ROOT; }; - 95702B781306076100EEC3A0 /* line3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = line3d.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/line3d.h; sourceTree = SOURCE_ROOT; }; - 95702B791306076100EEC3A0 /* matrix4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = matrix4.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/matrix4.h; sourceTree = SOURCE_ROOT; }; - 95702B7A1306076100EEC3A0 /* path.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = path.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/path.h; sourceTree = SOURCE_ROOT; }; - 95702B7B1306076100EEC3A0 /* plane3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = plane3d.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/plane3d.h; sourceTree = SOURCE_ROOT; }; - 95702B7C1306076100EEC3A0 /* position2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = position2d.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/position2d.h; sourceTree = SOURCE_ROOT; }; - 95702B7D1306076100EEC3A0 /* quaternion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = quaternion.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/quaternion.h; sourceTree = SOURCE_ROOT; }; - 95702B7E1306076100EEC3A0 /* rect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rect.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/rect.h; sourceTree = SOURCE_ROOT; }; - 95702B7F1306076100EEC3A0 /* S3DVertex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = S3DVertex.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/S3DVertex.h; sourceTree = SOURCE_ROOT; }; - 95702B801306076100EEC3A0 /* SAnimatedMesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SAnimatedMesh.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/SAnimatedMesh.h; sourceTree = SOURCE_ROOT; }; - 95702B811306076100EEC3A0 /* SceneParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SceneParameters.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/SceneParameters.h; sourceTree = SOURCE_ROOT; }; - 95702B821306076100EEC3A0 /* SColor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SColor.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/SColor.h; sourceTree = SOURCE_ROOT; }; - 95702B831306076100EEC3A0 /* SExposedVideoData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SExposedVideoData.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/SExposedVideoData.h; sourceTree = SOURCE_ROOT; }; - 95702B841306076100EEC3A0 /* SIrrCreationParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SIrrCreationParameters.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/SIrrCreationParameters.h; sourceTree = SOURCE_ROOT; }; - 95702B851306076100EEC3A0 /* SKeyMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SKeyMap.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/SKeyMap.h; sourceTree = SOURCE_ROOT; }; - 95702B861306076100EEC3A0 /* SLight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SLight.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/SLight.h; sourceTree = SOURCE_ROOT; }; - 95702B871306076100EEC3A0 /* SMaterial.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SMaterial.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/SMaterial.h; sourceTree = SOURCE_ROOT; }; - 95702B881306076100EEC3A0 /* SMaterialLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SMaterialLayer.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/SMaterialLayer.h; sourceTree = SOURCE_ROOT; }; - 95702B891306076100EEC3A0 /* SMesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SMesh.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/SMesh.h; sourceTree = SOURCE_ROOT; }; - 95702B8A1306076100EEC3A0 /* SMeshBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SMeshBuffer.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/SMeshBuffer.h; sourceTree = SOURCE_ROOT; }; - 95702B8B1306076100EEC3A0 /* SMeshBufferLightMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SMeshBufferLightMap.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/SMeshBufferLightMap.h; sourceTree = SOURCE_ROOT; }; - 95702B8C1306076100EEC3A0 /* SMeshBufferTangents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SMeshBufferTangents.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/SMeshBufferTangents.h; sourceTree = SOURCE_ROOT; }; - 95702B8D1306076100EEC3A0 /* SParticle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SParticle.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/SParticle.h; sourceTree = SOURCE_ROOT; }; - 95702B8E1306076100EEC3A0 /* SSharedMeshBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SSharedMeshBuffer.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/SSharedMeshBuffer.h; sourceTree = SOURCE_ROOT; }; - 95702B8F1306076100EEC3A0 /* SSkinMeshBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SSkinMeshBuffer.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/SSkinMeshBuffer.h; sourceTree = SOURCE_ROOT; }; - 95702B901306076100EEC3A0 /* SVertexIndex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SVertexIndex.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/SVertexIndex.h; sourceTree = SOURCE_ROOT; }; - 95702B911306076100EEC3A0 /* SVertexManipulator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SVertexManipulator.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/SVertexManipulator.h; sourceTree = SOURCE_ROOT; }; - 95702B921306076100EEC3A0 /* SViewFrustum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SViewFrustum.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/SViewFrustum.h; sourceTree = SOURCE_ROOT; }; - 95702B931306076100EEC3A0 /* triangle3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = triangle3d.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/triangle3d.h; sourceTree = SOURCE_ROOT; }; - 95702B941306076100EEC3A0 /* vector2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vector2d.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/vector2d.h; sourceTree = SOURCE_ROOT; }; - 95702B951306076100EEC3A0 /* vector3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vector3d.h; path = ../../../../../../Library/Frameworks/IrrFramework.framework/Versions/A/Headers/vector3d.h; sourceTree = SOURCE_ROOT; }; - 9574F17A11206881008D202E /* world_status.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = world_status.cpp; path = ../../modes/world_status.cpp; sourceTree = SOURCE_ROOT; }; - 9574F17B11206881008D202E /* world_status.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = world_status.hpp; path = ../../modes/world_status.hpp; sourceTree = SOURCE_ROOT; }; - 9575720F134F5B890037747B /* CGUIEditBox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CGUIEditBox.cpp; path = ../../guiengine/widgets/CGUIEditBox.cpp; sourceTree = SOURCE_ROOT; }; - 95757210134F5B890037747B /* CGUIEditBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CGUIEditBox.h; path = ../../guiengine/widgets/CGUIEditBox.h; sourceTree = SOURCE_ROOT; }; - 957817DA142142C500AD07B2 /* referee.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = referee.cpp; path = ../../graphics/referee.cpp; sourceTree = SOURCE_ROOT; }; - 957817DB142142C500AD07B2 /* referee.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = referee.hpp; path = ../../graphics/referee.hpp; sourceTree = SOURCE_ROOT; }; - 957899B613C8E05F007AA5A3 /* profiler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = profiler.cpp; path = ../../utils/profiler.cpp; sourceTree = SOURCE_ROOT; }; - 957899B713C8E05F007AA5A3 /* profiler.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = profiler.hpp; path = ../../utils/profiler.hpp; sourceTree = SOURCE_ROOT; }; - 957957A014A3CA3900E72497 /* custom_video_settings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = custom_video_settings.cpp; path = ../../states_screens/dialogs/custom_video_settings.cpp; sourceTree = SOURCE_ROOT; }; - 957957A114A3CA3900E72497 /* custom_video_settings.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = custom_video_settings.hpp; path = ../../states_screens/dialogs/custom_video_settings.hpp; sourceTree = SOURCE_ROOT; }; - 957A2D261405E21D00F45B22 /* hit_effect.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = hit_effect.hpp; path = ../../graphics/hit_effect.hpp; sourceTree = SOURCE_ROOT; }; - 957A2D271405E21D00F45B22 /* hit_sfx.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = hit_sfx.cpp; path = ../../graphics/hit_sfx.cpp; sourceTree = SOURCE_ROOT; }; - 957A2D281405E21D00F45B22 /* hit_sfx.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = hit_sfx.hpp; path = ../../graphics/hit_sfx.hpp; sourceTree = SOURCE_ROOT; }; - 957ED47E1163FF18002AB42C /* ai_base_controller.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ai_base_controller.cpp; path = ../../karts/controller/ai_base_controller.cpp; sourceTree = SOURCE_ROOT; }; - 957ED47F1163FF18002AB42C /* ai_base_controller.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ai_base_controller.hpp; path = ../../karts/controller/ai_base_controller.hpp; sourceTree = SOURCE_ROOT; }; - 958330B210122B4A00C5137E /* engine.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = engine.cpp; path = ../../guiengine/engine.cpp; sourceTree = SOURCE_ROOT; }; - 958330B310122B4A00C5137E /* engine.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = engine.hpp; path = ../../guiengine/engine.hpp; sourceTree = SOURCE_ROOT; }; - 958330B410122B4A00C5137E /* event_handler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = event_handler.cpp; path = ../../guiengine/event_handler.cpp; sourceTree = SOURCE_ROOT; }; - 958330B510122B4A00C5137E /* event_handler.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = event_handler.hpp; path = ../../guiengine/event_handler.hpp; sourceTree = SOURCE_ROOT; }; - 958330B610122B4A00C5137E /* modaldialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = modaldialog.cpp; path = ../../guiengine/modaldialog.cpp; sourceTree = SOURCE_ROOT; }; - 958330B710122B4A00C5137E /* modaldialog.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = modaldialog.hpp; path = ../../guiengine/modaldialog.hpp; sourceTree = SOURCE_ROOT; }; - 958330BA10122B4A00C5137E /* screen.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = screen.cpp; path = ../../guiengine/screen.cpp; sourceTree = SOURCE_ROOT; }; - 958330BB10122B4A00C5137E /* screen.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = screen.hpp; path = ../../guiengine/screen.hpp; sourceTree = SOURCE_ROOT; }; - 958330BC10122B4A00C5137E /* screen_loader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = screen_loader.cpp; path = ../../guiengine/screen_loader.cpp; sourceTree = SOURCE_ROOT; }; - 958330BD10122B4A00C5137E /* skin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = skin.cpp; path = ../../guiengine/skin.cpp; sourceTree = SOURCE_ROOT; }; - 958330BE10122B4A00C5137E /* skin.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = skin.hpp; path = ../../guiengine/skin.hpp; sourceTree = SOURCE_ROOT; }; - 958330BF10122B4A00C5137E /* widget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = widget.cpp; path = ../../guiengine/widget.cpp; sourceTree = SOURCE_ROOT; }; - 958330C010122B4A00C5137E /* widget.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = widget.hpp; path = ../../guiengine/widget.hpp; sourceTree = SOURCE_ROOT; }; - 958330C210122B4A00C5137E /* credits.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = credits.cpp; path = ../../states_screens/credits.cpp; sourceTree = SOURCE_ROOT; }; - 958330C310122B4A00C5137E /* credits.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = credits.hpp; path = ../../states_screens/credits.hpp; sourceTree = SOURCE_ROOT; }; - 958330C410122B4A00C5137E /* kart_selection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = kart_selection.cpp; path = ../../states_screens/kart_selection.cpp; sourceTree = SOURCE_ROOT; }; - 958330C510122B4A00C5137E /* kart_selection.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = kart_selection.hpp; path = ../../states_screens/kart_selection.hpp; sourceTree = SOURCE_ROOT; }; - 958330C810122B4A00C5137E /* race_gui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = race_gui.cpp; path = ../../states_screens/race_gui.cpp; sourceTree = SOURCE_ROOT; }; - 958330C910122B4A00C5137E /* race_gui.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = race_gui.hpp; path = ../../states_screens/race_gui.hpp; sourceTree = SOURCE_ROOT; }; - 958330CA10122B4A00C5137E /* state_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = state_manager.cpp; path = ../../states_screens/state_manager.cpp; sourceTree = SOURCE_ROOT; }; - 958330CB10122B4A00C5137E /* state_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = state_manager.hpp; path = ../../states_screens/state_manager.hpp; sourceTree = SOURCE_ROOT; }; - 9583319710123B0200C5137E /* abstract_state_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = abstract_state_manager.hpp; path = ../../guiengine/abstract_state_manager.hpp; sourceTree = SOURCE_ROOT; }; - 9583319810123B0200C5137E /* abstract_state_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = abstract_state_manager.cpp; path = ../../guiengine/abstract_state_manager.cpp; sourceTree = SOURCE_ROOT; }; - 95833237101243ED00C5137E /* enter_player_name_dialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = enter_player_name_dialog.cpp; path = ../../states_screens/dialogs/enter_player_name_dialog.cpp; sourceTree = SOURCE_ROOT; }; - 95833238101243ED00C5137E /* enter_player_name_dialog.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = enter_player_name_dialog.hpp; path = ../../states_screens/dialogs/enter_player_name_dialog.hpp; sourceTree = SOURCE_ROOT; }; - 95833239101243ED00C5137E /* player_info_dialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = player_info_dialog.cpp; path = ../../states_screens/dialogs/player_info_dialog.cpp; sourceTree = SOURCE_ROOT; }; - 9583323A101243ED00C5137E /* player_info_dialog.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = player_info_dialog.hpp; path = ../../states_screens/dialogs/player_info_dialog.hpp; sourceTree = SOURCE_ROOT; }; - 9583323B101243ED00C5137E /* press_a_key_dialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = press_a_key_dialog.cpp; path = ../../states_screens/dialogs/press_a_key_dialog.cpp; sourceTree = SOURCE_ROOT; }; - 9583323C101243ED00C5137E /* press_a_key_dialog.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = press_a_key_dialog.hpp; path = ../../states_screens/dialogs/press_a_key_dialog.hpp; sourceTree = SOURCE_ROOT; }; - 9583323D101243ED00C5137E /* track_info_dialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = track_info_dialog.cpp; path = ../../states_screens/dialogs/track_info_dialog.cpp; sourceTree = SOURCE_ROOT; }; - 9583323E101243ED00C5137E /* track_info_dialog.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = track_info_dialog.hpp; path = ../../states_screens/dialogs/track_info_dialog.hpp; sourceTree = SOURCE_ROOT; }; - 9584448A1330F89100CEA60A /* dictionary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dictionary.cpp; path = ../../tinygettext/dictionary.cpp; sourceTree = SOURCE_ROOT; }; - 9584448B1330F89100CEA60A /* dictionary.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = dictionary.hpp; path = ../../tinygettext/dictionary.hpp; sourceTree = SOURCE_ROOT; }; - 9584448C1330F89100CEA60A /* dictionary_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dictionary_manager.cpp; path = ../../tinygettext/dictionary_manager.cpp; sourceTree = SOURCE_ROOT; }; - 9584448D1330F89100CEA60A /* dictionary_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = dictionary_manager.hpp; path = ../../tinygettext/dictionary_manager.hpp; sourceTree = SOURCE_ROOT; }; - 9584448E1330F89100CEA60A /* file_system.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = file_system.hpp; path = ../../tinygettext/file_system.hpp; sourceTree = SOURCE_ROOT; }; - 9584448F1330F89100CEA60A /* iconv.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = iconv.cpp; path = ../../tinygettext/iconv.cpp; sourceTree = SOURCE_ROOT; }; - 958444901330F89100CEA60A /* iconv.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = iconv.hpp; path = ../../tinygettext/iconv.hpp; sourceTree = SOURCE_ROOT; }; - 958444911330F89100CEA60A /* language.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = language.cpp; path = ../../tinygettext/language.cpp; sourceTree = SOURCE_ROOT; }; - 958444921330F89100CEA60A /* language.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = language.hpp; path = ../../tinygettext/language.hpp; sourceTree = SOURCE_ROOT; }; - 958444951330F89100CEA60A /* log_stream.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = log_stream.hpp; path = ../../tinygettext/log_stream.hpp; sourceTree = SOURCE_ROOT; }; - 958444961330F89100CEA60A /* plural_forms.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = plural_forms.cpp; path = ../../tinygettext/plural_forms.cpp; sourceTree = SOURCE_ROOT; }; - 958444971330F89100CEA60A /* plural_forms.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = plural_forms.hpp; path = ../../tinygettext/plural_forms.hpp; sourceTree = SOURCE_ROOT; }; - 958444981330F89100CEA60A /* po_parser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = po_parser.cpp; path = ../../tinygettext/po_parser.cpp; sourceTree = SOURCE_ROOT; }; - 958444991330F89100CEA60A /* po_parser.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = po_parser.hpp; path = ../../tinygettext/po_parser.hpp; sourceTree = SOURCE_ROOT; }; - 9584449A1330F89100CEA60A /* stk_file_system.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stk_file_system.cpp; path = ../../tinygettext/stk_file_system.cpp; sourceTree = SOURCE_ROOT; }; - 9584449B1330F89100CEA60A /* stk_file_system.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = stk_file_system.hpp; path = ../../tinygettext/stk_file_system.hpp; sourceTree = SOURCE_ROOT; }; - 9584449C1330F89100CEA60A /* tinygettext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tinygettext.cpp; path = ../../tinygettext/tinygettext.cpp; sourceTree = SOURCE_ROOT; }; - 9584449D1330F89100CEA60A /* tinygettext.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = tinygettext.hpp; path = ../../tinygettext/tinygettext.hpp; sourceTree = SOURCE_ROOT; }; - 9584B309137CAC12008565D7 /* news_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = news_manager.cpp; path = ../../addons/news_manager.cpp; sourceTree = SOURCE_ROOT; }; - 9584B30A137CAC12008565D7 /* news_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = news_manager.hpp; path = ../../addons/news_manager.hpp; sourceTree = SOURCE_ROOT; }; - 9584B30B137CAC12008565D7 /* request.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = request.cpp; path = ../../addons/request.cpp; sourceTree = SOURCE_ROOT; }; - 9584B30C137CAC12008565D7 /* request.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = request.hpp; path = ../../addons/request.hpp; sourceTree = SOURCE_ROOT; }; - 9586318011B1EC9F00B8B4AF /* grand_prix_lose.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = grand_prix_lose.cpp; path = ../../states_screens/grand_prix_lose.cpp; sourceTree = SOURCE_ROOT; }; - 9586318111B1EC9F00B8B4AF /* grand_prix_lose.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = grand_prix_lose.hpp; path = ../../states_screens/grand_prix_lose.hpp; sourceTree = SOURCE_ROOT; }; - 9586318211B1EC9F00B8B4AF /* grand_prix_win.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = grand_prix_win.cpp; path = ../../states_screens/grand_prix_win.cpp; sourceTree = SOURCE_ROOT; }; - 9586318311B1EC9F00B8B4AF /* grand_prix_win.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = grand_prix_win.hpp; path = ../../states_screens/grand_prix_win.hpp; sourceTree = SOURCE_ROOT; }; - 958806E713EB675F005F90FE /* track_sector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = track_sector.cpp; path = ../../tracks/track_sector.cpp; sourceTree = SOURCE_ROOT; }; - 958806E813EB675F005F90FE /* track_sector.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = track_sector.hpp; path = ../../tracks/track_sector.hpp; sourceTree = SOURCE_ROOT; }; - 958949A8163F52FB00957345 /* inetwork_http.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = inetwork_http.cpp; path = ../../addons/inetwork_http.cpp; sourceTree = SOURCE_ROOT; }; - 958BD76E117F6AE90095B483 /* music_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = music_manager.cpp; path = ../../audio/music_manager.cpp; sourceTree = SOURCE_ROOT; }; - 958BD76F117F6AE90095B483 /* music_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = music_manager.hpp; path = ../../audio/music_manager.hpp; sourceTree = SOURCE_ROOT; }; - 958D8C52104F523000A81934 /* race_paused_dialog.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = race_paused_dialog.hpp; path = ../../states_screens/dialogs/race_paused_dialog.hpp; sourceTree = SOURCE_ROOT; }; - 958D8C53104F523000A81934 /* race_paused_dialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = race_paused_dialog.cpp; path = ../../states_screens/dialogs/race_paused_dialog.cpp; sourceTree = SOURCE_ROOT; }; - 958D924013DA48A70097BC82 /* post_processing.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = post_processing.cpp; path = ../../graphics/post_processing.cpp; sourceTree = SOURCE_ROOT; }; - 958D924113DA48A70097BC82 /* post_processing.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = post_processing.hpp; path = ../../graphics/post_processing.hpp; sourceTree = SOURCE_ROOT; }; - 9592DC6B13021B350039DBC8 /* minimal_race_gui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = minimal_race_gui.cpp; path = ../../states_screens/minimal_race_gui.cpp; sourceTree = SOURCE_ROOT; }; - 9592DC6C13021B350039DBC8 /* minimal_race_gui.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = minimal_race_gui.hpp; path = ../../states_screens/minimal_race_gui.hpp; sourceTree = SOURCE_ROOT; }; - 95933669149EC9B10031FD41 /* overworld.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = overworld.cpp; path = ../../modes/overworld.cpp; sourceTree = SOURCE_ROOT; }; - 9593366A149EC9B10031FD41 /* overworld.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = overworld.hpp; path = ../../modes/overworld.hpp; sourceTree = SOURCE_ROOT; }; - 9593A1171609386100AB5EEB /* btBulletCollisionCommon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btBulletCollisionCommon.h; path = ../../../lib/bullet/src/btBulletCollisionCommon.h; sourceTree = SOURCE_ROOT; }; - 9593A1181609386100AB5EEB /* btBulletDynamicsCommon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btBulletDynamicsCommon.h; path = ../../../lib/bullet/src/btBulletDynamicsCommon.h; sourceTree = SOURCE_ROOT; }; - 9593A1191609386100AB5EEB /* Bullet-C-Api.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "Bullet-C-Api.h"; path = "../../../lib/bullet/src/Bullet-C-Api.h"; sourceTree = SOURCE_ROOT; }; - 9593A11C1609386100AB5EEB /* btAxisSweep3.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btAxisSweep3.cpp; path = ../../../lib/bullet/src/BulletCollision/BroadphaseCollision/btAxisSweep3.cpp; sourceTree = SOURCE_ROOT; }; - 9593A11D1609386100AB5EEB /* btAxisSweep3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btAxisSweep3.h; path = ../../../lib/bullet/src/BulletCollision/BroadphaseCollision/btAxisSweep3.h; sourceTree = SOURCE_ROOT; }; - 9593A11E1609386100AB5EEB /* btBroadphaseInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btBroadphaseInterface.h; path = ../../../lib/bullet/src/BulletCollision/BroadphaseCollision/btBroadphaseInterface.h; sourceTree = SOURCE_ROOT; }; - 9593A11F1609386100AB5EEB /* btBroadphaseProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btBroadphaseProxy.cpp; path = ../../../lib/bullet/src/BulletCollision/BroadphaseCollision/btBroadphaseProxy.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1201609386100AB5EEB /* btBroadphaseProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btBroadphaseProxy.h; path = ../../../lib/bullet/src/BulletCollision/BroadphaseCollision/btBroadphaseProxy.h; sourceTree = SOURCE_ROOT; }; - 9593A1211609386100AB5EEB /* btCollisionAlgorithm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btCollisionAlgorithm.cpp; path = ../../../lib/bullet/src/BulletCollision/BroadphaseCollision/btCollisionAlgorithm.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1221609386100AB5EEB /* btCollisionAlgorithm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btCollisionAlgorithm.h; path = ../../../lib/bullet/src/BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h; sourceTree = SOURCE_ROOT; }; - 9593A1231609386100AB5EEB /* btDbvt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btDbvt.cpp; path = ../../../lib/bullet/src/BulletCollision/BroadphaseCollision/btDbvt.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1241609386100AB5EEB /* btDbvt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btDbvt.h; path = ../../../lib/bullet/src/BulletCollision/BroadphaseCollision/btDbvt.h; sourceTree = SOURCE_ROOT; }; - 9593A1251609386100AB5EEB /* btDbvtBroadphase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btDbvtBroadphase.cpp; path = ../../../lib/bullet/src/BulletCollision/BroadphaseCollision/btDbvtBroadphase.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1261609386100AB5EEB /* btDbvtBroadphase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btDbvtBroadphase.h; path = ../../../lib/bullet/src/BulletCollision/BroadphaseCollision/btDbvtBroadphase.h; sourceTree = SOURCE_ROOT; }; - 9593A1271609386100AB5EEB /* btDispatcher.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btDispatcher.cpp; path = ../../../lib/bullet/src/BulletCollision/BroadphaseCollision/btDispatcher.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1281609386100AB5EEB /* btDispatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btDispatcher.h; path = ../../../lib/bullet/src/BulletCollision/BroadphaseCollision/btDispatcher.h; sourceTree = SOURCE_ROOT; }; - 9593A1291609386100AB5EEB /* btMultiSapBroadphase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btMultiSapBroadphase.cpp; path = ../../../lib/bullet/src/BulletCollision/BroadphaseCollision/btMultiSapBroadphase.cpp; sourceTree = SOURCE_ROOT; }; - 9593A12A1609386100AB5EEB /* btMultiSapBroadphase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btMultiSapBroadphase.h; path = ../../../lib/bullet/src/BulletCollision/BroadphaseCollision/btMultiSapBroadphase.h; sourceTree = SOURCE_ROOT; }; - 9593A12B1609386100AB5EEB /* btOverlappingPairCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btOverlappingPairCache.cpp; path = ../../../lib/bullet/src/BulletCollision/BroadphaseCollision/btOverlappingPairCache.cpp; sourceTree = SOURCE_ROOT; }; - 9593A12C1609386100AB5EEB /* btOverlappingPairCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btOverlappingPairCache.h; path = ../../../lib/bullet/src/BulletCollision/BroadphaseCollision/btOverlappingPairCache.h; sourceTree = SOURCE_ROOT; }; - 9593A12D1609386100AB5EEB /* btOverlappingPairCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btOverlappingPairCallback.h; path = ../../../lib/bullet/src/BulletCollision/BroadphaseCollision/btOverlappingPairCallback.h; sourceTree = SOURCE_ROOT; }; - 9593A12E1609386100AB5EEB /* btQuantizedBvh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btQuantizedBvh.cpp; path = ../../../lib/bullet/src/BulletCollision/BroadphaseCollision/btQuantizedBvh.cpp; sourceTree = SOURCE_ROOT; }; - 9593A12F1609386100AB5EEB /* btQuantizedBvh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btQuantizedBvh.h; path = ../../../lib/bullet/src/BulletCollision/BroadphaseCollision/btQuantizedBvh.h; sourceTree = SOURCE_ROOT; }; - 9593A1301609386100AB5EEB /* btSimpleBroadphase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btSimpleBroadphase.cpp; path = ../../../lib/bullet/src/BulletCollision/BroadphaseCollision/btSimpleBroadphase.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1311609386100AB5EEB /* btSimpleBroadphase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btSimpleBroadphase.h; path = ../../../lib/bullet/src/BulletCollision/BroadphaseCollision/btSimpleBroadphase.h; sourceTree = SOURCE_ROOT; }; - 9593A1331609386100AB5EEB /* btActivatingCollisionAlgorithm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btActivatingCollisionAlgorithm.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1341609386100AB5EEB /* btActivatingCollisionAlgorithm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btActivatingCollisionAlgorithm.h; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.h; sourceTree = SOURCE_ROOT; }; - 9593A1351609386100AB5EEB /* btBox2dBox2dCollisionAlgorithm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btBox2dBox2dCollisionAlgorithm.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1361609386100AB5EEB /* btBox2dBox2dCollisionAlgorithm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btBox2dBox2dCollisionAlgorithm.h; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.h; sourceTree = SOURCE_ROOT; }; - 9593A1371609386100AB5EEB /* btBoxBoxCollisionAlgorithm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btBoxBoxCollisionAlgorithm.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btBoxBoxCollisionAlgorithm.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1381609386100AB5EEB /* btBoxBoxCollisionAlgorithm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btBoxBoxCollisionAlgorithm.h; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btBoxBoxCollisionAlgorithm.h; sourceTree = SOURCE_ROOT; }; - 9593A1391609386100AB5EEB /* btBoxBoxDetector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btBoxBoxDetector.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btBoxBoxDetector.cpp; sourceTree = SOURCE_ROOT; }; - 9593A13A1609386100AB5EEB /* btBoxBoxDetector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btBoxBoxDetector.h; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btBoxBoxDetector.h; sourceTree = SOURCE_ROOT; }; - 9593A13B1609386100AB5EEB /* btCollisionConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btCollisionConfiguration.h; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btCollisionConfiguration.h; sourceTree = SOURCE_ROOT; }; - 9593A13C1609386100AB5EEB /* btCollisionCreateFunc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btCollisionCreateFunc.h; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btCollisionCreateFunc.h; sourceTree = SOURCE_ROOT; }; - 9593A13D1609386100AB5EEB /* btCollisionDispatcher.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btCollisionDispatcher.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btCollisionDispatcher.cpp; sourceTree = SOURCE_ROOT; }; - 9593A13E1609386100AB5EEB /* btCollisionDispatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btCollisionDispatcher.h; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btCollisionDispatcher.h; sourceTree = SOURCE_ROOT; }; - 9593A13F1609386100AB5EEB /* btCollisionObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btCollisionObject.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btCollisionObject.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1401609386100AB5EEB /* btCollisionObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btCollisionObject.h; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btCollisionObject.h; sourceTree = SOURCE_ROOT; }; - 9593A1411609386100AB5EEB /* btCollisionWorld.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btCollisionWorld.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1421609386100AB5EEB /* btCollisionWorld.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btCollisionWorld.h; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btCollisionWorld.h; sourceTree = SOURCE_ROOT; }; - 9593A1431609386100AB5EEB /* btCompoundCollisionAlgorithm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btCompoundCollisionAlgorithm.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1441609386100AB5EEB /* btCompoundCollisionAlgorithm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btCompoundCollisionAlgorithm.h; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.h; sourceTree = SOURCE_ROOT; }; - 9593A1451609386100AB5EEB /* btConvex2dConvex2dAlgorithm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btConvex2dConvex2dAlgorithm.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1461609386100AB5EEB /* btConvex2dConvex2dAlgorithm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btConvex2dConvex2dAlgorithm.h; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.h; sourceTree = SOURCE_ROOT; }; - 9593A1471609386100AB5EEB /* btConvexConcaveCollisionAlgorithm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btConvexConcaveCollisionAlgorithm.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1481609386100AB5EEB /* btConvexConcaveCollisionAlgorithm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btConvexConcaveCollisionAlgorithm.h; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.h; sourceTree = SOURCE_ROOT; }; - 9593A1491609386100AB5EEB /* btConvexConvexAlgorithm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btConvexConvexAlgorithm.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.cpp; sourceTree = SOURCE_ROOT; }; - 9593A14A1609386100AB5EEB /* btConvexConvexAlgorithm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btConvexConvexAlgorithm.h; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.h; sourceTree = SOURCE_ROOT; }; - 9593A14B1609386100AB5EEB /* btConvexPlaneCollisionAlgorithm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btConvexPlaneCollisionAlgorithm.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btConvexPlaneCollisionAlgorithm.cpp; sourceTree = SOURCE_ROOT; }; - 9593A14C1609386100AB5EEB /* btConvexPlaneCollisionAlgorithm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btConvexPlaneCollisionAlgorithm.h; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btConvexPlaneCollisionAlgorithm.h; sourceTree = SOURCE_ROOT; }; - 9593A14D1609386100AB5EEB /* btDefaultCollisionConfiguration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btDefaultCollisionConfiguration.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.cpp; sourceTree = SOURCE_ROOT; }; - 9593A14E1609386100AB5EEB /* btDefaultCollisionConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btDefaultCollisionConfiguration.h; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.h; sourceTree = SOURCE_ROOT; }; - 9593A14F1609386100AB5EEB /* btEmptyCollisionAlgorithm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btEmptyCollisionAlgorithm.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btEmptyCollisionAlgorithm.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1501609386100AB5EEB /* btEmptyCollisionAlgorithm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btEmptyCollisionAlgorithm.h; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btEmptyCollisionAlgorithm.h; sourceTree = SOURCE_ROOT; }; - 9593A1511609386100AB5EEB /* btGhostObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btGhostObject.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btGhostObject.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1521609386100AB5EEB /* btGhostObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btGhostObject.h; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btGhostObject.h; sourceTree = SOURCE_ROOT; }; - 9593A1531609386100AB5EEB /* btInternalEdgeUtility.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btInternalEdgeUtility.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btInternalEdgeUtility.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1541609386100AB5EEB /* btInternalEdgeUtility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btInternalEdgeUtility.h; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btInternalEdgeUtility.h; sourceTree = SOURCE_ROOT; }; - 9593A1551609386100AB5EEB /* btManifoldResult.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btManifoldResult.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btManifoldResult.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1561609386100AB5EEB /* btManifoldResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btManifoldResult.h; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btManifoldResult.h; sourceTree = SOURCE_ROOT; }; - 9593A1571609386100AB5EEB /* btSimulationIslandManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btSimulationIslandManager.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btSimulationIslandManager.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1581609386100AB5EEB /* btSimulationIslandManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btSimulationIslandManager.h; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btSimulationIslandManager.h; sourceTree = SOURCE_ROOT; }; - 9593A1591609386100AB5EEB /* btSphereBoxCollisionAlgorithm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btSphereBoxCollisionAlgorithm.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.cpp; sourceTree = SOURCE_ROOT; }; - 9593A15A1609386100AB5EEB /* btSphereBoxCollisionAlgorithm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btSphereBoxCollisionAlgorithm.h; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.h; sourceTree = SOURCE_ROOT; }; - 9593A15B1609386100AB5EEB /* btSphereSphereCollisionAlgorithm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btSphereSphereCollisionAlgorithm.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.cpp; sourceTree = SOURCE_ROOT; }; - 9593A15C1609386100AB5EEB /* btSphereSphereCollisionAlgorithm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btSphereSphereCollisionAlgorithm.h; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.h; sourceTree = SOURCE_ROOT; }; - 9593A15D1609386100AB5EEB /* btSphereTriangleCollisionAlgorithm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btSphereTriangleCollisionAlgorithm.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btSphereTriangleCollisionAlgorithm.cpp; sourceTree = SOURCE_ROOT; }; - 9593A15E1609386100AB5EEB /* btSphereTriangleCollisionAlgorithm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btSphereTriangleCollisionAlgorithm.h; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btSphereTriangleCollisionAlgorithm.h; sourceTree = SOURCE_ROOT; }; - 9593A15F1609386100AB5EEB /* btUnionFind.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btUnionFind.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btUnionFind.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1601609386100AB5EEB /* btUnionFind.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btUnionFind.h; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/btUnionFind.h; sourceTree = SOURCE_ROOT; }; - 9593A1611609386100AB5EEB /* SphereTriangleDetector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SphereTriangleDetector.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/SphereTriangleDetector.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1621609386100AB5EEB /* SphereTriangleDetector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SphereTriangleDetector.h; path = ../../../lib/bullet/src/BulletCollision/CollisionDispatch/SphereTriangleDetector.h; sourceTree = SOURCE_ROOT; }; - 9593A1641609386100AB5EEB /* btBox2dShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btBox2dShape.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btBox2dShape.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1651609386100AB5EEB /* btBox2dShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btBox2dShape.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btBox2dShape.h; sourceTree = SOURCE_ROOT; }; - 9593A1661609386100AB5EEB /* btBoxShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btBoxShape.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btBoxShape.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1671609386100AB5EEB /* btBoxShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btBoxShape.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btBoxShape.h; sourceTree = SOURCE_ROOT; }; - 9593A1681609386100AB5EEB /* btBvhTriangleMeshShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btBvhTriangleMeshShape.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1691609386100AB5EEB /* btBvhTriangleMeshShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btBvhTriangleMeshShape.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h; sourceTree = SOURCE_ROOT; }; - 9593A16A1609386100AB5EEB /* btCapsuleShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btCapsuleShape.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btCapsuleShape.cpp; sourceTree = SOURCE_ROOT; }; - 9593A16B1609386100AB5EEB /* btCapsuleShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btCapsuleShape.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btCapsuleShape.h; sourceTree = SOURCE_ROOT; }; - 9593A16C1609386100AB5EEB /* btCollisionMargin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btCollisionMargin.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btCollisionMargin.h; sourceTree = SOURCE_ROOT; }; - 9593A16D1609386100AB5EEB /* btCollisionShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btCollisionShape.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btCollisionShape.cpp; sourceTree = SOURCE_ROOT; }; - 9593A16E1609386100AB5EEB /* btCollisionShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btCollisionShape.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btCollisionShape.h; sourceTree = SOURCE_ROOT; }; - 9593A16F1609386100AB5EEB /* btCompoundShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btCompoundShape.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btCompoundShape.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1701609386100AB5EEB /* btCompoundShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btCompoundShape.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btCompoundShape.h; sourceTree = SOURCE_ROOT; }; - 9593A1711609386100AB5EEB /* btConcaveShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btConcaveShape.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btConcaveShape.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1721609386100AB5EEB /* btConcaveShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btConcaveShape.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btConcaveShape.h; sourceTree = SOURCE_ROOT; }; - 9593A1731609386100AB5EEB /* btConeShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btConeShape.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btConeShape.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1741609386100AB5EEB /* btConeShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btConeShape.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btConeShape.h; sourceTree = SOURCE_ROOT; }; - 9593A1751609386100AB5EEB /* btConvex2dShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btConvex2dShape.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btConvex2dShape.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1761609386100AB5EEB /* btConvex2dShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btConvex2dShape.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btConvex2dShape.h; sourceTree = SOURCE_ROOT; }; - 9593A1771609386100AB5EEB /* btConvexHullShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btConvexHullShape.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btConvexHullShape.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1781609386100AB5EEB /* btConvexHullShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btConvexHullShape.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btConvexHullShape.h; sourceTree = SOURCE_ROOT; }; - 9593A1791609386100AB5EEB /* btConvexInternalShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btConvexInternalShape.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btConvexInternalShape.cpp; sourceTree = SOURCE_ROOT; }; - 9593A17A1609386100AB5EEB /* btConvexInternalShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btConvexInternalShape.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btConvexInternalShape.h; sourceTree = SOURCE_ROOT; }; - 9593A17B1609386100AB5EEB /* btConvexPointCloudShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btConvexPointCloudShape.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btConvexPointCloudShape.cpp; sourceTree = SOURCE_ROOT; }; - 9593A17C1609386100AB5EEB /* btConvexPointCloudShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btConvexPointCloudShape.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btConvexPointCloudShape.h; sourceTree = SOURCE_ROOT; }; - 9593A17D1609386100AB5EEB /* btConvexPolyhedron.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btConvexPolyhedron.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btConvexPolyhedron.cpp; sourceTree = SOURCE_ROOT; }; - 9593A17E1609386100AB5EEB /* btConvexPolyhedron.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btConvexPolyhedron.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btConvexPolyhedron.h; sourceTree = SOURCE_ROOT; }; - 9593A17F1609386100AB5EEB /* btConvexShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btConvexShape.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btConvexShape.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1801609386100AB5EEB /* btConvexShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btConvexShape.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btConvexShape.h; sourceTree = SOURCE_ROOT; }; - 9593A1811609386100AB5EEB /* btConvexTriangleMeshShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btConvexTriangleMeshShape.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btConvexTriangleMeshShape.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1821609386100AB5EEB /* btConvexTriangleMeshShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btConvexTriangleMeshShape.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btConvexTriangleMeshShape.h; sourceTree = SOURCE_ROOT; }; - 9593A1831609386100AB5EEB /* btCylinderShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btCylinderShape.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btCylinderShape.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1841609386100AB5EEB /* btCylinderShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btCylinderShape.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btCylinderShape.h; sourceTree = SOURCE_ROOT; }; - 9593A1851609386100AB5EEB /* btEmptyShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btEmptyShape.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btEmptyShape.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1861609386100AB5EEB /* btEmptyShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btEmptyShape.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btEmptyShape.h; sourceTree = SOURCE_ROOT; }; - 9593A1871609386100AB5EEB /* btHeightfieldTerrainShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btHeightfieldTerrainShape.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1881609386100AB5EEB /* btHeightfieldTerrainShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btHeightfieldTerrainShape.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h; sourceTree = SOURCE_ROOT; }; - 9593A1891609386100AB5EEB /* btMaterial.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btMaterial.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btMaterial.h; sourceTree = SOURCE_ROOT; }; - 9593A18A1609386100AB5EEB /* btMinkowskiSumShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btMinkowskiSumShape.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btMinkowskiSumShape.cpp; sourceTree = SOURCE_ROOT; }; - 9593A18B1609386100AB5EEB /* btMinkowskiSumShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btMinkowskiSumShape.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btMinkowskiSumShape.h; sourceTree = SOURCE_ROOT; }; - 9593A18C1609386100AB5EEB /* btMultimaterialTriangleMeshShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btMultimaterialTriangleMeshShape.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btMultimaterialTriangleMeshShape.cpp; sourceTree = SOURCE_ROOT; }; - 9593A18D1609386100AB5EEB /* btMultimaterialTriangleMeshShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btMultimaterialTriangleMeshShape.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btMultimaterialTriangleMeshShape.h; sourceTree = SOURCE_ROOT; }; - 9593A18E1609386100AB5EEB /* btMultiSphereShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btMultiSphereShape.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btMultiSphereShape.cpp; sourceTree = SOURCE_ROOT; }; - 9593A18F1609386100AB5EEB /* btMultiSphereShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btMultiSphereShape.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btMultiSphereShape.h; sourceTree = SOURCE_ROOT; }; - 9593A1901609386100AB5EEB /* btOptimizedBvh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btOptimizedBvh.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btOptimizedBvh.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1911609386100AB5EEB /* btOptimizedBvh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btOptimizedBvh.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btOptimizedBvh.h; sourceTree = SOURCE_ROOT; }; - 9593A1921609386100AB5EEB /* btPolyhedralConvexShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btPolyhedralConvexShape.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btPolyhedralConvexShape.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1931609386100AB5EEB /* btPolyhedralConvexShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btPolyhedralConvexShape.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btPolyhedralConvexShape.h; sourceTree = SOURCE_ROOT; }; - 9593A1941609386100AB5EEB /* btScaledBvhTriangleMeshShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btScaledBvhTriangleMeshShape.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1951609386100AB5EEB /* btScaledBvhTriangleMeshShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btScaledBvhTriangleMeshShape.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h; sourceTree = SOURCE_ROOT; }; - 9593A1961609386100AB5EEB /* btShapeHull.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btShapeHull.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btShapeHull.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1971609386100AB5EEB /* btShapeHull.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btShapeHull.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btShapeHull.h; sourceTree = SOURCE_ROOT; }; - 9593A1981609386100AB5EEB /* btSphereShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btSphereShape.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btSphereShape.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1991609386100AB5EEB /* btSphereShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btSphereShape.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btSphereShape.h; sourceTree = SOURCE_ROOT; }; - 9593A19A1609386100AB5EEB /* btStaticPlaneShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btStaticPlaneShape.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btStaticPlaneShape.cpp; sourceTree = SOURCE_ROOT; }; - 9593A19B1609386100AB5EEB /* btStaticPlaneShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btStaticPlaneShape.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btStaticPlaneShape.h; sourceTree = SOURCE_ROOT; }; - 9593A19C1609386100AB5EEB /* btStridingMeshInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btStridingMeshInterface.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btStridingMeshInterface.cpp; sourceTree = SOURCE_ROOT; }; - 9593A19D1609386100AB5EEB /* btStridingMeshInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btStridingMeshInterface.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btStridingMeshInterface.h; sourceTree = SOURCE_ROOT; }; - 9593A19E1609386100AB5EEB /* btTetrahedronShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btTetrahedronShape.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btTetrahedronShape.cpp; sourceTree = SOURCE_ROOT; }; - 9593A19F1609386100AB5EEB /* btTetrahedronShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btTetrahedronShape.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btTetrahedronShape.h; sourceTree = SOURCE_ROOT; }; - 9593A1A01609386100AB5EEB /* btTriangleBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btTriangleBuffer.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btTriangleBuffer.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1A11609386100AB5EEB /* btTriangleBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btTriangleBuffer.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btTriangleBuffer.h; sourceTree = SOURCE_ROOT; }; - 9593A1A21609386100AB5EEB /* btTriangleCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btTriangleCallback.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btTriangleCallback.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1A31609386100AB5EEB /* btTriangleCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btTriangleCallback.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btTriangleCallback.h; sourceTree = SOURCE_ROOT; }; - 9593A1A41609386100AB5EEB /* btTriangleIndexVertexArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btTriangleIndexVertexArray.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btTriangleIndexVertexArray.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1A51609386100AB5EEB /* btTriangleIndexVertexArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btTriangleIndexVertexArray.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btTriangleIndexVertexArray.h; sourceTree = SOURCE_ROOT; }; - 9593A1A61609386100AB5EEB /* btTriangleIndexVertexMaterialArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btTriangleIndexVertexMaterialArray.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btTriangleIndexVertexMaterialArray.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1A71609386100AB5EEB /* btTriangleIndexVertexMaterialArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btTriangleIndexVertexMaterialArray.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btTriangleIndexVertexMaterialArray.h; sourceTree = SOURCE_ROOT; }; - 9593A1A81609386100AB5EEB /* btTriangleInfoMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btTriangleInfoMap.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btTriangleInfoMap.h; sourceTree = SOURCE_ROOT; }; - 9593A1A91609386100AB5EEB /* btTriangleMesh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btTriangleMesh.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btTriangleMesh.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1AA1609386100AB5EEB /* btTriangleMesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btTriangleMesh.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btTriangleMesh.h; sourceTree = SOURCE_ROOT; }; - 9593A1AB1609386100AB5EEB /* btTriangleMeshShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btTriangleMeshShape.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btTriangleMeshShape.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1AC1609386100AB5EEB /* btTriangleMeshShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btTriangleMeshShape.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btTriangleMeshShape.h; sourceTree = SOURCE_ROOT; }; - 9593A1AD1609386100AB5EEB /* btTriangleShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btTriangleShape.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btTriangleShape.h; sourceTree = SOURCE_ROOT; }; - 9593A1AE1609386100AB5EEB /* btUniformScalingShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btUniformScalingShape.cpp; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btUniformScalingShape.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1AF1609386100AB5EEB /* btUniformScalingShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btUniformScalingShape.h; path = ../../../lib/bullet/src/BulletCollision/CollisionShapes/btUniformScalingShape.h; sourceTree = SOURCE_ROOT; }; - 9593A1B11609386100AB5EEB /* btBoxCollision.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btBoxCollision.h; path = ../../../lib/bullet/src/BulletCollision/Gimpact/btBoxCollision.h; sourceTree = SOURCE_ROOT; }; - 9593A1B21609386100AB5EEB /* btClipPolygon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btClipPolygon.h; path = ../../../lib/bullet/src/BulletCollision/Gimpact/btClipPolygon.h; sourceTree = SOURCE_ROOT; }; - 9593A1B31609386100AB5EEB /* btContactProcessing.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btContactProcessing.cpp; path = ../../../lib/bullet/src/BulletCollision/Gimpact/btContactProcessing.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1B41609386100AB5EEB /* btContactProcessing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btContactProcessing.h; path = ../../../lib/bullet/src/BulletCollision/Gimpact/btContactProcessing.h; sourceTree = SOURCE_ROOT; }; - 9593A1B51609386100AB5EEB /* btGenericPoolAllocator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btGenericPoolAllocator.cpp; path = ../../../lib/bullet/src/BulletCollision/Gimpact/btGenericPoolAllocator.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1B61609386100AB5EEB /* btGenericPoolAllocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btGenericPoolAllocator.h; path = ../../../lib/bullet/src/BulletCollision/Gimpact/btGenericPoolAllocator.h; sourceTree = SOURCE_ROOT; }; - 9593A1B71609386100AB5EEB /* btGeometryOperations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btGeometryOperations.h; path = ../../../lib/bullet/src/BulletCollision/Gimpact/btGeometryOperations.h; sourceTree = SOURCE_ROOT; }; - 9593A1B81609386100AB5EEB /* btGImpactBvh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btGImpactBvh.cpp; path = ../../../lib/bullet/src/BulletCollision/Gimpact/btGImpactBvh.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1B91609386100AB5EEB /* btGImpactBvh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btGImpactBvh.h; path = ../../../lib/bullet/src/BulletCollision/Gimpact/btGImpactBvh.h; sourceTree = SOURCE_ROOT; }; - 9593A1BA1609386100AB5EEB /* btGImpactCollisionAlgorithm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btGImpactCollisionAlgorithm.cpp; path = ../../../lib/bullet/src/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1BB1609386100AB5EEB /* btGImpactCollisionAlgorithm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btGImpactCollisionAlgorithm.h; path = ../../../lib/bullet/src/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.h; sourceTree = SOURCE_ROOT; }; - 9593A1BC1609386100AB5EEB /* btGImpactMassUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btGImpactMassUtil.h; path = ../../../lib/bullet/src/BulletCollision/Gimpact/btGImpactMassUtil.h; sourceTree = SOURCE_ROOT; }; - 9593A1BD1609386100AB5EEB /* btGImpactQuantizedBvh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btGImpactQuantizedBvh.cpp; path = ../../../lib/bullet/src/BulletCollision/Gimpact/btGImpactQuantizedBvh.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1BE1609386100AB5EEB /* btGImpactQuantizedBvh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btGImpactQuantizedBvh.h; path = ../../../lib/bullet/src/BulletCollision/Gimpact/btGImpactQuantizedBvh.h; sourceTree = SOURCE_ROOT; }; - 9593A1BF1609386100AB5EEB /* btGImpactShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btGImpactShape.cpp; path = ../../../lib/bullet/src/BulletCollision/Gimpact/btGImpactShape.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1C01609386100AB5EEB /* btGImpactShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btGImpactShape.h; path = ../../../lib/bullet/src/BulletCollision/Gimpact/btGImpactShape.h; sourceTree = SOURCE_ROOT; }; - 9593A1C11609386100AB5EEB /* btQuantization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btQuantization.h; path = ../../../lib/bullet/src/BulletCollision/Gimpact/btQuantization.h; sourceTree = SOURCE_ROOT; }; - 9593A1C21609386100AB5EEB /* btTriangleShapeEx.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btTriangleShapeEx.cpp; path = ../../../lib/bullet/src/BulletCollision/Gimpact/btTriangleShapeEx.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1C31609386100AB5EEB /* btTriangleShapeEx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btTriangleShapeEx.h; path = ../../../lib/bullet/src/BulletCollision/Gimpact/btTriangleShapeEx.h; sourceTree = SOURCE_ROOT; }; - 9593A1C41609386100AB5EEB /* gim_array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gim_array.h; path = ../../../lib/bullet/src/BulletCollision/Gimpact/gim_array.h; sourceTree = SOURCE_ROOT; }; - 9593A1C51609386100AB5EEB /* gim_basic_geometry_operations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gim_basic_geometry_operations.h; path = ../../../lib/bullet/src/BulletCollision/Gimpact/gim_basic_geometry_operations.h; sourceTree = SOURCE_ROOT; }; - 9593A1C61609386100AB5EEB /* gim_bitset.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gim_bitset.h; path = ../../../lib/bullet/src/BulletCollision/Gimpact/gim_bitset.h; sourceTree = SOURCE_ROOT; }; - 9593A1C71609386100AB5EEB /* gim_box_collision.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gim_box_collision.h; path = ../../../lib/bullet/src/BulletCollision/Gimpact/gim_box_collision.h; sourceTree = SOURCE_ROOT; }; - 9593A1C81609386100AB5EEB /* gim_box_set.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gim_box_set.cpp; path = ../../../lib/bullet/src/BulletCollision/Gimpact/gim_box_set.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1C91609386100AB5EEB /* gim_box_set.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gim_box_set.h; path = ../../../lib/bullet/src/BulletCollision/Gimpact/gim_box_set.h; sourceTree = SOURCE_ROOT; }; - 9593A1CA1609386100AB5EEB /* gim_clip_polygon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gim_clip_polygon.h; path = ../../../lib/bullet/src/BulletCollision/Gimpact/gim_clip_polygon.h; sourceTree = SOURCE_ROOT; }; - 9593A1CB1609386100AB5EEB /* gim_contact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gim_contact.cpp; path = ../../../lib/bullet/src/BulletCollision/Gimpact/gim_contact.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1CC1609386100AB5EEB /* gim_contact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gim_contact.h; path = ../../../lib/bullet/src/BulletCollision/Gimpact/gim_contact.h; sourceTree = SOURCE_ROOT; }; - 9593A1CD1609386100AB5EEB /* gim_geom_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gim_geom_types.h; path = ../../../lib/bullet/src/BulletCollision/Gimpact/gim_geom_types.h; sourceTree = SOURCE_ROOT; }; - 9593A1CE1609386100AB5EEB /* gim_geometry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gim_geometry.h; path = ../../../lib/bullet/src/BulletCollision/Gimpact/gim_geometry.h; sourceTree = SOURCE_ROOT; }; - 9593A1CF1609386100AB5EEB /* gim_hash_table.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gim_hash_table.h; path = ../../../lib/bullet/src/BulletCollision/Gimpact/gim_hash_table.h; sourceTree = SOURCE_ROOT; }; - 9593A1D01609386100AB5EEB /* gim_linear_math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gim_linear_math.h; path = ../../../lib/bullet/src/BulletCollision/Gimpact/gim_linear_math.h; sourceTree = SOURCE_ROOT; }; - 9593A1D11609386100AB5EEB /* gim_math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gim_math.h; path = ../../../lib/bullet/src/BulletCollision/Gimpact/gim_math.h; sourceTree = SOURCE_ROOT; }; - 9593A1D21609386100AB5EEB /* gim_memory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gim_memory.cpp; path = ../../../lib/bullet/src/BulletCollision/Gimpact/gim_memory.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1D31609386100AB5EEB /* gim_memory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gim_memory.h; path = ../../../lib/bullet/src/BulletCollision/Gimpact/gim_memory.h; sourceTree = SOURCE_ROOT; }; - 9593A1D41609386100AB5EEB /* gim_radixsort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gim_radixsort.h; path = ../../../lib/bullet/src/BulletCollision/Gimpact/gim_radixsort.h; sourceTree = SOURCE_ROOT; }; - 9593A1D51609386100AB5EEB /* gim_tri_collision.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gim_tri_collision.cpp; path = ../../../lib/bullet/src/BulletCollision/Gimpact/gim_tri_collision.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1D61609386100AB5EEB /* gim_tri_collision.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gim_tri_collision.h; path = ../../../lib/bullet/src/BulletCollision/Gimpact/gim_tri_collision.h; sourceTree = SOURCE_ROOT; }; - 9593A1D81609386100AB5EEB /* btContinuousConvexCollision.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btContinuousConvexCollision.cpp; path = ../../../lib/bullet/src/BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1D91609386100AB5EEB /* btContinuousConvexCollision.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btContinuousConvexCollision.h; path = ../../../lib/bullet/src/BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.h; sourceTree = SOURCE_ROOT; }; - 9593A1DA1609386100AB5EEB /* btConvexCast.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btConvexCast.cpp; path = ../../../lib/bullet/src/BulletCollision/NarrowPhaseCollision/btConvexCast.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1DB1609386100AB5EEB /* btConvexCast.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btConvexCast.h; path = ../../../lib/bullet/src/BulletCollision/NarrowPhaseCollision/btConvexCast.h; sourceTree = SOURCE_ROOT; }; - 9593A1DC1609386100AB5EEB /* btConvexPenetrationDepthSolver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btConvexPenetrationDepthSolver.h; path = ../../../lib/bullet/src/BulletCollision/NarrowPhaseCollision/btConvexPenetrationDepthSolver.h; sourceTree = SOURCE_ROOT; }; - 9593A1DD1609386100AB5EEB /* btDiscreteCollisionDetectorInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btDiscreteCollisionDetectorInterface.h; path = ../../../lib/bullet/src/BulletCollision/NarrowPhaseCollision/btDiscreteCollisionDetectorInterface.h; sourceTree = SOURCE_ROOT; }; - 9593A1DE1609386100AB5EEB /* btGjkConvexCast.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btGjkConvexCast.cpp; path = ../../../lib/bullet/src/BulletCollision/NarrowPhaseCollision/btGjkConvexCast.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1DF1609386100AB5EEB /* btGjkConvexCast.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btGjkConvexCast.h; path = ../../../lib/bullet/src/BulletCollision/NarrowPhaseCollision/btGjkConvexCast.h; sourceTree = SOURCE_ROOT; }; - 9593A1E01609386100AB5EEB /* btGjkEpa2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btGjkEpa2.cpp; path = ../../../lib/bullet/src/BulletCollision/NarrowPhaseCollision/btGjkEpa2.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1E11609386100AB5EEB /* btGjkEpa2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btGjkEpa2.h; path = ../../../lib/bullet/src/BulletCollision/NarrowPhaseCollision/btGjkEpa2.h; sourceTree = SOURCE_ROOT; }; - 9593A1E21609386100AB5EEB /* btGjkEpaPenetrationDepthSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btGjkEpaPenetrationDepthSolver.cpp; path = ../../../lib/bullet/src/BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1E31609386100AB5EEB /* btGjkEpaPenetrationDepthSolver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btGjkEpaPenetrationDepthSolver.h; path = ../../../lib/bullet/src/BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.h; sourceTree = SOURCE_ROOT; }; - 9593A1E41609386100AB5EEB /* btGjkPairDetector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btGjkPairDetector.cpp; path = ../../../lib/bullet/src/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1E51609386100AB5EEB /* btGjkPairDetector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btGjkPairDetector.h; path = ../../../lib/bullet/src/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.h; sourceTree = SOURCE_ROOT; }; - 9593A1E61609386100AB5EEB /* btManifoldPoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btManifoldPoint.h; path = ../../../lib/bullet/src/BulletCollision/NarrowPhaseCollision/btManifoldPoint.h; sourceTree = SOURCE_ROOT; }; - 9593A1E71609386100AB5EEB /* btMinkowskiPenetrationDepthSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btMinkowskiPenetrationDepthSolver.cpp; path = ../../../lib/bullet/src/BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1E81609386100AB5EEB /* btMinkowskiPenetrationDepthSolver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btMinkowskiPenetrationDepthSolver.h; path = ../../../lib/bullet/src/BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.h; sourceTree = SOURCE_ROOT; }; - 9593A1E91609386100AB5EEB /* btPersistentManifold.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btPersistentManifold.cpp; path = ../../../lib/bullet/src/BulletCollision/NarrowPhaseCollision/btPersistentManifold.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1EA1609386100AB5EEB /* btPersistentManifold.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btPersistentManifold.h; path = ../../../lib/bullet/src/BulletCollision/NarrowPhaseCollision/btPersistentManifold.h; sourceTree = SOURCE_ROOT; }; - 9593A1EB1609386100AB5EEB /* btPointCollector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btPointCollector.h; path = ../../../lib/bullet/src/BulletCollision/NarrowPhaseCollision/btPointCollector.h; sourceTree = SOURCE_ROOT; }; - 9593A1EC1609386100AB5EEB /* btPolyhedralContactClipping.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btPolyhedralContactClipping.cpp; path = ../../../lib/bullet/src/BulletCollision/NarrowPhaseCollision/btPolyhedralContactClipping.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1ED1609386100AB5EEB /* btPolyhedralContactClipping.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btPolyhedralContactClipping.h; path = ../../../lib/bullet/src/BulletCollision/NarrowPhaseCollision/btPolyhedralContactClipping.h; sourceTree = SOURCE_ROOT; }; - 9593A1EE1609386100AB5EEB /* btRaycastCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btRaycastCallback.cpp; path = ../../../lib/bullet/src/BulletCollision/NarrowPhaseCollision/btRaycastCallback.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1EF1609386100AB5EEB /* btRaycastCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btRaycastCallback.h; path = ../../../lib/bullet/src/BulletCollision/NarrowPhaseCollision/btRaycastCallback.h; sourceTree = SOURCE_ROOT; }; - 9593A1F01609386100AB5EEB /* btSimplexSolverInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btSimplexSolverInterface.h; path = ../../../lib/bullet/src/BulletCollision/NarrowPhaseCollision/btSimplexSolverInterface.h; sourceTree = SOURCE_ROOT; }; - 9593A1F11609386100AB5EEB /* btSubSimplexConvexCast.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btSubSimplexConvexCast.cpp; path = ../../../lib/bullet/src/BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1F21609386100AB5EEB /* btSubSimplexConvexCast.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btSubSimplexConvexCast.h; path = ../../../lib/bullet/src/BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.h; sourceTree = SOURCE_ROOT; }; - 9593A1F31609386100AB5EEB /* btVoronoiSimplexSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btVoronoiSimplexSolver.cpp; path = ../../../lib/bullet/src/BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1F41609386100AB5EEB /* btVoronoiSimplexSolver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btVoronoiSimplexSolver.h; path = ../../../lib/bullet/src/BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h; sourceTree = SOURCE_ROOT; }; - 9593A1F71609386100AB5EEB /* btCharacterControllerInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btCharacterControllerInterface.h; path = ../../../lib/bullet/src/BulletDynamics/Character/btCharacterControllerInterface.h; sourceTree = SOURCE_ROOT; }; - 9593A1F81609386100AB5EEB /* btKinematicCharacterController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btKinematicCharacterController.cpp; path = ../../../lib/bullet/src/BulletDynamics/Character/btKinematicCharacterController.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1F91609386100AB5EEB /* btKinematicCharacterController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btKinematicCharacterController.h; path = ../../../lib/bullet/src/BulletDynamics/Character/btKinematicCharacterController.h; sourceTree = SOURCE_ROOT; }; - 9593A1FB1609386100AB5EEB /* btConeTwistConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btConeTwistConstraint.cpp; path = ../../../lib/bullet/src/BulletDynamics/ConstraintSolver/btConeTwistConstraint.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1FC1609386100AB5EEB /* btConeTwistConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btConeTwistConstraint.h; path = ../../../lib/bullet/src/BulletDynamics/ConstraintSolver/btConeTwistConstraint.h; sourceTree = SOURCE_ROOT; }; - 9593A1FD1609386100AB5EEB /* btConstraintSolver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btConstraintSolver.h; path = ../../../lib/bullet/src/BulletDynamics/ConstraintSolver/btConstraintSolver.h; sourceTree = SOURCE_ROOT; }; - 9593A1FE1609386100AB5EEB /* btContactConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btContactConstraint.cpp; path = ../../../lib/bullet/src/BulletDynamics/ConstraintSolver/btContactConstraint.cpp; sourceTree = SOURCE_ROOT; }; - 9593A1FF1609386100AB5EEB /* btContactConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btContactConstraint.h; path = ../../../lib/bullet/src/BulletDynamics/ConstraintSolver/btContactConstraint.h; sourceTree = SOURCE_ROOT; }; - 9593A2001609386100AB5EEB /* btContactSolverInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btContactSolverInfo.h; path = ../../../lib/bullet/src/BulletDynamics/ConstraintSolver/btContactSolverInfo.h; sourceTree = SOURCE_ROOT; }; - 9593A2011609386100AB5EEB /* btGeneric6DofConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btGeneric6DofConstraint.cpp; path = ../../../lib/bullet/src/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.cpp; sourceTree = SOURCE_ROOT; }; - 9593A2021609386100AB5EEB /* btGeneric6DofConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btGeneric6DofConstraint.h; path = ../../../lib/bullet/src/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h; sourceTree = SOURCE_ROOT; }; - 9593A2031609386100AB5EEB /* btGeneric6DofSpringConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btGeneric6DofSpringConstraint.cpp; path = ../../../lib/bullet/src/BulletDynamics/ConstraintSolver/btGeneric6DofSpringConstraint.cpp; sourceTree = SOURCE_ROOT; }; - 9593A2041609386100AB5EEB /* btGeneric6DofSpringConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btGeneric6DofSpringConstraint.h; path = ../../../lib/bullet/src/BulletDynamics/ConstraintSolver/btGeneric6DofSpringConstraint.h; sourceTree = SOURCE_ROOT; }; - 9593A2051609386100AB5EEB /* btHinge2Constraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btHinge2Constraint.cpp; path = ../../../lib/bullet/src/BulletDynamics/ConstraintSolver/btHinge2Constraint.cpp; sourceTree = SOURCE_ROOT; }; - 9593A2061609386100AB5EEB /* btHinge2Constraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btHinge2Constraint.h; path = ../../../lib/bullet/src/BulletDynamics/ConstraintSolver/btHinge2Constraint.h; sourceTree = SOURCE_ROOT; }; - 9593A2071609386100AB5EEB /* btHingeConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btHingeConstraint.cpp; path = ../../../lib/bullet/src/BulletDynamics/ConstraintSolver/btHingeConstraint.cpp; sourceTree = SOURCE_ROOT; }; - 9593A2081609386100AB5EEB /* btHingeConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btHingeConstraint.h; path = ../../../lib/bullet/src/BulletDynamics/ConstraintSolver/btHingeConstraint.h; sourceTree = SOURCE_ROOT; }; - 9593A2091609386100AB5EEB /* btJacobianEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btJacobianEntry.h; path = ../../../lib/bullet/src/BulletDynamics/ConstraintSolver/btJacobianEntry.h; sourceTree = SOURCE_ROOT; }; - 9593A20A1609386100AB5EEB /* btPoint2PointConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btPoint2PointConstraint.cpp; path = ../../../lib/bullet/src/BulletDynamics/ConstraintSolver/btPoint2PointConstraint.cpp; sourceTree = SOURCE_ROOT; }; - 9593A20B1609386100AB5EEB /* btPoint2PointConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btPoint2PointConstraint.h; path = ../../../lib/bullet/src/BulletDynamics/ConstraintSolver/btPoint2PointConstraint.h; sourceTree = SOURCE_ROOT; }; - 9593A20C1609386100AB5EEB /* btSequentialImpulseConstraintSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btSequentialImpulseConstraintSolver.cpp; path = ../../../lib/bullet/src/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.cpp; sourceTree = SOURCE_ROOT; }; - 9593A20D1609386100AB5EEB /* btSequentialImpulseConstraintSolver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btSequentialImpulseConstraintSolver.h; path = ../../../lib/bullet/src/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h; sourceTree = SOURCE_ROOT; }; - 9593A20E1609386100AB5EEB /* btSliderConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btSliderConstraint.cpp; path = ../../../lib/bullet/src/BulletDynamics/ConstraintSolver/btSliderConstraint.cpp; sourceTree = SOURCE_ROOT; }; - 9593A20F1609386100AB5EEB /* btSliderConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btSliderConstraint.h; path = ../../../lib/bullet/src/BulletDynamics/ConstraintSolver/btSliderConstraint.h; sourceTree = SOURCE_ROOT; }; - 9593A2101609386100AB5EEB /* btSolve2LinearConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btSolve2LinearConstraint.cpp; path = ../../../lib/bullet/src/BulletDynamics/ConstraintSolver/btSolve2LinearConstraint.cpp; sourceTree = SOURCE_ROOT; }; - 9593A2111609386100AB5EEB /* btSolve2LinearConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btSolve2LinearConstraint.h; path = ../../../lib/bullet/src/BulletDynamics/ConstraintSolver/btSolve2LinearConstraint.h; sourceTree = SOURCE_ROOT; }; - 9593A2121609386100AB5EEB /* btSolverBody.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btSolverBody.h; path = ../../../lib/bullet/src/BulletDynamics/ConstraintSolver/btSolverBody.h; sourceTree = SOURCE_ROOT; }; - 9593A2131609386100AB5EEB /* btSolverConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btSolverConstraint.h; path = ../../../lib/bullet/src/BulletDynamics/ConstraintSolver/btSolverConstraint.h; sourceTree = SOURCE_ROOT; }; - 9593A2141609386100AB5EEB /* btTypedConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btTypedConstraint.cpp; path = ../../../lib/bullet/src/BulletDynamics/ConstraintSolver/btTypedConstraint.cpp; sourceTree = SOURCE_ROOT; }; - 9593A2151609386100AB5EEB /* btTypedConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btTypedConstraint.h; path = ../../../lib/bullet/src/BulletDynamics/ConstraintSolver/btTypedConstraint.h; sourceTree = SOURCE_ROOT; }; - 9593A2161609386100AB5EEB /* btUniversalConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btUniversalConstraint.cpp; path = ../../../lib/bullet/src/BulletDynamics/ConstraintSolver/btUniversalConstraint.cpp; sourceTree = SOURCE_ROOT; }; - 9593A2171609386100AB5EEB /* btUniversalConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btUniversalConstraint.h; path = ../../../lib/bullet/src/BulletDynamics/ConstraintSolver/btUniversalConstraint.h; sourceTree = SOURCE_ROOT; }; - 9593A2191609386100AB5EEB /* btActionInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btActionInterface.h; path = ../../../lib/bullet/src/BulletDynamics/Dynamics/btActionInterface.h; sourceTree = SOURCE_ROOT; }; - 9593A21A1609386100AB5EEB /* btContinuousDynamicsWorld.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btContinuousDynamicsWorld.cpp; path = ../../../lib/bullet/src/BulletDynamics/Dynamics/btContinuousDynamicsWorld.cpp; sourceTree = SOURCE_ROOT; }; - 9593A21B1609386100AB5EEB /* btContinuousDynamicsWorld.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btContinuousDynamicsWorld.h; path = ../../../lib/bullet/src/BulletDynamics/Dynamics/btContinuousDynamicsWorld.h; sourceTree = SOURCE_ROOT; }; - 9593A21C1609386100AB5EEB /* btDiscreteDynamicsWorld.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btDiscreteDynamicsWorld.cpp; path = ../../../lib/bullet/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp; sourceTree = SOURCE_ROOT; }; - 9593A21D1609386100AB5EEB /* btDiscreteDynamicsWorld.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btDiscreteDynamicsWorld.h; path = ../../../lib/bullet/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h; sourceTree = SOURCE_ROOT; }; - 9593A21E1609386100AB5EEB /* btDynamicsWorld.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btDynamicsWorld.h; path = ../../../lib/bullet/src/BulletDynamics/Dynamics/btDynamicsWorld.h; sourceTree = SOURCE_ROOT; }; - 9593A21F1609386100AB5EEB /* btRigidBody.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btRigidBody.cpp; path = ../../../lib/bullet/src/BulletDynamics/Dynamics/btRigidBody.cpp; sourceTree = SOURCE_ROOT; }; - 9593A2201609386100AB5EEB /* btRigidBody.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btRigidBody.h; path = ../../../lib/bullet/src/BulletDynamics/Dynamics/btRigidBody.h; sourceTree = SOURCE_ROOT; }; - 9593A2211609386100AB5EEB /* btSimpleDynamicsWorld.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btSimpleDynamicsWorld.cpp; path = ../../../lib/bullet/src/BulletDynamics/Dynamics/btSimpleDynamicsWorld.cpp; sourceTree = SOURCE_ROOT; }; - 9593A2221609386100AB5EEB /* btSimpleDynamicsWorld.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btSimpleDynamicsWorld.h; path = ../../../lib/bullet/src/BulletDynamics/Dynamics/btSimpleDynamicsWorld.h; sourceTree = SOURCE_ROOT; }; - 9593A2231609386100AB5EEB /* Bullet-C-API.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "Bullet-C-API.cpp"; path = "../../../lib/bullet/src/BulletDynamics/Dynamics/Bullet-C-API.cpp"; sourceTree = SOURCE_ROOT; }; - 9593A2251609386100AB5EEB /* btRaycastVehicle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btRaycastVehicle.cpp; path = ../../../lib/bullet/src/BulletDynamics/Vehicle/btRaycastVehicle.cpp; sourceTree = SOURCE_ROOT; }; - 9593A2261609386100AB5EEB /* btRaycastVehicle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btRaycastVehicle.h; path = ../../../lib/bullet/src/BulletDynamics/Vehicle/btRaycastVehicle.h; sourceTree = SOURCE_ROOT; }; - 9593A2271609386100AB5EEB /* btVehicleRaycaster.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btVehicleRaycaster.h; path = ../../../lib/bullet/src/BulletDynamics/Vehicle/btVehicleRaycaster.h; sourceTree = SOURCE_ROOT; }; - 9593A2281609386100AB5EEB /* btWheelInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btWheelInfo.cpp; path = ../../../lib/bullet/src/BulletDynamics/Vehicle/btWheelInfo.cpp; sourceTree = SOURCE_ROOT; }; - 9593A2291609386100AB5EEB /* btWheelInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btWheelInfo.h; path = ../../../lib/bullet/src/BulletDynamics/Vehicle/btWheelInfo.h; sourceTree = SOURCE_ROOT; }; - 9593A22B1609386100AB5EEB /* btAabbUtil2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btAabbUtil2.h; path = ../../../lib/bullet/src/LinearMath/btAabbUtil2.h; sourceTree = SOURCE_ROOT; }; - 9593A22C1609386100AB5EEB /* btAlignedAllocator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btAlignedAllocator.cpp; path = ../../../lib/bullet/src/LinearMath/btAlignedAllocator.cpp; sourceTree = SOURCE_ROOT; }; - 9593A22D1609386100AB5EEB /* btAlignedAllocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btAlignedAllocator.h; path = ../../../lib/bullet/src/LinearMath/btAlignedAllocator.h; sourceTree = SOURCE_ROOT; }; - 9593A22E1609386100AB5EEB /* btAlignedObjectArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btAlignedObjectArray.h; path = ../../../lib/bullet/src/LinearMath/btAlignedObjectArray.h; sourceTree = SOURCE_ROOT; }; - 9593A22F1609386100AB5EEB /* btConvexHull.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btConvexHull.cpp; path = ../../../lib/bullet/src/LinearMath/btConvexHull.cpp; sourceTree = SOURCE_ROOT; }; - 9593A2301609386100AB5EEB /* btConvexHull.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btConvexHull.h; path = ../../../lib/bullet/src/LinearMath/btConvexHull.h; sourceTree = SOURCE_ROOT; }; - 9593A2311609386100AB5EEB /* btConvexHullComputer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btConvexHullComputer.cpp; path = ../../../lib/bullet/src/LinearMath/btConvexHullComputer.cpp; sourceTree = SOURCE_ROOT; }; - 9593A2321609386100AB5EEB /* btConvexHullComputer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btConvexHullComputer.h; path = ../../../lib/bullet/src/LinearMath/btConvexHullComputer.h; sourceTree = SOURCE_ROOT; }; - 9593A2331609386100AB5EEB /* btDefaultMotionState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btDefaultMotionState.h; path = ../../../lib/bullet/src/LinearMath/btDefaultMotionState.h; sourceTree = SOURCE_ROOT; }; - 9593A2341609386100AB5EEB /* btGeometryUtil.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btGeometryUtil.cpp; path = ../../../lib/bullet/src/LinearMath/btGeometryUtil.cpp; sourceTree = SOURCE_ROOT; }; - 9593A2351609386100AB5EEB /* btGeometryUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btGeometryUtil.h; path = ../../../lib/bullet/src/LinearMath/btGeometryUtil.h; sourceTree = SOURCE_ROOT; }; - 9593A2361609386100AB5EEB /* btGrahamScan2dConvexHull.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btGrahamScan2dConvexHull.h; path = ../../../lib/bullet/src/LinearMath/btGrahamScan2dConvexHull.h; sourceTree = SOURCE_ROOT; }; - 9593A2371609386100AB5EEB /* btHashMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btHashMap.h; path = ../../../lib/bullet/src/LinearMath/btHashMap.h; sourceTree = SOURCE_ROOT; }; - 9593A2381609386100AB5EEB /* btIDebugDraw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btIDebugDraw.h; path = ../../../lib/bullet/src/LinearMath/btIDebugDraw.h; sourceTree = SOURCE_ROOT; }; - 9593A2391609386100AB5EEB /* btList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btList.h; path = ../../../lib/bullet/src/LinearMath/btList.h; sourceTree = SOURCE_ROOT; }; - 9593A23A1609386100AB5EEB /* btMatrix3x3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btMatrix3x3.h; path = ../../../lib/bullet/src/LinearMath/btMatrix3x3.h; sourceTree = SOURCE_ROOT; }; - 9593A23B1609386100AB5EEB /* btMinMax.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btMinMax.h; path = ../../../lib/bullet/src/LinearMath/btMinMax.h; sourceTree = SOURCE_ROOT; }; - 9593A23C1609386100AB5EEB /* btMotionState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btMotionState.h; path = ../../../lib/bullet/src/LinearMath/btMotionState.h; sourceTree = SOURCE_ROOT; }; - 9593A23D1609386100AB5EEB /* btPoolAllocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btPoolAllocator.h; path = ../../../lib/bullet/src/LinearMath/btPoolAllocator.h; sourceTree = SOURCE_ROOT; }; - 9593A23E1609386100AB5EEB /* btQuadWord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btQuadWord.h; path = ../../../lib/bullet/src/LinearMath/btQuadWord.h; sourceTree = SOURCE_ROOT; }; - 9593A23F1609386100AB5EEB /* btQuaternion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btQuaternion.h; path = ../../../lib/bullet/src/LinearMath/btQuaternion.h; sourceTree = SOURCE_ROOT; }; - 9593A2401609386100AB5EEB /* btQuickprof.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btQuickprof.cpp; path = ../../../lib/bullet/src/LinearMath/btQuickprof.cpp; sourceTree = SOURCE_ROOT; }; - 9593A2411609386100AB5EEB /* btQuickprof.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btQuickprof.h; path = ../../../lib/bullet/src/LinearMath/btQuickprof.h; sourceTree = SOURCE_ROOT; }; - 9593A2421609386100AB5EEB /* btRandom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btRandom.h; path = ../../../lib/bullet/src/LinearMath/btRandom.h; sourceTree = SOURCE_ROOT; }; - 9593A2431609386100AB5EEB /* btScalar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btScalar.h; path = ../../../lib/bullet/src/LinearMath/btScalar.h; sourceTree = SOURCE_ROOT; }; - 9593A2441609386100AB5EEB /* btSerializer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btSerializer.cpp; path = ../../../lib/bullet/src/LinearMath/btSerializer.cpp; sourceTree = SOURCE_ROOT; }; - 9593A2451609386100AB5EEB /* btSerializer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btSerializer.h; path = ../../../lib/bullet/src/LinearMath/btSerializer.h; sourceTree = SOURCE_ROOT; }; - 9593A2461609386100AB5EEB /* btStackAlloc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btStackAlloc.h; path = ../../../lib/bullet/src/LinearMath/btStackAlloc.h; sourceTree = SOURCE_ROOT; }; - 9593A2471609386100AB5EEB /* btTransform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btTransform.h; path = ../../../lib/bullet/src/LinearMath/btTransform.h; sourceTree = SOURCE_ROOT; }; - 9593A2481609386100AB5EEB /* btTransformUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btTransformUtil.h; path = ../../../lib/bullet/src/LinearMath/btTransformUtil.h; sourceTree = SOURCE_ROOT; }; - 9593A2491609386100AB5EEB /* btVector3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = btVector3.h; path = ../../../lib/bullet/src/LinearMath/btVector3.h; sourceTree = SOURCE_ROOT; }; - 9593A24A1609386100AB5EEB /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = Makefile.am; path = ../../../lib/bullet/src/Makefile.am; sourceTree = SOURCE_ROOT; }; - 9593A2CF1609388C00AB5EEB /* aclocal.m4 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = aclocal.m4; path = ../../../lib/enet/aclocal.m4; sourceTree = SOURCE_ROOT; }; - 9593A2D01609388C00AB5EEB /* callbacks.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = callbacks.c; path = ../../../lib/enet/callbacks.c; sourceTree = SOURCE_ROOT; }; - 9593A2D11609388C00AB5EEB /* ChangeLog */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = ChangeLog; path = ../../../lib/enet/ChangeLog; sourceTree = SOURCE_ROOT; }; - 9593A2D21609388C00AB5EEB /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = CMakeLists.txt; path = ../../../lib/enet/CMakeLists.txt; sourceTree = SOURCE_ROOT; }; - 9593A2D31609388C00AB5EEB /* compress.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = compress.c; path = ../../../lib/enet/compress.c; sourceTree = SOURCE_ROOT; }; - 9593A2D41609388C00AB5EEB /* configure */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = configure; path = ../../../lib/enet/configure; sourceTree = SOURCE_ROOT; }; - 9593A2D51609388C00AB5EEB /* configure.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = configure.in; path = ../../../lib/enet/configure.in; sourceTree = SOURCE_ROOT; }; - 9593A2D61609388C00AB5EEB /* depcomp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = depcomp; path = ../../../lib/enet/depcomp; sourceTree = SOURCE_ROOT; }; - 9593A2D71609388C00AB5EEB /* design.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = design.txt; path = ../../../lib/enet/design.txt; sourceTree = SOURCE_ROOT; }; - 9593A2DF1609388C00AB5EEB /* Doxyfile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = Doxyfile; path = ../../../lib/enet/Doxyfile; sourceTree = SOURCE_ROOT; }; - 9593A2E01609388C00AB5EEB /* enet.dsp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = enet.dsp; path = ../../../lib/enet/enet.dsp; sourceTree = SOURCE_ROOT; }; - 9593A2E11609388C00AB5EEB /* host.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = host.c; path = ../../../lib/enet/host.c; sourceTree = SOURCE_ROOT; }; - 9593A2E41609388C00AB5EEB /* callbacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = callbacks.h; path = ../../../lib/enet/include/enet/callbacks.h; sourceTree = SOURCE_ROOT; }; - 9593A2E51609388C00AB5EEB /* enet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = enet.h; path = ../../../lib/enet/include/enet/enet.h; sourceTree = SOURCE_ROOT; }; - 9593A2E61609388C00AB5EEB /* list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = list.h; path = ../../../lib/enet/include/enet/list.h; sourceTree = SOURCE_ROOT; }; - 9593A2E71609388C00AB5EEB /* protocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = protocol.h; path = ../../../lib/enet/include/enet/protocol.h; sourceTree = SOURCE_ROOT; }; - 9593A2E81609388C00AB5EEB /* time.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = time.h; path = ../../../lib/enet/include/enet/time.h; sourceTree = SOURCE_ROOT; }; - 9593A2E91609388C00AB5EEB /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = types.h; path = ../../../lib/enet/include/enet/types.h; sourceTree = SOURCE_ROOT; }; - 9593A2EA1609388C00AB5EEB /* unix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = unix.h; path = ../../../lib/enet/include/enet/unix.h; sourceTree = SOURCE_ROOT; }; - 9593A2EB1609388C00AB5EEB /* utility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = utility.h; path = ../../../lib/enet/include/enet/utility.h; sourceTree = SOURCE_ROOT; }; - 9593A2EC1609388C00AB5EEB /* win32.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = win32.h; path = ../../../lib/enet/include/enet/win32.h; sourceTree = SOURCE_ROOT; }; - 9593A2ED1609388C00AB5EEB /* install-sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = "install-sh"; path = "../../../lib/enet/install-sh"; sourceTree = SOURCE_ROOT; }; - 9593A2EE1609388C00AB5EEB /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = LICENSE; path = ../../../lib/enet/LICENSE; sourceTree = SOURCE_ROOT; }; - 9593A2EF1609388C00AB5EEB /* list.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = list.c; path = ../../../lib/enet/list.c; sourceTree = SOURCE_ROOT; }; - 9593A2F01609388C00AB5EEB /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = Makefile.am; path = ../../../lib/enet/Makefile.am; sourceTree = SOURCE_ROOT; }; - 9593A2F11609388C00AB5EEB /* missing */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = missing; path = ../../../lib/enet/missing; sourceTree = SOURCE_ROOT; }; - 9593A2F21609388C00AB5EEB /* packet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = packet.c; path = ../../../lib/enet/packet.c; sourceTree = SOURCE_ROOT; }; - 9593A2F31609388C00AB5EEB /* peer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = peer.c; path = ../../../lib/enet/peer.c; sourceTree = SOURCE_ROOT; }; - 9593A2F41609388C00AB5EEB /* protocol.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = protocol.c; path = ../../../lib/enet/protocol.c; sourceTree = SOURCE_ROOT; }; - 9593A2F51609388C00AB5EEB /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = README; path = ../../../lib/enet/README; sourceTree = SOURCE_ROOT; }; - 9593A2F61609388C00AB5EEB /* tutorial.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = tutorial.txt; path = ../../../lib/enet/tutorial.txt; sourceTree = SOURCE_ROOT; }; - 9593A2F71609388C00AB5EEB /* unix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = unix.c; path = ../../../lib/enet/unix.c; sourceTree = SOURCE_ROOT; }; - 9593A2F81609388C00AB5EEB /* win32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = win32.c; path = ../../../lib/enet/win32.c; sourceTree = SOURCE_ROOT; }; - 9593A31E16093A7300AB5EEB /* ai_properties.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ai_properties.cpp; path = ../../karts/controller/ai_properties.cpp; sourceTree = SOURCE_ROOT; }; - 9593A31F16093A7300AB5EEB /* ai_properties.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ai_properties.hpp; path = ../../karts/controller/ai_properties.hpp; sourceTree = SOURCE_ROOT; }; - 959482CF10EBC0790031BADF /* track_object_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = track_object_manager.cpp; path = ../../tracks/track_object_manager.cpp; sourceTree = SOURCE_ROOT; }; - 959482D010EBC0790031BADF /* track_object_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = track_object_manager.hpp; path = ../../tracks/track_object_manager.hpp; sourceTree = SOURCE_ROOT; }; - 959482D110EBC0790031BADF /* track_object.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = track_object.cpp; path = ../../tracks/track_object.cpp; sourceTree = SOURCE_ROOT; }; - 959482D210EBC0790031BADF /* track_object.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = track_object.hpp; path = ../../tracks/track_object.hpp; sourceTree = SOURCE_ROOT; }; - 9598A5B413CFBA83000B83EA /* hardware_skinning.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = hardware_skinning.cpp; path = ../../graphics/hardware_skinning.cpp; sourceTree = SOURCE_ROOT; }; - 9598A5B513CFBA83000B83EA /* hardware_skinning.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = hardware_skinning.hpp; path = ../../graphics/hardware_skinning.hpp; sourceTree = SOURCE_ROOT; }; - 959DE0C413C297B90068ED78 /* swatter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = swatter.cpp; path = ../../items/swatter.cpp; sourceTree = SOURCE_ROOT; }; - 959DE0C513C297B90068ED78 /* swatter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = swatter.hpp; path = ../../items/swatter.hpp; sourceTree = SOURCE_ROOT; }; - 95A0BA2213E63F6700620EA6 /* kart_with_stats.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = kart_with_stats.cpp; path = ../../karts/kart_with_stats.cpp; sourceTree = SOURCE_ROOT; }; - 95A0BA2313E63F6700620EA6 /* kart_with_stats.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = kart_with_stats.hpp; path = ../../karts/kart_with_stats.hpp; sourceTree = SOURCE_ROOT; }; - 95A118290F77EA3100B18B3D /* input.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = input.hpp; path = ../../input/input.hpp; sourceTree = SOURCE_ROOT; }; - 95A1182A0F77EA3100B18B3D /* input_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = input_manager.cpp; path = ../../input/input_manager.cpp; sourceTree = SOURCE_ROOT; }; - 95A1182B0F77EA3100B18B3D /* input_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = input_manager.hpp; path = ../../input/input_manager.hpp; sourceTree = SOURCE_ROOT; }; - 95A1184A0F77FC3900B18B3D /* input_device.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = input_device.cpp; path = ../../input/input_device.cpp; sourceTree = SOURCE_ROOT; }; - 95A1184C0F77FC8800B18B3D /* input_device.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = input_device.hpp; path = ../../input/input_device.hpp; sourceTree = SOURCE_ROOT; }; - 95A1187A0F78024E00B18B3D /* device_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = device_manager.cpp; path = ../../input/device_manager.cpp; sourceTree = SOURCE_ROOT; }; - 95A1187C0F78026D00B18B3D /* device_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = device_manager.hpp; path = ../../input/device_manager.hpp; sourceTree = SOURCE_ROOT; }; - 95A1966014FC422D0074B892 /* ghost_kart.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ghost_kart.cpp; path = ../../karts/ghost_kart.cpp; sourceTree = SOURCE_ROOT; }; - 95A1966114FC422D0074B892 /* ghost_kart.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ghost_kart.hpp; path = ../../karts/ghost_kart.hpp; sourceTree = SOURCE_ROOT; }; - 95A197881502E5020074B892 /* replay_base.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = replay_base.cpp; path = ../../replay/replay_base.cpp; sourceTree = SOURCE_ROOT; }; - 95A197891502E5020074B892 /* replay_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = replay_base.hpp; path = ../../replay/replay_base.hpp; sourceTree = SOURCE_ROOT; }; - 95A1978A1502E5020074B892 /* replay_play.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = replay_play.cpp; path = ../../replay/replay_play.cpp; sourceTree = SOURCE_ROOT; }; - 95A1978B1502E5020074B892 /* replay_play.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = replay_play.hpp; path = ../../replay/replay_play.hpp; sourceTree = SOURCE_ROOT; }; - 95A1978C1502E5020074B892 /* replay_recorder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = replay_recorder.cpp; path = ../../replay/replay_recorder.cpp; sourceTree = SOURCE_ROOT; }; - 95A1978D1502E5020074B892 /* replay_recorder.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = replay_recorder.hpp; path = ../../replay/replay_recorder.hpp; sourceTree = SOURCE_ROOT; }; - 95A197931502E5320074B892 /* skidding.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = skidding.cpp; path = ../../karts/skidding.cpp; sourceTree = SOURCE_ROOT; }; - 95A197941502E5320074B892 /* skidding.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = skidding.hpp; path = ../../karts/skidding.hpp; sourceTree = SOURCE_ROOT; }; - 95A5402D1481BD950086FE38 /* inetwork_http.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = inetwork_http.hpp; path = ../../addons/inetwork_http.hpp; sourceTree = SOURCE_ROOT; }; - 95A540411481BEB60086FE38 /* dummy_network_http.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = dummy_network_http.hpp; path = ../../addons/dummy_network_http.hpp; sourceTree = SOURCE_ROOT; }; - 95A540581481C4760086FE38 /* dummy_sfx.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = dummy_sfx.hpp; path = ../../audio/dummy_sfx.hpp; sourceTree = SOURCE_ROOT; }; - 95A5405B1481C4DB0086FE38 /* music_dummy.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = music_dummy.hpp; path = ../../audio/music_dummy.hpp; sourceTree = SOURCE_ROOT; }; - 95AA4C65148AF2CC0053771D /* lod_node_loader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = lod_node_loader.cpp; path = ../../tracks/lod_node_loader.cpp; sourceTree = SOURCE_ROOT; }; - 95AA4C66148AF2CC0053771D /* lod_node_loader.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = lod_node_loader.hpp; path = ../../tracks/lod_node_loader.hpp; sourceTree = SOURCE_ROOT; }; - 95B0E8A616A4DC060037391C /* log.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = log.cpp; path = ../../utils/log.cpp; sourceTree = SOURCE_ROOT; }; - 95B0E8A716A4DC060037391C /* log.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = log.hpp; path = ../../utils/log.hpp; sourceTree = SOURCE_ROOT; }; - 95B0E8AE16A4DC390037391C /* tgt_log.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tgt_log.cpp; path = ../../tinygettext/tgt_log.cpp; sourceTree = SOURCE_ROOT; }; - 95B0E8AF16A4DC390037391C /* tgt_log.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = tgt_log.hpp; path = ../../tinygettext/tgt_log.hpp; sourceTree = SOURCE_ROOT; }; - 95B0E8B316A4DC9E0037391C /* easter_egg_hunt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = easter_egg_hunt.cpp; path = ../../modes/easter_egg_hunt.cpp; sourceTree = SOURCE_ROOT; }; - 95B0E8B416A4DC9E0037391C /* easter_egg_hunt.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = easter_egg_hunt.hpp; path = ../../modes/easter_egg_hunt.hpp; sourceTree = SOURCE_ROOT; }; - 95B0E8B516A4DC9E0037391C /* tutorial_world.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tutorial_world.cpp; path = ../../modes/tutorial_world.cpp; sourceTree = SOURCE_ROOT; }; - 95B0E8B616A4DC9E0037391C /* tutorial_world.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = tutorial_world.hpp; path = ../../modes/tutorial_world.hpp; sourceTree = SOURCE_ROOT; }; - 95B5CD12102DE08F00EF2001 /* device_config.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = device_config.hpp; path = ../../config/device_config.hpp; sourceTree = SOURCE_ROOT; }; - 95B5CD13102DE08F00EF2001 /* device_config.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = device_config.cpp; path = ../../config/device_config.cpp; sourceTree = SOURCE_ROOT; }; - 95BF1E66127513A100F78AE7 /* max_speed.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = max_speed.cpp; path = ../../karts/max_speed.cpp; sourceTree = SOURCE_ROOT; }; - 95BF1E67127513A100F78AE7 /* max_speed.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = max_speed.hpp; path = ../../karts/max_speed.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; }; - 95C2AC280F296540000D3E5D /* music_information.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = music_information.cpp; path = ../../audio/music_information.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AC290F296540000D3E5D /* music_information.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = music_information.hpp; path = ../../audio/music_information.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AC2A0F296540000D3E5D /* music_ogg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = music_ogg.cpp; path = ../../audio/music_ogg.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AC2B0F296540000D3E5D /* music_ogg.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = music_ogg.hpp; path = ../../audio/music_ogg.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AC2C0F296540000D3E5D /* sfx_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = sfx_base.hpp; path = ../../audio/sfx_base.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AC2D0F296540000D3E5D /* sfx_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sfx_manager.cpp; path = ../../audio/sfx_manager.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AC2E0F296540000D3E5D /* sfx_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = sfx_manager.hpp; path = ../../audio/sfx_manager.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AC2F0F296540000D3E5D /* sfx_openal.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sfx_openal.cpp; path = ../../audio/sfx_openal.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AC300F296540000D3E5D /* sfx_openal.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = sfx_openal.hpp; path = ../../audio/sfx_openal.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AE260F296541000D3E5D /* challenge.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = challenge.cpp; path = ../../challenges/challenge.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AE270F296541000D3E5D /* challenge.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = challenge.hpp; path = ../../challenges/challenge.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AE280F296541000D3E5D /* challenge_data.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = challenge_data.cpp; path = ../../challenges/challenge_data.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AE290F296541000D3E5D /* challenge_data.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = challenge_data.hpp; path = ../../challenges/challenge_data.hpp; sourceTree = SOURCE_ROOT; }; - 95C2AE2A0F296541000D3E5D /* unlock_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = unlock_manager.cpp; path = ../../challenges/unlock_manager.cpp; sourceTree = SOURCE_ROOT; }; - 95C2AE2B0F296541000D3E5D /* unlock_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = unlock_manager.hpp; path = ../../challenges/unlock_manager.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B0F60F296545000D3E5D /* attachment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = attachment.cpp; path = ../../items/attachment.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B0F70F296545000D3E5D /* attachment.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = attachment.hpp; path = ../../items/attachment.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B0F80F296545000D3E5D /* attachment_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = attachment_manager.cpp; path = ../../items/attachment_manager.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B0F90F296545000D3E5D /* attachment_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = attachment_manager.hpp; path = ../../items/attachment_manager.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B0FA0F296545000D3E5D /* bowling.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bowling.cpp; path = ../../items/bowling.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B0FB0F296545000D3E5D /* bowling.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = bowling.hpp; path = ../../items/bowling.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B0FE0F296545000D3E5D /* cake.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = cake.cpp; path = ../../items/cake.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B0FF0F296545000D3E5D /* cake.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = cake.hpp; path = ../../items/cake.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1000F296545000D3E5D /* flyable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = flyable.cpp; path = ../../items/flyable.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B1010F296545000D3E5D /* flyable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = flyable.hpp; path = ../../items/flyable.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1020F296545000D3E5D /* item.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = item.cpp; path = ../../items/item.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B1030F296545000D3E5D /* item.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = item.hpp; path = ../../items/item.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1040F296545000D3E5D /* item_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = item_manager.cpp; path = ../../items/item_manager.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B1050F296545000D3E5D /* item_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = item_manager.hpp; path = ../../items/item_manager.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1060F296545000D3E5D /* plunger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = plunger.cpp; path = ../../items/plunger.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B1070F296545000D3E5D /* plunger.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = plunger.hpp; path = ../../items/plunger.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1080F296545000D3E5D /* powerup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = powerup.cpp; path = ../../items/powerup.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B1090F296545000D3E5D /* powerup.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = powerup.hpp; path = ../../items/powerup.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B10A0F296545000D3E5D /* powerup_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = powerup_manager.cpp; path = ../../items/powerup_manager.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B10B0F296545000D3E5D /* powerup_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = powerup_manager.hpp; path = ../../items/powerup_manager.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B10C0F296545000D3E5D /* projectile_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = projectile_manager.cpp; path = ../../items/projectile_manager.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B10D0F296545000D3E5D /* projectile_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = projectile_manager.hpp; path = ../../items/projectile_manager.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B10E0F296545000D3E5D /* rubber_band.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rubber_band.cpp; path = ../../items/rubber_band.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B10F0F296545000D3E5D /* rubber_band.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = rubber_band.hpp; path = ../../items/rubber_band.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1180F296545000D3E5D /* kart.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = kart.cpp; path = ../../karts/kart.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B1190F296545000D3E5D /* kart.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = kart.hpp; path = ../../karts/kart.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B11B0F296545000D3E5D /* kart_model.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = kart_model.cpp; path = ../../karts/kart_model.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B11C0F296545000D3E5D /* kart_model.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = kart_model.hpp; path = ../../karts/kart_model.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B11D0F296545000D3E5D /* kart_properties.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = kart_properties.cpp; path = ../../karts/kart_properties.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B11E0F296545000D3E5D /* kart_properties.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = kart_properties.hpp; path = ../../karts/kart_properties.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B11F0F296545000D3E5D /* kart_properties_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = kart_properties_manager.cpp; path = ../../karts/kart_properties_manager.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B1200F296545000D3E5D /* kart_properties_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = kart_properties_manager.hpp; path = ../../karts/kart_properties_manager.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1210F296545000D3E5D /* moveable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = moveable.cpp; path = ../../karts/moveable.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B1220F296545000D3E5D /* moveable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = moveable.hpp; path = ../../karts/moveable.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1360F296545000D3E5D /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../../main.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B1380F296545000D3E5D /* main_loop.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main_loop.cpp; path = ../../main_loop.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B1390F296545000D3E5D /* main_loop.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = main_loop.hpp; path = ../../main_loop.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B14A0F296545000D3E5D /* follow_the_leader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = follow_the_leader.cpp; path = ../../modes/follow_the_leader.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B14B0F296545000D3E5D /* follow_the_leader.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = follow_the_leader.hpp; path = ../../modes/follow_the_leader.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B14C0F296545000D3E5D /* linear_world.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = linear_world.cpp; path = ../../modes/linear_world.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B14D0F296545000D3E5D /* linear_world.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = linear_world.hpp; path = ../../modes/linear_world.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B14E0F296545000D3E5D /* standard_race.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = standard_race.cpp; path = ../../modes/standard_race.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B14F0F296545000D3E5D /* standard_race.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = standard_race.hpp; path = ../../modes/standard_race.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1500F296545000D3E5D /* three_strikes_battle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = three_strikes_battle.cpp; path = ../../modes/three_strikes_battle.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B1510F296545000D3E5D /* three_strikes_battle.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = three_strikes_battle.hpp; path = ../../modes/three_strikes_battle.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1520F296545000D3E5D /* world.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = world.cpp; path = ../../modes/world.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B1530F296545000D3E5D /* world.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = world.hpp; path = ../../modes/world.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B15A0F296545000D3E5D /* character_confirm_message.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = character_confirm_message.hpp; path = ../../network/character_confirm_message.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B15B0F296545000D3E5D /* character_info_message.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = character_info_message.hpp; path = ../../network/character_info_message.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B15C0F296545000D3E5D /* character_selected_message.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = character_selected_message.hpp; path = ../../network/character_selected_message.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B15D0F296545000D3E5D /* connect_message.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = connect_message.cpp; path = ../../network/connect_message.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B15E0F296545000D3E5D /* connect_message.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = connect_message.hpp; path = ../../network/connect_message.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B15F0F296545000D3E5D /* flyable_info.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = flyable_info.hpp; path = ../../network/flyable_info.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1600F296545000D3E5D /* item_info.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = item_info.hpp; path = ../../network/item_info.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1610F296545000D3E5D /* kart_control_message.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = kart_control_message.cpp; path = ../../network/kart_control_message.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B1620F296545000D3E5D /* kart_control_message.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = kart_control_message.hpp; path = ../../network/kart_control_message.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1630F296545000D3E5D /* kart_update_message.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = kart_update_message.cpp; path = ../../network/kart_update_message.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B1640F296545000D3E5D /* kart_update_message.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = kart_update_message.hpp; path = ../../network/kart_update_message.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1650F296545000D3E5D /* message.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = message.cpp; path = ../../network/message.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B1660F296545000D3E5D /* message.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = message.hpp; path = ../../network/message.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1670F296545000D3E5D /* network_kart.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = network_kart.cpp; path = ../../network/network_kart.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B1680F296545000D3E5D /* network_kart.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = network_kart.hpp; path = ../../network/network_kart.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1690F296545000D3E5D /* network_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = network_manager.cpp; path = ../../network/network_manager.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B16A0F296545000D3E5D /* network_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = network_manager.hpp; path = ../../network/network_manager.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B16B0F296545000D3E5D /* num_players_message.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = num_players_message.hpp; path = ../../network/num_players_message.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B16C0F296545000D3E5D /* race_info_message.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = race_info_message.cpp; path = ../../network/race_info_message.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B16D0F296545000D3E5D /* race_info_message.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = race_info_message.hpp; path = ../../network/race_info_message.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B16E0F296545000D3E5D /* race_result_ack_message.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = race_result_ack_message.hpp; path = ../../network/race_result_ack_message.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B16F0F296545000D3E5D /* race_result_message.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = race_result_message.cpp; path = ../../network/race_result_message.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B1700F296545000D3E5D /* race_result_message.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = race_result_message.hpp; path = ../../network/race_result_message.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1710F296545000D3E5D /* race_start_message.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = race_start_message.hpp; path = ../../network/race_start_message.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1720F296545000D3E5D /* race_state.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = race_state.cpp; path = ../../network/race_state.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B1730F296545000D3E5D /* race_state.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = race_state.hpp; path = ../../network/race_state.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1740F296545000D3E5D /* remote_kart_info.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = remote_kart_info.hpp; path = ../../network/remote_kart_info.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1750F296545000D3E5D /* world_loaded_message.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = world_loaded_message.hpp; path = ../../network/world_loaded_message.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1800F296545000D3E5D /* btKart.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btKart.cpp; path = ../../physics/btKart.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B1810F296545000D3E5D /* btKart.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = btKart.hpp; path = ../../physics/btKart.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1820F296545000D3E5D /* btUprightConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = btUprightConstraint.cpp; path = ../../physics/btUprightConstraint.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B1830F296545000D3E5D /* btUprightConstraint.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = btUprightConstraint.hpp; path = ../../physics/btUprightConstraint.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1840F296545000D3E5D /* kart_motion_state.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = kart_motion_state.hpp; path = ../../physics/kart_motion_state.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1870F296545000D3E5D /* physics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = physics.cpp; path = ../../physics/physics.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B1880F296545000D3E5D /* physics.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = physics.hpp; path = ../../physics/physics.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1CF0F296545000D3E5D /* track.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = track.cpp; path = ../../tracks/track.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B1D00F296545000D3E5D /* track.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = track.hpp; path = ../../tracks/track.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1D10F296545000D3E5D /* track_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = track_manager.cpp; path = ../../tracks/track_manager.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B1D20F296545000D3E5D /* track_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = track_manager.hpp; path = ../../tracks/track_manager.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1E00F296546000D3E5D /* constants.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = constants.hpp; path = ../../utils/constants.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1E20F296546000D3E5D /* random_generator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = random_generator.cpp; path = ../../utils/random_generator.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B1E30F296546000D3E5D /* random_generator.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = random_generator.hpp; path = ../../utils/random_generator.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1E60F296546000D3E5D /* string_utils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = string_utils.cpp; path = ../../utils/string_utils.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B1E70F296546000D3E5D /* string_utils.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = string_utils.hpp; path = ../../utils/string_utils.hpp; sourceTree = SOURCE_ROOT; }; - 95C2B1E80F296546000D3E5D /* vec3.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = vec3.cpp; path = ../../utils/vec3.cpp; sourceTree = SOURCE_ROOT; }; - 95C2B1E90F296546000D3E5D /* vec3.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = vec3.hpp; path = ../../utils/vec3.hpp; sourceTree = SOURCE_ROOT; }; - 95C631A3142AC79500416D47 /* leak_check.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = leak_check.cpp; path = ../../utils/leak_check.cpp; sourceTree = SOURCE_ROOT; }; - 95C631B3142AC95500416D47 /* leak_check.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = leak_check.hpp; path = ../../utils/leak_check.hpp; sourceTree = SOURCE_ROOT; }; - 95C65D760F532F7D00BE7BA7 /* xml_node.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = xml_node.cpp; path = ../../io/xml_node.cpp; sourceTree = SOURCE_ROOT; }; - 95C65D770F532F7D00BE7BA7 /* xml_node.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = xml_node.hpp; path = ../../io/xml_node.hpp; sourceTree = SOURCE_ROOT; }; - 95C77D611069589B0080838E /* ambient_light_sphere.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ambient_light_sphere.hpp; path = ../../tracks/ambient_light_sphere.hpp; sourceTree = SOURCE_ROOT; }; - 95C77D621069589B0080838E /* ambient_light_sphere.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ambient_light_sphere.cpp; path = ../../tracks/ambient_light_sphere.cpp; sourceTree = SOURCE_ROOT; }; - 95C77D64106958A50080838E /* check_line.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = check_line.hpp; path = ../../tracks/check_line.hpp; sourceTree = SOURCE_ROOT; }; - 95C77D65106958A50080838E /* check_line.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = check_line.cpp; path = ../../tracks/check_line.cpp; sourceTree = SOURCE_ROOT; }; - 95C77D6D106958E10080838E /* check_sphere.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = check_sphere.cpp; path = ../../tracks/check_sphere.cpp; sourceTree = SOURCE_ROOT; }; - 95C77D6E106958E10080838E /* check_sphere.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = check_sphere.hpp; path = ../../tracks/check_sphere.hpp; sourceTree = SOURCE_ROOT; }; - 95C87F2D133A34E400D86528 /* time.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = time.hpp; path = ../../utils/time.hpp; sourceTree = SOURCE_ROOT; }; - 95C87F2F133A34EE00D86528 /* checked.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = checked.h; path = ../../utils/utf8/checked.h; sourceTree = SOURCE_ROOT; }; - 95C87F30133A34EE00D86528 /* core.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = core.h; path = ../../utils/utf8/core.h; sourceTree = SOURCE_ROOT; }; - 95C87F31133A34EE00D86528 /* unchecked.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = unchecked.h; path = ../../utils/utf8/unchecked.h; sourceTree = SOURCE_ROOT; }; - 95C87F32133A34EE00D86528 /* utf8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = utf8.h; path = ../../utils/utf8.h; sourceTree = SOURCE_ROOT; }; - 95C9C97010E93456005A418D /* stars.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stars.cpp; path = ../../graphics/stars.cpp; sourceTree = SOURCE_ROOT; }; - 95C9C97110E93456005A418D /* stars.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = stars.hpp; path = ../../graphics/stars.hpp; sourceTree = SOURCE_ROOT; }; - 95CA59F60F82FCB7003323DB /* physical_object.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = physical_object.hpp; path = ../../physics/physical_object.hpp; sourceTree = SOURCE_ROOT; }; - 95CA59F70F82FCB7003323DB /* physical_object.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = physical_object.cpp; path = ../../physics/physical_object.cpp; sourceTree = SOURCE_ROOT; }; - 95CB476A0FF30EF400413BAE /* bezier_curve.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = bezier_curve.hpp; path = ../../tracks/bezier_curve.hpp; sourceTree = SOURCE_ROOT; }; - 95CB476B0FF30EF400413BAE /* bezier_curve.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bezier_curve.cpp; path = ../../tracks/bezier_curve.cpp; sourceTree = SOURCE_ROOT; }; - 95D2343D1078227A00625256 /* feature_unlocked.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = feature_unlocked.hpp; path = ../../states_screens/feature_unlocked.hpp; sourceTree = SOURCE_ROOT; }; - 95D2343E1078227A00625256 /* feature_unlocked.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = feature_unlocked.cpp; path = ../../states_screens/feature_unlocked.cpp; sourceTree = SOURCE_ROOT; }; - 95D2C42E13D6605600E84032 /* rubber_ball.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rubber_ball.cpp; path = ../../items/rubber_ball.cpp; sourceTree = SOURCE_ROOT; }; - 95D2C42F13D6605600E84032 /* rubber_ball.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = rubber_ball.hpp; path = ../../items/rubber_ball.hpp; sourceTree = SOURCE_ROOT; }; - 95D69A7215226E4700D598D8 /* abstract_kart.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = abstract_kart.cpp; path = ../../karts/abstract_kart.cpp; sourceTree = SOURCE_ROOT; }; - 95D69A7315226E4700D598D8 /* abstract_kart.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = abstract_kart.hpp; path = ../../karts/abstract_kart.hpp; sourceTree = SOURCE_ROOT; }; - 95D71F6416BF380900C0F691 /* classic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = classic.c; path = ../../../lib/wiiuse/classic.c; sourceTree = SOURCE_ROOT; }; - 95D71F6516BF380900C0F691 /* classic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = classic.h; path = ../../../lib/wiiuse/classic.h; sourceTree = SOURCE_ROOT; }; - 95D71F6616BF380900C0F691 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = CMakeLists.txt; path = ../../../lib/wiiuse/CMakeLists.txt; sourceTree = SOURCE_ROOT; }; - 95D71F6716BF380900C0F691 /* definitions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = definitions.h; path = ../../../lib/wiiuse/definitions.h; sourceTree = SOURCE_ROOT; }; - 95D71F6816BF380900C0F691 /* definitions_os.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = definitions_os.h; path = ../../../lib/wiiuse/definitions_os.h; sourceTree = SOURCE_ROOT; }; - 95D71F6916BF380900C0F691 /* dynamics.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = dynamics.c; path = ../../../lib/wiiuse/dynamics.c; sourceTree = SOURCE_ROOT; }; - 95D71F6A16BF380900C0F691 /* dynamics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dynamics.h; path = ../../../lib/wiiuse/dynamics.h; sourceTree = SOURCE_ROOT; }; - 95D71F6B16BF380900C0F691 /* events.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = events.c; path = ../../../lib/wiiuse/events.c; sourceTree = SOURCE_ROOT; }; - 95D71F6C16BF380900C0F691 /* events.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = events.h; path = ../../../lib/wiiuse/events.h; sourceTree = SOURCE_ROOT; }; - 95D71F6D16BF380900C0F691 /* guitar_hero_3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = guitar_hero_3.c; path = ../../../lib/wiiuse/guitar_hero_3.c; sourceTree = SOURCE_ROOT; }; - 95D71F6E16BF380900C0F691 /* guitar_hero_3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = guitar_hero_3.h; path = ../../../lib/wiiuse/guitar_hero_3.h; sourceTree = SOURCE_ROOT; }; - 95D71F6F16BF380900C0F691 /* io.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = io.c; path = ../../../lib/wiiuse/io.c; sourceTree = SOURCE_ROOT; }; - 95D71F7016BF380900C0F691 /* io.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = io.h; path = ../../../lib/wiiuse/io.h; sourceTree = SOURCE_ROOT; }; - 95D71F7216BF380900C0F691 /* io_win.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = io_win.c; path = ../../../lib/wiiuse/io_win.c; sourceTree = SOURCE_ROOT; }; - 95D71F7316BF380900C0F691 /* ir.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ir.c; path = ../../../lib/wiiuse/ir.c; sourceTree = SOURCE_ROOT; }; - 95D71F7416BF380900C0F691 /* ir.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ir.h; path = ../../../lib/wiiuse/ir.h; sourceTree = SOURCE_ROOT; }; - 95D71F7516BF380900C0F691 /* motion_plus.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = motion_plus.c; path = ../../../lib/wiiuse/motion_plus.c; sourceTree = SOURCE_ROOT; }; - 95D71F7616BF380900C0F691 /* motion_plus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = motion_plus.h; path = ../../../lib/wiiuse/motion_plus.h; sourceTree = SOURCE_ROOT; }; - 95D71F7716BF380900C0F691 /* nunchuk.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = nunchuk.c; path = ../../../lib/wiiuse/nunchuk.c; sourceTree = SOURCE_ROOT; }; - 95D71F7816BF380900C0F691 /* nunchuk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = nunchuk.h; path = ../../../lib/wiiuse/nunchuk.h; sourceTree = SOURCE_ROOT; }; - 95D71F7916BF380900C0F691 /* os.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = os.h; path = ../../../lib/wiiuse/os.h; sourceTree = SOURCE_ROOT; }; - 95D71F7B16BF380900C0F691 /* os_mac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = os_mac.h; path = ../../../lib/wiiuse/os_mac/os_mac.h; sourceTree = SOURCE_ROOT; }; - 95D71F7C16BF380900C0F691 /* os_mac.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = os_mac.m; path = ../../../lib/wiiuse/os_mac/os_mac.m; sourceTree = SOURCE_ROOT; }; - 95D71F7D16BF380900C0F691 /* os_mac_find.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = os_mac_find.m; path = ../../../lib/wiiuse/os_mac/os_mac_find.m; sourceTree = SOURCE_ROOT; }; - 95D71F7E16BF380900C0F691 /* os_mac_interface.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = os_mac_interface.m; path = ../../../lib/wiiuse/os_mac/os_mac_interface.m; sourceTree = SOURCE_ROOT; }; - 95D71F7F16BF380900C0F691 /* os_nix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = os_nix.c; path = ../../../lib/wiiuse/os_nix.c; sourceTree = SOURCE_ROOT; }; - 95D71F8016BF380900C0F691 /* os_win.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = os_win.c; path = ../../../lib/wiiuse/os_win.c; sourceTree = SOURCE_ROOT; }; - 95D71F8116BF380900C0F691 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = README; path = ../../../lib/wiiuse/README; sourceTree = SOURCE_ROOT; }; - 95D71F8216BF380900C0F691 /* util.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = util.c; path = ../../../lib/wiiuse/util.c; sourceTree = SOURCE_ROOT; }; - 95D71F8316BF380900C0F691 /* wiiboard.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wiiboard.c; path = ../../../lib/wiiuse/wiiboard.c; sourceTree = SOURCE_ROOT; }; - 95D71F8416BF380900C0F691 /* wiiboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = wiiboard.h; path = ../../../lib/wiiuse/wiiboard.h; sourceTree = SOURCE_ROOT; }; - 95D71F8616BF380900C0F691 /* wiiuse.vcproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = wiiuse.vcproj; path = ../../../lib/wiiuse/wiiuse/wiiuse.vcproj; sourceTree = SOURCE_ROOT; }; - 95D71F8716BF380900C0F691 /* wiiuse.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wiiuse.c; path = ../../../lib/wiiuse/wiiuse.c; sourceTree = SOURCE_ROOT; }; - 95D71F8816BF380900C0F691 /* wiiuse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = wiiuse.h; path = ../../../lib/wiiuse/wiiuse.h; sourceTree = SOURCE_ROOT; }; - 95D71F8916BF380900C0F691 /* wiiuse_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = wiiuse_internal.h; path = ../../../lib/wiiuse/wiiuse_internal.h; sourceTree = SOURCE_ROOT; }; - 95D71F8A16BF380900C0F691 /* wiiuse_msvcstdint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = wiiuse_msvcstdint.h; path = ../../../lib/wiiuse/wiiuse_msvcstdint.h; sourceTree = SOURCE_ROOT; }; - 95D71FA816BF3A4F00C0F691 /* IOBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOBluetooth.framework; path = /System/Library/Frameworks/IOBluetooth.framework; sourceTree = ""; }; - 95D71FB016BF3A9E00C0F691 /* wiimote_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = wiimote_manager.cpp; path = ../../input/wiimote_manager.cpp; sourceTree = SOURCE_ROOT; }; - 95D71FB116BF3A9E00C0F691 /* wiimote_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = wiimote_manager.hpp; path = ../../input/wiimote_manager.hpp; sourceTree = SOURCE_ROOT; }; - 95D71FB516BF3C7800C0F691 /* tutorial_message_dialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tutorial_message_dialog.cpp; path = ../../states_screens/dialogs/tutorial_message_dialog.cpp; sourceTree = SOURCE_ROOT; }; - 95D71FB616BF3C7800C0F691 /* tutorial_message_dialog.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = tutorial_message_dialog.hpp; path = ../../states_screens/dialogs/tutorial_message_dialog.hpp; sourceTree = SOURCE_ROOT; }; - 95D950CD0FE473CA002E10AD /* player.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = player.hpp; path = ../../config/player.hpp; sourceTree = SOURCE_ROOT; }; - 95D950CE0FE473CA002E10AD /* stk_config.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stk_config.cpp; path = ../../config/stk_config.cpp; sourceTree = SOURCE_ROOT; }; - 95D950CF0FE473CA002E10AD /* stk_config.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = stk_config.hpp; path = ../../config/stk_config.hpp; sourceTree = SOURCE_ROOT; }; - 95D950D00FE473CA002E10AD /* user_config.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = user_config.cpp; path = ../../config/user_config.cpp; sourceTree = SOURCE_ROOT; }; - 95D950D10FE473CA002E10AD /* user_config.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = user_config.hpp; path = ../../config/user_config.hpp; sourceTree = SOURCE_ROOT; }; - 95DFC5001106933B00A043A9 /* slip_stream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = slip_stream.cpp; path = ../../graphics/slip_stream.cpp; sourceTree = SOURCE_ROOT; }; - 95DFC5011106933B00A043A9 /* slip_stream.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = slip_stream.hpp; path = ../../graphics/slip_stream.hpp; sourceTree = SOURCE_ROOT; }; - 95E1FCDD130369EB004D83CC /* per_camera_node.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = per_camera_node.cpp; path = ../../graphics/per_camera_node.cpp; sourceTree = SOURCE_ROOT; }; - 95E1FCDE130369EB004D83CC /* per_camera_node.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = per_camera_node.hpp; path = ../../graphics/per_camera_node.hpp; sourceTree = SOURCE_ROOT; }; - 95E1FCE0130369F4004D83CC /* rain.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = rain.hpp; path = ../../graphics/rain.hpp; sourceTree = SOURCE_ROOT; }; - 95E246BC111A2959000C965D /* confirm_resolution_dialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = confirm_resolution_dialog.cpp; path = ../../states_screens/dialogs/confirm_resolution_dialog.cpp; sourceTree = SOURCE_ROOT; }; - 95E246BD111A2959000C965D /* confirm_resolution_dialog.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = confirm_resolution_dialog.hpp; path = ../../states_screens/dialogs/confirm_resolution_dialog.hpp; sourceTree = SOURCE_ROOT; }; - 95E5C316148C17E500AD3FCC /* story_mode_lobby.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = story_mode_lobby.cpp; path = ../../states_screens/story_mode_lobby.cpp; sourceTree = SOURCE_ROOT; }; - 95E5C317148C17E500AD3FCC /* story_mode_lobby.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = story_mode_lobby.hpp; path = ../../states_screens/story_mode_lobby.hpp; sourceTree = SOURCE_ROOT; }; - 95E5C333148C19F500AD3FCC /* story_mode_new.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = story_mode_new.cpp; path = ../../states_screens/dialogs/story_mode_new.cpp; sourceTree = SOURCE_ROOT; }; - 95E5C334148C19F500AD3FCC /* story_mode_new.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = story_mode_new.hpp; path = ../../states_screens/dialogs/story_mode_new.hpp; sourceTree = SOURCE_ROOT; }; - 95E5C3C0148C418100AD3FCC /* game_slot.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = game_slot.cpp; path = ../../challenges/game_slot.cpp; sourceTree = SOURCE_ROOT; }; - 95E5C3C1148C418100AD3FCC /* game_slot.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = game_slot.hpp; path = ../../challenges/game_slot.hpp; sourceTree = SOURCE_ROOT; }; - 95E6A0BE11DCF37800AE088A /* addons_loading.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = addons_loading.cpp; path = ../../states_screens/dialogs/addons_loading.cpp; sourceTree = SOURCE_ROOT; }; - 95E6A0BF11DCF37800AE088A /* addons_loading.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = addons_loading.hpp; path = ../../states_screens/dialogs/addons_loading.hpp; sourceTree = SOURCE_ROOT; }; - 95ECA0EC10124C5000D47C5F /* button_widget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = button_widget.cpp; path = ../../guiengine/widgets/button_widget.cpp; sourceTree = SOURCE_ROOT; }; - 95ECA0ED10124C5000D47C5F /* button_widget.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = button_widget.hpp; path = ../../guiengine/widgets/button_widget.hpp; sourceTree = SOURCE_ROOT; }; - 95ECA0EE10124C5000D47C5F /* check_box_widget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = check_box_widget.cpp; path = ../../guiengine/widgets/check_box_widget.cpp; sourceTree = SOURCE_ROOT; }; - 95ECA0EF10124C5000D47C5F /* check_box_widget.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = check_box_widget.hpp; path = ../../guiengine/widgets/check_box_widget.hpp; sourceTree = SOURCE_ROOT; }; - 95ECA0F010124C5000D47C5F /* icon_button_widget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = icon_button_widget.cpp; path = ../../guiengine/widgets/icon_button_widget.cpp; sourceTree = SOURCE_ROOT; }; - 95ECA0F110124C5000D47C5F /* icon_button_widget.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = icon_button_widget.hpp; path = ../../guiengine/widgets/icon_button_widget.hpp; sourceTree = SOURCE_ROOT; }; - 95ECA0F210124C5000D47C5F /* label_widget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = label_widget.cpp; path = ../../guiengine/widgets/label_widget.cpp; sourceTree = SOURCE_ROOT; }; - 95ECA0F310124C5000D47C5F /* label_widget.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = label_widget.hpp; path = ../../guiengine/widgets/label_widget.hpp; sourceTree = SOURCE_ROOT; }; - 95ECA0F410124C5000D47C5F /* list_widget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = list_widget.cpp; path = ../../guiengine/widgets/list_widget.cpp; sourceTree = SOURCE_ROOT; }; - 95ECA0F510124C5000D47C5F /* list_widget.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = list_widget.hpp; path = ../../guiengine/widgets/list_widget.hpp; sourceTree = SOURCE_ROOT; }; - 95ECA0F610124C5000D47C5F /* model_view_widget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = model_view_widget.cpp; path = ../../guiengine/widgets/model_view_widget.cpp; sourceTree = SOURCE_ROOT; }; - 95ECA0F710124C5000D47C5F /* model_view_widget.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = model_view_widget.hpp; path = ../../guiengine/widgets/model_view_widget.hpp; sourceTree = SOURCE_ROOT; }; - 95ECA0FA10124C5000D47C5F /* ribbon_widget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ribbon_widget.cpp; path = ../../guiengine/widgets/ribbon_widget.cpp; sourceTree = SOURCE_ROOT; }; - 95ECA0FB10124C5000D47C5F /* ribbon_widget.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ribbon_widget.hpp; path = ../../guiengine/widgets/ribbon_widget.hpp; sourceTree = SOURCE_ROOT; }; - 95ECA0FC10124C5000D47C5F /* spinner_widget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = spinner_widget.cpp; path = ../../guiengine/widgets/spinner_widget.cpp; sourceTree = SOURCE_ROOT; }; - 95ECA0FD10124C5000D47C5F /* spinner_widget.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = spinner_widget.hpp; path = ../../guiengine/widgets/spinner_widget.hpp; sourceTree = SOURCE_ROOT; }; - 95ECA0FE10124C5000D47C5F /* text_box_widget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = text_box_widget.cpp; path = ../../guiengine/widgets/text_box_widget.cpp; sourceTree = SOURCE_ROOT; }; - 95ECA0FF10124C5000D47C5F /* text_box_widget.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = text_box_widget.hpp; path = ../../guiengine/widgets/text_box_widget.hpp; sourceTree = SOURCE_ROOT; }; - 95ECA13C10124E6900D47C5F /* widgets.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = widgets.hpp; path = ../../guiengine/widgets.hpp; sourceTree = SOURCE_ROOT; }; - 95EF178C14AFBC91005FFEEB /* race_gui_overworld.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = race_gui_overworld.cpp; path = ../../states_screens/race_gui_overworld.cpp; sourceTree = SOURCE_ROOT; }; - 95EF178D14AFBC91005FFEEB /* race_gui_overworld.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = race_gui_overworld.hpp; path = ../../states_screens/race_gui_overworld.hpp; sourceTree = SOURCE_ROOT; }; - 95EF1E081506D6CF0041AC79 /* skidding_properties.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = skidding_properties.cpp; path = ../../karts/skidding_properties.cpp; sourceTree = SOURCE_ROOT; }; - 95EF1E091506D6CF0041AC79 /* skidding_properties.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = skidding_properties.hpp; path = ../../karts/skidding_properties.hpp; 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 = ""; }; - 95F423400E26E65B00692113 /* GLUT.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLUT.framework; path = /System/Library/Frameworks/GLUT.framework; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 9551C81F0FC1B6FF00DB481B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 9551CBDA0FC1BB9200DB481B /* AGL.framework in Frameworks */, - 9551CBD10FC1BB7600DB481B /* IOKit.framework in Frameworks */, - 9551CBD20FC1BB7600DB481B /* QuickTime.framework in Frameworks */, - 9551CBD30FC1BB7600DB481B /* Carbon.framework in Frameworks */, - 9551CBD40FC1BB7600DB481B /* AudioUnit.framework in Frameworks */, - 9551CBD50FC1BB7600DB481B /* GLUT.framework in Frameworks */, - 9551CBD60FC1BB7600DB481B /* Cocoa.framework in Frameworks */, - 9551CBD70FC1BB7600DB481B /* OpenGL.framework in Frameworks */, - 9551C9F10FC1B7EE00DB481B /* Ogg.framework in Frameworks */, - 9551C9F20FC1B7EE00DB481B /* OpenAL.framework in Frameworks */, - 9551C9F30FC1B7EE00DB481B /* Vorbis.framework in Frameworks */, - 954E486A11B19C4100B1DF63 /* fribidi.framework in Frameworks */, - 9538E2E912C2682B00172896 /* IrrFramework.framework in Frameworks */, - 95D71FA916BF3A4F00C0F691 /* IOBluetooth.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 08FB7794FE84155DC02AAC07 /* STK_XCode */ = { - isa = PBXGroup; - children = ( - 9593A10C1609384700AB5EEB /* Lib */, - 9551C9F80FC1B87600DB481B /* Config.xcconfig */, - 95702AE41306076100EEC3A0 /* Headers */, - 95C2ABA60F29653F000D3E5D /* src */, - 9513B40E0F0EDE80005D29F6 /* Frameworks */, - 1AB674ADFE9D54B511CA2CBB /* Products */, - 9551CA100FC1BB6400DB481B /* SuperTuxKart-Info.plist */, - 9507E9B60FC1CCE900BD2B92 /* stk.icns */, - 95D71FA816BF3A4F00C0F691 /* IOBluetooth.framework */, - ); - name = STK_XCode; - sourceTree = ""; - }; - 1AB674ADFE9D54B511CA2CBB /* Products */ = { - isa = PBXGroup; - children = ( - 9551C8210FC1B6FF00DB481B /* SuperTuxKart.app */, - ); - name = Products; - sourceTree = ""; - }; - 9513B40E0F0EDE80005D29F6 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 9538E2E812C2682B00172896 /* IrrFramework.framework */, - 954E486911B19C4100B1DF63 /* fribidi.framework */, - 9551CBD90FC1BB9200DB481B /* AGL.framework */, - 9551C7F90FC1B63C00DB481B /* Ogg.framework */, - 9551C7FA0FC1B63C00DB481B /* OpenAL.framework */, - 9551C7FB0FC1B63C00DB481B /* Vorbis.framework */, - 950557640F6968BE0056E88C /* IOKit.framework */, - 9505575F0F6968A50056E88C /* QuickTime.framework */, - 950557570F6968860056E88C /* Carbon.framework */, - 9505574E0F69684D0056E88C /* AudioUnit.framework */, - 95F423400E26E65B00692113 /* GLUT.framework */, - 95F4231E0E26E44800692113 /* Cocoa.framework */, - 95F423120E26E3DC00692113 /* OpenGL.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 95263DDF0FD7471900CF5F92 /* race */ = { - isa = PBXGroup; - children = ( - 95263DE00FD7471900CF5F92 /* grand_prix_data.cpp */, - 95263DE10FD7471900CF5F92 /* grand_prix_data.hpp */, - 95263DE20FD7471900CF5F92 /* grand_prix_manager.cpp */, - 95263DE30FD7471900CF5F92 /* grand_prix_manager.hpp */, - 95263DE40FD7471900CF5F92 /* highscore_manager.cpp */, - 95263DE50FD7471900CF5F92 /* highscore_manager.hpp */, - 95263DE60FD7471900CF5F92 /* highscores.cpp */, - 95263DE70FD7471900CF5F92 /* highscores.hpp */, - 95263DE80FD7471900CF5F92 /* history.cpp */, - 95263DE90FD7471900CF5F92 /* history.hpp */, - 95263DEA0FD7471900CF5F92 /* race_manager.cpp */, - 95263DEB0FD7471900CF5F92 /* race_manager.hpp */, - ); - name = race; - path = ../../race; - sourceTree = SOURCE_ROOT; - }; - 952A152C103F66D600B1895D /* graphics */ = { - isa = PBXGroup; - children = ( - 9529980F15B207740028301A /* show_curve.cpp */, - 9529981015B207740028301A /* show_curve.hpp */, - 9525B71211C851D30094BD96 /* CBatchingMesh.cpp */, - 9525B71311C851D30094BD96 /* CBatchingMesh.hpp */, - 952A152D103F66D600B1895D /* camera.cpp */, - 952A152E103F66D600B1895D /* camera.hpp */, - 952A152F103F66D600B1895D /* explosion.cpp */, - 952A1530103F66D600B1895D /* explosion.hpp */, - 9598A5B413CFBA83000B83EA /* hardware_skinning.cpp */, - 9598A5B513CFBA83000B83EA /* hardware_skinning.hpp */, - 957A2D261405E21D00F45B22 /* hit_effect.hpp */, - 957A2D271405E21D00F45B22 /* hit_sfx.cpp */, - 957A2D281405E21D00F45B22 /* hit_sfx.hpp */, - 952A1531103F66D600B1895D /* irr_driver.cpp */, - 952A1532103F66D600B1895D /* irr_driver.hpp */, - 95376CAD1320784100C842A4 /* lod_node.cpp */, - 95376CAE1320784100C842A4 /* lod_node.hpp */, - 952A1533103F66D600B1895D /* material.cpp */, - 952A1534103F66D600B1895D /* material.hpp */, - 952A1535103F66D600B1895D /* material_manager.cpp */, - 952A1536103F66D600B1895D /* material_manager.hpp */, - 952A1537103F66D600B1895D /* mesh_tools.cpp */, - 952A1538103F66D600B1895D /* mesh_tools.hpp */, - 952A1539103F66D600B1895D /* moving_texture.cpp */, - 952A153A103F66D600B1895D /* moving_texture.hpp */, - 9542FC7512D3BDB000C00366 /* particle_emitter.cpp */, - 9542FC7612D3BDB000C00366 /* particle_emitter.hpp */, - 9542FD4A12D3E0D700C00366 /* particle_kind.cpp */, - 9542FD4B12D3E0D700C00366 /* particle_kind.hpp */, - 9528C71412D69494006E9167 /* particle_kind_manager.cpp */, - 9528C71512D69494006E9167 /* particle_kind_manager.hpp */, - 95E1FCDD130369EB004D83CC /* per_camera_node.cpp */, - 95E1FCDE130369EB004D83CC /* per_camera_node.hpp */, - 958D924013DA48A70097BC82 /* post_processing.cpp */, - 958D924113DA48A70097BC82 /* post_processing.hpp */, - 9559DE7E12FF777600350DE8 /* rain.cpp */, - 95E1FCE0130369F4004D83CC /* rain.hpp */, - 957817DA142142C500AD07B2 /* referee.cpp */, - 957817DB142142C500AD07B2 /* referee.hpp */, - 952A153D103F66D600B1895D /* shadow.cpp */, - 952A153E103F66D600B1895D /* shadow.hpp */, - 952A153F103F66D600B1895D /* skid_marks.cpp */, - 952A1540103F66D600B1895D /* skid_marks.hpp */, - 95DFC5001106933B00A043A9 /* slip_stream.cpp */, - 95DFC5011106933B00A043A9 /* slip_stream.hpp */, - 95C9C97010E93456005A418D /* stars.cpp */, - 95C9C97110E93456005A418D /* stars.hpp */, - ); - name = graphics; - path = ../../graphics; - sourceTree = SOURCE_ROOT; - }; - 954E4C240FF98B6E0047FE3E /* animations */ = { - isa = PBXGroup; - children = ( - 954E4C250FF98B6E0047FE3E /* animation_base.cpp */, - 954E4C260FF98B6E0047FE3E /* animation_base.hpp */, - 954E4C290FF98B6E0047FE3E /* billboard_animation.cpp */, - 954E4C2A0FF98B6E0047FE3E /* billboard_animation.hpp */, - 951BC65C0FFAF290006B5FF1 /* ipo.cpp */, - 951BC65D0FFAF290006B5FF1 /* ipo.hpp */, - 954E4C2B0FF98B6E0047FE3E /* three_d_animation.cpp */, - 954E4C2C0FF98B6E0047FE3E /* three_d_animation.hpp */, - ); - name = animations; - path = ../../animations; - sourceTree = SOURCE_ROOT; - }; - 9551B27311DC0D6A002DD140 /* addons */ = { - isa = PBXGroup; - children = ( - 958949A8163F52FB00957345 /* inetwork_http.cpp */, - 9538A55E12CD094200CE3220 /* addon.cpp */, - 9538A55F12CD094200CE3220 /* addon.hpp */, - 9538E2B512C25D6800172896 /* addons_manager.cpp */, - 9538E2B612C25D6800172896 /* addons_manager.hpp */, - 95A540411481BEB60086FE38 /* dummy_network_http.hpp */, - 95A5402D1481BD950086FE38 /* inetwork_http.hpp */, - 9538E2B712C25D6800172896 /* network_http.cpp */, - 9538E2B812C25D6800172896 /* network_http.hpp */, - 9584B309137CAC12008565D7 /* news_manager.cpp */, - 9584B30A137CAC12008565D7 /* news_manager.hpp */, - 9584B30B137CAC12008565D7 /* request.cpp */, - 9584B30C137CAC12008565D7 /* request.hpp */, - 9551B27811DC0D6A002DD140 /* zip.cpp */, - 9551B27911DC0D6A002DD140 /* zip.hpp */, - ); - name = addons; - path = ../../addons; - sourceTree = SOURCE_ROOT; - }; - 956C6EC71128D3FB004336C8 /* controller */ = { - isa = PBXGroup; - children = ( - 9593A31E16093A7300AB5EEB /* ai_properties.cpp */, - 9593A31F16093A7300AB5EEB /* ai_properties.hpp */, - 952997EA15B206890028301A /* skidding_ai.cpp */, - 952997EB15B206890028301A /* skidding_ai.hpp */, - 957ED47E1163FF18002AB42C /* ai_base_controller.cpp */, - 957ED47F1163FF18002AB42C /* ai_base_controller.hpp */, - 956C6EC81128D3FB004336C8 /* controller.cpp */, - 956C6EC91128D3FB004336C8 /* controller.hpp */, - 956C6ECC1128D3FB004336C8 /* end_controller.cpp */, - 956C6ECD1128D3FB004336C8 /* end_controller.hpp */, - 956C6ECE1128D3FB004336C8 /* kart_control.hpp */, - 956C6ED11128D3FB004336C8 /* player_controller.cpp */, - 956C6ED21128D3FB004336C8 /* player_controller.hpp */, - ); - name = controller; - path = ../../karts/controller; - sourceTree = SOURCE_ROOT; - }; - 95702AE41306076100EEC3A0 /* Headers */ = { - isa = PBXGroup; - children = ( - 95702AE51306076100EEC3A0 /* aabbox3d.h */, - 95702AE61306076100EEC3A0 /* CDynamicMeshBuffer.h */, - 95702AE71306076100EEC3A0 /* CIndexBuffer.h */, - 95702AE81306076100EEC3A0 /* CMeshBuffer.h */, - 95702AE91306076100EEC3A0 /* coreutil.h */, - 95702AEA1306076100EEC3A0 /* CVertexBuffer.h */, - 95702AEB1306076100EEC3A0 /* dimension2d.h */, - 95702AEC1306076100EEC3A0 /* driverChoice.h */, - 95702AED1306076100EEC3A0 /* EAttributes.h */, - 95702AEE1306076100EEC3A0 /* ECullingTypes.h */, - 95702AEF1306076100EEC3A0 /* EDebugSceneTypes.h */, - 95702AF01306076100EEC3A0 /* EDeviceTypes.h */, - 95702AF11306076100EEC3A0 /* EDriverFeatures.h */, - 95702AF21306076100EEC3A0 /* EDriverTypes.h */, - 95702AF31306076100EEC3A0 /* EGUIAlignment.h */, - 95702AF41306076100EEC3A0 /* EGUIElementTypes.h */, - 95702AF51306076100EEC3A0 /* EHardwareBufferFlags.h */, - 95702AF61306076100EEC3A0 /* EMaterialFlags.h */, - 95702AF71306076100EEC3A0 /* EMaterialTypes.h */, - 95702AF81306076100EEC3A0 /* EMeshWriterEnums.h */, - 95702AF91306076100EEC3A0 /* EMessageBoxFlags.h */, - 95702AFA1306076100EEC3A0 /* EPrimitiveTypes.h */, - 95702AFB1306076100EEC3A0 /* ESceneNodeAnimatorTypes.h */, - 95702AFC1306076100EEC3A0 /* ESceneNodeTypes.h */, - 95702AFD1306076100EEC3A0 /* EShaderTypes.h */, - 95702AFE1306076100EEC3A0 /* ETerrainElements.h */, - 95702AFF1306076100EEC3A0 /* fast_atof.h */, - 95702B001306076100EEC3A0 /* heapsort.h */, - 95702B011306076100EEC3A0 /* IAnimatedMesh.h */, - 95702B021306076100EEC3A0 /* IAnimatedMeshMD2.h */, - 95702B031306076100EEC3A0 /* IAnimatedMeshMD3.h */, - 95702B041306076100EEC3A0 /* IAnimatedMeshSceneNode.h */, - 95702B051306076100EEC3A0 /* IAttributeExchangingObject.h */, - 95702B061306076100EEC3A0 /* IAttributes.h */, - 95702B071306076100EEC3A0 /* IBillboardSceneNode.h */, - 95702B081306076100EEC3A0 /* IBillboardTextSceneNode.h */, - 95702B091306076100EEC3A0 /* IBoneSceneNode.h */, - 95702B0A1306076100EEC3A0 /* ICameraSceneNode.h */, - 95702B0B1306076100EEC3A0 /* ICursorControl.h */, - 95702B0C1306076100EEC3A0 /* IDummyTransformationSceneNode.h */, - 95702B0D1306076100EEC3A0 /* IDynamicMeshBuffer.h */, - 95702B0E1306076100EEC3A0 /* IEventReceiver.h */, - 95702B0F1306076100EEC3A0 /* IFileArchive.h */, - 95702B101306076100EEC3A0 /* IFileList.h */, - 95702B111306076100EEC3A0 /* IFileSystem.h */, - 95702B121306076100EEC3A0 /* IGeometryCreator.h */, - 95702B131306076100EEC3A0 /* IGPUProgrammingServices.h */, - 95702B141306076100EEC3A0 /* IGUIButton.h */, - 95702B151306076100EEC3A0 /* IGUICheckBox.h */, - 95702B161306076100EEC3A0 /* IGUIColorSelectDialog.h */, - 95702B171306076100EEC3A0 /* IGUIComboBox.h */, - 95702B181306076100EEC3A0 /* IGUIContextMenu.h */, - 95702B191306076100EEC3A0 /* IGUIEditBox.h */, - 95702B1A1306076100EEC3A0 /* IGUIElement.h */, - 95702B1B1306076100EEC3A0 /* IGUIElementFactory.h */, - 95702B1C1306076100EEC3A0 /* IGUIEnvironment.h */, - 95702B1D1306076100EEC3A0 /* IGUIFileOpenDialog.h */, - 95702B1E1306076100EEC3A0 /* IGUIFont.h */, - 95702B1F1306076100EEC3A0 /* IGUIFontBitmap.h */, - 95702B201306076100EEC3A0 /* IGUIImage.h */, - 95702B211306076100EEC3A0 /* IGUIImageList.h */, - 95702B221306076100EEC3A0 /* IGUIInOutFader.h */, - 95702B231306076100EEC3A0 /* IGUIListBox.h */, - 95702B241306076100EEC3A0 /* IGUIMeshViewer.h */, - 95702B251306076100EEC3A0 /* IGUIScrollBar.h */, - 95702B261306076100EEC3A0 /* IGUISkin.h */, - 95702B271306076100EEC3A0 /* IGUISpinBox.h */, - 95702B281306076100EEC3A0 /* IGUISpriteBank.h */, - 95702B291306076100EEC3A0 /* IGUIStaticText.h */, - 95702B2A1306076100EEC3A0 /* IGUITabControl.h */, - 95702B2B1306076100EEC3A0 /* IGUITable.h */, - 95702B2C1306076100EEC3A0 /* IGUIToolbar.h */, - 95702B2D1306076100EEC3A0 /* IGUITreeView.h */, - 95702B2E1306076100EEC3A0 /* IGUIWindow.h */, - 95702B2F1306076100EEC3A0 /* IImage.h */, - 95702B301306076100EEC3A0 /* IImageLoader.h */, - 95702B311306076100EEC3A0 /* IImageWriter.h */, - 95702B321306076100EEC3A0 /* IIndexBuffer.h */, - 95702B331306076100EEC3A0 /* ILightManager.h */, - 95702B341306076100EEC3A0 /* ILightSceneNode.h */, - 95702B351306076100EEC3A0 /* ILogger.h */, - 95702B361306076100EEC3A0 /* IMaterialRenderer.h */, - 95702B371306076100EEC3A0 /* IMaterialRendererServices.h */, - 95702B381306076100EEC3A0 /* IMesh.h */, - 95702B391306076100EEC3A0 /* IMeshBuffer.h */, - 95702B3A1306076100EEC3A0 /* IMeshCache.h */, - 95702B3B1306076100EEC3A0 /* IMeshLoader.h */, - 95702B3C1306076100EEC3A0 /* IMeshManipulator.h */, - 95702B3D1306076100EEC3A0 /* IMeshSceneNode.h */, - 95702B3E1306076100EEC3A0 /* IMeshWriter.h */, - 95702B3F1306076100EEC3A0 /* IMetaTriangleSelector.h */, - 95702B401306076100EEC3A0 /* IOSOperator.h */, - 95702B411306076100EEC3A0 /* IParticleAffector.h */, - 95702B421306076100EEC3A0 /* IParticleAnimatedMeshSceneNodeEmitter.h */, - 95702B431306076100EEC3A0 /* IParticleAttractionAffector.h */, - 95702B441306076100EEC3A0 /* IParticleBoxEmitter.h */, - 95702B451306076100EEC3A0 /* IParticleCylinderEmitter.h */, - 95702B461306076100EEC3A0 /* IParticleEmitter.h */, - 95702B471306076100EEC3A0 /* IParticleFadeOutAffector.h */, - 95702B481306076100EEC3A0 /* IParticleGravityAffector.h */, - 95702B491306076100EEC3A0 /* IParticleMeshEmitter.h */, - 95702B4A1306076100EEC3A0 /* IParticleRingEmitter.h */, - 95702B4B1306076100EEC3A0 /* IParticleRotationAffector.h */, - 95702B4C1306076100EEC3A0 /* IParticleSphereEmitter.h */, - 95702B4D1306076100EEC3A0 /* IParticleSystemSceneNode.h */, - 95702B4E1306076100EEC3A0 /* IQ3LevelMesh.h */, - 95702B4F1306076100EEC3A0 /* IQ3Shader.h */, - 95702B501306076100EEC3A0 /* IReadFile.h */, - 95702B511306076100EEC3A0 /* IReferenceCounted.h */, - 95702B521306076100EEC3A0 /* irrAllocator.h */, - 95702B531306076100EEC3A0 /* irrArray.h */, - 95702B541306076100EEC3A0 /* IrrCompileConfig.h */, - 95702B551306076100EEC3A0 /* irrlicht.h */, - 95702B561306076100EEC3A0 /* IrrlichtDevice.h */, - 95702B571306076100EEC3A0 /* irrList.h */, - 95702B581306076100EEC3A0 /* irrMap.h */, - 95702B591306076100EEC3A0 /* irrMath.h */, - 95702B5A1306076100EEC3A0 /* irrString.h */, - 95702B5B1306076100EEC3A0 /* irrTypes.h */, - 95702B5C1306076100EEC3A0 /* irrXML.h */, - 95702B5D1306076100EEC3A0 /* ISceneCollisionManager.h */, - 95702B5E1306076100EEC3A0 /* ISceneManager.h */, - 95702B5F1306076100EEC3A0 /* ISceneNode.h */, - 95702B601306076100EEC3A0 /* ISceneNodeAnimator.h */, - 95702B611306076100EEC3A0 /* ISceneNodeAnimatorCameraFPS.h */, - 95702B621306076100EEC3A0 /* ISceneNodeAnimatorCameraMaya.h */, - 95702B631306076100EEC3A0 /* ISceneNodeAnimatorCollisionResponse.h */, - 95702B641306076100EEC3A0 /* ISceneNodeAnimatorFactory.h */, - 95702B651306076100EEC3A0 /* ISceneNodeFactory.h */, - 95702B661306076100EEC3A0 /* ISceneUserDataSerializer.h */, - 95702B671306076100EEC3A0 /* IShaderConstantSetCallBack.h */, - 95702B681306076100EEC3A0 /* IShadowVolumeSceneNode.h */, - 95702B691306076100EEC3A0 /* ISkinnedMesh.h */, - 95702B6A1306076100EEC3A0 /* ITerrainSceneNode.h */, - 95702B6B1306076100EEC3A0 /* ITextSceneNode.h */, - 95702B6C1306076100EEC3A0 /* ITexture.h */, - 95702B6D1306076100EEC3A0 /* ITimer.h */, - 95702B6E1306076100EEC3A0 /* ITriangleSelector.h */, - 95702B6F1306076100EEC3A0 /* IVertexBuffer.h */, - 95702B701306076100EEC3A0 /* IVideoDriver.h */, - 95702B711306076100EEC3A0 /* IVideoModeList.h */, - 95702B721306076100EEC3A0 /* IVolumeLightSceneNode.h */, - 95702B731306076100EEC3A0 /* IWriteFile.h */, - 95702B741306076100EEC3A0 /* IXMLReader.h */, - 95702B751306076100EEC3A0 /* IXMLWriter.h */, - 95702B761306076100EEC3A0 /* Keycodes.h */, - 95702B771306076100EEC3A0 /* line2d.h */, - 95702B781306076100EEC3A0 /* line3d.h */, - 95702B791306076100EEC3A0 /* matrix4.h */, - 95702B7A1306076100EEC3A0 /* path.h */, - 95702B7B1306076100EEC3A0 /* plane3d.h */, - 95702B7C1306076100EEC3A0 /* position2d.h */, - 95702B7D1306076100EEC3A0 /* quaternion.h */, - 95702B7E1306076100EEC3A0 /* rect.h */, - 95702B7F1306076100EEC3A0 /* S3DVertex.h */, - 95702B801306076100EEC3A0 /* SAnimatedMesh.h */, - 95702B811306076100EEC3A0 /* SceneParameters.h */, - 95702B821306076100EEC3A0 /* SColor.h */, - 95702B831306076100EEC3A0 /* SExposedVideoData.h */, - 95702B841306076100EEC3A0 /* SIrrCreationParameters.h */, - 95702B851306076100EEC3A0 /* SKeyMap.h */, - 95702B861306076100EEC3A0 /* SLight.h */, - 95702B871306076100EEC3A0 /* SMaterial.h */, - 95702B881306076100EEC3A0 /* SMaterialLayer.h */, - 95702B891306076100EEC3A0 /* SMesh.h */, - 95702B8A1306076100EEC3A0 /* SMeshBuffer.h */, - 95702B8B1306076100EEC3A0 /* SMeshBufferLightMap.h */, - 95702B8C1306076100EEC3A0 /* SMeshBufferTangents.h */, - 95702B8D1306076100EEC3A0 /* SParticle.h */, - 95702B8E1306076100EEC3A0 /* SSharedMeshBuffer.h */, - 95702B8F1306076100EEC3A0 /* SSkinMeshBuffer.h */, - 95702B901306076100EEC3A0 /* SVertexIndex.h */, - 95702B911306076100EEC3A0 /* SVertexManipulator.h */, - 95702B921306076100EEC3A0 /* SViewFrustum.h */, - 95702B931306076100EEC3A0 /* triangle3d.h */, - 95702B941306076100EEC3A0 /* vector2d.h */, - 95702B951306076100EEC3A0 /* vector3d.h */, - ); - name = Headers; - path = /Library/Frameworks/IrrFramework.framework/Versions/A/Headers; - sourceTree = ""; - }; - 958330B110122B4A00C5137E /* guiengine */ = { - isa = PBXGroup; - children = ( - 950D448A118DEE3C006CFC41 /* CGUISpriteBank.cpp */, - 950D448B118DEE3C006CFC41 /* CGUISpriteBank.h */, - 9583319810123B0200C5137E /* abstract_state_manager.cpp */, - 9583319710123B0200C5137E /* abstract_state_manager.hpp */, - 956039B81218C09E00EB96C4 /* abstract_top_level_container.cpp */, - 956039B91218C09E00EB96C4 /* abstract_top_level_container.hpp */, - 958330B210122B4A00C5137E /* engine.cpp */, - 958330B310122B4A00C5137E /* engine.hpp */, - 958330B410122B4A00C5137E /* event_handler.cpp */, - 958330B510122B4A00C5137E /* event_handler.hpp */, - 9560368A12187EFB00EB96C4 /* layout_manager.cpp */, - 9560368B12187EFB00EB96C4 /* layout_manager.hpp */, - 958330B610122B4A00C5137E /* modaldialog.cpp */, - 958330B710122B4A00C5137E /* modaldialog.hpp */, - 953F8B1F11F7C13C00205E66 /* scalable_font.cpp */, - 953F8B2011F7C13C00205E66 /* scalable_font.hpp */, - 958330BA10122B4A00C5137E /* screen.cpp */, - 958330BB10122B4A00C5137E /* screen.hpp */, - 958330BC10122B4A00C5137E /* screen_loader.cpp */, - 958330BD10122B4A00C5137E /* skin.cpp */, - 958330BE10122B4A00C5137E /* skin.hpp */, - 958330BF10122B4A00C5137E /* widget.cpp */, - 958330C010122B4A00C5137E /* widget.hpp */, - 95ECA13C10124E6900D47C5F /* widgets.hpp */, - 95ECA0EB10124C5000D47C5F /* widgets */, - ); - name = guiengine; - path = ../../guiengine; - sourceTree = SOURCE_ROOT; - }; - 958330C110122B4A00C5137E /* states_screens */ = { - isa = PBXGroup; - children = ( - 95833236101243ED00C5137E /* dialogs */, - 9529980115B2070C0028301A /* cutscene_gui.cpp */, - 9529980215B2070C0028301A /* cutscene_gui.hpp */, - 9551B26D11DC0D4D002DD140 /* addons_screen.cpp */, - 9551B26E11DC0D4D002DD140 /* addons_screen.hpp */, - 956541B910DD5F0A00C83E99 /* arenas_screen.cpp */, - 956541BA10DD5F0A00C83E99 /* arenas_screen.hpp */, - 958330C210122B4A00C5137E /* credits.cpp */, - 958330C310122B4A00C5137E /* credits.hpp */, - 95D2343E1078227A00625256 /* feature_unlocked.cpp */, - 95D2343D1078227A00625256 /* feature_unlocked.hpp */, - 9586318011B1EC9F00B8B4AF /* grand_prix_lose.cpp */, - 9586318111B1EC9F00B8B4AF /* grand_prix_lose.hpp */, - 9586318211B1EC9F00B8B4AF /* grand_prix_win.cpp */, - 9586318311B1EC9F00B8B4AF /* grand_prix_win.hpp */, - 9522F1DE10795E8A0067ECF5 /* help_screen_1.cpp */, - 9522F1DF10795E8A0067ECF5 /* help_screen_1.hpp */, - 9522F1E210795EFF0067ECF5 /* help_screen_2.cpp */, - 9522F1E110795EFF0067ECF5 /* help_screen_2.hpp */, - 9522F1E410795EFF0067ECF5 /* help_screen_3.cpp */, - 9522F1E310795EFF0067ECF5 /* help_screen_3.hpp */, - 95017B3F124698C400C90D56 /* help_screen_4.cpp */, - 95017B40124698C400C90D56 /* help_screen_4.hpp */, - 958330C410122B4A00C5137E /* kart_selection.cpp */, - 958330C510122B4A00C5137E /* kart_selection.hpp */, - 9522F124107948AD0067ECF5 /* main_menu_screen.cpp */, - 9522F123107948AD0067ECF5 /* main_menu_screen.hpp */, - 9592DC6B13021B350039DBC8 /* minimal_race_gui.cpp */, - 9592DC6C13021B350039DBC8 /* minimal_race_gui.hpp */, - 9556A87C119EF976009C558F /* options_screen_audio.cpp */, - 9556A87D119EF976009C558F /* options_screen_audio.hpp */, - 9522F1EB107961560067ECF5 /* options_screen_input.cpp */, - 9522F1EE107961560067ECF5 /* options_screen_input.hpp */, - 950D45CF118E040E006CFC41 /* options_screen_input2.cpp */, - 950D45D0118E040E006CFC41 /* options_screen_input2.hpp */, - 9522F1ED107961560067ECF5 /* options_screen_players.cpp */, - 9522F1EC107961560067ECF5 /* options_screen_players.hpp */, - 9556A87E119EF976009C558F /* options_screen_video.cpp */, - 9556A87F119EF976009C558F /* options_screen_video.hpp */, - 953A959B13367D6E00D86B4D /* options_screen_ui.cpp */, - 953A959C13367D6E00D86B4D /* options_screen_ui.hpp */, - 958330C810122B4A00C5137E /* race_gui.cpp */, - 958330C910122B4A00C5137E /* race_gui.hpp */, - 956F557313527E4B005C291D /* race_gui_base.cpp */, - 956F557413527E4B005C291D /* race_gui_base.hpp */, - 95EF178C14AFBC91005FFEEB /* race_gui_overworld.cpp */, - 95EF178D14AFBC91005FFEEB /* race_gui_overworld.hpp */, - 9554C4A411F1188000906416 /* race_result_gui.cpp */, - 9554C4A511F1188000906416 /* race_result_gui.hpp */, - 9522F15A107949780067ECF5 /* race_setup_screen.cpp */, - 9522F159107949780067ECF5 /* race_setup_screen.hpp */, - 958330CA10122B4A00C5137E /* state_manager.cpp */, - 958330CB10122B4A00C5137E /* state_manager.hpp */, - 95E5C316148C17E500AD3FCC /* story_mode_lobby.cpp */, - 95E5C317148C17E500AD3FCC /* story_mode_lobby.hpp */, - 9522F15C10794A350067ECF5 /* tracks_screen.cpp */, - 9522F15D10794A350067ECF5 /* tracks_screen.hpp */, - ); - name = states_screens; - path = ../../states_screens; - sourceTree = SOURCE_ROOT; - }; - 95833236101243ED00C5137E /* dialogs */ = { - isa = PBXGroup; - children = ( - 956541DF10DD628C00C83E99 /* add_device_dialog.cpp */, - 956541E010DD628C00C83E99 /* add_device_dialog.hpp */, - 95E6A0BE11DCF37800AE088A /* addons_loading.cpp */, - 95E6A0BF11DCF37800AE088A /* addons_loading.hpp */, - 95E246BC111A2959000C965D /* confirm_resolution_dialog.cpp */, - 95E246BD111A2959000C965D /* confirm_resolution_dialog.hpp */, - 957957A014A3CA3900E72497 /* custom_video_settings.cpp */, - 957957A114A3CA3900E72497 /* custom_video_settings.hpp */, - 95833237101243ED00C5137E /* enter_player_name_dialog.cpp */, - 95833238101243ED00C5137E /* enter_player_name_dialog.hpp */, - 95634EF01126272C009C145D /* gp_info_dialog.cpp */, - 95634EF11126272C009C145D /* gp_info_dialog.hpp */, - 95395A75129DFE130079BCE7 /* message_dialog.cpp */, - 95395A76129DFE130079BCE7 /* message_dialog.hpp */, - 95833239101243ED00C5137E /* player_info_dialog.cpp */, - 9583323A101243ED00C5137E /* player_info_dialog.hpp */, - 9583323B101243ED00C5137E /* press_a_key_dialog.cpp */, - 9583323C101243ED00C5137E /* press_a_key_dialog.hpp */, - 958D8C53104F523000A81934 /* race_paused_dialog.cpp */, - 958D8C52104F523000A81934 /* race_paused_dialog.hpp */, - 9543D59D14D38831000B0888 /* select_challenge.cpp */, - 9543D5A514D3885F000B0888 /* select_challenge.hpp */, - 95E5C333148C19F500AD3FCC /* story_mode_new.cpp */, - 95E5C334148C19F500AD3FCC /* story_mode_new.hpp */, - 9583323D101243ED00C5137E /* track_info_dialog.cpp */, - 9583323E101243ED00C5137E /* track_info_dialog.hpp */, - 95D71FB516BF3C7800C0F691 /* tutorial_message_dialog.cpp */, - 95D71FB616BF3C7800C0F691 /* tutorial_message_dialog.hpp */, - ); - name = dialogs; - path = ../../states_screens/dialogs; - sourceTree = SOURCE_ROOT; - }; - 958444891330F89100CEA60A /* tinygettext */ = { - isa = PBXGroup; - children = ( - 95B0E8AE16A4DC390037391C /* tgt_log.cpp */, - 95B0E8AF16A4DC390037391C /* tgt_log.hpp */, - 9584448A1330F89100CEA60A /* dictionary.cpp */, - 9584448B1330F89100CEA60A /* dictionary.hpp */, - 9584448C1330F89100CEA60A /* dictionary_manager.cpp */, - 9584448D1330F89100CEA60A /* dictionary_manager.hpp */, - 9584448E1330F89100CEA60A /* file_system.hpp */, - 9584448F1330F89100CEA60A /* iconv.cpp */, - 958444901330F89100CEA60A /* iconv.hpp */, - 958444911330F89100CEA60A /* language.cpp */, - 958444921330F89100CEA60A /* language.hpp */, - 958444951330F89100CEA60A /* log_stream.hpp */, - 958444961330F89100CEA60A /* plural_forms.cpp */, - 958444971330F89100CEA60A /* plural_forms.hpp */, - 958444981330F89100CEA60A /* po_parser.cpp */, - 958444991330F89100CEA60A /* po_parser.hpp */, - 9584449A1330F89100CEA60A /* stk_file_system.cpp */, - 9584449B1330F89100CEA60A /* stk_file_system.hpp */, - 9584449C1330F89100CEA60A /* tinygettext.cpp */, - 9584449D1330F89100CEA60A /* tinygettext.hpp */, - ); - name = tinygettext; - path = ../../tinygettext; - sourceTree = SOURCE_ROOT; - }; - 9593A10C1609384700AB5EEB /* Lib */ = { - isa = PBXGroup; - children = ( - 95D71F6316BF380900C0F691 /* wiiuse */, - 9593A2CE1609388C00AB5EEB /* enet */, - 9593A10D1609386100AB5EEB /* bullet */, - ); - name = Lib; - sourceTree = ""; - }; - 9593A10D1609386100AB5EEB /* bullet */ = { - isa = PBXGroup; - children = ( - 9593A1161609386100AB5EEB /* src */, - ); - name = bullet; - path = ../../../lib/bullet; - sourceTree = SOURCE_ROOT; - }; - 9593A1161609386100AB5EEB /* src */ = { - isa = PBXGroup; - children = ( - 9593A1171609386100AB5EEB /* btBulletCollisionCommon.h */, - 9593A1181609386100AB5EEB /* btBulletDynamicsCommon.h */, - 9593A1191609386100AB5EEB /* Bullet-C-Api.h */, - 9593A11A1609386100AB5EEB /* BulletCollision */, - 9593A1F51609386100AB5EEB /* BulletDynamics */, - 9593A22A1609386100AB5EEB /* LinearMath */, - 9593A24A1609386100AB5EEB /* Makefile.am */, - ); - name = src; - path = games/supertuxkart/lib/bullet/src; - sourceTree = SYSTEM_DEVELOPER_DIR; - }; - 9593A11A1609386100AB5EEB /* BulletCollision */ = { - isa = PBXGroup; - children = ( - 9593A11B1609386100AB5EEB /* BroadphaseCollision */, - 9593A1321609386100AB5EEB /* CollisionDispatch */, - 9593A1631609386100AB5EEB /* CollisionShapes */, - 9593A1B01609386100AB5EEB /* Gimpact */, - 9593A1D71609386100AB5EEB /* NarrowPhaseCollision */, - ); - name = BulletCollision; - path = games/supertuxkart/lib/bullet/src/BulletCollision; - sourceTree = SYSTEM_DEVELOPER_DIR; - }; - 9593A11B1609386100AB5EEB /* BroadphaseCollision */ = { - isa = PBXGroup; - children = ( - 9593A11C1609386100AB5EEB /* btAxisSweep3.cpp */, - 9593A11D1609386100AB5EEB /* btAxisSweep3.h */, - 9593A11E1609386100AB5EEB /* btBroadphaseInterface.h */, - 9593A11F1609386100AB5EEB /* btBroadphaseProxy.cpp */, - 9593A1201609386100AB5EEB /* btBroadphaseProxy.h */, - 9593A1211609386100AB5EEB /* btCollisionAlgorithm.cpp */, - 9593A1221609386100AB5EEB /* btCollisionAlgorithm.h */, - 9593A1231609386100AB5EEB /* btDbvt.cpp */, - 9593A1241609386100AB5EEB /* btDbvt.h */, - 9593A1251609386100AB5EEB /* btDbvtBroadphase.cpp */, - 9593A1261609386100AB5EEB /* btDbvtBroadphase.h */, - 9593A1271609386100AB5EEB /* btDispatcher.cpp */, - 9593A1281609386100AB5EEB /* btDispatcher.h */, - 9593A1291609386100AB5EEB /* btMultiSapBroadphase.cpp */, - 9593A12A1609386100AB5EEB /* btMultiSapBroadphase.h */, - 9593A12B1609386100AB5EEB /* btOverlappingPairCache.cpp */, - 9593A12C1609386100AB5EEB /* btOverlappingPairCache.h */, - 9593A12D1609386100AB5EEB /* btOverlappingPairCallback.h */, - 9593A12E1609386100AB5EEB /* btQuantizedBvh.cpp */, - 9593A12F1609386100AB5EEB /* btQuantizedBvh.h */, - 9593A1301609386100AB5EEB /* btSimpleBroadphase.cpp */, - 9593A1311609386100AB5EEB /* btSimpleBroadphase.h */, - ); - name = BroadphaseCollision; - path = games/supertuxkart/lib/bullet/src/BulletCollision/BroadphaseCollision; - sourceTree = SYSTEM_DEVELOPER_DIR; - }; - 9593A1321609386100AB5EEB /* CollisionDispatch */ = { - isa = PBXGroup; - children = ( - 9593A1331609386100AB5EEB /* btActivatingCollisionAlgorithm.cpp */, - 9593A1341609386100AB5EEB /* btActivatingCollisionAlgorithm.h */, - 9593A1351609386100AB5EEB /* btBox2dBox2dCollisionAlgorithm.cpp */, - 9593A1361609386100AB5EEB /* btBox2dBox2dCollisionAlgorithm.h */, - 9593A1371609386100AB5EEB /* btBoxBoxCollisionAlgorithm.cpp */, - 9593A1381609386100AB5EEB /* btBoxBoxCollisionAlgorithm.h */, - 9593A1391609386100AB5EEB /* btBoxBoxDetector.cpp */, - 9593A13A1609386100AB5EEB /* btBoxBoxDetector.h */, - 9593A13B1609386100AB5EEB /* btCollisionConfiguration.h */, - 9593A13C1609386100AB5EEB /* btCollisionCreateFunc.h */, - 9593A13D1609386100AB5EEB /* btCollisionDispatcher.cpp */, - 9593A13E1609386100AB5EEB /* btCollisionDispatcher.h */, - 9593A13F1609386100AB5EEB /* btCollisionObject.cpp */, - 9593A1401609386100AB5EEB /* btCollisionObject.h */, - 9593A1411609386100AB5EEB /* btCollisionWorld.cpp */, - 9593A1421609386100AB5EEB /* btCollisionWorld.h */, - 9593A1431609386100AB5EEB /* btCompoundCollisionAlgorithm.cpp */, - 9593A1441609386100AB5EEB /* btCompoundCollisionAlgorithm.h */, - 9593A1451609386100AB5EEB /* btConvex2dConvex2dAlgorithm.cpp */, - 9593A1461609386100AB5EEB /* btConvex2dConvex2dAlgorithm.h */, - 9593A1471609386100AB5EEB /* btConvexConcaveCollisionAlgorithm.cpp */, - 9593A1481609386100AB5EEB /* btConvexConcaveCollisionAlgorithm.h */, - 9593A1491609386100AB5EEB /* btConvexConvexAlgorithm.cpp */, - 9593A14A1609386100AB5EEB /* btConvexConvexAlgorithm.h */, - 9593A14B1609386100AB5EEB /* btConvexPlaneCollisionAlgorithm.cpp */, - 9593A14C1609386100AB5EEB /* btConvexPlaneCollisionAlgorithm.h */, - 9593A14D1609386100AB5EEB /* btDefaultCollisionConfiguration.cpp */, - 9593A14E1609386100AB5EEB /* btDefaultCollisionConfiguration.h */, - 9593A14F1609386100AB5EEB /* btEmptyCollisionAlgorithm.cpp */, - 9593A1501609386100AB5EEB /* btEmptyCollisionAlgorithm.h */, - 9593A1511609386100AB5EEB /* btGhostObject.cpp */, - 9593A1521609386100AB5EEB /* btGhostObject.h */, - 9593A1531609386100AB5EEB /* btInternalEdgeUtility.cpp */, - 9593A1541609386100AB5EEB /* btInternalEdgeUtility.h */, - 9593A1551609386100AB5EEB /* btManifoldResult.cpp */, - 9593A1561609386100AB5EEB /* btManifoldResult.h */, - 9593A1571609386100AB5EEB /* btSimulationIslandManager.cpp */, - 9593A1581609386100AB5EEB /* btSimulationIslandManager.h */, - 9593A1591609386100AB5EEB /* btSphereBoxCollisionAlgorithm.cpp */, - 9593A15A1609386100AB5EEB /* btSphereBoxCollisionAlgorithm.h */, - 9593A15B1609386100AB5EEB /* btSphereSphereCollisionAlgorithm.cpp */, - 9593A15C1609386100AB5EEB /* btSphereSphereCollisionAlgorithm.h */, - 9593A15D1609386100AB5EEB /* btSphereTriangleCollisionAlgorithm.cpp */, - 9593A15E1609386100AB5EEB /* btSphereTriangleCollisionAlgorithm.h */, - 9593A15F1609386100AB5EEB /* btUnionFind.cpp */, - 9593A1601609386100AB5EEB /* btUnionFind.h */, - 9593A1611609386100AB5EEB /* SphereTriangleDetector.cpp */, - 9593A1621609386100AB5EEB /* SphereTriangleDetector.h */, - ); - name = CollisionDispatch; - path = games/supertuxkart/lib/bullet/src/BulletCollision/CollisionDispatch; - sourceTree = SYSTEM_DEVELOPER_DIR; - }; - 9593A1631609386100AB5EEB /* CollisionShapes */ = { - isa = PBXGroup; - children = ( - 9593A1641609386100AB5EEB /* btBox2dShape.cpp */, - 9593A1651609386100AB5EEB /* btBox2dShape.h */, - 9593A1661609386100AB5EEB /* btBoxShape.cpp */, - 9593A1671609386100AB5EEB /* btBoxShape.h */, - 9593A1681609386100AB5EEB /* btBvhTriangleMeshShape.cpp */, - 9593A1691609386100AB5EEB /* btBvhTriangleMeshShape.h */, - 9593A16A1609386100AB5EEB /* btCapsuleShape.cpp */, - 9593A16B1609386100AB5EEB /* btCapsuleShape.h */, - 9593A16C1609386100AB5EEB /* btCollisionMargin.h */, - 9593A16D1609386100AB5EEB /* btCollisionShape.cpp */, - 9593A16E1609386100AB5EEB /* btCollisionShape.h */, - 9593A16F1609386100AB5EEB /* btCompoundShape.cpp */, - 9593A1701609386100AB5EEB /* btCompoundShape.h */, - 9593A1711609386100AB5EEB /* btConcaveShape.cpp */, - 9593A1721609386100AB5EEB /* btConcaveShape.h */, - 9593A1731609386100AB5EEB /* btConeShape.cpp */, - 9593A1741609386100AB5EEB /* btConeShape.h */, - 9593A1751609386100AB5EEB /* btConvex2dShape.cpp */, - 9593A1761609386100AB5EEB /* btConvex2dShape.h */, - 9593A1771609386100AB5EEB /* btConvexHullShape.cpp */, - 9593A1781609386100AB5EEB /* btConvexHullShape.h */, - 9593A1791609386100AB5EEB /* btConvexInternalShape.cpp */, - 9593A17A1609386100AB5EEB /* btConvexInternalShape.h */, - 9593A17B1609386100AB5EEB /* btConvexPointCloudShape.cpp */, - 9593A17C1609386100AB5EEB /* btConvexPointCloudShape.h */, - 9593A17D1609386100AB5EEB /* btConvexPolyhedron.cpp */, - 9593A17E1609386100AB5EEB /* btConvexPolyhedron.h */, - 9593A17F1609386100AB5EEB /* btConvexShape.cpp */, - 9593A1801609386100AB5EEB /* btConvexShape.h */, - 9593A1811609386100AB5EEB /* btConvexTriangleMeshShape.cpp */, - 9593A1821609386100AB5EEB /* btConvexTriangleMeshShape.h */, - 9593A1831609386100AB5EEB /* btCylinderShape.cpp */, - 9593A1841609386100AB5EEB /* btCylinderShape.h */, - 9593A1851609386100AB5EEB /* btEmptyShape.cpp */, - 9593A1861609386100AB5EEB /* btEmptyShape.h */, - 9593A1871609386100AB5EEB /* btHeightfieldTerrainShape.cpp */, - 9593A1881609386100AB5EEB /* btHeightfieldTerrainShape.h */, - 9593A1891609386100AB5EEB /* btMaterial.h */, - 9593A18A1609386100AB5EEB /* btMinkowskiSumShape.cpp */, - 9593A18B1609386100AB5EEB /* btMinkowskiSumShape.h */, - 9593A18C1609386100AB5EEB /* btMultimaterialTriangleMeshShape.cpp */, - 9593A18D1609386100AB5EEB /* btMultimaterialTriangleMeshShape.h */, - 9593A18E1609386100AB5EEB /* btMultiSphereShape.cpp */, - 9593A18F1609386100AB5EEB /* btMultiSphereShape.h */, - 9593A1901609386100AB5EEB /* btOptimizedBvh.cpp */, - 9593A1911609386100AB5EEB /* btOptimizedBvh.h */, - 9593A1921609386100AB5EEB /* btPolyhedralConvexShape.cpp */, - 9593A1931609386100AB5EEB /* btPolyhedralConvexShape.h */, - 9593A1941609386100AB5EEB /* btScaledBvhTriangleMeshShape.cpp */, - 9593A1951609386100AB5EEB /* btScaledBvhTriangleMeshShape.h */, - 9593A1961609386100AB5EEB /* btShapeHull.cpp */, - 9593A1971609386100AB5EEB /* btShapeHull.h */, - 9593A1981609386100AB5EEB /* btSphereShape.cpp */, - 9593A1991609386100AB5EEB /* btSphereShape.h */, - 9593A19A1609386100AB5EEB /* btStaticPlaneShape.cpp */, - 9593A19B1609386100AB5EEB /* btStaticPlaneShape.h */, - 9593A19C1609386100AB5EEB /* btStridingMeshInterface.cpp */, - 9593A19D1609386100AB5EEB /* btStridingMeshInterface.h */, - 9593A19E1609386100AB5EEB /* btTetrahedronShape.cpp */, - 9593A19F1609386100AB5EEB /* btTetrahedronShape.h */, - 9593A1A01609386100AB5EEB /* btTriangleBuffer.cpp */, - 9593A1A11609386100AB5EEB /* btTriangleBuffer.h */, - 9593A1A21609386100AB5EEB /* btTriangleCallback.cpp */, - 9593A1A31609386100AB5EEB /* btTriangleCallback.h */, - 9593A1A41609386100AB5EEB /* btTriangleIndexVertexArray.cpp */, - 9593A1A51609386100AB5EEB /* btTriangleIndexVertexArray.h */, - 9593A1A61609386100AB5EEB /* btTriangleIndexVertexMaterialArray.cpp */, - 9593A1A71609386100AB5EEB /* btTriangleIndexVertexMaterialArray.h */, - 9593A1A81609386100AB5EEB /* btTriangleInfoMap.h */, - 9593A1A91609386100AB5EEB /* btTriangleMesh.cpp */, - 9593A1AA1609386100AB5EEB /* btTriangleMesh.h */, - 9593A1AB1609386100AB5EEB /* btTriangleMeshShape.cpp */, - 9593A1AC1609386100AB5EEB /* btTriangleMeshShape.h */, - 9593A1AD1609386100AB5EEB /* btTriangleShape.h */, - 9593A1AE1609386100AB5EEB /* btUniformScalingShape.cpp */, - 9593A1AF1609386100AB5EEB /* btUniformScalingShape.h */, - ); - name = CollisionShapes; - path = games/supertuxkart/lib/bullet/src/BulletCollision/CollisionShapes; - sourceTree = SYSTEM_DEVELOPER_DIR; - }; - 9593A1B01609386100AB5EEB /* Gimpact */ = { - isa = PBXGroup; - children = ( - 9593A1B11609386100AB5EEB /* btBoxCollision.h */, - 9593A1B21609386100AB5EEB /* btClipPolygon.h */, - 9593A1B31609386100AB5EEB /* btContactProcessing.cpp */, - 9593A1B41609386100AB5EEB /* btContactProcessing.h */, - 9593A1B51609386100AB5EEB /* btGenericPoolAllocator.cpp */, - 9593A1B61609386100AB5EEB /* btGenericPoolAllocator.h */, - 9593A1B71609386100AB5EEB /* btGeometryOperations.h */, - 9593A1B81609386100AB5EEB /* btGImpactBvh.cpp */, - 9593A1B91609386100AB5EEB /* btGImpactBvh.h */, - 9593A1BA1609386100AB5EEB /* btGImpactCollisionAlgorithm.cpp */, - 9593A1BB1609386100AB5EEB /* btGImpactCollisionAlgorithm.h */, - 9593A1BC1609386100AB5EEB /* btGImpactMassUtil.h */, - 9593A1BD1609386100AB5EEB /* btGImpactQuantizedBvh.cpp */, - 9593A1BE1609386100AB5EEB /* btGImpactQuantizedBvh.h */, - 9593A1BF1609386100AB5EEB /* btGImpactShape.cpp */, - 9593A1C01609386100AB5EEB /* btGImpactShape.h */, - 9593A1C11609386100AB5EEB /* btQuantization.h */, - 9593A1C21609386100AB5EEB /* btTriangleShapeEx.cpp */, - 9593A1C31609386100AB5EEB /* btTriangleShapeEx.h */, - 9593A1C41609386100AB5EEB /* gim_array.h */, - 9593A1C51609386100AB5EEB /* gim_basic_geometry_operations.h */, - 9593A1C61609386100AB5EEB /* gim_bitset.h */, - 9593A1C71609386100AB5EEB /* gim_box_collision.h */, - 9593A1C81609386100AB5EEB /* gim_box_set.cpp */, - 9593A1C91609386100AB5EEB /* gim_box_set.h */, - 9593A1CA1609386100AB5EEB /* gim_clip_polygon.h */, - 9593A1CB1609386100AB5EEB /* gim_contact.cpp */, - 9593A1CC1609386100AB5EEB /* gim_contact.h */, - 9593A1CD1609386100AB5EEB /* gim_geom_types.h */, - 9593A1CE1609386100AB5EEB /* gim_geometry.h */, - 9593A1CF1609386100AB5EEB /* gim_hash_table.h */, - 9593A1D01609386100AB5EEB /* gim_linear_math.h */, - 9593A1D11609386100AB5EEB /* gim_math.h */, - 9593A1D21609386100AB5EEB /* gim_memory.cpp */, - 9593A1D31609386100AB5EEB /* gim_memory.h */, - 9593A1D41609386100AB5EEB /* gim_radixsort.h */, - 9593A1D51609386100AB5EEB /* gim_tri_collision.cpp */, - 9593A1D61609386100AB5EEB /* gim_tri_collision.h */, - ); - name = Gimpact; - path = games/supertuxkart/lib/bullet/src/BulletCollision/Gimpact; - sourceTree = SYSTEM_DEVELOPER_DIR; - }; - 9593A1D71609386100AB5EEB /* NarrowPhaseCollision */ = { - isa = PBXGroup; - children = ( - 9593A1D81609386100AB5EEB /* btContinuousConvexCollision.cpp */, - 9593A1D91609386100AB5EEB /* btContinuousConvexCollision.h */, - 9593A1DA1609386100AB5EEB /* btConvexCast.cpp */, - 9593A1DB1609386100AB5EEB /* btConvexCast.h */, - 9593A1DC1609386100AB5EEB /* btConvexPenetrationDepthSolver.h */, - 9593A1DD1609386100AB5EEB /* btDiscreteCollisionDetectorInterface.h */, - 9593A1DE1609386100AB5EEB /* btGjkConvexCast.cpp */, - 9593A1DF1609386100AB5EEB /* btGjkConvexCast.h */, - 9593A1E01609386100AB5EEB /* btGjkEpa2.cpp */, - 9593A1E11609386100AB5EEB /* btGjkEpa2.h */, - 9593A1E21609386100AB5EEB /* btGjkEpaPenetrationDepthSolver.cpp */, - 9593A1E31609386100AB5EEB /* btGjkEpaPenetrationDepthSolver.h */, - 9593A1E41609386100AB5EEB /* btGjkPairDetector.cpp */, - 9593A1E51609386100AB5EEB /* btGjkPairDetector.h */, - 9593A1E61609386100AB5EEB /* btManifoldPoint.h */, - 9593A1E71609386100AB5EEB /* btMinkowskiPenetrationDepthSolver.cpp */, - 9593A1E81609386100AB5EEB /* btMinkowskiPenetrationDepthSolver.h */, - 9593A1E91609386100AB5EEB /* btPersistentManifold.cpp */, - 9593A1EA1609386100AB5EEB /* btPersistentManifold.h */, - 9593A1EB1609386100AB5EEB /* btPointCollector.h */, - 9593A1EC1609386100AB5EEB /* btPolyhedralContactClipping.cpp */, - 9593A1ED1609386100AB5EEB /* btPolyhedralContactClipping.h */, - 9593A1EE1609386100AB5EEB /* btRaycastCallback.cpp */, - 9593A1EF1609386100AB5EEB /* btRaycastCallback.h */, - 9593A1F01609386100AB5EEB /* btSimplexSolverInterface.h */, - 9593A1F11609386100AB5EEB /* btSubSimplexConvexCast.cpp */, - 9593A1F21609386100AB5EEB /* btSubSimplexConvexCast.h */, - 9593A1F31609386100AB5EEB /* btVoronoiSimplexSolver.cpp */, - 9593A1F41609386100AB5EEB /* btVoronoiSimplexSolver.h */, - ); - name = NarrowPhaseCollision; - path = games/supertuxkart/lib/bullet/src/BulletCollision/NarrowPhaseCollision; - sourceTree = SYSTEM_DEVELOPER_DIR; - }; - 9593A1F51609386100AB5EEB /* BulletDynamics */ = { - isa = PBXGroup; - children = ( - 9593A1F61609386100AB5EEB /* Character */, - 9593A1FA1609386100AB5EEB /* ConstraintSolver */, - 9593A2181609386100AB5EEB /* Dynamics */, - 9593A2241609386100AB5EEB /* Vehicle */, - ); - name = BulletDynamics; - path = games/supertuxkart/lib/bullet/src/BulletDynamics; - sourceTree = SYSTEM_DEVELOPER_DIR; - }; - 9593A1F61609386100AB5EEB /* Character */ = { - isa = PBXGroup; - children = ( - 9593A1F71609386100AB5EEB /* btCharacterControllerInterface.h */, - 9593A1F81609386100AB5EEB /* btKinematicCharacterController.cpp */, - 9593A1F91609386100AB5EEB /* btKinematicCharacterController.h */, - ); - name = Character; - path = games/supertuxkart/lib/bullet/src/BulletDynamics/Character; - sourceTree = SYSTEM_DEVELOPER_DIR; - }; - 9593A1FA1609386100AB5EEB /* ConstraintSolver */ = { - isa = PBXGroup; - children = ( - 9593A1FB1609386100AB5EEB /* btConeTwistConstraint.cpp */, - 9593A1FC1609386100AB5EEB /* btConeTwistConstraint.h */, - 9593A1FD1609386100AB5EEB /* btConstraintSolver.h */, - 9593A1FE1609386100AB5EEB /* btContactConstraint.cpp */, - 9593A1FF1609386100AB5EEB /* btContactConstraint.h */, - 9593A2001609386100AB5EEB /* btContactSolverInfo.h */, - 9593A2011609386100AB5EEB /* btGeneric6DofConstraint.cpp */, - 9593A2021609386100AB5EEB /* btGeneric6DofConstraint.h */, - 9593A2031609386100AB5EEB /* btGeneric6DofSpringConstraint.cpp */, - 9593A2041609386100AB5EEB /* btGeneric6DofSpringConstraint.h */, - 9593A2051609386100AB5EEB /* btHinge2Constraint.cpp */, - 9593A2061609386100AB5EEB /* btHinge2Constraint.h */, - 9593A2071609386100AB5EEB /* btHingeConstraint.cpp */, - 9593A2081609386100AB5EEB /* btHingeConstraint.h */, - 9593A2091609386100AB5EEB /* btJacobianEntry.h */, - 9593A20A1609386100AB5EEB /* btPoint2PointConstraint.cpp */, - 9593A20B1609386100AB5EEB /* btPoint2PointConstraint.h */, - 9593A20C1609386100AB5EEB /* btSequentialImpulseConstraintSolver.cpp */, - 9593A20D1609386100AB5EEB /* btSequentialImpulseConstraintSolver.h */, - 9593A20E1609386100AB5EEB /* btSliderConstraint.cpp */, - 9593A20F1609386100AB5EEB /* btSliderConstraint.h */, - 9593A2101609386100AB5EEB /* btSolve2LinearConstraint.cpp */, - 9593A2111609386100AB5EEB /* btSolve2LinearConstraint.h */, - 9593A2121609386100AB5EEB /* btSolverBody.h */, - 9593A2131609386100AB5EEB /* btSolverConstraint.h */, - 9593A2141609386100AB5EEB /* btTypedConstraint.cpp */, - 9593A2151609386100AB5EEB /* btTypedConstraint.h */, - 9593A2161609386100AB5EEB /* btUniversalConstraint.cpp */, - 9593A2171609386100AB5EEB /* btUniversalConstraint.h */, - ); - name = ConstraintSolver; - path = games/supertuxkart/lib/bullet/src/BulletDynamics/ConstraintSolver; - sourceTree = SYSTEM_DEVELOPER_DIR; - }; - 9593A2181609386100AB5EEB /* Dynamics */ = { - isa = PBXGroup; - children = ( - 9593A2191609386100AB5EEB /* btActionInterface.h */, - 9593A21A1609386100AB5EEB /* btContinuousDynamicsWorld.cpp */, - 9593A21B1609386100AB5EEB /* btContinuousDynamicsWorld.h */, - 9593A21C1609386100AB5EEB /* btDiscreteDynamicsWorld.cpp */, - 9593A21D1609386100AB5EEB /* btDiscreteDynamicsWorld.h */, - 9593A21E1609386100AB5EEB /* btDynamicsWorld.h */, - 9593A21F1609386100AB5EEB /* btRigidBody.cpp */, - 9593A2201609386100AB5EEB /* btRigidBody.h */, - 9593A2211609386100AB5EEB /* btSimpleDynamicsWorld.cpp */, - 9593A2221609386100AB5EEB /* btSimpleDynamicsWorld.h */, - 9593A2231609386100AB5EEB /* Bullet-C-API.cpp */, - ); - name = Dynamics; - path = games/supertuxkart/lib/bullet/src/BulletDynamics/Dynamics; - sourceTree = SYSTEM_DEVELOPER_DIR; - }; - 9593A2241609386100AB5EEB /* Vehicle */ = { - isa = PBXGroup; - children = ( - 9593A2251609386100AB5EEB /* btRaycastVehicle.cpp */, - 9593A2261609386100AB5EEB /* btRaycastVehicle.h */, - 9593A2271609386100AB5EEB /* btVehicleRaycaster.h */, - 9593A2281609386100AB5EEB /* btWheelInfo.cpp */, - 9593A2291609386100AB5EEB /* btWheelInfo.h */, - ); - name = Vehicle; - path = games/supertuxkart/lib/bullet/src/BulletDynamics/Vehicle; - sourceTree = SYSTEM_DEVELOPER_DIR; - }; - 9593A22A1609386100AB5EEB /* LinearMath */ = { - isa = PBXGroup; - children = ( - 9593A22B1609386100AB5EEB /* btAabbUtil2.h */, - 9593A22C1609386100AB5EEB /* btAlignedAllocator.cpp */, - 9593A22D1609386100AB5EEB /* btAlignedAllocator.h */, - 9593A22E1609386100AB5EEB /* btAlignedObjectArray.h */, - 9593A22F1609386100AB5EEB /* btConvexHull.cpp */, - 9593A2301609386100AB5EEB /* btConvexHull.h */, - 9593A2311609386100AB5EEB /* btConvexHullComputer.cpp */, - 9593A2321609386100AB5EEB /* btConvexHullComputer.h */, - 9593A2331609386100AB5EEB /* btDefaultMotionState.h */, - 9593A2341609386100AB5EEB /* btGeometryUtil.cpp */, - 9593A2351609386100AB5EEB /* btGeometryUtil.h */, - 9593A2361609386100AB5EEB /* btGrahamScan2dConvexHull.h */, - 9593A2371609386100AB5EEB /* btHashMap.h */, - 9593A2381609386100AB5EEB /* btIDebugDraw.h */, - 9593A2391609386100AB5EEB /* btList.h */, - 9593A23A1609386100AB5EEB /* btMatrix3x3.h */, - 9593A23B1609386100AB5EEB /* btMinMax.h */, - 9593A23C1609386100AB5EEB /* btMotionState.h */, - 9593A23D1609386100AB5EEB /* btPoolAllocator.h */, - 9593A23E1609386100AB5EEB /* btQuadWord.h */, - 9593A23F1609386100AB5EEB /* btQuaternion.h */, - 9593A2401609386100AB5EEB /* btQuickprof.cpp */, - 9593A2411609386100AB5EEB /* btQuickprof.h */, - 9593A2421609386100AB5EEB /* btRandom.h */, - 9593A2431609386100AB5EEB /* btScalar.h */, - 9593A2441609386100AB5EEB /* btSerializer.cpp */, - 9593A2451609386100AB5EEB /* btSerializer.h */, - 9593A2461609386100AB5EEB /* btStackAlloc.h */, - 9593A2471609386100AB5EEB /* btTransform.h */, - 9593A2481609386100AB5EEB /* btTransformUtil.h */, - 9593A2491609386100AB5EEB /* btVector3.h */, - ); - name = LinearMath; - path = games/supertuxkart/lib/bullet/src/LinearMath; - sourceTree = SYSTEM_DEVELOPER_DIR; - }; - 9593A2CE1609388C00AB5EEB /* enet */ = { - isa = PBXGroup; - children = ( - 9593A2CF1609388C00AB5EEB /* aclocal.m4 */, - 9593A2D01609388C00AB5EEB /* callbacks.c */, - 9593A2D11609388C00AB5EEB /* ChangeLog */, - 9593A2D21609388C00AB5EEB /* CMakeLists.txt */, - 9593A2D31609388C00AB5EEB /* compress.c */, - 9593A2D41609388C00AB5EEB /* configure */, - 9593A2D51609388C00AB5EEB /* configure.in */, - 9593A2D61609388C00AB5EEB /* depcomp */, - 9593A2D71609388C00AB5EEB /* design.txt */, - 9593A2DF1609388C00AB5EEB /* Doxyfile */, - 9593A2E01609388C00AB5EEB /* enet.dsp */, - 9593A2E11609388C00AB5EEB /* host.c */, - 9593A2E21609388C00AB5EEB /* include */, - 9593A2ED1609388C00AB5EEB /* install-sh */, - 9593A2EE1609388C00AB5EEB /* LICENSE */, - 9593A2EF1609388C00AB5EEB /* list.c */, - 9593A2F01609388C00AB5EEB /* Makefile.am */, - 9593A2F11609388C00AB5EEB /* missing */, - 9593A2F21609388C00AB5EEB /* packet.c */, - 9593A2F31609388C00AB5EEB /* peer.c */, - 9593A2F41609388C00AB5EEB /* protocol.c */, - 9593A2F51609388C00AB5EEB /* README */, - 9593A2F61609388C00AB5EEB /* tutorial.txt */, - 9593A2F71609388C00AB5EEB /* unix.c */, - 9593A2F81609388C00AB5EEB /* win32.c */, - ); - name = enet; - path = ../../../lib/enet; - sourceTree = SOURCE_ROOT; - }; - 9593A2E21609388C00AB5EEB /* include */ = { - isa = PBXGroup; - children = ( - 9593A2E31609388C00AB5EEB /* enet */, - ); - name = include; - path = games/supertuxkart/lib/enet/include; - sourceTree = SYSTEM_DEVELOPER_DIR; - }; - 9593A2E31609388C00AB5EEB /* enet */ = { - isa = PBXGroup; - children = ( - 9593A2E41609388C00AB5EEB /* callbacks.h */, - 9593A2E51609388C00AB5EEB /* enet.h */, - 9593A2E61609388C00AB5EEB /* list.h */, - 9593A2E71609388C00AB5EEB /* protocol.h */, - 9593A2E81609388C00AB5EEB /* time.h */, - 9593A2E91609388C00AB5EEB /* types.h */, - 9593A2EA1609388C00AB5EEB /* unix.h */, - 9593A2EB1609388C00AB5EEB /* utility.h */, - 9593A2EC1609388C00AB5EEB /* win32.h */, - ); - name = enet; - path = games/supertuxkart/lib/enet/include/enet; - sourceTree = SYSTEM_DEVELOPER_DIR; - }; - 95A118280F77EA3100B18B3D /* input */ = { - isa = PBXGroup; - children = ( - 95D71FB016BF3A9E00C0F691 /* wiimote_manager.cpp */, - 95D71FB116BF3A9E00C0F691 /* wiimote_manager.hpp */, - 9528CC221291E7A10078A5EF /* binding.cpp */, - 9528CC231291E7A10078A5EF /* binding.hpp */, - 95A1187A0F78024E00B18B3D /* device_manager.cpp */, - 95A1187C0F78026D00B18B3D /* device_manager.hpp */, - 95A118290F77EA3100B18B3D /* input.hpp */, - 95A1184A0F77FC3900B18B3D /* input_device.cpp */, - 95A1184C0F77FC8800B18B3D /* input_device.hpp */, - 95A1182A0F77EA3100B18B3D /* input_manager.cpp */, - 95A1182B0F77EA3100B18B3D /* input_manager.hpp */, - ); - name = input; - path = ../../input; - sourceTree = SOURCE_ROOT; - }; - 95A197871502E5020074B892 /* replay */ = { - isa = PBXGroup; - children = ( - 95A197881502E5020074B892 /* replay_base.cpp */, - 95A197891502E5020074B892 /* replay_base.hpp */, - 95A1978A1502E5020074B892 /* replay_play.cpp */, - 95A1978B1502E5020074B892 /* replay_play.hpp */, - 95A1978C1502E5020074B892 /* replay_recorder.cpp */, - 95A1978D1502E5020074B892 /* replay_recorder.hpp */, - ); - name = replay; - path = ../../replay; - sourceTree = SOURCE_ROOT; - }; - 95C2ABA60F29653F000D3E5D /* src */ = { - isa = PBXGroup; - children = ( - 9551B27311DC0D6A002DD140 /* addons */, - 954E4C240FF98B6E0047FE3E /* animations */, - 95C2AC260F296540000D3E5D /* audio */, - 95C2AE250F296541000D3E5D /* challenges */, - 95D950CC0FE473CA002E10AD /* config */, - 952A152C103F66D600B1895D /* graphics */, - 958330B110122B4A00C5137E /* guiengine */, - 95C65D750F532F7D00BE7BA7 /* io */, - 95C2B0F50F296545000D3E5D /* items */, - 95A118280F77EA3100B18B3D /* input */, - 95C2B1160F296545000D3E5D /* karts */, - 95C2B1470F296545000D3E5D /* modes */, - 95C2B1590F296545000D3E5D /* network */, - 95C2B17F0F296545000D3E5D /* physics */, - 95263DDF0FD7471900CF5F92 /* race */, - 95A197871502E5020074B892 /* replay */, - 958330C110122B4A00C5137E /* states_screens */, - 958444891330F89100CEA60A /* tinygettext */, - 95C2B1CE0F296545000D3E5D /* tracks */, - 95C2B1DF0F296546000D3E5D /* utils */, - 95C2B1360F296545000D3E5D /* main.cpp */, - 95C2B1380F296545000D3E5D /* main_loop.cpp */, - 95C2B1390F296545000D3E5D /* main_loop.hpp */, - ); - name = src; - path = ../..; - sourceTree = SOURCE_ROOT; - }; - 95C2AC260F296540000D3E5D /* audio */ = { - isa = PBXGroup; - children = ( - 95A540581481C4760086FE38 /* dummy_sfx.hpp */, - 95C2AC270F296540000D3E5D /* music.hpp */, - 95A5405B1481C4DB0086FE38 /* music_dummy.hpp */, - 95C2AC280F296540000D3E5D /* music_information.cpp */, - 95C2AC290F296540000D3E5D /* music_information.hpp */, - 958BD76E117F6AE90095B483 /* music_manager.cpp */, - 958BD76F117F6AE90095B483 /* music_manager.hpp */, - 95C2AC2A0F296540000D3E5D /* music_ogg.cpp */, - 95C2AC2B0F296540000D3E5D /* music_ogg.hpp */, - 95C2AC2C0F296540000D3E5D /* sfx_base.hpp */, - 9516B07C12629C4E005F9493 /* sfx_buffer.cpp */, - 9516B07D12629C4E005F9493 /* sfx_buffer.hpp */, - 95C2AC2D0F296540000D3E5D /* sfx_manager.cpp */, - 95C2AC2E0F296540000D3E5D /* sfx_manager.hpp */, - 95C2AC2F0F296540000D3E5D /* sfx_openal.cpp */, - 95C2AC300F296540000D3E5D /* sfx_openal.hpp */, - ); - name = audio; - path = ../../audio; - sourceTree = SOURCE_ROOT; - }; - 95C2AE250F296541000D3E5D /* challenges */ = { - isa = PBXGroup; - children = ( - 95C2AE260F296541000D3E5D /* challenge.cpp */, - 95C2AE270F296541000D3E5D /* challenge.hpp */, - 95C2AE280F296541000D3E5D /* challenge_data.cpp */, - 95C2AE290F296541000D3E5D /* challenge_data.hpp */, - 95E5C3C0148C418100AD3FCC /* game_slot.cpp */, - 95E5C3C1148C418100AD3FCC /* game_slot.hpp */, - 95C2AE2A0F296541000D3E5D /* unlock_manager.cpp */, - 95C2AE2B0F296541000D3E5D /* unlock_manager.hpp */, - ); - name = challenges; - path = ../../challenges; - sourceTree = SOURCE_ROOT; - }; - 95C2B0F50F296545000D3E5D /* items */ = { - isa = PBXGroup; - children = ( - 95C2B0F60F296545000D3E5D /* attachment.cpp */, - 95C2B0F70F296545000D3E5D /* attachment.hpp */, - 95C2B0F80F296545000D3E5D /* attachment_manager.cpp */, - 95C2B0F90F296545000D3E5D /* attachment_manager.hpp */, - 95C2B0FA0F296545000D3E5D /* bowling.cpp */, - 95C2B0FB0F296545000D3E5D /* bowling.hpp */, - 95C2B0FE0F296545000D3E5D /* cake.cpp */, - 95C2B0FF0F296545000D3E5D /* cake.hpp */, - 95C2B1000F296545000D3E5D /* flyable.cpp */, - 95C2B1010F296545000D3E5D /* flyable.hpp */, - 95C2B1020F296545000D3E5D /* item.cpp */, - 95C2B1030F296545000D3E5D /* item.hpp */, - 95C2B1040F296545000D3E5D /* item_manager.cpp */, - 95C2B1050F296545000D3E5D /* item_manager.hpp */, - 95C2B1060F296545000D3E5D /* plunger.cpp */, - 95C2B1070F296545000D3E5D /* plunger.hpp */, - 95C2B1080F296545000D3E5D /* powerup.cpp */, - 95C2B1090F296545000D3E5D /* powerup.hpp */, - 95C2B10A0F296545000D3E5D /* powerup_manager.cpp */, - 95C2B10B0F296545000D3E5D /* powerup_manager.hpp */, - 95C2B10C0F296545000D3E5D /* projectile_manager.cpp */, - 95C2B10D0F296545000D3E5D /* projectile_manager.hpp */, - 95D2C42E13D6605600E84032 /* rubber_ball.cpp */, - 95D2C42F13D6605600E84032 /* rubber_ball.hpp */, - 95C2B10E0F296545000D3E5D /* rubber_band.cpp */, - 95C2B10F0F296545000D3E5D /* rubber_band.hpp */, - 959DE0C413C297B90068ED78 /* swatter.cpp */, - 959DE0C513C297B90068ED78 /* swatter.hpp */, - ); - name = items; - path = ../../items; - sourceTree = SOURCE_ROOT; - }; - 95C2B1160F296545000D3E5D /* karts */ = { - isa = PBXGroup; - children = ( - 956C6EC71128D3FB004336C8 /* controller */, - 95D69A7215226E4700D598D8 /* abstract_kart.cpp */, - 95D69A7315226E4700D598D8 /* abstract_kart.hpp */, - 952997F315B206D90028301A /* abstract_kart_animation.cpp */, - 952997F415B206D90028301A /* abstract_kart_animation.hpp */, - 952997F515B206D90028301A /* cannon_animation.cpp */, - 952997F615B206D90028301A /* cannon_animation.hpp */, - 952997F715B206D90028301A /* explosion_animation.cpp */, - 952997F815B206D90028301A /* explosion_animation.hpp */, - 95A1966014FC422D0074B892 /* ghost_kart.cpp */, - 95A1966114FC422D0074B892 /* ghost_kart.hpp */, - 95C2B1180F296545000D3E5D /* kart.cpp */, - 95C2B1190F296545000D3E5D /* kart.hpp */, - 9543D58D14D36EE3000B0888 /* kart_gfx.cpp */, - 9543D58E14D36EE3000B0888 /* kart_gfx.hpp */, - 95C2B11B0F296545000D3E5D /* kart_model.cpp */, - 95C2B11C0F296545000D3E5D /* kart_model.hpp */, - 95C2B11D0F296545000D3E5D /* kart_properties.cpp */, - 95C2B11E0F296545000D3E5D /* kart_properties.hpp */, - 95C2B11F0F296545000D3E5D /* kart_properties_manager.cpp */, - 95C2B1200F296545000D3E5D /* kart_properties_manager.hpp */, - 95A0BA2213E63F6700620EA6 /* kart_with_stats.cpp */, - 95A0BA2313E63F6700620EA6 /* kart_with_stats.hpp */, - 95BF1E66127513A100F78AE7 /* max_speed.cpp */, - 95BF1E67127513A100F78AE7 /* max_speed.hpp */, - 95C2B1210F296545000D3E5D /* moveable.cpp */, - 95C2B1220F296545000D3E5D /* moveable.hpp */, - 952997F915B206D90028301A /* rescue_animation.cpp */, - 952997FA15B206D90028301A /* rescue_animation.hpp */, - 95A197931502E5320074B892 /* skidding.cpp */, - 95A197941502E5320074B892 /* skidding.hpp */, - 95EF1E081506D6CF0041AC79 /* skidding_properties.cpp */, - 95EF1E091506D6CF0041AC79 /* skidding_properties.hpp */, - ); - name = karts; - path = ../../karts; - sourceTree = SOURCE_ROOT; - }; - 95C2B1470F296545000D3E5D /* modes */ = { - isa = PBXGroup; - children = ( - 95B0E8B316A4DC9E0037391C /* easter_egg_hunt.cpp */, - 95B0E8B416A4DC9E0037391C /* easter_egg_hunt.hpp */, - 95B0E8B516A4DC9E0037391C /* tutorial_world.cpp */, - 95B0E8B616A4DC9E0037391C /* tutorial_world.hpp */, - 952997BF15B205DE0028301A /* cutscene_world.cpp */, - 952997C015B205DE0028301A /* cutscene_world.hpp */, - 952997C115B205DE0028301A /* demo_world.cpp */, - 952997C215B205DE0028301A /* demo_world.hpp */, - 952997C315B205DE0028301A /* game_tutorial.cpp */, - 952997C415B205DE0028301A /* game_tutorial.hpp */, - 95C2B14A0F296545000D3E5D /* follow_the_leader.cpp */, - 95C2B14B0F296545000D3E5D /* follow_the_leader.hpp */, - 95C2B14C0F296545000D3E5D /* linear_world.cpp */, - 95C2B14D0F296545000D3E5D /* linear_world.hpp */, - 95933669149EC9B10031FD41 /* overworld.cpp */, - 9593366A149EC9B10031FD41 /* overworld.hpp */, - 952A1552103F68D000B1895D /* profile_world.cpp */, - 952A1553103F68D000B1895D /* profile_world.hpp */, - 95C2B14E0F296545000D3E5D /* standard_race.cpp */, - 95C2B14F0F296545000D3E5D /* standard_race.hpp */, - 95C2B1500F296545000D3E5D /* three_strikes_battle.cpp */, - 95C2B1510F296545000D3E5D /* three_strikes_battle.hpp */, - 9574F17A11206881008D202E /* world_status.cpp */, - 9574F17B11206881008D202E /* world_status.hpp */, - 9552C1F91231249000347B6C /* world_with_rank.cpp */, - 9552C1FA1231249000347B6C /* world_with_rank.hpp */, - 95C2B1520F296545000D3E5D /* world.cpp */, - 95C2B1530F296545000D3E5D /* world.hpp */, - ); - name = modes; - path = ../../modes; - sourceTree = SOURCE_ROOT; - }; - 95C2B1590F296545000D3E5D /* network */ = { - isa = PBXGroup; - children = ( - 95C2B15A0F296545000D3E5D /* character_confirm_message.hpp */, - 95C2B15B0F296545000D3E5D /* character_info_message.hpp */, - 95C2B15C0F296545000D3E5D /* character_selected_message.hpp */, - 95C2B15D0F296545000D3E5D /* connect_message.cpp */, - 95C2B15E0F296545000D3E5D /* connect_message.hpp */, - 95C2B15F0F296545000D3E5D /* flyable_info.hpp */, - 95C2B1600F296545000D3E5D /* item_info.hpp */, - 95C2B1610F296545000D3E5D /* kart_control_message.cpp */, - 95C2B1620F296545000D3E5D /* kart_control_message.hpp */, - 95C2B1630F296545000D3E5D /* kart_update_message.cpp */, - 95C2B1640F296545000D3E5D /* kart_update_message.hpp */, - 95C2B1650F296545000D3E5D /* message.cpp */, - 95C2B1660F296545000D3E5D /* message.hpp */, - 95C2B1670F296545000D3E5D /* network_kart.cpp */, - 95C2B1680F296545000D3E5D /* network_kart.hpp */, - 95C2B1690F296545000D3E5D /* network_manager.cpp */, - 95C2B16A0F296545000D3E5D /* network_manager.hpp */, - 95C2B16B0F296545000D3E5D /* num_players_message.hpp */, - 95C2B16C0F296545000D3E5D /* race_info_message.cpp */, - 95C2B16D0F296545000D3E5D /* race_info_message.hpp */, - 95C2B16E0F296545000D3E5D /* race_result_ack_message.hpp */, - 95C2B16F0F296545000D3E5D /* race_result_message.cpp */, - 95C2B1700F296545000D3E5D /* race_result_message.hpp */, - 95C2B1710F296545000D3E5D /* race_start_message.hpp */, - 95C2B1720F296545000D3E5D /* race_state.cpp */, - 95C2B1730F296545000D3E5D /* race_state.hpp */, - 95C2B1740F296545000D3E5D /* remote_kart_info.hpp */, - 95C2B1750F296545000D3E5D /* world_loaded_message.hpp */, - ); - name = network; - path = ../../network; - sourceTree = SOURCE_ROOT; - }; - 95C2B17F0F296545000D3E5D /* physics */ = { - isa = PBXGroup; - children = ( - 95C2B1800F296545000D3E5D /* btKart.cpp */, - 95C2B1810F296545000D3E5D /* btKart.hpp */, - 955764E412FB67EF005CE479 /* btKartRaycast.cpp */, - 955764E512FB67EF005CE479 /* btKartRaycast.hpp */, - 95C2B1820F296545000D3E5D /* btUprightConstraint.cpp */, - 95C2B1830F296545000D3E5D /* btUprightConstraint.hpp */, - 956830DE1132EC9E00088D14 /* irr_debug_drawer.cpp */, - 956830DF1132EC9E00088D14 /* irr_debug_drawer.hpp */, - 95C2B1840F296545000D3E5D /* kart_motion_state.hpp */, - 95CA59F70F82FCB7003323DB /* physical_object.cpp */, - 95CA59F60F82FCB7003323DB /* physical_object.hpp */, - 95C2B1870F296545000D3E5D /* physics.cpp */, - 95C2B1880F296545000D3E5D /* physics.hpp */, - 953EAAB10F30A4410000D57D /* triangle_mesh.cpp */, - 953EAAB00F30A4410000D57D /* triangle_mesh.hpp */, - ); - name = physics; - path = ../../physics; - sourceTree = SOURCE_ROOT; - }; - 95C2B1CE0F296545000D3E5D /* tracks */ = { - isa = PBXGroup; - children = ( - 9529980A15B207450028301A /* check_cannon.cpp */, - 9529980B15B207450028301A /* check_cannon.hpp */, - 95C77D621069589B0080838E /* ambient_light_sphere.cpp */, - 95C77D611069589B0080838E /* ambient_light_sphere.hpp */, - 95CB476B0FF30EF400413BAE /* bezier_curve.cpp */, - 95CB476A0FF30EF400413BAE /* bezier_curve.hpp */, - 95251F3B12554AB200505BA5 /* check_lap.cpp */, - 95251F3C12554AB200505BA5 /* check_lap.hpp */, - 95C77D65106958A50080838E /* check_line.cpp */, - 95C77D64106958A50080838E /* check_line.hpp */, - 955DE88110042701006A4F3C /* check_manager.cpp */, - 955DE88210042701006A4F3C /* check_manager.hpp */, - 95C77D6D106958E10080838E /* check_sphere.cpp */, - 95C77D6E106958E10080838E /* check_sphere.hpp */, - 955DE8871004273B006A4F3C /* check_structure.cpp */, - 955DE8881004273B006A4F3C /* check_structure.hpp */, - 953789720FC7829100DD1F8E /* graph_node.cpp */, - 953789710FC7829100DD1F8E /* graph_node.hpp */, - 95AA4C65148AF2CC0053771D /* lod_node_loader.cpp */, - 95AA4C66148AF2CC0053771D /* lod_node_loader.hpp */, - 951C357E0FC05BF400A48379 /* quad_set.cpp */, - 951C357D0FC05BF400A48379 /* quad_set.hpp */, - 953789810FC7831400DD1F8E /* quad.cpp */, - 953789800FC7831400DD1F8E /* quad.hpp */, - 951C35800FC05BF400A48379 /* quad_graph.cpp */, - 951C357F0FC05BF400A48379 /* quad_graph.hpp */, - 953EAAAE0F30A4220000D57D /* terrain_info.cpp */, - 953EAAAD0F30A4220000D57D /* terrain_info.hpp */, - 95C2B1CF0F296545000D3E5D /* track.cpp */, - 95C2B1D00F296545000D3E5D /* track.hpp */, - 95C2B1D10F296545000D3E5D /* track_manager.cpp */, - 95C2B1D20F296545000D3E5D /* track_manager.hpp */, - 959482CF10EBC0790031BADF /* track_object_manager.cpp */, - 959482D010EBC0790031BADF /* track_object_manager.hpp */, - 959482D110EBC0790031BADF /* track_object.cpp */, - 959482D210EBC0790031BADF /* track_object.hpp */, - 958806E713EB675F005F90FE /* track_sector.cpp */, - 958806E813EB675F005F90FE /* track_sector.hpp */, - ); - name = tracks; - path = ../../tracks; - sourceTree = SOURCE_ROOT; - }; - 95C2B1DF0F296546000D3E5D /* utils */ = { - isa = PBXGroup; - children = ( - 95B0E8A616A4DC060037391C /* log.cpp */, - 95B0E8A716A4DC060037391C /* log.hpp */, - 9553823910FD4FEC00737979 /* constants.cpp */, - 95C2B1E00F296546000D3E5D /* constants.hpp */, - 95C631A3142AC79500416D47 /* leak_check.cpp */, - 95C631B3142AC95500416D47 /* leak_check.hpp */, - 9540E2570FD5F8FD002985B8 /* no_copy.hpp */, - 957899B613C8E05F007AA5A3 /* profiler.cpp */, - 957899B713C8E05F007AA5A3 /* profiler.hpp */, - 9540E2560FD5F8FD002985B8 /* ptr_vector.hpp */, - 95C2B1E20F296546000D3E5D /* random_generator.cpp */, - 95C2B1E30F296546000D3E5D /* random_generator.hpp */, - 95C2B1E60F296546000D3E5D /* string_utils.cpp */, - 95C2B1E70F296546000D3E5D /* string_utils.hpp */, - 95C87F2D133A34E400D86528 /* time.hpp */, - 953EAAB50F30A4650000D57D /* translation.cpp */, - 953EAAB40F30A4650000D57D /* translation.hpp */, - 95C87F2E133A34EE00D86528 /* utf8 */, - 95C87F32133A34EE00D86528 /* utf8.h */, - 95C2B1E80F296546000D3E5D /* vec3.cpp */, - 95C2B1E90F296546000D3E5D /* vec3.hpp */, - ); - name = utils; - path = ../../utils; - sourceTree = SOURCE_ROOT; - }; - 95C65D750F532F7D00BE7BA7 /* io */ = { - isa = PBXGroup; - children = ( - 9505570E0F6963790056E88C /* file_manager.cpp */, - 9505570F0F6963790056E88C /* file_manager.hpp */, - 95C65D760F532F7D00BE7BA7 /* xml_node.cpp */, - 95C65D770F532F7D00BE7BA7 /* xml_node.hpp */, - 951B50AD12C9698B004F6993 /* xml_writer.cpp */, - 951B50AF12C96A13004F6993 /* xml_writer.hpp */, - ); - name = io; - path = ../../io; - sourceTree = SOURCE_ROOT; - }; - 95C87F2E133A34EE00D86528 /* utf8 */ = { - isa = PBXGroup; - children = ( - 95C87F2F133A34EE00D86528 /* checked.h */, - 95C87F30133A34EE00D86528 /* core.h */, - 95C87F31133A34EE00D86528 /* unchecked.h */, - ); - name = utf8; - path = ../../utils/utf8; - sourceTree = SOURCE_ROOT; - }; - 95D71F6316BF380900C0F691 /* wiiuse */ = { - isa = PBXGroup; - children = ( - 95D71F6416BF380900C0F691 /* classic.c */, - 95D71F6516BF380900C0F691 /* classic.h */, - 95D71F6616BF380900C0F691 /* CMakeLists.txt */, - 95D71F6716BF380900C0F691 /* definitions.h */, - 95D71F6816BF380900C0F691 /* definitions_os.h */, - 95D71F6916BF380900C0F691 /* dynamics.c */, - 95D71F6A16BF380900C0F691 /* dynamics.h */, - 95D71F6B16BF380900C0F691 /* events.c */, - 95D71F6C16BF380900C0F691 /* events.h */, - 95D71F6D16BF380900C0F691 /* guitar_hero_3.c */, - 95D71F6E16BF380900C0F691 /* guitar_hero_3.h */, - 95D71F6F16BF380900C0F691 /* io.c */, - 95D71F7016BF380900C0F691 /* io.h */, - 95D71F7216BF380900C0F691 /* io_win.c */, - 95D71F7316BF380900C0F691 /* ir.c */, - 95D71F7416BF380900C0F691 /* ir.h */, - 95D71F7516BF380900C0F691 /* motion_plus.c */, - 95D71F7616BF380900C0F691 /* motion_plus.h */, - 95D71F7716BF380900C0F691 /* nunchuk.c */, - 95D71F7816BF380900C0F691 /* nunchuk.h */, - 95D71F7916BF380900C0F691 /* os.h */, - 95D71F7A16BF380900C0F691 /* os_mac */, - 95D71F7F16BF380900C0F691 /* os_nix.c */, - 95D71F8016BF380900C0F691 /* os_win.c */, - 95D71F8116BF380900C0F691 /* README */, - 95D71F8216BF380900C0F691 /* util.c */, - 95D71F8316BF380900C0F691 /* wiiboard.c */, - 95D71F8416BF380900C0F691 /* wiiboard.h */, - 95D71F8516BF380900C0F691 /* wiiuse */, - 95D71F8716BF380900C0F691 /* wiiuse.c */, - 95D71F8816BF380900C0F691 /* wiiuse.h */, - 95D71F8916BF380900C0F691 /* wiiuse_internal.h */, - 95D71F8A16BF380900C0F691 /* wiiuse_msvcstdint.h */, - ); - name = wiiuse; - path = ../../../lib/wiiuse; - sourceTree = SOURCE_ROOT; - }; - 95D71F7A16BF380900C0F691 /* os_mac */ = { - isa = PBXGroup; - children = ( - 95D71F7B16BF380900C0F691 /* os_mac.h */, - 95D71F7C16BF380900C0F691 /* os_mac.m */, - 95D71F7D16BF380900C0F691 /* os_mac_find.m */, - 95D71F7E16BF380900C0F691 /* os_mac_interface.m */, - ); - name = os_mac; - path = ../../../lib/wiiuse/os_mac; - sourceTree = SOURCE_ROOT; - }; - 95D71F8516BF380900C0F691 /* wiiuse */ = { - isa = PBXGroup; - children = ( - 95D71F8616BF380900C0F691 /* wiiuse.vcproj */, - ); - name = wiiuse; - path = ../../../lib/wiiuse/wiiuse; - sourceTree = SOURCE_ROOT; - }; - 95D950CC0FE473CA002E10AD /* config */ = { - isa = PBXGroup; - children = ( - 9529980615B2072E0028301A /* player.cpp */, - 95B5CD13102DE08F00EF2001 /* device_config.cpp */, - 95B5CD12102DE08F00EF2001 /* device_config.hpp */, - 95D950CD0FE473CA002E10AD /* player.hpp */, - 95D950CE0FE473CA002E10AD /* stk_config.cpp */, - 95D950CF0FE473CA002E10AD /* stk_config.hpp */, - 95D950D00FE473CA002E10AD /* user_config.cpp */, - 95D950D10FE473CA002E10AD /* user_config.hpp */, - ); - name = config; - path = ../../config; - sourceTree = SOURCE_ROOT; - }; - 95ECA0EB10124C5000D47C5F /* widgets */ = { - isa = PBXGroup; - children = ( - 956B0A9E1232D2E900767CCD /* bubble_widget.cpp */, - 956B0AA21232D45D00767CCD /* bubble_widget.hpp */, - 95ECA0EC10124C5000D47C5F /* button_widget.cpp */, - 95ECA0ED10124C5000D47C5F /* button_widget.hpp */, - 9575720F134F5B890037747B /* CGUIEditBox.cpp */, - 95757210134F5B890037747B /* CGUIEditBox.h */, - 95ECA0EE10124C5000D47C5F /* check_box_widget.cpp */, - 95ECA0EF10124C5000D47C5F /* check_box_widget.hpp */, - 9524739510497C75000C197E /* dynamic_ribbon_widget.cpp */, - 9524739410497C75000C197E /* dynamic_ribbon_widget.hpp */, - 95ECA0F010124C5000D47C5F /* icon_button_widget.cpp */, - 95ECA0F110124C5000D47C5F /* icon_button_widget.hpp */, - 95ECA0F210124C5000D47C5F /* label_widget.cpp */, - 95ECA0F310124C5000D47C5F /* label_widget.hpp */, - 95ECA0F410124C5000D47C5F /* list_widget.cpp */, - 95ECA0F510124C5000D47C5F /* list_widget.hpp */, - 95ECA0F610124C5000D47C5F /* model_view_widget.cpp */, - 95ECA0F710124C5000D47C5F /* model_view_widget.hpp */, - 9545ABC811E3E38300D3C37A /* progress_bar_widget.cpp */, - 9545ABC911E3E38300D3C37A /* progress_bar_widget.hpp */, - 95ECA0FA10124C5000D47C5F /* ribbon_widget.cpp */, - 95ECA0FB10124C5000D47C5F /* ribbon_widget.hpp */, - 95ECA0FC10124C5000D47C5F /* spinner_widget.cpp */, - 95ECA0FD10124C5000D47C5F /* spinner_widget.hpp */, - 95ECA0FE10124C5000D47C5F /* text_box_widget.cpp */, - 95ECA0FF10124C5000D47C5F /* text_box_widget.hpp */, - ); - name = widgets; - path = ../../guiengine/widgets; - sourceTree = SOURCE_ROOT; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 9551C8200FC1B6FF00DB481B /* SuperTuxKart */ = { - isa = PBXNativeTarget; - buildConfigurationList = 9551C8260FC1B70000DB481B /* Build configuration list for PBXNativeTarget "SuperTuxKart" */; - buildPhases = ( - 9551C81D0FC1B6FF00DB481B /* Resources */, - 9551C81E0FC1B6FF00DB481B /* Sources */, - 9551C81F0FC1B6FF00DB481B /* Frameworks */, - 9507E9C60FC1CD1C00BD2B92 /* Copy data files */, - 9507E9E70FC1CDDF00BD2B92 /* Copy frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = SuperTuxKart; - productName = "SuperTuxKart - distribution"; - productReference = 9551C8210FC1B6FF00DB481B /* SuperTuxKart.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 08FB7793FE84155DC02AAC07 /* Project object */ = { - isa = PBXProject; - buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "STK_XCode" */; - compatibilityVersion = "Xcode 2.4"; - hasScannedForEncodings = 1; - knownRegions = ( - English, - Japanese, - French, - German, - ); - mainGroup = 08FB7794FE84155DC02AAC07 /* STK_XCode */; - projectDirPath = ""; - projectRoot = ../../..; - targets = ( - 9551C8200FC1B6FF00DB481B /* SuperTuxKart */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 9551C81D0FC1B6FF00DB481B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 9507E9B70FC1CCE900BD2B92 /* stk.icns in Resources */, - 9593A2CB1609386100AB5EEB /* Makefile.am in Resources */, - 9593A2F91609388C00AB5EEB /* aclocal.m4 in Resources */, - 9593A2FB1609388C00AB5EEB /* ChangeLog in Resources */, - 9593A2FC1609388C00AB5EEB /* CMakeLists.txt in Resources */, - 9593A2FE1609388C00AB5EEB /* configure in Resources */, - 9593A2FF1609388C00AB5EEB /* configure.in in Resources */, - 9593A3001609388C00AB5EEB /* depcomp in Resources */, - 9593A3011609388C00AB5EEB /* design.txt in Resources */, - 9593A3081609388C00AB5EEB /* Doxyfile in Resources */, - 9593A3091609388C00AB5EEB /* enet.dsp in Resources */, - 9593A30B1609388C00AB5EEB /* install-sh in Resources */, - 9593A30C1609388C00AB5EEB /* LICENSE in Resources */, - 9593A30E1609388C00AB5EEB /* Makefile.am in Resources */, - 9593A30F1609388C00AB5EEB /* missing in Resources */, - 9593A3131609388C00AB5EEB /* README in Resources */, - 9593A3141609388C00AB5EEB /* tutorial.txt in Resources */, - 95D71F8C16BF380900C0F691 /* CMakeLists.txt in Resources */, - 95D71F9B16BF380900C0F691 /* README in Resources */, - 95D71F9E16BF380900C0F691 /* wiiuse.vcproj in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 9507E9C60FC1CD1C00BD2B92 /* Copy data files */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 12; - files = ( - ); - inputPaths = ( - ); - name = "Copy data files"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "# copy data files\n\necho \"Copying Data Files\"\n\nif [ \"${CONFIGURATION}\" = \"Release\" ]\nthen\n\nmkdir -p \"${CONFIGURATION_BUILD_DIR}/${CONTENTS_FOLDER_PATH}/Resources/data\"\ncp -rf \"${PROJECT_DIR}/../../../data\" \"${CONFIGURATION_BUILD_DIR}/${CONTENTS_FOLDER_PATH}/Resources/\"\n\"${PROJECT_DIR}/cleanupRelease.sh\"\n\nelse\n\nmkdir -p \"${CONFIGURATION_BUILD_DIR}/${CONTENTS_FOLDER_PATH}/Resources/\"\nln -sFhf \"${PROJECT_DIR}/../../../data\" \"${CONFIGURATION_BUILD_DIR}/${CONTENTS_FOLDER_PATH}/Resources/\"\n\nfi"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 9551C81E0FC1B6FF00DB481B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 9551C8270FC1B72500DB481B /* music_information.cpp in Sources */, - 9551C8280FC1B72500DB481B /* music_ogg.cpp in Sources */, - 9551C8290FC1B72500DB481B /* sfx_manager.cpp in Sources */, - 9551C82A0FC1B72500DB481B /* sfx_openal.cpp in Sources */, - 9551C8900FC1B72500DB481B /* challenge.cpp in Sources */, - 9551C8910FC1B72500DB481B /* challenge_data.cpp in Sources */, - 9551C8920FC1B72500DB481B /* unlock_manager.cpp in Sources */, - 9551C8A20FC1B72500DB481B /* attachment.cpp in Sources */, - 9551C8A30FC1B72500DB481B /* attachment_manager.cpp in Sources */, - 9551C8A40FC1B72500DB481B /* bowling.cpp in Sources */, - 9551C8A60FC1B72500DB481B /* cake.cpp in Sources */, - 9551C8A70FC1B72500DB481B /* flyable.cpp in Sources */, - 9551C8A80FC1B72500DB481B /* item.cpp in Sources */, - 9551C8A90FC1B72500DB481B /* item_manager.cpp in Sources */, - 9551C8AA0FC1B72500DB481B /* plunger.cpp in Sources */, - 9551C8AB0FC1B72500DB481B /* powerup.cpp in Sources */, - 9551C8AC0FC1B72500DB481B /* powerup_manager.cpp in Sources */, - 9551C8AD0FC1B72500DB481B /* projectile_manager.cpp in Sources */, - 9551C8AE0FC1B72500DB481B /* rubber_band.cpp in Sources */, - 9551C8AF0FC1B72500DB481B /* kart.cpp in Sources */, - 9551C8B00FC1B72500DB481B /* kart_model.cpp in Sources */, - 9551C8B10FC1B72500DB481B /* kart_properties.cpp in Sources */, - 9551C8B20FC1B72500DB481B /* kart_properties_manager.cpp in Sources */, - 9551C8B30FC1B72500DB481B /* moveable.cpp in Sources */, - 9551C8B90FC1B72500DB481B /* main.cpp in Sources */, - 9551C8BA0FC1B72500DB481B /* main_loop.cpp in Sources */, - 9551C8BE0FC1B72500DB481B /* follow_the_leader.cpp in Sources */, - 9551C8BF0FC1B72500DB481B /* linear_world.cpp in Sources */, - 9551C8C00FC1B72500DB481B /* standard_race.cpp in Sources */, - 9551C8C10FC1B72500DB481B /* three_strikes_battle.cpp in Sources */, - 9551C8C20FC1B72500DB481B /* world.cpp in Sources */, - 9551C8C30FC1B72500DB481B /* connect_message.cpp in Sources */, - 9551C8C40FC1B72500DB481B /* kart_control_message.cpp in Sources */, - 9551C8C50FC1B72500DB481B /* kart_update_message.cpp in Sources */, - 9551C8C60FC1B72500DB481B /* message.cpp in Sources */, - 9551C8C70FC1B72500DB481B /* network_kart.cpp in Sources */, - 9551C8C80FC1B72500DB481B /* network_manager.cpp in Sources */, - 9551C8C90FC1B72500DB481B /* race_info_message.cpp in Sources */, - 9551C8CA0FC1B72500DB481B /* race_result_message.cpp in Sources */, - 9551C8CB0FC1B72500DB481B /* race_state.cpp in Sources */, - 9551C8CC0FC1B72500DB481B /* btKart.cpp in Sources */, - 9551C8CD0FC1B72500DB481B /* btUprightConstraint.cpp in Sources */, - 9551C8CE0FC1B72500DB481B /* physics.cpp in Sources */, - 9551C8D70FC1B72500DB481B /* track.cpp in Sources */, - 9551C8D80FC1B72500DB481B /* track_manager.cpp in Sources */, - 9551C8DA0FC1B72500DB481B /* random_generator.cpp in Sources */, - 9551C8DC0FC1B72500DB481B /* string_utils.cpp in Sources */, - 9551C8DD0FC1B72500DB481B /* vec3.cpp in Sources */, - 9551C8DE0FC1B72500DB481B /* terrain_info.cpp in Sources */, - 9551C8DF0FC1B72500DB481B /* triangle_mesh.cpp in Sources */, - 9551C8E00FC1B72500DB481B /* translation.cpp in Sources */, - 9551C8E10FC1B72500DB481B /* xml_node.cpp in Sources */, - 9551C8EC0FC1B72500DB481B /* file_manager.cpp in Sources */, - 9551C8F60FC1B72500DB481B /* input_manager.cpp in Sources */, - 9551C8F70FC1B72500DB481B /* input_device.cpp in Sources */, - 9551C8F80FC1B72500DB481B /* device_manager.cpp in Sources */, - 9551C8F90FC1B72500DB481B /* physical_object.cpp in Sources */, - 9551C8FA0FC1B72500DB481B /* quad_set.cpp in Sources */, - 9551C8FB0FC1B72500DB481B /* quad_graph.cpp in Sources */, - 953789730FC7829100DD1F8E /* graph_node.cpp in Sources */, - 953789820FC7831400DD1F8E /* quad.cpp in Sources */, - 95263DEC0FD7471900CF5F92 /* grand_prix_data.cpp in Sources */, - 95263DED0FD7471900CF5F92 /* grand_prix_manager.cpp in Sources */, - 95263DEE0FD7471900CF5F92 /* highscore_manager.cpp in Sources */, - 95263DEF0FD7471900CF5F92 /* highscores.cpp in Sources */, - 95263DF00FD7471900CF5F92 /* history.cpp in Sources */, - 95263DF10FD7471900CF5F92 /* race_manager.cpp in Sources */, - 95D950D20FE473CA002E10AD /* stk_config.cpp in Sources */, - 95D950D30FE473CA002E10AD /* user_config.cpp in Sources */, - 95CB476C0FF30EF400413BAE /* bezier_curve.cpp in Sources */, - 954E4C2D0FF98B6F0047FE3E /* animation_base.cpp in Sources */, - 954E4C2F0FF98B6F0047FE3E /* billboard_animation.cpp in Sources */, - 954E4C300FF98B6F0047FE3E /* three_d_animation.cpp in Sources */, - 951BC65E0FFAF290006B5FF1 /* ipo.cpp in Sources */, - 955DE88310042701006A4F3C /* check_manager.cpp in Sources */, - 955DE88C1004273B006A4F3C /* check_structure.cpp in Sources */, - 958330CC10122B4A00C5137E /* engine.cpp in Sources */, - 958330CD10122B4A00C5137E /* event_handler.cpp in Sources */, - 958330CE10122B4A00C5137E /* modaldialog.cpp in Sources */, - 958330D010122B4A00C5137E /* screen.cpp in Sources */, - 958330D110122B4A00C5137E /* screen_loader.cpp in Sources */, - 958330D210122B4A00C5137E /* skin.cpp in Sources */, - 958330D310122B4A00C5137E /* widget.cpp in Sources */, - 958330D410122B4A00C5137E /* credits.cpp in Sources */, - 958330D510122B4A00C5137E /* kart_selection.cpp in Sources */, - 958330D710122B4A00C5137E /* race_gui.cpp in Sources */, - 958330D810122B4A00C5137E /* state_manager.cpp in Sources */, - 9583319910123B0200C5137E /* abstract_state_manager.cpp in Sources */, - 9583323F101243ED00C5137E /* enter_player_name_dialog.cpp in Sources */, - 95833240101243ED00C5137E /* player_info_dialog.cpp in Sources */, - 95833241101243ED00C5137E /* press_a_key_dialog.cpp in Sources */, - 95833242101243ED00C5137E /* track_info_dialog.cpp in Sources */, - 95ECA10010124C5000D47C5F /* button_widget.cpp in Sources */, - 95ECA10110124C5000D47C5F /* check_box_widget.cpp in Sources */, - 95ECA10210124C5000D47C5F /* icon_button_widget.cpp in Sources */, - 95ECA10310124C5000D47C5F /* label_widget.cpp in Sources */, - 95ECA10410124C5000D47C5F /* list_widget.cpp in Sources */, - 95ECA10510124C5000D47C5F /* model_view_widget.cpp in Sources */, - 95ECA10710124C5000D47C5F /* ribbon_widget.cpp in Sources */, - 95ECA10810124C5000D47C5F /* spinner_widget.cpp in Sources */, - 95ECA10910124C5000D47C5F /* text_box_widget.cpp in Sources */, - 95B5CD14102DE08F00EF2001 /* device_config.cpp in Sources */, - 952A1545103F66D600B1895D /* camera.cpp in Sources */, - 952A1546103F66D600B1895D /* explosion.cpp in Sources */, - 952A1547103F66D600B1895D /* irr_driver.cpp in Sources */, - 952A1548103F66D600B1895D /* material.cpp in Sources */, - 952A1549103F66D600B1895D /* material_manager.cpp in Sources */, - 952A154A103F66D600B1895D /* mesh_tools.cpp in Sources */, - 952A154B103F66D600B1895D /* moving_texture.cpp in Sources */, - 952A154D103F66D600B1895D /* shadow.cpp in Sources */, - 952A154E103F66D600B1895D /* skid_marks.cpp in Sources */, - 952A1554103F68D000B1895D /* profile_world.cpp in Sources */, - 9524739610497C75000C197E /* dynamic_ribbon_widget.cpp in Sources */, - 958D8C54104F523000A81934 /* race_paused_dialog.cpp in Sources */, - 95C77D631069589B0080838E /* ambient_light_sphere.cpp in Sources */, - 95C77D66106958A50080838E /* check_line.cpp in Sources */, - 95C77D6F106958E10080838E /* check_sphere.cpp in Sources */, - 95D2343F1078227A00625256 /* feature_unlocked.cpp in Sources */, - 9522F125107948AD0067ECF5 /* main_menu_screen.cpp in Sources */, - 9522F15B107949780067ECF5 /* race_setup_screen.cpp in Sources */, - 9522F15E10794A350067ECF5 /* tracks_screen.cpp in Sources */, - 9522F1E010795E8A0067ECF5 /* help_screen_1.cpp in Sources */, - 9522F1E510795EFF0067ECF5 /* help_screen_2.cpp in Sources */, - 9522F1E610795EFF0067ECF5 /* help_screen_3.cpp in Sources */, - 9522F1F0107961560067ECF5 /* options_screen_input.cpp in Sources */, - 9522F1F1107961560067ECF5 /* options_screen_players.cpp in Sources */, - 956541BB10DD5F0A00C83E99 /* arenas_screen.cpp in Sources */, - 956541E110DD628C00C83E99 /* add_device_dialog.cpp in Sources */, - 95C9C97210E93456005A418D /* stars.cpp in Sources */, - 959482D310EBC0790031BADF /* track_object_manager.cpp in Sources */, - 959482D410EBC0790031BADF /* track_object.cpp in Sources */, - 9553823A10FD4FEC00737979 /* constants.cpp in Sources */, - 95DFC5021106933B00A043A9 /* slip_stream.cpp in Sources */, - 95E246BE111A2959000C965D /* confirm_resolution_dialog.cpp in Sources */, - 9574F17C11206881008D202E /* world_status.cpp in Sources */, - 95634EF21126272C009C145D /* gp_info_dialog.cpp in Sources */, - 956C6ED31128D3FB004336C8 /* controller.cpp in Sources */, - 956C6ED51128D3FB004336C8 /* end_controller.cpp in Sources */, - 956C6ED71128D3FB004336C8 /* player_controller.cpp in Sources */, - 956830E01132EC9E00088D14 /* irr_debug_drawer.cpp in Sources */, - 957ED4801163FF18002AB42C /* ai_base_controller.cpp in Sources */, - 958BD770117F6AE90095B483 /* music_manager.cpp in Sources */, - 950D448C118DEE3C006CFC41 /* CGUISpriteBank.cpp in Sources */, - 950D45D1118E040E006CFC41 /* options_screen_input2.cpp in Sources */, - 9556A880119EF976009C558F /* options_screen_audio.cpp in Sources */, - 9556A881119EF976009C558F /* options_screen_video.cpp in Sources */, - 9586318411B1EC9F00B8B4AF /* grand_prix_lose.cpp in Sources */, - 9586318511B1EC9F00B8B4AF /* grand_prix_win.cpp in Sources */, - 9525B71411C851D30094BD96 /* CBatchingMesh.cpp in Sources */, - 9551B27111DC0D4D002DD140 /* addons_screen.cpp in Sources */, - 9551B27C11DC0D6A002DD140 /* zip.cpp in Sources */, - 95E6A0C011DCF37800AE088A /* addons_loading.cpp in Sources */, - 9545ABCA11E3E38300D3C37A /* progress_bar_widget.cpp in Sources */, - 9554C4A611F1188000906416 /* race_result_gui.cpp in Sources */, - 953F8B2111F7C13C00205E66 /* scalable_font.cpp in Sources */, - 9560368C12187EFB00EB96C4 /* layout_manager.cpp in Sources */, - 956039BA1218C09E00EB96C4 /* abstract_top_level_container.cpp in Sources */, - 9552C1FB1231249000347B6C /* world_with_rank.cpp in Sources */, - 956B0A9F1232D2E900767CCD /* bubble_widget.cpp in Sources */, - 95017B41124698C400C90D56 /* help_screen_4.cpp in Sources */, - 95251F3D12554AB200505BA5 /* check_lap.cpp in Sources */, - 9516B07E12629C4E005F9493 /* sfx_buffer.cpp in Sources */, - 95BF1E68127513A100F78AE7 /* max_speed.cpp in Sources */, - 9528CC241291E7A10078A5EF /* binding.cpp in Sources */, - 95395A77129DFE130079BCE7 /* message_dialog.cpp in Sources */, - 9538E2B912C25D6800172896 /* addons_manager.cpp in Sources */, - 9538E2BA12C25D6800172896 /* network_http.cpp in Sources */, - 951B50AE12C9698B004F6993 /* xml_writer.cpp in Sources */, - 9538A56012CD094200CE3220 /* addon.cpp in Sources */, - 9542FC7712D3BDB000C00366 /* particle_emitter.cpp in Sources */, - 9542FD4C12D3E0D700C00366 /* particle_kind.cpp in Sources */, - 9528C71612D69494006E9167 /* particle_kind_manager.cpp in Sources */, - 955764E612FB67EF005CE479 /* btKartRaycast.cpp in Sources */, - 9559DE7F12FF777600350DE8 /* rain.cpp in Sources */, - 9592DC6D13021B350039DBC8 /* minimal_race_gui.cpp in Sources */, - 95E1FCDF130369EB004D83CC /* per_camera_node.cpp in Sources */, - 95376CAF1320784100C842A4 /* lod_node.cpp in Sources */, - 9584449E1330F89100CEA60A /* dictionary.cpp in Sources */, - 9584449F1330F89100CEA60A /* dictionary_manager.cpp in Sources */, - 958444A01330F89100CEA60A /* iconv.cpp in Sources */, - 958444A11330F89100CEA60A /* language.cpp in Sources */, - 958444A31330F89100CEA60A /* plural_forms.cpp in Sources */, - 958444A41330F89100CEA60A /* po_parser.cpp in Sources */, - 958444A51330F89100CEA60A /* stk_file_system.cpp in Sources */, - 958444A61330F89100CEA60A /* tinygettext.cpp in Sources */, - 953A959D13367D6E00D86B4D /* options_screen_ui.cpp in Sources */, - 95757211134F5B890037747B /* CGUIEditBox.cpp in Sources */, - 956F557513527E4B005C291D /* race_gui_base.cpp in Sources */, - 9584B30D137CAC12008565D7 /* news_manager.cpp in Sources */, - 9584B30E137CAC12008565D7 /* request.cpp in Sources */, - 959DE0C613C297B90068ED78 /* swatter.cpp in Sources */, - 957899B813C8E05F007AA5A3 /* profiler.cpp in Sources */, - 9598A5B613CFBA83000B83EA /* hardware_skinning.cpp in Sources */, - 95D2C43013D6605600E84032 /* rubber_ball.cpp in Sources */, - 958D924213DA48A70097BC82 /* post_processing.cpp in Sources */, - 95A0BA2413E63F6700620EA6 /* kart_with_stats.cpp in Sources */, - 958806E913EB675F005F90FE /* track_sector.cpp in Sources */, - 957A2D291405E21D00F45B22 /* hit_sfx.cpp in Sources */, - 957817DC142142C500AD07B2 /* referee.cpp in Sources */, - 95C631A4142AC79500416D47 /* leak_check.cpp in Sources */, - 95AA4C67148AF2CC0053771D /* lod_node_loader.cpp in Sources */, - 95E5C318148C17E500AD3FCC /* story_mode_lobby.cpp in Sources */, - 95E5C335148C19F500AD3FCC /* story_mode_new.cpp in Sources */, - 95E5C3C2148C418100AD3FCC /* game_slot.cpp in Sources */, - 9593366B149EC9B10031FD41 /* overworld.cpp in Sources */, - 957957A214A3CA3900E72497 /* custom_video_settings.cpp in Sources */, - 95EF178E14AFBC91005FFEEB /* race_gui_overworld.cpp in Sources */, - 9543D58F14D36EE3000B0888 /* kart_gfx.cpp in Sources */, - 9543D59E14D38831000B0888 /* select_challenge.cpp in Sources */, - 95A1966214FC422D0074B892 /* ghost_kart.cpp in Sources */, - 95A1978E1502E5020074B892 /* replay_base.cpp in Sources */, - 95A1978F1502E5020074B892 /* replay_play.cpp in Sources */, - 95A197901502E5020074B892 /* replay_recorder.cpp in Sources */, - 95A197951502E5320074B892 /* skidding.cpp in Sources */, - 95EF1E0A1506D6CF0041AC79 /* skidding_properties.cpp in Sources */, - 95D69A7415226E4700D598D8 /* abstract_kart.cpp in Sources */, - 952997C715B205DE0028301A /* cutscene_world.cpp in Sources */, - 952997C815B205DE0028301A /* demo_world.cpp in Sources */, - 952997C915B205DE0028301A /* game_tutorial.cpp in Sources */, - 952997ED15B206890028301A /* skidding_ai.cpp in Sources */, - 952997FB15B206D90028301A /* abstract_kart_animation.cpp in Sources */, - 952997FC15B206D90028301A /* cannon_animation.cpp in Sources */, - 952997FD15B206D90028301A /* explosion_animation.cpp in Sources */, - 952997FE15B206D90028301A /* rescue_animation.cpp in Sources */, - 9529980315B2070C0028301A /* cutscene_gui.cpp in Sources */, - 9529980715B2072E0028301A /* player.cpp in Sources */, - 9529980C15B207450028301A /* check_cannon.cpp in Sources */, - 9529981115B207740028301A /* show_curve.cpp in Sources */, - 9593A2551609386100AB5EEB /* btAxisSweep3.cpp in Sources */, - 9593A2561609386100AB5EEB /* btBroadphaseProxy.cpp in Sources */, - 9593A2571609386100AB5EEB /* btCollisionAlgorithm.cpp in Sources */, - 9593A2581609386100AB5EEB /* btDbvt.cpp in Sources */, - 9593A2591609386100AB5EEB /* btDbvtBroadphase.cpp in Sources */, - 9593A25A1609386100AB5EEB /* btDispatcher.cpp in Sources */, - 9593A25B1609386100AB5EEB /* btMultiSapBroadphase.cpp in Sources */, - 9593A25C1609386100AB5EEB /* btOverlappingPairCache.cpp in Sources */, - 9593A25D1609386100AB5EEB /* btQuantizedBvh.cpp in Sources */, - 9593A25E1609386100AB5EEB /* btSimpleBroadphase.cpp in Sources */, - 9593A25F1609386100AB5EEB /* btActivatingCollisionAlgorithm.cpp in Sources */, - 9593A2601609386100AB5EEB /* btBox2dBox2dCollisionAlgorithm.cpp in Sources */, - 9593A2611609386100AB5EEB /* btBoxBoxCollisionAlgorithm.cpp in Sources */, - 9593A2621609386100AB5EEB /* btBoxBoxDetector.cpp in Sources */, - 9593A2631609386100AB5EEB /* btCollisionDispatcher.cpp in Sources */, - 9593A2641609386100AB5EEB /* btCollisionObject.cpp in Sources */, - 9593A2651609386100AB5EEB /* btCollisionWorld.cpp in Sources */, - 9593A2661609386100AB5EEB /* btCompoundCollisionAlgorithm.cpp in Sources */, - 9593A2671609386100AB5EEB /* btConvex2dConvex2dAlgorithm.cpp in Sources */, - 9593A2681609386100AB5EEB /* btConvexConcaveCollisionAlgorithm.cpp in Sources */, - 9593A2691609386100AB5EEB /* btConvexConvexAlgorithm.cpp in Sources */, - 9593A26A1609386100AB5EEB /* btConvexPlaneCollisionAlgorithm.cpp in Sources */, - 9593A26B1609386100AB5EEB /* btDefaultCollisionConfiguration.cpp in Sources */, - 9593A26C1609386100AB5EEB /* btEmptyCollisionAlgorithm.cpp in Sources */, - 9593A26D1609386100AB5EEB /* btGhostObject.cpp in Sources */, - 9593A26E1609386100AB5EEB /* btInternalEdgeUtility.cpp in Sources */, - 9593A26F1609386100AB5EEB /* btManifoldResult.cpp in Sources */, - 9593A2701609386100AB5EEB /* btSimulationIslandManager.cpp in Sources */, - 9593A2711609386100AB5EEB /* btSphereBoxCollisionAlgorithm.cpp in Sources */, - 9593A2721609386100AB5EEB /* btSphereSphereCollisionAlgorithm.cpp in Sources */, - 9593A2731609386100AB5EEB /* btSphereTriangleCollisionAlgorithm.cpp in Sources */, - 9593A2741609386100AB5EEB /* btUnionFind.cpp in Sources */, - 9593A2751609386100AB5EEB /* SphereTriangleDetector.cpp in Sources */, - 9593A2761609386100AB5EEB /* btBox2dShape.cpp in Sources */, - 9593A2771609386100AB5EEB /* btBoxShape.cpp in Sources */, - 9593A2781609386100AB5EEB /* btBvhTriangleMeshShape.cpp in Sources */, - 9593A2791609386100AB5EEB /* btCapsuleShape.cpp in Sources */, - 9593A27A1609386100AB5EEB /* btCollisionShape.cpp in Sources */, - 9593A27B1609386100AB5EEB /* btCompoundShape.cpp in Sources */, - 9593A27C1609386100AB5EEB /* btConcaveShape.cpp in Sources */, - 9593A27D1609386100AB5EEB /* btConeShape.cpp in Sources */, - 9593A27E1609386100AB5EEB /* btConvex2dShape.cpp in Sources */, - 9593A27F1609386100AB5EEB /* btConvexHullShape.cpp in Sources */, - 9593A2801609386100AB5EEB /* btConvexInternalShape.cpp in Sources */, - 9593A2811609386100AB5EEB /* btConvexPointCloudShape.cpp in Sources */, - 9593A2821609386100AB5EEB /* btConvexPolyhedron.cpp in Sources */, - 9593A2831609386100AB5EEB /* btConvexShape.cpp in Sources */, - 9593A2841609386100AB5EEB /* btConvexTriangleMeshShape.cpp in Sources */, - 9593A2851609386100AB5EEB /* btCylinderShape.cpp in Sources */, - 9593A2861609386100AB5EEB /* btEmptyShape.cpp in Sources */, - 9593A2871609386100AB5EEB /* btHeightfieldTerrainShape.cpp in Sources */, - 9593A2881609386100AB5EEB /* btMinkowskiSumShape.cpp in Sources */, - 9593A2891609386100AB5EEB /* btMultimaterialTriangleMeshShape.cpp in Sources */, - 9593A28A1609386100AB5EEB /* btMultiSphereShape.cpp in Sources */, - 9593A28B1609386100AB5EEB /* btOptimizedBvh.cpp in Sources */, - 9593A28C1609386100AB5EEB /* btPolyhedralConvexShape.cpp in Sources */, - 9593A28D1609386100AB5EEB /* btScaledBvhTriangleMeshShape.cpp in Sources */, - 9593A28E1609386100AB5EEB /* btShapeHull.cpp in Sources */, - 9593A28F1609386100AB5EEB /* btSphereShape.cpp in Sources */, - 9593A2901609386100AB5EEB /* btStaticPlaneShape.cpp in Sources */, - 9593A2911609386100AB5EEB /* btStridingMeshInterface.cpp in Sources */, - 9593A2921609386100AB5EEB /* btTetrahedronShape.cpp in Sources */, - 9593A2931609386100AB5EEB /* btTriangleBuffer.cpp in Sources */, - 9593A2941609386100AB5EEB /* btTriangleCallback.cpp in Sources */, - 9593A2951609386100AB5EEB /* btTriangleIndexVertexArray.cpp in Sources */, - 9593A2961609386100AB5EEB /* btTriangleIndexVertexMaterialArray.cpp in Sources */, - 9593A2971609386100AB5EEB /* btTriangleMesh.cpp in Sources */, - 9593A2981609386100AB5EEB /* btTriangleMeshShape.cpp in Sources */, - 9593A2991609386100AB5EEB /* btUniformScalingShape.cpp in Sources */, - 9593A29A1609386100AB5EEB /* btContactProcessing.cpp in Sources */, - 9593A29B1609386100AB5EEB /* btGenericPoolAllocator.cpp in Sources */, - 9593A29C1609386100AB5EEB /* btGImpactBvh.cpp in Sources */, - 9593A29D1609386100AB5EEB /* btGImpactCollisionAlgorithm.cpp in Sources */, - 9593A29E1609386100AB5EEB /* btGImpactQuantizedBvh.cpp in Sources */, - 9593A29F1609386100AB5EEB /* btGImpactShape.cpp in Sources */, - 9593A2A01609386100AB5EEB /* btTriangleShapeEx.cpp in Sources */, - 9593A2A11609386100AB5EEB /* gim_box_set.cpp in Sources */, - 9593A2A21609386100AB5EEB /* gim_contact.cpp in Sources */, - 9593A2A31609386100AB5EEB /* gim_memory.cpp in Sources */, - 9593A2A41609386100AB5EEB /* gim_tri_collision.cpp in Sources */, - 9593A2A51609386100AB5EEB /* btContinuousConvexCollision.cpp in Sources */, - 9593A2A61609386100AB5EEB /* btConvexCast.cpp in Sources */, - 9593A2A71609386100AB5EEB /* btGjkConvexCast.cpp in Sources */, - 9593A2A81609386100AB5EEB /* btGjkEpa2.cpp in Sources */, - 9593A2A91609386100AB5EEB /* btGjkEpaPenetrationDepthSolver.cpp in Sources */, - 9593A2AA1609386100AB5EEB /* btGjkPairDetector.cpp in Sources */, - 9593A2AB1609386100AB5EEB /* btMinkowskiPenetrationDepthSolver.cpp in Sources */, - 9593A2AC1609386100AB5EEB /* btPersistentManifold.cpp in Sources */, - 9593A2AD1609386100AB5EEB /* btPolyhedralContactClipping.cpp in Sources */, - 9593A2AE1609386100AB5EEB /* btRaycastCallback.cpp in Sources */, - 9593A2AF1609386100AB5EEB /* btSubSimplexConvexCast.cpp in Sources */, - 9593A2B01609386100AB5EEB /* btVoronoiSimplexSolver.cpp in Sources */, - 9593A2B11609386100AB5EEB /* btKinematicCharacterController.cpp in Sources */, - 9593A2B21609386100AB5EEB /* btConeTwistConstraint.cpp in Sources */, - 9593A2B31609386100AB5EEB /* btContactConstraint.cpp in Sources */, - 9593A2B41609386100AB5EEB /* btGeneric6DofConstraint.cpp in Sources */, - 9593A2B51609386100AB5EEB /* btGeneric6DofSpringConstraint.cpp in Sources */, - 9593A2B61609386100AB5EEB /* btHinge2Constraint.cpp in Sources */, - 9593A2B71609386100AB5EEB /* btHingeConstraint.cpp in Sources */, - 9593A2B81609386100AB5EEB /* btPoint2PointConstraint.cpp in Sources */, - 9593A2B91609386100AB5EEB /* btSequentialImpulseConstraintSolver.cpp in Sources */, - 9593A2BA1609386100AB5EEB /* btSliderConstraint.cpp in Sources */, - 9593A2BB1609386100AB5EEB /* btSolve2LinearConstraint.cpp in Sources */, - 9593A2BC1609386100AB5EEB /* btTypedConstraint.cpp in Sources */, - 9593A2BD1609386100AB5EEB /* btUniversalConstraint.cpp in Sources */, - 9593A2BE1609386100AB5EEB /* btContinuousDynamicsWorld.cpp in Sources */, - 9593A2BF1609386100AB5EEB /* btDiscreteDynamicsWorld.cpp in Sources */, - 9593A2C01609386100AB5EEB /* btRigidBody.cpp in Sources */, - 9593A2C11609386100AB5EEB /* btSimpleDynamicsWorld.cpp in Sources */, - 9593A2C21609386100AB5EEB /* Bullet-C-API.cpp in Sources */, - 9593A2C31609386100AB5EEB /* btRaycastVehicle.cpp in Sources */, - 9593A2C41609386100AB5EEB /* btWheelInfo.cpp in Sources */, - 9593A2C51609386100AB5EEB /* btAlignedAllocator.cpp in Sources */, - 9593A2C61609386100AB5EEB /* btConvexHull.cpp in Sources */, - 9593A2C71609386100AB5EEB /* btConvexHullComputer.cpp in Sources */, - 9593A2C81609386100AB5EEB /* btGeometryUtil.cpp in Sources */, - 9593A2C91609386100AB5EEB /* btQuickprof.cpp in Sources */, - 9593A2CA1609386100AB5EEB /* btSerializer.cpp in Sources */, - 9593A2FA1609388C00AB5EEB /* callbacks.c in Sources */, - 9593A2FD1609388C00AB5EEB /* compress.c in Sources */, - 9593A30A1609388C00AB5EEB /* host.c in Sources */, - 9593A30D1609388C00AB5EEB /* list.c in Sources */, - 9593A3101609388C00AB5EEB /* packet.c in Sources */, - 9593A3111609388C00AB5EEB /* peer.c in Sources */, - 9593A3121609388C00AB5EEB /* protocol.c in Sources */, - 9593A3151609388C00AB5EEB /* unix.c in Sources */, - 9593A3161609388C00AB5EEB /* win32.c in Sources */, - 9593A32016093A7300AB5EEB /* ai_properties.cpp in Sources */, - 958949A9163F52FB00957345 /* inetwork_http.cpp in Sources */, - 95B0E8A816A4DC060037391C /* log.cpp in Sources */, - 95B0E8B016A4DC390037391C /* tgt_log.cpp in Sources */, - 95B0E8B716A4DC9E0037391C /* easter_egg_hunt.cpp in Sources */, - 95B0E8B816A4DC9E0037391C /* tutorial_world.cpp in Sources */, - 95D71F8B16BF380900C0F691 /* classic.c in Sources */, - 95D71F8D16BF380900C0F691 /* dynamics.c in Sources */, - 95D71F8E16BF380900C0F691 /* events.c in Sources */, - 95D71F8F16BF380900C0F691 /* guitar_hero_3.c in Sources */, - 95D71F9016BF380900C0F691 /* io.c in Sources */, - 95D71F9216BF380900C0F691 /* io_win.c in Sources */, - 95D71F9316BF380900C0F691 /* ir.c in Sources */, - 95D71F9416BF380900C0F691 /* motion_plus.c in Sources */, - 95D71F9516BF380900C0F691 /* nunchuk.c in Sources */, - 95D71F9616BF380900C0F691 /* os_mac.m in Sources */, - 95D71F9716BF380900C0F691 /* os_mac_find.m in Sources */, - 95D71F9816BF380900C0F691 /* os_mac_interface.m in Sources */, - 95D71F9916BF380900C0F691 /* os_nix.c in Sources */, - 95D71F9A16BF380900C0F691 /* os_win.c in Sources */, - 95D71F9C16BF380900C0F691 /* util.c in Sources */, - 95D71F9D16BF380900C0F691 /* wiiboard.c in Sources */, - 95D71F9F16BF380900C0F691 /* wiiuse.c in Sources */, - 95D71FB216BF3A9E00C0F691 /* wiimote_manager.cpp in Sources */, - 95D71FB716BF3C7800C0F691 /* tutorial_message_dialog.cpp in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 1DEB923608733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(NATIVE_ARCH)"; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = ( - /usr/local/include, - "$(HEADER_SEARCH_PATHS_QUOTED_1)", - "$(HEADER_SEARCH_PATHS_QUOTED_2)", - ); - PREBINDING = NO; - SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; - ZERO_LINK = NO; - }; - name = Debug; - }; - 1DEB923708733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(NATIVE_ARCH)"; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = ( - /usr/local/include, - "$(HEADER_SEARCH_PATHS_QUOTED_1)", - "$(HEADER_SEARCH_PATHS_QUOTED_2)", - ); - PREBINDING = NO; - SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; - ZERO_LINK = NO; - }; - name = Release; - }; - 9551C8240FC1B70000DB481B /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9551C9F80FC1B87600DB481B /* Config.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - GCC_DEBUGGING_SYMBOLS = full; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_ENABLE_SYMBOL_SEPARATION = NO; - GCC_MODEL_TUNING = G5; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - GCC_VERSION = ""; - GCC_WARN_ABOUT_MISSING_NEWLINE = YES; - GCC_WARN_MISSING_PARENTHESES = YES; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_SHADOW = NO; - GCC_WARN_UNUSED_FUNCTION = NO; - GCC_WARN_UNUSED_PARAMETER = NO; - HEADER_SEARCH_PATHS = "$(inherited)"; - HEADER_SEARCH_PATHS_QUOTED_1 = ""; - HEADER_SEARCH_PATHS_QUOTED_2 = ""; - INFOPLIST_FILE = "SuperTuxKart-Info.plist"; - INSTALL_PATH = "$(HOME)/Applications"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", - ); - LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(DEVELOPER_DIR)/games/supertuxkart/src/bullet/src\""; - OTHER_CFLAGS = ( - "$(inherited)", - "-DDEBUG=1", - ); - OTHER_CFLAGS_QUOTED_FOR_TARGET_1 = "-DPACKAGE=\"\\\"supertuxkart\\\"\""; - OTHER_LDFLAGS = "$(inherited)"; - PREBINDING = NO; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - PRODUCT_NAME = SuperTuxKart; - SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.6.sdk"; - }; - name = Debug; - }; - 9551C8250FC1B70000DB481B /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9551C9F80FC1B87600DB481B /* Config.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = ( - i386, - ppc, - ); - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEPLOYMENT_LOCATION = NO; - GCC_DEBUGGING_SYMBOLS = used; - GCC_ENABLE_FIX_AND_CONTINUE = NO; - GCC_ENABLE_SYMBOL_SEPARATION = NO; - GCC_MODEL_TUNING = G5; - GCC_OPTIMIZATION_LEVEL = 1; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - GCC_VERSION = 4.0; - GCC_WARN_ABOUT_MISSING_NEWLINE = YES; - GCC_WARN_MISSING_PARENTHESES = YES; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_SHADOW = NO; - GCC_WARN_UNUSED_FUNCTION = NO; - GCC_WARN_UNUSED_PARAMETER = NO; - HEADER_SEARCH_PATHS = "$(inherited)"; - HEADER_SEARCH_PATHS_QUOTED_1 = ""; - HEADER_SEARCH_PATHS_QUOTED_2 = ""; - INFOPLIST_FILE = "SuperTuxKart-Info.plist"; - INSTALL_PATH = "$(HOME)/Applications"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", - "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", - ); - LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(DEVELOPER_DIR)/games/supertuxkart/src/bullet/src\""; - LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = ""; - OTHER_CFLAGS = ( - "-DNDEBUG=1", - "$(inherited)", - ); - OTHER_LDFLAGS = "$(inherited)"; - PREBINDING = NO; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - PRODUCT_NAME = SuperTuxKart; - SDKROOT = /Developer/SDKs/MacOSX10.5.sdk; - STRIP_STYLE = "non-global"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "STK_XCode" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1DEB923608733DC60010E9CD /* Debug */, - 1DEB923708733DC60010E9CD /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 9551C8260FC1B70000DB481B /* Build configuration list for PBXNativeTarget "SuperTuxKart" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 9551C8240FC1B70000DB481B /* Debug */, - 9551C8250FC1B70000DB481B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; -} diff --git a/src/ide/Xcode/SuperTuxKart-Info.plist b/src/ide/Xcode/SuperTuxKart-Info.plist deleted file mode 100644 index d1caa503e..000000000 --- a/src/ide/Xcode/SuperTuxKart-Info.plist +++ /dev/null @@ -1,28 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - SuperTuxKart - CFBundleIconFile - stk.icns - CFBundleIdentifier - net.sourceforge.supertuxkart - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - SuperTuxKart - CFBundlePackageType - APPL - CFBundleShortVersionString - 0.8 - CFBundleSignature - SPTK - CFBundleVersion - 0.8 - CSResourcesFileMapped - - - diff --git a/src/ide/Xcode/cleanupRelease.sh b/src/ide/Xcode/cleanupRelease.sh deleted file mode 100755 index afaceac7e..000000000 --- a/src/ide/Xcode/cleanupRelease.sh +++ /dev/null @@ -1,4 +0,0 @@ -find ./build/Release/ -name ".svn" -exec rm -rf '{}' > /dev/null \; 2> /dev/null -find ./build/Release/ -name ".DS_Store" -exec rm -rf '{}' > /dev/null \; 2> /dev/null -find ./build/Release/ -name "Makefile*" -exec rm -rf '{}' > /dev/null \; 2> /dev/null -exit 0 \ No newline at end of file diff --git a/src/ide/Xcode/stk.icns b/src/ide/Xcode/stk.icns deleted file mode 100644 index 806e9da08..000000000 Binary files a/src/ide/Xcode/stk.icns and /dev/null differ diff --git a/src/ide/codeblocks/README b/src/ide/codeblocks/README deleted file mode 100644 index a3e69131e..000000000 --- a/src/ide/codeblocks/README +++ /dev/null @@ -1,35 +0,0 @@ -Basically 4 setups are included in the vc8-project: ---------------------------------------------------- -The first one is the one currently used and supported, -the others are more 'historical' and will be remove soon. - -BulletDebug/BulletRelease: - main setup (Debug/Relase) + BULLET - The debug version links in the optimised bullet (and sdl and plib) versions, since i is assumed that - mostly STK is being debugged, not everything. Using debug for everything creates a really slow executable. - -ReplayDebug/ReplayRelease: - main setup (Debug/Relase) + HAVE_GHOST_REPLAY - -Debug/Release: - main setup with openAL & vorbis: HAVE_OPENAL + HAVE_OGGVORBIS - -PlibSoundDebug/PlibSoundRelease: - no ogg-sound, no openAL, no vorbis, it is gonna be obsolete, when we move to OpenAL/ogg-vorbis completely - - -Create these environment-vars pointing to the folders of your installations: ----------------------------------------------------------------------------- -STK_LIB: pointing to a directory containing all libs -STK_INCLUDE: pointing to a directory containing all header files. -A separate package will be made available which contains all necessary windows -files to compile STK. If you prefer to have the packages in separate -directories, please add your directories to the paths in visual studio. - -Add the folders of the runtime-dlls to the PATH-variable, this is what i had to put: -(or copy the .dll files in the root directory of supertuxkart). - -Remarks for OpenAL-installation: --------------------------------- -My version of OpenAL 1.1-SDK didn't put its includes in OpenAL/include/AL but in OpenAL/include. -if yours did the same, create the folder OpenAL/include/AL and copy all the includes there. diff --git a/src/ide/codeblocks/Readme - How to run stk on codeblocks.txt b/src/ide/codeblocks/Readme - How to run stk on codeblocks.txt deleted file mode 100755 index 4f232a52f..000000000 --- a/src/ide/codeblocks/Readme - How to run stk on codeblocks.txt +++ /dev/null @@ -1,43 +0,0 @@ -==================================================================================== - -Steps: -* Go to src->ide->codeblocks and open "supertuxkart workspace" file. -* Codeblocks should open automatically with 4 projects under the workspace. -* Build all the 4 projects in the following order: - 1. enet - 2. bullet_lib - 3. Irricht - 4. Supertuxkart -( You have to right click on each of the project in the project workspace -and select "build") -* Select target as "debug" for debug version and "release" for release version -* To do this: - 1. Right-click and activate the project - 2. Go to "Build -> Select target" in the main menu and choose debug or release - -* Make sure you have all the dependancy files extracted in root folder of stk -( where you will find folders named src and data) -* Your "dependancies" folder and the .dll files should be here - -* Right-click and activate project "supertuxkart" and select - a. Build and Run for release version - b. Start Debugging for debug version - - -[ If you get error "Irricht.dll" not found or problem in dynamic linking - 1. Go to "..\..\lib\Win32-gcc" and copy the "Irricht.dll" file to root folder - * You will find this file after you have built you "Irricht" project ] -==================================================================================== - -Dependancies: -* Download "dependencies_for_0.8" and "dependencies_for_0.8_mingw" -* Extract both in the root stk folder -* In dependancies folder, cut everything from inside the include and lib folder -and paste it inside the dependancies folder itself - -* Also copy libwin2_32.a and libwinmm.a to dependancies folder - -==================================================================================== -Tested on codeblocks 10.05 with mingw 4.4.1 compiler -==================================================================================== -==================================================================================== \ No newline at end of file diff --git a/src/ide/codeblocks/bullet_lib.cbp b/src/ide/codeblocks/bullet_lib.cbp deleted file mode 100644 index 848fc814b..000000000 --- a/src/ide/codeblocks/bullet_lib.cbp +++ /dev/null @@ -1,352 +0,0 @@ - - - - - - diff --git a/src/ide/codeblocks/bullet_lib.depend b/src/ide/codeblocks/bullet_lib.depend deleted file mode 100644 index 6d956ed37..000000000 --- a/src/ide/codeblocks/bullet_lib.depend +++ /dev/null @@ -1 +0,0 @@ -# depslib dependency file v1.0 diff --git a/src/ide/codeblocks/bullet_lib.layout b/src/ide/codeblocks/bullet_lib.layout deleted file mode 100644 index 47bc15648..000000000 --- a/src/ide/codeblocks/bullet_lib.layout +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/src/ide/codeblocks/enet.cbp b/src/ide/codeblocks/enet.cbp deleted file mode 100644 index 52fc898cc..000000000 --- a/src/ide/codeblocks/enet.cbp +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - diff --git a/src/ide/codeblocks/enet.depend b/src/ide/codeblocks/enet.depend deleted file mode 100644 index 3d2e1eb1f..000000000 --- a/src/ide/codeblocks/enet.depend +++ /dev/null @@ -1,85 +0,0 @@ -# depslib dependency file v1.0 -1300395742 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\enet\callbacks.c - "enet/enet.h" - -1310445298 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\enet\include\\enet\enet.h - - "enet/win32.h" - "enet/unix.h" - "enet/types.h" - "enet/protocol.h" - "enet/list.h" - "enet/callbacks.h" - -1300395742 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\enet\include\\enet\win32.h - - - -1300395742 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\enet\include\\enet\unix.h - - - - - - -1235868408 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\enet\include\\enet\types.h - -1310445298 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\enet\include\\enet\protocol.h - "enet/types.h" - -1300395742 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\enet\include\\enet\list.h - - -1300395742 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\enet\include\\enet\callbacks.h - - -1300395742 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\enet\compress.c - - "enet/enet.h" - -1310444832 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\enet\host.c - - - "enet/enet.h" - -1300395742 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\enet\list.c - "enet/enet.h" - -1300395742 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\enet\packet.c - - "enet/enet.h" - -1310444832 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\enet\peer.c - - "enet/enet.h" - -1310444832 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\enet\protocol.c - - - "enet/utility.h" - "enet/time.h" - "enet/enet.h" - -1235868408 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\enet\include\\enet\utility.h - -1235868408 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\enet\include\\enet\time.h - -1323123324 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\enet\unix.c - - - - - - - - - - - "enet/enet.h" - - - -1331421418 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\enet\win32.c - - "enet/enet.h" - diff --git a/src/ide/codeblocks/enet.layout b/src/ide/codeblocks/enet.layout deleted file mode 100644 index e5c191a88..000000000 --- a/src/ide/codeblocks/enet.layout +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/src/ide/codeblocks/supertuxkart.cbp b/src/ide/codeblocks/supertuxkart.cbp deleted file mode 100644 index b996457e2..000000000 --- a/src/ide/codeblocks/supertuxkart.cbp +++ /dev/null @@ -1,684 +0,0 @@ - - - - - - diff --git a/src/ide/codeblocks/supertuxkart.depend b/src/ide/codeblocks/supertuxkart.depend deleted file mode 100644 index b29bc2cc0..000000000 --- a/src/ide/codeblocks/supertuxkart.depend +++ /dev/null @@ -1,6472 +0,0 @@ -# depslib dependency file v1.0 -1342824518 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\addons\addon.cpp - "addons/addon.hpp" - - - "io/file_manager.hpp" - "io/xml_node.hpp" - "utils/constants.hpp" - "utils/string_utils.hpp" - -1343087916 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\addons\addon.hpp - - - "io/file_manager.hpp" - "utils/time.hpp" - -1352873192 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\io\file_manager.hpp - - - - - - "io/xml_node.hpp" - "utils/no_copy.hpp" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\irrstring.h - "irrTypes.h" - "irrAllocator.h" - "irrMath.h" - - - - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\irrtypes.h - "IrrCompileConfig.h" - - - "assert.h" - - - -1352165168 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\irrcompileconfig.h - - - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\irrallocator.h - "irrTypes.h" - - - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\irrmath.h - "IrrCompileConfig.h" - "irrTypes.h" - - - - - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\ifilesystem.h - "IReferenceCounted.h" - "IXMLReader.h" - "IFileArchive.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\ireferencecounted.h - "irrTypes.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\ixmlreader.h - "IReferenceCounted.h" - "irrXML.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\irrxml.h - - "IrrCompileConfig.h" - - - - - - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\ifilearchive.h - "IReadFile.h" - "IFileList.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\ireadfile.h - "IReferenceCounted.h" - "coreutil.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\coreutil.h - "irrString.h" - "path.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\path.h - "irrString.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\ifilelist.h - "IReferenceCounted.h" - "path.h" - -1350366706 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\io\xml_node.hpp - - - - - - - - - - - "utils/leak_check.hpp" - "utils/no_copy.hpp" - "utils/time.hpp" - -1352247034 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\scolor.h - "irrTypes.h" - "irrMath.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\vector2d.h - "irrMath.h" - "dimension2d.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\dimension2d.h - "irrTypes.h" - "irrMath.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\vector3d.h - "irrMath.h" - -1344304468 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\utils\leak_check.hpp - - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\utils\no_copy.hpp - -1349162248 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\utils\time.hpp - - - - - - - "graphics/irr_driver.hpp" - -1349128420 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\irr_driver.hpp - - - - - - - - "post_processing.hpp" - "utils/aligned_array.hpp" - "utils/no_copy.hpp" - "utils/ptr_vector.hpp" - "utils/vec3.hpp" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\ivideodriver.h - "rect.h" - "SColor.h" - "ITexture.h" - "irrArray.h" - "matrix4.h" - "plane3d.h" - "dimension2d.h" - "position2d.h" - "SMaterial.h" - "IMeshBuffer.h" - "triangle3d.h" - "EDriverTypes.h" - "EDriverFeatures.h" - "SExposedVideoData.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\rect.h - "irrTypes.h" - "dimension2d.h" - "position2d.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\position2d.h - "vector2d.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\itexture.h - "IReferenceCounted.h" - "IImage.h" - "dimension2d.h" - "EDriverTypes.h" - "path.h" - "matrix4.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iimage.h - "IReferenceCounted.h" - "position2d.h" - "rect.h" - "SColor.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\edrivertypes.h - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\matrix4.h - "irrMath.h" - "vector3d.h" - "vector2d.h" - "plane3d.h" - "aabbox3d.h" - "rect.h" - "irrString.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\plane3d.h - "irrMath.h" - "vector3d.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\aabbox3d.h - "irrMath.h" - "plane3d.h" - "line3d.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\line3d.h - "irrTypes.h" - "vector3d.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\irrarray.h - "irrTypes.h" - "heapsort.h" - "irrAllocator.h" - "irrMath.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\heapsort.h - "irrTypes.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\smaterial.h - "SColor.h" - "matrix4.h" - "irrArray.h" - "irrMath.h" - "EMaterialTypes.h" - "EMaterialFlags.h" - "SMaterialLayer.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\ematerialtypes.h - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\ematerialflags.h - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\smateriallayer.h - "matrix4.h" - "irrAllocator.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\imeshbuffer.h - "IReferenceCounted.h" - "SMaterial.h" - "aabbox3d.h" - "S3DVertex.h" - "SVertexIndex.h" - "EHardwareBufferFlags.h" - "EPrimitiveTypes.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\s3dvertex.h - "vector3d.h" - "vector2d.h" - "SColor.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\svertexindex.h - "irrTypes.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\ehardwarebufferflags.h - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\eprimitivetypes.h - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\triangle3d.h - "vector3d.h" - "line3d.h" - "plane3d.h" - "aabbox3d.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\edriverfeatures.h - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\sexposedvideodata.h - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\irrlichtdevice.h - "IReferenceCounted.h" - "dimension2d.h" - "IVideoDriver.h" - "EDriverTypes.h" - "EDeviceTypes.h" - "IEventReceiver.h" - "ICursorControl.h" - "IVideoModeList.h" - "ITimer.h" - "IOSOperator.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\edevicetypes.h - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\ieventreceiver.h - "ILogger.h" - "Keycodes.h" - "irrString.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\ilogger.h - "IReferenceCounted.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\keycodes.h - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\icursorcontrol.h - "IReferenceCounted.h" - "position2d.h" - "rect.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\ivideomodelist.h - "IReferenceCounted.h" - "dimension2d.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\itimer.h - "IReferenceCounted.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iosoperator.h - "IReferenceCounted.h" - "irrString.h" - -1332693682 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\post_processing.hpp - - - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\ishaderconstantsetcallback.h - "IReferenceCounted.h" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\utils\aligned_array.hpp - "LinearMath/btAlignedObjectArray.h" - - -1326053842 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\linearmath\btalignedobjectarray.h - "btScalar.h" - "btAlignedAllocator.h" - - - - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\linearmath\btscalar.h - - - - - - - - - - - - - -1296684254 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\linearmath\btalignedallocator.h - "btScalar.h" - -1317337380 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\utils\ptr_vector.hpp - - - "utils/aligned_array.hpp" - -1335740862 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\utils\vec3.hpp - - - "LinearMath/btVector3.h" - "LinearMath/btMatrix3x3.h" - "utils/constants.hpp" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\linearmath\btvector3.h - "btScalar.h" - "btMinMax.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\linearmath\btminmax.h - "LinearMath/btScalar.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\linearmath\btmatrix3x3.h - "btVector3.h" - "btQuaternion.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\linearmath\btquaternion.h - "btVector3.h" - "btQuadWord.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\linearmath\btquadword.h - "btScalar.h" - "btMinMax.h" - - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\utils\constants.hpp - -1343779420 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\utils\string_utils.hpp - - - - - -1350157788 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\addons\addons_manager.cpp - "addons/addons_manager.hpp" - - - - - - - "addons/inetwork_http.hpp" - "addons/request.hpp" - "addons/zip.hpp" - "graphics/irr_driver.hpp" - "io/file_manager.hpp" - "io/xml_node.hpp" - "karts/kart_properties.hpp" - "karts/kart_properties_manager.hpp" - "states_screens/kart_selection.hpp" - "tracks/track.hpp" - "tracks/track_manager.hpp" - "utils/string_utils.hpp" - -1320385088 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\addons\addons_manager.hpp - - - - "addons/addon.hpp" - "io/xml_node.hpp" - "utils/synchronised.hpp" - -1344303342 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\utils\synchronised.hpp - - -1278008626 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\pthread.h - - "config.h" - - - - - "need_errno.h" - - - - -1278008576 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\sched.h - "need_errno.h" - - - - -1348120280 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\addons\inetwork_http.hpp - "addons/request.hpp" - -1319565188 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\addons\request.hpp - - "utils/leak_check.hpp" - "utils/synchronised.hpp" - -1319565188 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\addons\zip.hpp - -1352942436 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\kart_properties.hpp - - - - - "audio/sfx_manager.hpp" - "karts/kart_model.hpp" - "io/xml_node.hpp" - "race/race_manager.hpp" - "utils/interpolation_array.hpp" - "utils/vec3.hpp" - -1342987538 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\audio\sfx_manager.hpp - - - - - - "utils/no_copy.hpp" - "utils/vec3.hpp" - -1267382722 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\al\al.h - -1353882294 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\kart_model.hpp - - - "utils/no_copy.hpp" - "utils/vec3.hpp" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\ianimatedmeshscenenode.h - "ISceneNode.h" - "IBoneSceneNode.h" - "IAnimatedMeshMD2.h" - "IAnimatedMeshMD3.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iscenenode.h - "IAttributeExchangingObject.h" - "ESceneNodeTypes.h" - "ECullingTypes.h" - "EDebugSceneTypes.h" - "ISceneNodeAnimator.h" - "ITriangleSelector.h" - "SMaterial.h" - "irrString.h" - "aabbox3d.h" - "matrix4.h" - "irrList.h" - "IAttributes.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iattributeexchangingobject.h - "IReferenceCounted.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\escenenodetypes.h - "irrTypes.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\ecullingtypes.h - "irrTypes.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\edebugscenetypes.h - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iscenenodeanimator.h - "IReferenceCounted.h" - "vector3d.h" - "ESceneNodeAnimatorTypes.h" - "IAttributeExchangingObject.h" - "IEventReceiver.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\escenenodeanimatortypes.h - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\itriangleselector.h - "IReferenceCounted.h" - "triangle3d.h" - "aabbox3d.h" - "matrix4.h" - "line3d.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\irrlist.h - "irrTypes.h" - "irrAllocator.h" - "irrMath.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iattributes.h - "IReferenceCounted.h" - "SColor.h" - "vector3d.h" - "vector2d.h" - "line2d.h" - "line3d.h" - "triangle3d.h" - "position2d.h" - "rect.h" - "dimension2d.h" - "matrix4.h" - "quaternion.h" - "plane3d.h" - "triangle3d.h" - "line2d.h" - "line3d.h" - "irrString.h" - "irrArray.h" - "IXMLReader.h" - "EAttributes.h" - "path.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\line2d.h - "irrTypes.h" - "vector2d.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\quaternion.h - "irrTypes.h" - "irrMath.h" - "matrix4.h" - "vector3d.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\eattributes.h - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\ibonescenenode.h - "ISceneNode.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\ianimatedmeshmd2.h - "IAnimatedMesh.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\ianimatedmesh.h - "aabbox3d.h" - "IMesh.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\imesh.h - "IReferenceCounted.h" - "SMaterial.h" - "EHardwareBufferFlags.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\ianimatedmeshmd3.h - "IAnimatedMesh.h" - "IQ3Shader.h" - "quaternion.h" - "irrpack.h" - "irrunpack.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iq3shader.h - "irrArray.h" - "fast_atof.h" - "IFileSystem.h" - "IVideoDriver.h" - "coreutil.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\fast_atof.h - "irrMath.h" - "irrString.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\irrpack.h - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\irrunpack.h - -1353028222 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\race\race_manager.hpp - - - - "network/remote_kart_info.hpp" - "race/grand_prix_data.hpp" - "utils/translation.hpp" - "utils/vec3.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\network\remote_kart_info.hpp - - - -1354018156 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\race\grand_prix_data.hpp - - - - - - "utils/translation.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\utils\translation.hpp - - - - "utils/string_utils.hpp" - "tinygettext/tinygettext.hpp" - -1300320148 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tinygettext\tinygettext.hpp - "dictionary.hpp" - "dictionary_manager.hpp" - "language.hpp" - -1300401266 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tinygettext\dictionary.hpp - - - - "plural_forms.hpp" - -1300320148 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tinygettext\plural_forms.hpp - - -1306089712 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tinygettext\dictionary_manager.hpp - - - - - - "dictionary.hpp" - "language.hpp" - -1300320148 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tinygettext\language.hpp - - -1352942436 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\utils\interpolation_array.hpp - - - -1342478208 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\kart_properties_manager.hpp - "utils/ptr_vector.hpp" - - "network/remote_kart_info.hpp" - "utils/no_copy.hpp" - -1354838506 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\kart_selection.hpp - - "guiengine/screen.hpp" - "states_screens/state_manager.hpp" - -1351464880 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\screen.hpp - - - - "utils/cpp2011.h" - - - "config/stk_config.hpp" - "guiengine/abstract_top_level_container.hpp" - "guiengine/engine.hpp" - "guiengine/event_handler.hpp" - "guiengine/widget.hpp" - "input/input.hpp" - "utils/ptr_vector.hpp" - "utils/leak_check.hpp" - -1336956134 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\utils\cpp2011.h - -1353277350 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\config\stk_config.hpp - "utils/no_copy.hpp" - - - -1318723258 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\abstract_top_level_container.hpp - - - "utils/ptr_vector.hpp" - "guiengine/widget.hpp" - -1341546818 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\widget.hpp - - - "guiengine/event_handler.hpp" - "guiengine/skin.hpp" - "utils/constants.hpp" - "utils/ptr_vector.hpp" - -1316736444 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\event_handler.hpp - - - "input/input.hpp" - "utils/leak_check.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\input\input.hpp - - - -1317185692 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\skin.hpp - - - - - - - "utils/leak_check.hpp" - "utils/ptr_vector.hpp" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iguiskin.h - "IAttributeExchangingObject.h" - "EGUIAlignment.h" - "SColor.h" - "rect.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\eguialignment.h - -1327883274 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\engine.hpp - - "utils/constants.hpp" - "utils/ptr_vector.hpp" - -1332188472 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\state_manager.hpp - - "config/player.hpp" - "guiengine/abstract_state_manager.hpp" - "utils/ptr_vector.hpp" - -1340296410 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\config\player.hpp - - "config/user_config.hpp" - "utils/no_copy.hpp" - - -1351576130 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\config\user_config.hpp - - - - - - "graphics/camera.hpp" - "utils/constants.hpp" - "utils/no_copy.hpp" - "utils/ptr_vector.hpp" - "utils/time.hpp" - -1332188472 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\camera.hpp - - - - - "io/xml_node.hpp" - "utils/no_copy.hpp" - "utils/aligned_array.hpp" - "utils/vec3.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\abstract_state_manager.hpp - - - "guiengine/engine.hpp" - "guiengine/screen.hpp" - "utils/leak_check.hpp" - -1353374884 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\track.hpp - - - "LinearMath/btTransform.h" - "graphics/material.hpp" - "items/item.hpp" - "tracks/quad_graph.hpp" - "utils/aligned_array.hpp" - "utils/translation.hpp" - "utils/vec3.hpp" - "utils/ptr_vector.hpp" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\linearmath\bttransform.h - "btMatrix3x3.h" - -1343605576 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\material.hpp - "utils/no_copy.hpp" - - - - -1346810450 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\items\item.hpp - "utils/leak_check.hpp" - "utils/no_copy.hpp" - "utils/vec3.hpp" - - -1344409076 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\quad_graph.hpp - - - - "tracks/graph_node.hpp" - "tracks/quad_set.hpp" - "utils/aligned_array.hpp" - "utils/no_copy.hpp" - - -1346712570 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\graph_node.hpp - - - - - "tracks/quad.hpp" - "tracks/quad_set.hpp" - "utils/vec3.hpp" - -1350852514 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\quad.hpp - - "utils/vec3.hpp" - -1329392722 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\quad_set.hpp - - - "tracks/quad.hpp" - "utils/vec3.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\track_manager.hpp - - - - -1348188244 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\addons\inetwork_http.cpp - "addons/dummy_network_http.hpp" - "addons/inetwork_http.hpp" - "addons/network_http.hpp" - - -1348120280 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\addons\dummy_network_http.hpp - "addons/request.hpp" - "addons/inetwork_http.hpp" - -1348120280 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\addons\network_http.hpp - - - - - - - "addons/inetwork_http.hpp" - "addons/request.hpp" - "utils/synchronised.hpp" - -1278009976 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\curl\curl.h - "curlver.h" - "curlbuild.h" - "curlrules.h" - - - - - - - - - - - - - "easy.h" - "multi.h" - "typecheck-gcc.h" - -1278009976 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\curl\curlver.h - -1278009976 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\curl\curlbuild.h - - - -1278009976 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\curl\curlrules.h - -1278009976 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\curl\easy.h - -1278009976 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\curl\multi.h - "curl.h" - -1278009976 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\curl\typecheck-gcc.h - -1351983538 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\addons\network_http.cpp - "addons/network_http.hpp" - - - - - - - - "addons/news_manager.hpp" - "addons/request.hpp" - "config/user_config.hpp" - "io/file_manager.hpp" - "states_screens/addons_screen.hpp" - "states_screens/main_menu_screen.hpp" - "utils/string_utils.hpp" - "utils/time.hpp" - "utils/translation.hpp" - - -1342755616 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\addons\news_manager.hpp - - - - "utils/synchronised.hpp" - -1336953866 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\addons_screen.hpp - "addons/addons_manager.hpp" - "guiengine/screen.hpp" - "guiengine/widgets/label_widget.hpp" - "states_screens/dialogs/addons_loading.hpp" - -1319564774 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\widgets\label_widget.hpp - - - "guiengine/widget.hpp" - "utils/leak_check.hpp" - "utils/ptr_vector.hpp" - -1324583334 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\dialogs\addons_loading.hpp - "addons/addon.hpp" - "addons/addons_manager.hpp" - "guiengine/widgets.hpp" - "guiengine/modaldialog.hpp" - "utils/synchronised.hpp" - -1283631882 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\widgets.hpp - "guiengine/widgets/bubble_widget.hpp" - "guiengine/widgets/button_widget.hpp" - "guiengine/widgets/icon_button_widget.hpp" - "guiengine/widgets/list_widget.hpp" - "guiengine/widgets/dynamic_ribbon_widget.hpp" - "guiengine/widgets/spinner_widget.hpp" - "guiengine/widgets/progress_bar_widget.hpp" - "guiengine/widgets/ribbon_widget.hpp" - "guiengine/widgets/model_view_widget.hpp" - "guiengine/widgets/text_box_widget.hpp" - "guiengine/widgets/label_widget.hpp" - "guiengine/widgets/check_box_widget.hpp" - -1319564774 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\widgets\bubble_widget.hpp - - - "guiengine/widget.hpp" - "utils/leak_check.hpp" - -1319564774 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\widgets\button_widget.hpp - - "guiengine/widget.hpp" - "utils/leak_check.hpp" - "utils/ptr_vector.hpp" - -1323303924 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\widgets\icon_button_widget.hpp - - "guiengine/widget.hpp" - "utils/leak_check.hpp" - "utils/ptr_vector.hpp" - -1323303924 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\widgets\list_widget.hpp - - "guiengine/widget.hpp" - "guiengine/widgets/button_widget.hpp" - "utils/leak_check.hpp" - "utils/ptr_vector.hpp" - -1319564774 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\widgets\dynamic_ribbon_widget.hpp - - "guiengine/widget.hpp" - "guiengine/widgets/ribbon_widget.hpp" - "utils/leak_check.hpp" - "utils/ptr_vector.hpp" - -1324583334 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\widgets\ribbon_widget.hpp - - "guiengine/widget.hpp" - "guiengine/widgets/icon_button_widget.hpp" - "utils/leak_check.hpp" - "utils/ptr_vector.hpp" - - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iguistatictext.h - "IGUIElement.h" - "SColor.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iguielement.h - "IAttributeExchangingObject.h" - "irrList.h" - "rect.h" - "irrString.h" - "IEventReceiver.h" - "EGUIElementTypes.h" - "EGUIAlignment.h" - "IAttributes.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\eguielementtypes.h - "irrTypes.h" - -1341546818 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\widgets\spinner_widget.hpp - - "guiengine/widget.hpp" - "utils/leak_check.hpp" - "utils/ptr_vector.hpp" - -1319564774 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\widgets\progress_bar_widget.hpp - - "guiengine/widget.hpp" - "utils/leak_check.hpp" - "utils/ptr_vector.hpp" - -1353289332 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\widgets\model_view_widget.hpp - - "graphics/irr_driver.hpp" - "guiengine/widgets/icon_button_widget.hpp" - "utils/aligned_array.hpp" - "utils/leak_check.hpp" - "utils/ptr_vector.hpp" - -1323303924 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\widgets\text_box_widget.hpp - - "guiengine/widget.hpp" - "utils/leak_check.hpp" - "utils/ptr_vector.hpp" - -1323303924 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\widgets\check_box_widget.hpp - "guiengine/widget.hpp" - "utils/leak_check.hpp" - "utils/ptr_vector.hpp" - -1316714884 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\modaldialog.hpp - - "utils/ptr_vector.hpp" - "guiengine/abstract_top_level_container.hpp" - "guiengine/skin.hpp" - "input/input_manager.hpp" - "utils/leak_check.hpp" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iguiwindow.h - "IGUIElement.h" - "EMessageBoxFlags.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\emessageboxflags.h - -1325446652 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\input\input_manager.hpp - - - - "guiengine/event_handler.hpp" - "input/input.hpp" - "utils/no_copy.hpp" - -1336953866 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\main_menu_screen.hpp - "guiengine/screen.hpp" - -1342755616 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\addons\news_manager.cpp - "addons/news_manager.hpp" - "config/user_config.hpp" - "io/file_manager.hpp" - "states_screens/addons_screen.hpp" - "states_screens/main_menu_screen.hpp" - "utils/string_utils.hpp" - "utils/time.hpp" - "utils/translation.hpp" - - -1306087408 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\addons\request.cpp - "addons/request.hpp" - - "addons/addon.hpp" - -1307968040 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\addons\zip.cpp - - - - "graphics/irr_driver.hpp" - "io/file_manager.hpp" - "utils/string_utils.hpp" - - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iwritefile.h - "IReferenceCounted.h" - "path.h" - -1348797130 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\animations\animation_base.cpp - "animations/animation_base.hpp" - "animations/ipo.hpp" - "config/user_config.hpp" - "graphics/irr_driver.hpp" - "io/file_manager.hpp" - "io/xml_node.hpp" - - -1340500962 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\animations\animation_base.hpp - - "animations/ipo.hpp" - "tracks/track_object.hpp" - "utils/ptr_vector.hpp" - - -1335740930 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\animations\ipo.hpp - - - - - "utils/no_copy.hpp" - "utils/vec3.hpp" - -1345686776 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\track_object.hpp - - - "items/item.hpp" - "utils/no_copy.hpp" - "utils/vec3.hpp" - - "graphics/lod_node.hpp" - -1353882294 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\lod_node.hpp - - - - - - -1351464880 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\animations\billboard_animation.cpp - "animations/billboard_animation.hpp" - "config/user_config.hpp" - "graphics/irr_driver.hpp" - "graphics/material.hpp" - "graphics/material_manager.hpp" - "io/file_manager.hpp" - - - - - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\animations\billboard_animation.hpp - - "animations/animation_base.hpp" - -1351552470 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\material_manager.hpp - "utils/no_copy.hpp" - - - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iscenemanager.h - "IReferenceCounted.h" - "irrArray.h" - "irrString.h" - "path.h" - "vector3d.h" - "dimension2d.h" - "SColor.h" - "ETerrainElements.h" - "ESceneNodeTypes.h" - "ESceneNodeAnimatorTypes.h" - "EMeshWriterEnums.h" - "SceneParameters.h" - "IGeometryCreator.h" - "ISkinnedMesh.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\eterrainelements.h - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\emeshwriterenums.h - "irrTypes.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\sceneparameters.h - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\igeometrycreator.h - "IReferenceCounted.h" - "IMesh.h" - "IImage.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iskinnedmesh.h - "irrArray.h" - "IBoneSceneNode.h" - "IAnimatedMesh.h" - "SSkinMeshBuffer.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\sskinmeshbuffer.h - "IMeshBuffer.h" - "S3DVertex.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\icamerascenenode.h - "ISceneNode.h" - "IEventReceiver.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\ibillboardscenenode.h - "ISceneNode.h" - -1335740930 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\animations\ipo.cpp - "animations/ipo.hpp" - "io/xml_node.hpp" - - -1353380242 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\animations\three_d_animation.cpp - "animations/three_d_animation.hpp" - - "audio/sfx_base.hpp" - "graphics/irr_driver.hpp" - "graphics/material.hpp" - "graphics/material_manager.hpp" - "graphics/mesh_tools.hpp" - "io/xml_node.hpp" - "modes/world.hpp" - "physics/kart_motion_state.hpp" - "physics/physics.hpp" - "physics/triangle_mesh.hpp" - "tracks/bezier_curve.hpp" - "utils/constants.hpp" - - - -1350346174 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\animations\three_d_animation.hpp - - - "btBulletDynamicsCommon.h" - "animations/animation_base.hpp" - "physics/user_pointer.hpp" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\btbulletdynamicscommon.h - "btBulletCollisionCommon.h" - "BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h" - "BulletDynamics/Dynamics/btSimpleDynamicsWorld.h" - "BulletDynamics/Dynamics/btRigidBody.h" - "BulletDynamics/ConstraintSolver/btPoint2PointConstraint.h" - "BulletDynamics/ConstraintSolver/btHingeConstraint.h" - "BulletDynamics/ConstraintSolver/btConeTwistConstraint.h" - "BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h" - "BulletDynamics/ConstraintSolver/btSliderConstraint.h" - "BulletDynamics/ConstraintSolver/btGeneric6DofSpringConstraint.h" - "BulletDynamics/ConstraintSolver/btUniversalConstraint.h" - "BulletDynamics/ConstraintSolver/btHinge2Constraint.h" - "BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h" - "BulletDynamics/Vehicle/btRaycastVehicle.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\btbulletcollisioncommon.h - "BulletCollision/CollisionDispatch/btCollisionWorld.h" - "BulletCollision/CollisionDispatch/btCollisionObject.h" - "BulletCollision/CollisionShapes/btBoxShape.h" - "BulletCollision/CollisionShapes/btSphereShape.h" - "BulletCollision/CollisionShapes/btCapsuleShape.h" - "BulletCollision/CollisionShapes/btCylinderShape.h" - "BulletCollision/CollisionShapes/btConeShape.h" - "BulletCollision/CollisionShapes/btStaticPlaneShape.h" - "BulletCollision/CollisionShapes/btConvexHullShape.h" - "BulletCollision/CollisionShapes/btTriangleMesh.h" - "BulletCollision/CollisionShapes/btConvexTriangleMeshShape.h" - "BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h" - "BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h" - "BulletCollision/CollisionShapes/btTriangleMeshShape.h" - "BulletCollision/CollisionShapes/btTriangleIndexVertexArray.h" - "BulletCollision/CollisionShapes/btCompoundShape.h" - "BulletCollision/CollisionShapes/btTetrahedronShape.h" - "BulletCollision/CollisionShapes/btEmptyShape.h" - "BulletCollision/CollisionShapes/btMultiSphereShape.h" - "BulletCollision/CollisionShapes/btUniformScalingShape.h" - "BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.h" - "BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.h" - "BulletCollision/CollisionDispatch/btCollisionDispatcher.h" - "BulletCollision/BroadphaseCollision/btSimpleBroadphase.h" - "BulletCollision/BroadphaseCollision/btAxisSweep3.h" - "BulletCollision/BroadphaseCollision/btMultiSapBroadphase.h" - "BulletCollision/BroadphaseCollision/btDbvtBroadphase.h" - "LinearMath/btQuaternion.h" - "LinearMath/btTransform.h" - "LinearMath/btDefaultMotionState.h" - "LinearMath/btQuickprof.h" - "LinearMath/btIDebugDraw.h" - "LinearMath/btSerializer.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisiondispatch\btcollisionworld.h - "LinearMath/btVector3.h" - "LinearMath/btTransform.h" - "btCollisionObject.h" - "btCollisionDispatcher.h" - "BulletCollision/BroadphaseCollision/btOverlappingPairCache.h" - "LinearMath/btAlignedObjectArray.h" - -1332208288 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisiondispatch\btcollisionobject.h - - "LinearMath/btTransform.h" - "LinearMath/btMotionState.h" - "LinearMath/btAlignedAllocator.h" - "LinearMath/btAlignedObjectArray.h" - -1296684254 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\linearmath\btmotionstate.h - "btTransform.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisiondispatch\btcollisiondispatcher.h - "BulletCollision/BroadphaseCollision/btDispatcher.h" - "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h" - "BulletCollision/CollisionDispatch/btManifoldResult.h" - "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" - "LinearMath/btAlignedObjectArray.h" - "btCollisionCreateFunc.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\broadphasecollision\btdispatcher.h - "LinearMath/btScalar.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\narrowphasecollision\btpersistentmanifold.h - "LinearMath/btVector3.h" - "LinearMath/btTransform.h" - "btManifoldPoint.h" - "LinearMath/btAlignedAllocator.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\narrowphasecollision\btmanifoldpoint.h - "LinearMath/btVector3.h" - "LinearMath/btTransformUtil.h" - "physics_effects/base_level/solver/pfx_constraint_row.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\linearmath\bttransformutil.h - "btTransform.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisiondispatch\btmanifoldresult.h - "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h" - "BulletCollision/NarrowPhaseCollision/btDiscreteCollisionDetectorInterface.h" - "LinearMath/btTransform.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\narrowphasecollision\btdiscretecollisiondetectorinterface.h - "LinearMath/btTransform.h" - "LinearMath/btVector3.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\broadphasecollision\btbroadphaseproxy.h - "LinearMath/btScalar.h" - "LinearMath/btVector3.h" - "LinearMath/btAlignedAllocator.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisiondispatch\btcollisioncreatefunc.h - "LinearMath/btAlignedObjectArray.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\broadphasecollision\btoverlappingpaircache.h - "btBroadphaseInterface.h" - "btBroadphaseProxy.h" - "btOverlappingPairCallback.h" - "LinearMath/btAlignedObjectArray.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\broadphasecollision\btbroadphaseinterface.h - "btBroadphaseProxy.h" - "LinearMath/btVector3.h" - -1296684254 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\broadphasecollision\btoverlappingpaircallback.h - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisionshapes\btboxshape.h - "btPolyhedralConvexShape.h" - "btCollisionMargin.h" - "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" - "LinearMath/btVector3.h" - "LinearMath/btMinMax.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisionshapes\btpolyhedralconvexshape.h - "LinearMath/btMatrix3x3.h" - "btConvexInternalShape.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisionshapes\btconvexinternalshape.h - "btConvexShape.h" - "LinearMath/btAabbUtil2.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisionshapes\btconvexshape.h - "btCollisionShape.h" - "LinearMath/btVector3.h" - "LinearMath/btTransform.h" - "LinearMath/btMatrix3x3.h" - "btCollisionMargin.h" - "LinearMath/btAlignedAllocator.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisionshapes\btcollisionshape.h - "LinearMath/btTransform.h" - "LinearMath/btVector3.h" - "LinearMath/btMatrix3x3.h" - "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisionshapes\btcollisionmargin.h - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\linearmath\btaabbutil2.h - "btTransform.h" - "btVector3.h" - "btMinMax.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisionshapes\btsphereshape.h - "btConvexInternalShape.h" - "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" - -1296684254 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisionshapes\btcapsuleshape.h - "btConvexInternalShape.h" - "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisionshapes\btcylindershape.h - "btBoxShape.h" - "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" - "LinearMath/btVector3.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisionshapes\btconeshape.h - "btConvexInternalShape.h" - "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisionshapes\btstaticplaneshape.h - "btConcaveShape.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisionshapes\btconcaveshape.h - "btCollisionShape.h" - "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" - "btTriangleCallback.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisionshapes\bttrianglecallback.h - "LinearMath/btVector3.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisionshapes\btconvexhullshape.h - "btPolyhedralConvexShape.h" - "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" - "LinearMath/btAlignedObjectArray.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisionshapes\bttrianglemesh.h - "btTriangleIndexVertexArray.h" - "LinearMath/btVector3.h" - "LinearMath/btAlignedObjectArray.h" - -1296684254 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisionshapes\bttriangleindexvertexarray.h - "btStridingMeshInterface.h" - "LinearMath/btAlignedObjectArray.h" - "LinearMath/btScalar.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisionshapes\btstridingmeshinterface.h - "LinearMath/btVector3.h" - "btTriangleCallback.h" - "btConcaveShape.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisionshapes\btconvextrianglemeshshape.h - "btPolyhedralConvexShape.h" - "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisionshapes\btbvhtrianglemeshshape.h - "btTriangleMeshShape.h" - "btOptimizedBvh.h" - "LinearMath/btAlignedAllocator.h" - "btTriangleInfoMap.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisionshapes\bttrianglemeshshape.h - "btConcaveShape.h" - "btStridingMeshInterface.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisionshapes\btoptimizedbvh.h - "BulletCollision/BroadphaseCollision/btQuantizedBvh.h" - -1326072886 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\broadphasecollision\btquantizedbvh.h - - - "LinearMath/btVector3.h" - "LinearMath/btAlignedAllocator.h" - "LinearMath/btAlignedAllocator.h" - "LinearMath/btAlignedObjectArray.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisionshapes\bttriangleinfomap.h - "LinearMath/btHashMap.h" - "LinearMath/btSerializer.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\linearmath\bthashmap.h - "btAlignedObjectArray.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\linearmath\btserializer.h - "btScalar.h" - "btStackAlloc.h" - "btHashMap.h" - - - -1296684254 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\linearmath\btstackalloc.h - "btScalar.h" - "btAlignedAllocator.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisionshapes\btscaledbvhtrianglemeshshape.h - "BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisionshapes\btcompoundshape.h - "btCollisionShape.h" - "LinearMath/btVector3.h" - "LinearMath/btTransform.h" - "LinearMath/btMatrix3x3.h" - "btCollisionMargin.h" - "LinearMath/btAlignedObjectArray.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisionshapes\bttetrahedronshape.h - "btPolyhedralConvexShape.h" - "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisionshapes\btemptyshape.h - "btConcaveShape.h" - "LinearMath/btVector3.h" - "LinearMath/btTransform.h" - "LinearMath/btMatrix3x3.h" - "btCollisionMargin.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisionshapes\btmultisphereshape.h - "btConvexInternalShape.h" - "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" - "LinearMath/btAlignedObjectArray.h" - "LinearMath/btAabbUtil2.h" - -1296684254 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisionshapes\btuniformscalingshape.h - "btConvexShape.h" - "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisiondispatch\btspherespherecollisionalgorithm.h - "btActivatingCollisionAlgorithm.h" - "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" - "BulletCollision/CollisionDispatch/btCollisionCreateFunc.h" - "btCollisionDispatcher.h" - -1296684254 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisiondispatch\btactivatingcollisionalgorithm.h - "BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\broadphasecollision\btcollisionalgorithm.h - "LinearMath/btScalar.h" - "LinearMath/btAlignedObjectArray.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisiondispatch\btdefaultcollisionconfiguration.h - "btCollisionConfiguration.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\collisiondispatch\btcollisionconfiguration.h - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\broadphasecollision\btsimplebroadphase.h - "btOverlappingPairCache.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\broadphasecollision\btaxissweep3.h - "LinearMath/btVector3.h" - "btOverlappingPairCache.h" - "btBroadphaseInterface.h" - "btBroadphaseProxy.h" - "btOverlappingPairCallback.h" - "btDbvtBroadphase.h" - - -1296684254 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\broadphasecollision\btdbvtbroadphase.h - "BulletCollision/BroadphaseCollision/btDbvt.h" - "BulletCollision/BroadphaseCollision/btOverlappingPairCache.h" - "LinearMath/btQuickprof.h" - -1296684254 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\broadphasecollision\btdbvt.h - "LinearMath/btAlignedObjectArray.h" - "LinearMath/btVector3.h" - "LinearMath/btTransform.h" - "LinearMath/btAabbUtil2.h" - - - - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\linearmath\btquickprof.h - - "btScalar.h" - "btAlignedAllocator.h" - - -1296684254 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletcollision\broadphasecollision\btmultisapbroadphase.h - "btBroadphaseInterface.h" - "LinearMath/btAlignedObjectArray.h" - "btOverlappingPairCache.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\linearmath\btdefaultmotionstate.h - "btMotionState.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\linearmath\btidebugdraw.h - "btVector3.h" - "btTransform.h" - -1296684254 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletdynamics\dynamics\btdiscretedynamicsworld.h - "btDynamicsWorld.h" - "LinearMath/btAlignedObjectArray.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletdynamics\dynamics\btdynamicsworld.h - "BulletCollision/CollisionDispatch/btCollisionWorld.h" - "BulletDynamics/ConstraintSolver/btContactSolverInfo.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletdynamics\constraintsolver\btcontactsolverinfo.h - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletdynamics\dynamics\btsimpledynamicsworld.h - "btDynamicsWorld.h" - -1332208288 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletdynamics\dynamics\btrigidbody.h - "LinearMath/btAlignedObjectArray.h" - "LinearMath/btTransform.h" - "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" - "BulletCollision/CollisionDispatch/btCollisionObject.h" - - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletdynamics\constraintsolver\btpoint2pointconstraint.h - "LinearMath/btVector3.h" - "btJacobianEntry.h" - "btTypedConstraint.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletdynamics\constraintsolver\btjacobianentry.h - "LinearMath/btVector3.h" - "BulletDynamics/Dynamics/btRigidBody.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletdynamics\constraintsolver\bttypedconstraint.h - "LinearMath/btScalar.h" - "btSolverConstraint.h" - -1296684254 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletdynamics\constraintsolver\btsolverconstraint.h - "LinearMath/btVector3.h" - "LinearMath/btMatrix3x3.h" - "btJacobianEntry.h" - "btSolverBody.h" - -1296684254 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletdynamics\constraintsolver\btsolverbody.h - "LinearMath/btVector3.h" - "LinearMath/btMatrix3x3.h" - "BulletDynamics/Dynamics/btRigidBody.h" - "LinearMath/btAlignedAllocator.h" - "LinearMath/btTransformUtil.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletdynamics\constraintsolver\bthingeconstraint.h - "LinearMath/btVector3.h" - "btJacobianEntry.h" - "btTypedConstraint.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletdynamics\constraintsolver\btconetwistconstraint.h - "LinearMath/btVector3.h" - "btJacobianEntry.h" - "btTypedConstraint.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletdynamics\constraintsolver\btgeneric6dofconstraint.h - "LinearMath/btVector3.h" - "btJacobianEntry.h" - "btTypedConstraint.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletdynamics\constraintsolver\btsliderconstraint.h - "LinearMath/btVector3.h" - "btJacobianEntry.h" - "btTypedConstraint.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletdynamics\constraintsolver\btgeneric6dofspringconstraint.h - "LinearMath/btVector3.h" - "btTypedConstraint.h" - "btGeneric6DofConstraint.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletdynamics\constraintsolver\btuniversalconstraint.h - "LinearMath/btVector3.h" - "btTypedConstraint.h" - "btGeneric6DofConstraint.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletdynamics\constraintsolver\bthinge2constraint.h - "LinearMath/btVector3.h" - "btTypedConstraint.h" - "btGeneric6DofSpringConstraint.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletdynamics\constraintsolver\btsequentialimpulseconstraintsolver.h - "btConstraintSolver.h" - "btContactConstraint.h" - "btSolverBody.h" - "btSolverConstraint.h" - "btTypedConstraint.h" - "BulletCollision/NarrowPhaseCollision/btManifoldPoint.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletdynamics\constraintsolver\btconstraintsolver.h - "LinearMath/btScalar.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletdynamics\constraintsolver\btcontactconstraint.h - "LinearMath/btVector3.h" - "btJacobianEntry.h" - "btTypedConstraint.h" - "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletdynamics\vehicle\btraycastvehicle.h - "BulletDynamics/Dynamics/btRigidBody.h" - "BulletDynamics/ConstraintSolver/btTypedConstraint.h" - "btVehicleRaycaster.h" - "LinearMath/btAlignedObjectArray.h" - "btWheelInfo.h" - "BulletDynamics/Dynamics/btActionInterface.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletdynamics\vehicle\btvehicleraycaster.h - "LinearMath/btVector3.h" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletdynamics\vehicle\btwheelinfo.h - "LinearMath/btVector3.h" - "LinearMath/btTransform.h" - -1296684254 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletdynamics\dynamics\btactioninterface.h - "LinearMath/btScalar.h" - "btRigidBody.h" - -1332188472 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\physics\user_pointer.hpp - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\audio\sfx_base.hpp - "audio/sfx_manager.hpp" - "utils/no_copy.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\mesh_tools.hpp - "utils/vec3.hpp" - -1353546430 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\modes\world.hpp - - "modes/world_status.hpp" - "race/highscores.hpp" - "states_screens/race_gui_base.hpp" - "states_screens/state_manager.hpp" - "utils/random_generator.hpp" - -1349047860 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\modes\world_status.hpp - "utils/cpp2011.h" - -1331764676 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\race\highscores.hpp - - - - "race/race_manager.hpp" - - -1351469346 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\race_gui_base.hpp - - - - - - - "utils/vec3.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\utils\random_generator.hpp - - - -1332208288 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\physics\kart_motion_state.hpp - - "LinearMath/btMotionState.h" - -1336427962 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\physics\physics.hpp - - - "btBulletDynamicsCommon.h" - "physics/irr_debug_drawer.hpp" - "physics/stk_dynamics_world.hpp" - "physics/user_pointer.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\physics\irr_debug_drawer.hpp - "btBulletDynamicsCommon.h" - "graphics/irr_driver.hpp" - "utils/vec3.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\physics\stk_dynamics_world.hpp - "btBulletDynamicsCommon.h" - -1325974000 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\physics\triangle_mesh.hpp - - "btBulletDynamicsCommon.h" - "physics/user_pointer.hpp" - "utils/aligned_array.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\bezier_curve.hpp - - "utils/aligned_array.hpp" - "utils/vec3.hpp" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\imeshscenenode.h - "ISceneNode.h" - -1354588748 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\audio\music_information.cpp - "audio/music_information.hpp" - - - "audio/music_dummy.hpp" - "audio/music_ogg.hpp" - "config/user_config.hpp" - "io/file_manager.hpp" - "tracks/track.hpp" - "tracks/track_manager.hpp" - "utils/string_utils.hpp" - -1332208288 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\audio\music_information.hpp - - - - "utils/no_copy.hpp" - "utils/leak_check.hpp" - - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\audio\music_dummy.hpp - - "audio/music.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\audio\music.hpp - - "utils/no_copy.hpp" - -1332208288 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\audio\music_ogg.hpp - - - - - - "audio/music.hpp" - -1267382726 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\ogg\ogg.h - - -1267382726 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\ogg\os_types.h - <_G_config.h> - - - - - - -1331492407 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\ogg\config_types.h - - - - -1267382726 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\vorbis\vorbisfile.h - - "codec.h" - -1267382726 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\vorbis\codec.h - - -1327867730 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\audio\music_manager.cpp - "audio/music_manager.hpp" - - - - - - - "audio/music_ogg.hpp" - "audio/sfx_openal.hpp" - "config/user_config.hpp" - "io/file_manager.hpp" - "utils/string_utils.hpp" - -1339892014 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\audio\music_manager.hpp - - - - "audio/music.hpp" - "audio/music_information.hpp" - "utils/no_copy.hpp" - -1267382722 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\al\alc.h - -1342984842 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\audio\sfx_openal.hpp - - - - "audio/sfx_base.hpp" - "audio/sfx_manager.hpp" - -1355182222 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\audio\music_ogg.cpp - "audio/music_ogg.hpp" - - - - "audio/music_manager.hpp" - "audio/sfx_manager.hpp" - "config/user_config.hpp" - "utils/constants.hpp" - -1347950782 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\audio\sfx_buffer.cpp - "audio/sfx_buffer.hpp" - "audio/sfx_manager.hpp" - "io/file_manager.hpp" - "utils/constants.hpp" - - - - - - - -1342987538 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\audio\sfx_buffer.hpp - - - "utils/no_copy.hpp" - "utils/vec3.hpp" - - -1353380242 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\audio\sfx_manager.cpp - "audio/dummy_sfx.hpp" - "audio/music_manager.hpp" - "audio/sfx_buffer.hpp" - - - - - - - - - - - - "audio/sfx_openal.hpp" - "config/user_config.hpp" - "io/file_manager.hpp" - "race/race_manager.hpp" - "utils/constants.hpp" - - -1331051538 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\audio\dummy_sfx.hpp - "audio/sfx_base.hpp" - -1342987538 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\audio\sfx_openal.cpp - "audio/sfx_openal.hpp" - "audio/sfx_buffer.hpp" - "race/race_manager.hpp" - - - - - - "config/user_config.hpp" - "io/file_manager.hpp" - -1350860794 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\challenges\challenge.cpp - "challenges/challenge.hpp" - - "challenges/challenge_data.hpp" - "io/xml_node.hpp" - "io/xml_writer.hpp" - "karts/kart_properties_manager.hpp" - "karts/kart_properties.hpp" - "race/grand_prix_manager.hpp" - "race/race_manager.hpp" - "tracks/track.hpp" - "tracks/track_manager.hpp" - "utils/translation.hpp" - "utils/string_utils.hpp" - -1350860794 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\challenges\challenge.hpp - - - - - "race/race_manager.hpp" - "utils/no_copy.hpp" - "utils/translation.hpp" - -1353923982 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\challenges\challenge_data.hpp - - - - - "challenges/challenge.hpp" - "race/race_manager.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\io\xml_writer.hpp - - - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\race\grand_prix_manager.hpp - - - "race/grand_prix_data.hpp" - -1353923982 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\challenges\challenge_data.cpp - "challenges/challenge_data.hpp" - - - "challenges/unlock_manager.hpp" - "karts/abstract_kart.hpp" - "karts/kart_properties.hpp" - "karts/kart_properties_manager.hpp" - "modes/linear_world.hpp" - "race/grand_prix_data.hpp" - "race/grand_prix_manager.hpp" - "race/race_manager.hpp" - "tracks/track.hpp" - "tracks/track_manager.hpp" - -1353976898 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\challenges\unlock_manager.hpp - - "config/user_config.hpp" - "challenges/challenge_data.hpp" - "challenges/game_slot.hpp" - "utils/no_copy.hpp" - "utils/ptr_vector.hpp" - - -1352721910 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\challenges\game_slot.hpp - - - - - "race/race_manager.hpp" - -1352942436 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\abstract_kart.hpp - "items/powerup_manager.hpp" - "karts/moveable.hpp" - "karts/controller/kart_control.hpp" - "race/race_manager.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\items\powerup_manager.hpp - - - "btBulletDynamicsCommon.h" - "utils/no_copy.hpp" - -1345419696 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\moveable.hpp - "btBulletDynamicsCommon.h" - "physics/kart_motion_state.hpp" - "physics/user_pointer.hpp" - "utils/no_copy.hpp" - "utils/vec3.hpp" - -1348037816 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\controller\kart_control.hpp - "network/message.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\network\message.hpp - - - - - "btBulletDynamicsCommon.h" - "enet/enet.h" - "utils/vec3.hpp" - -1310445298 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\enet\include\enet\enet.h - - "enet/win32.h" - "enet/unix.h" - "enet/types.h" - "enet/protocol.h" - "enet/list.h" - "enet/callbacks.h" - -1300395742 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\enet\include\enet\win32.h - - - -1300395742 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\enet\include\enet\unix.h - - - - - - -1235868408 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\enet\include\enet\types.h - -1310445298 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\enet\include\enet\protocol.h - "enet/types.h" - -1300395742 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\enet\include\enet\list.h - - -1300395742 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\enet\include\enet\callbacks.h - - -1350253388 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\modes\linear_world.hpp - - "modes/world_with_rank.hpp" - "tracks/track_sector.hpp" - "utils/aligned_array.hpp" - -1332188472 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\modes\world_with_rank.hpp - - "modes/world.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\track_sector.hpp - "utils/vec3.hpp" - -1352754310 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\challenges\game_slot.cpp - "challenges/game_slot.hpp" - "challenges/challenge.hpp" - "challenges/challenge_data.hpp" - "challenges/unlock_manager.hpp" - "io/xml_writer.hpp" - -1354331448 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\challenges\unlock_manager.cpp - "challenges/unlock_manager.hpp" - - - - - - "audio/sfx_base.hpp" - "audio/sfx_manager.hpp" - "config/player.hpp" - "config/user_config.hpp" - "challenges/challenge_data.hpp" - "io/file_manager.hpp" - "io/xml_writer.hpp" - "karts/kart_properties_manager.hpp" - "race/race_manager.hpp" - "tracks/track_manager.hpp" - "utils/string_utils.hpp" - -1323546480 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\config\device_config.cpp - - "config/device_config.hpp" - - -1323546480 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\config\device_config.hpp - "input/binding.hpp" - "input/input.hpp" - "utils/no_copy.hpp" - - - - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\input\binding.hpp - - - "input/input.hpp" - "utils/no_copy.hpp" - - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\skeymap.h - "Keycodes.h" - -1335394430 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\config\player.cpp - - "config/player.hpp" - "utils/string_utils.hpp" - - -1353277350 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\config\stk_config.cpp - "config/stk_config.hpp" - - - - "audio/music_information.hpp" - "io/file_manager.hpp" - "io/xml_node.hpp" - "items/item.hpp" - "karts/kart_properties.hpp" - -1323197016 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\config\user_config.cpp - - - - - - "io/xml_writer.hpp" - "utils/ptr_vector.hpp" - "config/user_config.hpp" - "config/player.hpp" - "config/stk_config.hpp" - "guiengine/engine.hpp" - "io/file_manager.hpp" - "io/xml_node.hpp" - "race/race_manager.hpp" - "utils/ptr_vector.hpp" - "utils/string_utils.hpp" - "utils/translation.hpp" - -1295574878 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\cbatchingmesh.cpp - "graphics/CBatchingMesh.hpp" - -1295574878 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\cbatchingmesh.hpp - "IMesh.h" - "SMeshBuffer.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\smeshbuffer.h - "CMeshBuffer.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\cmeshbuffer.h - "irrArray.h" - "IMeshBuffer.h" - -1353884374 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\camera.cpp - "graphics/camera.hpp" - - "audio/music_manager.hpp" - "config/user_config.hpp" - "graphics/irr_driver.hpp" - "io/xml_node.hpp" - "karts/abstract_kart.hpp" - "karts/explosion_animation.hpp" - "karts/kart_properties.hpp" - "karts/skidding.hpp" - "modes/world.hpp" - "race/race_manager.hpp" - "tracks/track.hpp" - "utils/aligned_array.hpp" - "utils/constants.hpp" - - - -1352025364 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\explosion_animation.hpp - "karts/abstract_kart_animation.hpp" - "utils/vec3.hpp" - -1346907160 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\abstract_kart_animation.hpp - "utils/no_copy.hpp" - "utils/vec3.hpp" - - -1350510670 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\skidding.hpp - "karts/skidding_properties.hpp" - "karts/controller/kart_control.hpp" - "utils/leak_check.hpp" - "utils/no_copy.hpp" - - -1351145040 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\skidding_properties.hpp - "utils/leak_check.hpp" - "utils/no_copy.hpp" - - - -1352287398 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\explosion.cpp - "graphics/explosion.hpp" - "audio/sfx_base.hpp" - "audio/sfx_manager.hpp" - "graphics/irr_driver.hpp" - "graphics/material.hpp" - "graphics/material_manager.hpp" - "items/projectile_manager.hpp" - "race/race_manager.hpp" - "utils/vec3.hpp" - - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\explosion.hpp - "graphics/hit_sfx.hpp" - "utils/no_copy.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\hit_sfx.hpp - "graphics/hit_effect.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\hit_effect.hpp - "utils/no_copy.hpp" - -1332188472 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\items\projectile_manager.hpp - - "audio/sfx_manager.hpp" - "items/powerup_manager.hpp" - "utils/no_copy.hpp" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iparticlesystemscenenode.h - "ISceneNode.h" - "IParticleAnimatedMeshSceneNodeEmitter.h" - "IParticleBoxEmitter.h" - "IParticleCylinderEmitter.h" - "IParticleMeshEmitter.h" - "IParticleRingEmitter.h" - "IParticleSphereEmitter.h" - "IParticleAttractionAffector.h" - "IParticleFadeOutAffector.h" - "IParticleGravityAffector.h" - "IParticleRotationAffector.h" - "dimension2d.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iparticleanimatedmeshscenenodeemitter.h - "IParticleEmitter.h" - "IAnimatedMeshSceneNode.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iparticleemitter.h - "IAttributeExchangingObject.h" - "SParticle.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\sparticle.h - "vector3d.h" - "dimension2d.h" - "SColor.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iparticleboxemitter.h - "IParticleEmitter.h" - "aabbox3d.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iparticlecylinderemitter.h - "IParticleEmitter.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iparticlemeshemitter.h - "IParticleEmitter.h" - "IMesh.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iparticleringemitter.h - "IParticleEmitter.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iparticlesphereemitter.h - "IParticleEmitter.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iparticleattractionaffector.h - "IParticleAffector.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iparticleaffector.h - "IAttributeExchangingObject.h" - "SParticle.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iparticlefadeoutaffector.h - "IParticleAffector.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iparticlegravityaffector.h - "IParticleAffector.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iparticlerotationaffector.h - "IParticleAffector.h" - -1310776618 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\hardware_skinning.cpp - "graphics/irr_driver.hpp" - "graphics/hardware_skinning.hpp" - - - - - - - -1310611524 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\hardware_skinning.hpp - - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\igpuprogrammingservices.h - "EShaderTypes.h" - "EMaterialTypes.h" - "EPrimitiveTypes.h" - "path.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\eshadertypes.h - "irrTypes.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\imaterialrendererservices.h - "SMaterial.h" - "S3DVertex.h" - -1323197016 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\hit_sfx.cpp - "graphics/hit_sfx.hpp" - "audio/sfx_base.hpp" - "audio/sfx_manager.hpp" - "race/race_manager.hpp" - -1353456786 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\irr_driver.cpp - "graphics/irr_driver.hpp" - "config/user_config.hpp" - "graphics/camera.hpp" - "graphics/hardware_skinning.hpp" - "graphics/material_manager.hpp" - "graphics/particle_kind_manager.hpp" - "graphics/per_camera_node.hpp" - "graphics/referee.hpp" - "guiengine/engine.hpp" - "guiengine/modaldialog.hpp" - "guiengine/scalable_font.hpp" - "guiengine/screen.hpp" - "io/file_manager.hpp" - "items/item_manager.hpp" - "items/powerup_manager.hpp" - "items/attachment_manager.hpp" - "items/projectile_manager.hpp" - "karts/abstract_kart.hpp" - "karts/kart_properties_manager.hpp" - "main_loop.hpp" - "modes/profile_world.hpp" - "modes/world.hpp" - "physics/physics.hpp" - "states_screens/dialogs/confirm_resolution_dialog.hpp" - "states_screens/state_manager.hpp" - "utils/constants.hpp" - "utils/profiler.hpp" - - - - - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\particle_kind_manager.hpp - "utils/no_copy.hpp" - "graphics/particle_kind.hpp" - - - -1330321938 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\particle_kind.hpp - "utils/no_copy.hpp" - - - -1306092592 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\per_camera_node.hpp - - - - - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\idummytransformationscenenode.h - "ISceneNode.h" - -1332188472 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\referee.hpp - "irrlicht.h" - "utils/vec3.hpp" - -1351820084 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\irrlicht.h - "IrrCompileConfig.h" - "aabbox3d.h" - "CDynamicMeshBuffer.h" - "CIndexBuffer.h" - "CMeshBuffer.h" - "coreutil.h" - "CVertexBuffer.h" - "dimension2d.h" - "ECullingTypes.h" - "EDebugSceneTypes.h" - "EDriverFeatures.h" - "EDriverTypes.h" - "EGUIAlignment.h" - "EGUIElementTypes.h" - "EHardwareBufferFlags.h" - "EMaterialFlags.h" - "EMaterialTypes.h" - "EMeshWriterEnums.h" - "EMessageBoxFlags.h" - "ESceneNodeAnimatorTypes.h" - "ESceneNodeTypes.h" - "ETerrainElements.h" - "fast_atof.h" - "heapsort.h" - "IAnimatedMesh.h" - "IAnimatedMeshMD2.h" - "IAnimatedMeshMD3.h" - "IAnimatedMeshSceneNode.h" - "IAttributeExchangingObject.h" - "IAttributes.h" - "IBillboardSceneNode.h" - "IBillboardTextSceneNode.h" - "IBoneSceneNode.h" - "ICameraSceneNode.h" - "ICursorControl.h" - "IDummyTransformationSceneNode.h" - "IDynamicMeshBuffer.h" - "IEventReceiver.h" - "IFileList.h" - "IFileSystem.h" - "IGeometryCreator.h" - "IGPUProgrammingServices.h" - "IGUIButton.h" - "IGUICheckBox.h" - "IGUIColorSelectDialog.h" - "IGUIComboBox.h" - "IGUIContextMenu.h" - "IGUIEditBox.h" - "IGUIElement.h" - "IGUIElementFactory.h" - "IGUIEnvironment.h" - "IGUIFileOpenDialog.h" - "IGUIFont.h" - "IGUIFontBitmap.h" - "IGUIImage.h" - "IGUIInOutFader.h" - "IGUIListBox.h" - "IGUIMeshViewer.h" - "IGUIScrollBar.h" - "IGUISkin.h" - "IGUISpinBox.h" - "IGUISpriteBank.h" - "IGUIStaticText.h" - "IGUITabControl.h" - "IGUITable.h" - "IGUIToolbar.h" - "IGUIWindow.h" - "IGUITreeView.h" - "IImage.h" - "IImageLoader.h" - "IImageWriter.h" - "IIndexBuffer.h" - "ILightSceneNode.h" - "ILogger.h" - "IMaterialRenderer.h" - "IMaterialRendererServices.h" - "IMesh.h" - "IMeshBuffer.h" - "IMeshCache.h" - "IMeshLoader.h" - "IMeshManipulator.h" - "IMeshSceneNode.h" - "IMeshWriter.h" - "IColladaMeshWriter.h" - "IMetaTriangleSelector.h" - "IOSOperator.h" - "IParticleSystemSceneNode.h" - "IQ3LevelMesh.h" - "IQ3Shader.h" - "IReadFile.h" - "IReferenceCounted.h" - "irrArray.h" - "IRandomizer.h" - "IrrlichtDevice.h" - "irrList.h" - "irrMap.h" - "irrMath.h" - "irrString.h" - "irrTypes.h" - "path.h" - "irrXML.h" - "ISceneCollisionManager.h" - "ISceneLoader.h" - "ISceneManager.h" - "ISceneNode.h" - "ISceneNodeAnimator.h" - "ISceneNodeAnimatorCameraFPS.h" - "ISceneNodeAnimatorCameraMaya.h" - "ISceneNodeAnimatorCollisionResponse.h" - "ISceneNodeAnimatorFactory.h" - "ISceneNodeFactory.h" - "ISceneUserDataSerializer.h" - "IShaderConstantSetCallBack.h" - "IShadowVolumeSceneNode.h" - "ISkinnedMesh.h" - "ITerrainSceneNode.h" - "ITextSceneNode.h" - "ITexture.h" - "ITimer.h" - "ITriangleSelector.h" - "IVertexBuffer.h" - "IVideoDriver.h" - "IVideoModeList.h" - "IVolumeLightSceneNode.h" - "IWriteFile.h" - "IXMLReader.h" - "IXMLWriter.h" - "ILightManager.h" - "Keycodes.h" - "line2d.h" - "line3d.h" - "matrix4.h" - "plane3d.h" - "position2d.h" - "quaternion.h" - "rect.h" - "S3DVertex.h" - "SAnimatedMesh.h" - "SceneParameters.h" - "SColor.h" - "SExposedVideoData.h" - "SIrrCreationParameters.h" - "SKeyMap.h" - "SLight.h" - "SMaterial.h" - "SMesh.h" - "SMeshBuffer.h" - "SMeshBufferLightMap.h" - "SMeshBufferTangents.h" - "SParticle.h" - "SSharedMeshBuffer.h" - "SSkinMeshBuffer.h" - "SVertexIndex.h" - "SViewFrustum.h" - "triangle3d.h" - "vector2d.h" - "vector3d.h" - "SIrrCreationParameters.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\cdynamicmeshbuffer.h - "IDynamicMeshBuffer.h" - "CVertexBuffer.h" - "CIndexBuffer.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\idynamicmeshbuffer.h - "IMeshBuffer.h" - "IVertexBuffer.h" - "IIndexBuffer.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\ivertexbuffer.h - "IReferenceCounted.h" - "irrArray.h" - "S3DVertex.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iindexbuffer.h - "IReferenceCounted.h" - "irrArray.h" - "SVertexIndex.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\cvertexbuffer.h - "IVertexBuffer.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\cindexbuffer.h - "IIndexBuffer.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\ibillboardtextscenenode.h - "IBillboardSceneNode.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iguibutton.h - "IGUIElement.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iguicheckbox.h - "IGUIElement.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iguicolorselectdialog.h - "IGUIElement.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iguicombobox.h - "IGUIElement.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iguicontextmenu.h - "IGUIElement.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iguieditbox.h - "IGUIElement.h" - "SColor.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iguielementfactory.h - "IReferenceCounted.h" - "EGUIElementTypes.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iguienvironment.h - "IReferenceCounted.h" - "IGUISkin.h" - "rect.h" - "EMessageBoxFlags.h" - "IEventReceiver.h" - "IXMLReader.h" - "path.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iguifileopendialog.h - "IGUIElement.h" - "path.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iguifont.h - "IReferenceCounted.h" - "SColor.h" - "rect.h" - "irrString.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iguifontbitmap.h - "IGUIFont.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iguiimage.h - "IGUIElement.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iguiinoutfader.h - "IGUIElement.h" - "SColor.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iguilistbox.h - "IGUIElement.h" - "SColor.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iguimeshviewer.h - "IGUIElement.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iguiscrollbar.h - "IGUIElement.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iguispinbox.h - "IGUIElement.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iguispritebank.h - "IReferenceCounted.h" - "irrArray.h" - "SColor.h" - "rect.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iguitabcontrol.h - "IGUIElement.h" - "SColor.h" - "IGUISkin.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iguitable.h - "IGUIElement.h" - "irrTypes.h" - "SColor.h" - "IGUISkin.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iguitoolbar.h - "IGUIElement.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iguitreeview.h - "IGUIElement.h" - "IGUIImageList.h" - "irrTypes.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iguiimagelist.h - "IGUIElement.h" - "rect.h" - "irrTypes.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iimageloader.h - "IReferenceCounted.h" - "IImage.h" - "path.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iimagewriter.h - "IReferenceCounted.h" - "irrString.h" - "coreutil.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\ilightscenenode.h - "ISceneNode.h" - "SLight.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\slight.h - "SColor.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\imaterialrenderer.h - "IReferenceCounted.h" - "SMaterial.h" - "S3DVertex.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\imeshcache.h - "IReferenceCounted.h" - "path.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\imeshloader.h - "IReferenceCounted.h" - "path.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\imeshmanipulator.h - "IReferenceCounted.h" - "vector3d.h" - "aabbox3d.h" - "matrix4.h" - "IAnimatedMesh.h" - "IMeshBuffer.h" - "SVertexManipulator.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\svertexmanipulator.h - "S3DVertex.h" - "SColor.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\imeshwriter.h - "IReferenceCounted.h" - "EMeshWriterEnums.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\icolladameshwriter.h - "IMeshWriter.h" - "ISceneNode.h" - "IAnimatedMesh.h" - "SMaterial.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\imetatriangleselector.h - "ITriangleSelector.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iq3levelmesh.h - "IAnimatedMesh.h" - "IQ3Shader.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\irandomizer.h - "IReferenceCounted.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\irrmap.h - "irrTypes.h" - "irrMath.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iscenecollisionmanager.h - "IReferenceCounted.h" - "vector3d.h" - "triangle3d.h" - "position2d.h" - "line3d.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\isceneloader.h - "IReferenceCounted.h" - "path.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iscenenodeanimatorcamerafps.h - "ISceneNodeAnimator.h" - "IEventReceiver.h" - "irrArray.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iscenenodeanimatorcameramaya.h - "ISceneNodeAnimator.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iscenenodeanimatorcollisionresponse.h - "ISceneNode.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iscenenodeanimatorfactory.h - "IReferenceCounted.h" - "ESceneNodeAnimatorTypes.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iscenenodefactory.h - "IReferenceCounted.h" - "ESceneNodeTypes.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\isceneuserdataserializer.h - "IReferenceCounted.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\ishadowvolumescenenode.h - "ISceneNode.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\iterrainscenenode.h - "ETerrainElements.h" - "ISceneNode.h" - "IDynamicMeshBuffer.h" - "irrArray.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\itextscenenode.h - "ISceneNode.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\ivolumelightscenenode.h - "ISceneNode.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\ixmlwriter.h - "IReferenceCounted.h" - "irrArray.h" - "irrString.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\ilightmanager.h - "IReferenceCounted.h" - "irrArray.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\sanimatedmesh.h - "IAnimatedMesh.h" - "IMesh.h" - "aabbox3d.h" - "irrArray.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\sirrcreationparameters.h - "EDriverTypes.h" - "EDeviceTypes.h" - "dimension2d.h" - "ILogger.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\smesh.h - "IMesh.h" - "IMeshBuffer.h" - "aabbox3d.h" - "irrArray.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\smeshbufferlightmap.h - "CMeshBuffer.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\smeshbuffertangents.h - "CMeshBuffer.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\ssharedmeshbuffer.h - "irrArray.h" - "IMeshBuffer.h" - -1351735202 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\irrlicht\include\sviewfrustum.h - "plane3d.h" - "vector3d.h" - "line3d.h" - "aabbox3d.h" - "matrix4.h" - "IVideoDriver.h" - -1327883274 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\scalable_font.hpp - "IrrCompileConfig.h" - "IGUIFontBitmap.h" - "irrString.h" - "irrMap.h" - "IXMLReader.h" - "IReadFile.h" - "irrArray.h" - - "utils/leak_check.hpp" - -1345154562 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\items\item_manager.hpp - - - - - "items/item.hpp" - "utils/no_copy.hpp" - -1326693592 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\items\attachment_manager.hpp - "graphics/material.hpp" - "items/attachment.hpp" - "utils/no_copy.hpp" - -1346723668 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\items\attachment.hpp - "config/stk_config.hpp" - "items/attachment_plugin.hpp" - "utils/no_copy.hpp" - "utils/random_generator.hpp" - - -1332188472 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\items\attachment_plugin.hpp - "vector3d.h" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\main_loop.hpp - -1342325340 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\modes\profile_world.hpp - "modes/standard_race.hpp" - -1336954800 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\modes\standard_race.hpp - "modes/linear_world.hpp" - -1283994122 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\dialogs\confirm_resolution_dialog.hpp - "config/player.hpp" - "guiengine/modaldialog.hpp" - -1310294022 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\utils\profiler.hpp - - - - - - -1353882294 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\lod_node.cpp - "graphics/irr_driver.hpp" - "graphics/lod_node.hpp" - "graphics/hardware_skinning.hpp" - "graphics/material_manager.hpp" - "graphics/material.hpp" - "config/user_config.hpp" - - - - - -1343605576 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\material.cpp - "graphics/material.hpp" - - - "audio/sfx_base.hpp" - "audio/sfx_buffer.hpp" - "config/user_config.hpp" - "config/stk_config.hpp" - "guiengine/engine.hpp" - "graphics/irr_driver.hpp" - "graphics/particle_kind_manager.hpp" - "io/file_manager.hpp" - "io/xml_node.hpp" - "utils/string_utils.hpp" - "modes/world.hpp" - "tracks/track.hpp" - - - - - -1352873192 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\material_manager.cpp - "graphics/material_manager.hpp" - - - "config/user_config.hpp" - "graphics/material.hpp" - "io/file_manager.hpp" - "io/xml_node.hpp" - "modes/world.hpp" - "tracks/track.hpp" - "utils/string_utils.hpp" - - - - -1323197016 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\mesh_tools.cpp - "graphics/mesh_tools.hpp" - - - -1323197016 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\moving_texture.cpp - "graphics/moving_texture.hpp" - "io/xml_node.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\moving_texture.hpp - "utils/no_copy.hpp" - - - -1342836352 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\particle_emitter.cpp - "graphics/particle_emitter.hpp" - "graphics/material.hpp" - "graphics/material_manager.hpp" - "graphics/particle_kind.hpp" - "graphics/irr_driver.hpp" - "io/file_manager.hpp" - "tracks/track.hpp" - "utils/constants.hpp" - - - - - - - -1342836352 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\particle_emitter.hpp - "utils/leak_check.hpp" - "utils/no_copy.hpp" - "utils/vec3.hpp" - - -1323197016 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\particle_kind.cpp - "graphics/particle_kind.hpp" - "graphics/material.hpp" - "graphics/material_manager.hpp" - "graphics/irr_driver.hpp" - "io/file_manager.hpp" - "io/xml_node.hpp" - "utils/constants.hpp" - - -1332188472 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\particle_kind_manager.cpp - "graphics/particle_kind_manager.hpp" - "io/file_manager.hpp" - "race/race_manager.hpp" - "tracks/track.hpp" - "tracks/track_manager.hpp" - - -1306092592 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\per_camera_node.cpp - "graphics/irr_driver.hpp" - "graphics/per_camera_node.hpp" - - - - -1343434722 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\post_processing.cpp - - - "post_processing.hpp" - "irr_driver.hpp" - "config/user_config.hpp" - "io/file_manager.hpp" - "race/race_manager.hpp" - -1355119936 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\rain.cpp - "audio/sfx_base.hpp" - "audio/sfx_manager.hpp" - "graphics/irr_driver.hpp" - "graphics/material_manager.hpp" - "graphics/material.hpp" - "graphics/per_camera_node.hpp" - "graphics/rain.hpp" - "modes/world.hpp" - "states_screens/race_gui.hpp" - "utils/constants.hpp" - "utils/random_generator.hpp" - - - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\rain.hpp - - -1351466360 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\race_gui.hpp - - - - "config/player.hpp" - "states_screens/race_gui_base.hpp" - -1332188472 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\referee.cpp - "graphics/referee.hpp" - "graphics/irr_driver.hpp" - "graphics/mesh_tools.hpp" - "karts/abstract_kart.hpp" - "io/file_manager.hpp" - "io/xml_node.hpp" - "utils/constants.hpp" - "utils/string_utils.hpp" - -1323197016 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\shadow.cpp - "graphics/shadow.hpp" - "graphics/irr_driver.hpp" - - - - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\shadow.hpp - "utils/no_copy.hpp" - - -1341527878 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\show_curve.cpp - "graphics/show_curve.hpp" - "graphics/irr_driver.hpp" - "utils/vec3.hpp" - - - -1341527878 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\show_curve.hpp - "utils/leak_check.hpp" - "utils/no_copy.hpp" - - -1353762812 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\skid_marks.cpp - "graphics/skid_marks.hpp" - "config/stk_config.hpp" - "graphics/irr_driver.hpp" - "karts/controller/controller.hpp" - "karts/abstract_kart.hpp" - "karts/skidding.hpp" - "physics/btKart.hpp" - - - -1332188472 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\skid_marks.hpp - - - - "utils/no_copy.hpp" - "utils/vec3.hpp" - -1351598724 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\controller\controller.hpp - - "input/input.hpp" - "states_screens/state_manager.hpp" - -1332188472 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\physics\btkart.hpp - "BulletDynamics/Dynamics/btRigidBody.h" - "BulletDynamics/ConstraintSolver/btTypedConstraint.h" - "physics/btKartRaycast.hpp" - "LinearMath/btAlignedObjectArray.h" - "BulletDynamics/Vehicle/btWheelInfo.h" - "BulletDynamics/Dynamics/btActionInterface.h" - -1336604272 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\physics\btkartraycast.hpp - "BulletDynamics/Dynamics/btRigidBody.h" - "BulletDynamics/ConstraintSolver/btTypedConstraint.h" - "BulletDynamics/Vehicle/btVehicleRaycaster.h" - "LinearMath/btAlignedObjectArray.h" - "BulletDynamics/Vehicle/btWheelInfo.h" - "BulletDynamics/Dynamics/btActionInterface.h" - -1352267866 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\slip_stream.cpp - "graphics/slip_stream.hpp" - "graphics/material.hpp" - "graphics/material_manager.hpp" - "graphics/irr_driver.hpp" - "io/file_manager.hpp" - "karts/controller/controller.hpp" - "karts/abstract_kart.hpp" - "karts/kart_properties.hpp" - "karts/max_speed.hpp" - "modes/world.hpp" - "tracks/quad.hpp" - "utils/constants.hpp" - - - - -1343605576 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\slip_stream.hpp - - "graphics/moving_texture.hpp" - "utils/no_copy.hpp" - -1343605576 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\max_speed.hpp - -1326238814 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\stars.cpp - "graphics/stars.hpp" - - "graphics/irr_driver.hpp" - "graphics/material.hpp" - "graphics/material_manager.hpp" - "utils/constants.hpp" - - - -1307194176 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\graphics\stars.hpp - "utils/no_copy.hpp" - - - -1317187162 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\cguispritebank.cpp - "guiengine/CGUISpriteBank.h" - "IGUIEnvironment.h" - "IVideoDriver.h" - "ITexture.h" - - -1316715868 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\cguispritebank.h - "IrrCompileConfig.h" - - "IGUISpriteBank.h" - "utils/leak_check.hpp" - -1328470338 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\abstract_state_manager.cpp - "guiengine/abstract_state_manager.hpp" - - - "guiengine/engine.hpp" - "guiengine/modaldialog.hpp" - "guiengine/screen.hpp" - "input/device_manager.hpp" - -1354838506 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\input\device_manager.hpp - "input/input_device.hpp" - "config/device_config.hpp" - "utils/no_copy.hpp" - "utils/ptr_vector.hpp" - - -1317787920 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\input\input_device.hpp - - "config/device_config.hpp" - "input/input.hpp" - "input/input_manager.hpp" - "states_screens/state_manager.hpp" - "utils/no_copy.hpp" - -1318723258 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\abstract_top_level_container.cpp - "graphics/irr_driver.hpp" - "guiengine/abstract_top_level_container.hpp" - "guiengine/engine.hpp" - "guiengine/scalable_font.hpp" - "guiengine/widget.hpp" - "io/file_manager.hpp" - "utils/ptr_vector.hpp" - - - -1341546818 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\engine.cpp - "guiengine/engine.hpp" - "io/file_manager.hpp" - "graphics/irr_driver.hpp" - "input/input_manager.hpp" - "guiengine/event_handler.hpp" - "guiengine/modaldialog.hpp" - "guiengine/scalable_font.hpp" - "guiengine/screen.hpp" - "guiengine/skin.hpp" - "guiengine/widget.hpp" - "modes/demo_world.hpp" - "modes/world.hpp" - "states_screens/race_gui_base.hpp" - - - - -1336954800 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\modes\demo_world.hpp - "modes/profile_world.hpp" - -1348958790 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\event_handler.cpp - "guiengine/event_handler.hpp" - - - - "guiengine/abstract_state_manager.hpp" - "guiengine/engine.hpp" - "guiengine/modaldialog.hpp" - "guiengine/screen.hpp" - "guiengine/widget.hpp" - "guiengine/widgets/list_widget.hpp" - "guiengine/widgets/ribbon_widget.hpp" - "input/input_manager.hpp" - "modes/demo_world.hpp" - "modes/world.hpp" - "states_screens/state_manager.hpp" - "utils/profiler.hpp" - -1334782174 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\layout_manager.cpp - "guiengine/layout_manager.hpp" - - - - "graphics/irr_driver.hpp" - "guiengine/abstract_top_level_container.hpp" - "guiengine/engine.hpp" - "guiengine/scalable_font.hpp" - "guiengine/widget.hpp" - "io/file_manager.hpp" - "utils/ptr_vector.hpp" - "utils/string_utils.hpp" - -1306712846 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\layout_manager.hpp - - - "utils/ptr_vector.hpp" - -1318723648 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\modaldialog.cpp - "graphics/irr_driver.hpp" - "guiengine/engine.hpp" - "guiengine/layout_manager.hpp" - "guiengine/modaldialog.hpp" - "guiengine/screen.hpp" - "guiengine/widget.hpp" - "input/input_manager.hpp" - "io/file_manager.hpp" - - -1334789996 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\scalable_font.cpp - "guiengine/scalable_font.hpp" - - - - - - "guiengine/engine.hpp" - "io/file_manager.hpp" - "utils/translation.hpp" - -1343337856 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\screen.cpp - "guiengine/screen.hpp" - "io/file_manager.hpp" - "guiengine/engine.hpp" - "guiengine/layout_manager.hpp" - "guiengine/modaldialog.hpp" - "guiengine/widget.hpp" - "modes/world.hpp" - "states_screens/state_manager.hpp" - - - -1343337856 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\screen_loader.cpp - "guiengine/screen.hpp" - "guiengine/engine.hpp" - "guiengine/widgets.hpp" - "utils/translation.hpp" - - - - -1352940972 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\skin.cpp - "guiengine/skin.hpp" - - - - "config/user_config.hpp" - "graphics/irr_driver.hpp" - "guiengine/engine.hpp" - "guiengine/modaldialog.hpp" - "guiengine/scalable_font.hpp" - "guiengine/screen.hpp" - "guiengine/widgets.hpp" - "io/file_manager.hpp" - "states_screens/state_manager.hpp" - -1323303924 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\widget.cpp - "guiengine/widget.hpp" - - - - "graphics/irr_driver.hpp" - "guiengine/engine.hpp" - "guiengine/scalable_font.hpp" - "guiengine/screen.hpp" - "io/file_manager.hpp" - "utils/string_utils.hpp" - "utils/translation.hpp" - -1321748148 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\widgets\cguieditbox.cpp - "CGUIEditBox.h" - "IGUISkin.h" - "IGUIEnvironment.h" - "IGUIFont.h" - "IVideoDriver.h" - "rect.h" - "Keycodes.h" - "graphics/irr_driver.hpp" - "utils/translation.hpp" - "utils/time.hpp" - -1321748148 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\widgets\cguieditbox.h - "IrrCompileConfig.h" - "IGUIEditBox.h" - "irrArray.h" - "IOSOperator.h" - "utils/leak_check.hpp" - "utils/time.hpp" - -1323303924 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\widgets\bubble_widget.cpp - "guiengine/engine.hpp" - "guiengine/widgets/bubble_widget.hpp" - "utils/translation.hpp" - - - - -1306092592 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\widgets\button_widget.cpp - "guiengine/engine.hpp" - "guiengine/widgets/button_widget.hpp" - - - - -1323303924 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\widgets\check_box_widget.cpp - "guiengine/engine.hpp" - "guiengine/widgets/check_box_widget.hpp" - - - - -1318981168 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\widgets\dynamic_ribbon_widget.cpp - "graphics/irr_driver.hpp" - "guiengine/engine.hpp" - "guiengine/widgets/dynamic_ribbon_widget.hpp" - "io/file_manager.hpp" - "states_screens/state_manager.hpp" - - - - -1323734284 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\widgets\icon_button_widget.cpp - "graphics/irr_driver.hpp" - "guiengine/engine.hpp" - "guiengine/scalable_font.hpp" - "guiengine/widgets/icon_button_widget.hpp" - "io/file_manager.hpp" - "utils/translation.hpp" - - - - - - -1306092592 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\widgets\label_widget.cpp - "guiengine/widgets/label_widget.hpp" - "guiengine/engine.hpp" - "guiengine/scalable_font.hpp" - "guiengine/skin.hpp" - "utils/translation.hpp" - - - - - - -1323303924 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\widgets\list_widget.cpp - "graphics/irr_driver.hpp" - "guiengine/CGUISpriteBank.h" - "guiengine/engine.hpp" - "guiengine/widgets/list_widget.hpp" - "io/file_manager.hpp" - - - - - -1353289332 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\widgets\model_view_widget.cpp - "graphics/irr_driver.hpp" - "guiengine/engine.hpp" - "guiengine/widgets/model_view_widget.hpp" - -1306092592 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\widgets\progress_bar_widget.cpp - "guiengine/engine.hpp" - "guiengine/widgets/progress_bar_widget.hpp" - "utils/string_utils.hpp" - - - - - -1341546818 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\widgets\ribbon_widget.cpp - "guiengine/widgets/ribbon_widget.hpp" - - "graphics/irr_driver.hpp" - "guiengine/engine.hpp" - "guiengine/layout_manager.hpp" - "guiengine/scalable_font.hpp" - "guiengine/widgets/button_widget.hpp" - "input/input_manager.hpp" - "io/file_manager.hpp" - "states_screens/state_manager.hpp" - "utils/string_utils.hpp" - - - - -1341546818 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\widgets\spinner_widget.cpp - - "graphics/irr_driver.hpp" - "guiengine/engine.hpp" - "guiengine/widgets/spinner_widget.hpp" - "io/file_manager.hpp" - "utils/string_utils.hpp" - "utils/translation.hpp" - - - - - - -1323303924 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\guiengine\widgets\text_box_widget.cpp - "guiengine/engine.hpp" - "guiengine/modaldialog.hpp" - "guiengine/widgets/text_box_widget.hpp" - "guiengine/widgets/CGUIEditBox.h" - "utils/ptr_vector.hpp" - "utils/translation.hpp" - - - - -1323197016 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\input\binding.cpp - - "input/binding.hpp" - "utils/string_utils.hpp" - "utils/translation.hpp" - -1354838506 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\input\device_manager.cpp - "input/device_manager.hpp" - - - "config/player.hpp" - "config/user_config.hpp" - "graphics/irr_driver.hpp" - "io/file_manager.hpp" - "states_screens/kart_selection.hpp" - "states_screens/state_manager.hpp" - "utils/translation.hpp" - "input/wiimote_manager.hpp" - -1325462772 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\input\wiimote_manager.hpp - - "IEventReceiver.h" - -1355006146 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\input\input_device.cpp - "config/device_config.hpp" - "guiengine/abstract_state_manager.hpp" - "input/input.hpp" - "input/input_device.hpp" - "karts/abstract_kart.hpp" - "karts/controller/player_controller.hpp" - "modes/world.hpp" - "race/race_manager.hpp" - "states_screens/state_manager.hpp" - -1351598724 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\controller\player_controller.hpp - "config/player.hpp" - "karts/controller/controller.hpp" - -1351833528 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\input\input_manager.cpp - "input/input_manager.hpp" - "main_loop.hpp" - "guiengine/engine.hpp" - "guiengine/event_handler.hpp" - "guiengine/modaldialog.hpp" - "guiengine/screen.hpp" - "input/device_manager.hpp" - "input/input.hpp" - "karts/controller/controller.hpp" - "karts/abstract_kart.hpp" - "modes/demo_world.hpp" - "modes/profile_world.hpp" - "modes/world.hpp" - "physics/physics.hpp" - "race/history.hpp" - "replay/replay_recorder.hpp" - "states_screens/kart_selection.hpp" - "states_screens/main_menu_screen.hpp" - "states_screens/options_screen_input2.hpp" - "states_screens/state_manager.hpp" - "utils/string_utils.hpp" - - - - - - - - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\race\history.hpp - - "LinearMath/btQuaternion.h" - "karts/controller/kart_control.hpp" - "utils/aligned_array.hpp" - "utils/vec3.hpp" - -1348037816 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\replay\replay_recorder.hpp - "karts/controller/kart_control.hpp" - "replay/replay_base.hpp" - - -1348037816 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\replay\replay_base.hpp - "LinearMath/btTransform.h" - "utils/no_copy.hpp" - - - -1336953866 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\options_screen_input2.hpp - - - "guiengine/screen.hpp" - "states_screens/dialogs/message_dialog.hpp" - -1316715868 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\dialogs\message_dialog.hpp - "config/player.hpp" - "guiengine/modaldialog.hpp" - "utils/leak_check.hpp" - -1326750260 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\input\wiimote_manager.cpp - "input/wiimote_manager.hpp" - "wiiuse/wiiuse.h" - "graphics/irr_driver.hpp" - "input/input_manager.hpp" - "input/device_manager.hpp" - "utils/string_utils.hpp" - -1352873192 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\io\file_manager.cpp - - "io/file_manager.hpp" - - - - - - - - - - - - - - - "btBulletDynamicsCommon.h" - "config/user_config.hpp" - "graphics/irr_driver.hpp" - "graphics/material_manager.hpp" - "karts/kart_properties_manager.hpp" - "tracks/track_manager.hpp" - "utils/string_utils.hpp" - - -1350366706 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\io\xml_node.cpp - "io/file_manager.hpp" - "io/xml_node.hpp" - "utils/string_utils.hpp" - "utils/interpolation_array.hpp" - "utils/vec3.hpp" - - -1323197016 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\io\xml_writer.cpp - "io/xml_writer.hpp" - - - - -1346810816 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\items\attachment.cpp - "items/attachment.hpp" - - "audio/sfx_base.hpp" - "config/stk_config.hpp" - "config/user_config.hpp" - "graphics/explosion.hpp" - "graphics/irr_driver.hpp" - "items/attachment_manager.hpp" - "items/projectile_manager.hpp" - "items/swatter.hpp" - "karts/abstract_kart.hpp" - "karts/controller/controller.hpp" - "karts/explosion_animation.hpp" - "karts/kart_properties.hpp" - "modes/three_strikes_battle.hpp" - "network/race_state.hpp" - "network/network_manager.hpp" - "utils/constants.hpp" - -1332974146 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\items\swatter.hpp - "config/stk_config.hpp" - "items/attachment_plugin.hpp" - "utils/no_copy.hpp" - "utils/random_generator.hpp" - - - -1336460836 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\modes\three_strikes_battle.hpp - "modes/world_with_rank.hpp" - "states_screens/race_gui_base.hpp" - - - -1332188472 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\network\race_state.hpp - - "items/flyable.hpp" - "items/item.hpp" - "karts/abstract_kart.hpp" - "karts/controller/kart_control.hpp" - "modes/world.hpp" - "network/flyable_info.hpp" - "network/item_info.hpp" - "network/message.hpp" - "utils/aligned_array.hpp" - -1354485668 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\items\flyable.hpp - - "items/powerup_manager.hpp" - "karts/moveable.hpp" - "tracks/terrain_info.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\terrain_info.hpp - "utils/vec3.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\network\flyable_info.hpp - "network/message.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\network\item_info.hpp - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\network\network_manager.hpp - - - "enet/enet.h" - "network/remote_kart_info.hpp" - -1346723668 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\items\attachment_manager.cpp - "items/attachment_manager.hpp" - "graphics/irr_driver.hpp" - "graphics/material_manager.hpp" - "io/file_manager.hpp" - -1354444158 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\items\bowling.cpp - "items/bowling.hpp" - "graphics/hit_sfx.hpp" - "graphics/material.hpp" - "io/xml_node.hpp" - "karts/abstract_kart.hpp" - "utils/random_generator.hpp" - -1354444158 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\items\bowling.hpp - - "items/flyable.hpp" - -1332978946 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\items\cake.cpp - "items/cake.hpp" - "io/xml_node.hpp" - "karts/abstract_kart.hpp" - "utils/constants.hpp" - "utils/random_generator.hpp" - -1332188472 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\items\cake.hpp - - "items/flyable.hpp" - -1352033824 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\items\flyable.cpp - "items/flyable.hpp" - - - - "graphics/explosion.hpp" - "graphics/irr_driver.hpp" - "graphics/mesh_tools.hpp" - "graphics/stars.hpp" - "io/xml_node.hpp" - "items/projectile_manager.hpp" - "karts/abstract_kart.hpp" - "karts/explosion_animation.hpp" - "modes/world.hpp" - "network/flyable_info.hpp" - "physics/physics.hpp" - "tracks/track.hpp" - "utils/constants.hpp" - "utils/string_utils.hpp" - -1350759068 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\items\item.cpp - "items/item.hpp" - - - "graphics/irr_driver.hpp" - "graphics/lod_node.hpp" - "karts/abstract_kart.hpp" - "modes/three_strikes_battle.hpp" - "modes/world.hpp" - "tracks/track.hpp" - "utils/constants.hpp" - "utils/vec3.hpp" - -1348958790 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\items\item_manager.cpp - "items/item_manager.hpp" - - - - "config/stk_config.hpp" - "config/user_config.hpp" - "graphics/irr_driver.hpp" - "graphics/material.hpp" - "graphics/material_manager.hpp" - "io/file_manager.hpp" - "karts/abstract_kart.hpp" - "modes/linear_world.hpp" - "network/network_manager.hpp" - "tracks/quad_graph.hpp" - "tracks/track.hpp" - "utils/string_utils.hpp" - - - -1350961780 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\items\plunger.cpp - "items/plunger.hpp" - "graphics/irr_driver.hpp" - "io/xml_node.hpp" - "items/rubber_band.hpp" - "items/projectile_manager.hpp" - "karts/abstract_kart.hpp" - "karts/controller/controller.hpp" - "karts/kart_properties.hpp" - "modes/world.hpp" - "physics/physical_object.hpp" - "physics/physics.hpp" - "tracks/track.hpp" - "utils/constants.hpp" - "utils/string_utils.hpp" - -1332188472 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\items\plunger.hpp - - "items/flyable.hpp" - -1332188472 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\items\rubber_band.hpp - "utils/no_copy.hpp" - "utils/vec3.hpp" - -1350346174 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\physics\physical_object.hpp - - "btBulletDynamicsCommon.h" - "physics/user_pointer.hpp" - "tracks/track_object.hpp" - "utils/vec3.hpp" - -1344494250 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\items\powerup.cpp - "items/powerup.hpp" - "audio/sfx_base.hpp" - "audio/sfx_manager.hpp" - "config/user_config.hpp" - "config/stk_config.hpp" - "items/attachment.hpp" - "items/item_manager.hpp" - "items/projectile_manager.hpp" - "karts/abstract_kart.hpp" - "karts/controller/controller.hpp" - "karts/kart_properties.hpp" - "modes/world.hpp" - "network/network_manager.hpp" - "network/race_state.hpp" - "physics/triangle_mesh.hpp" - "tracks/track.hpp" - "utils/string_utils.hpp" - -1332188472 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\items\powerup.hpp - "items/powerup_manager.hpp" - "utils/no_copy.hpp" - "utils/random_generator.hpp" - -1326693592 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\items\powerup_manager.cpp - "items/powerup_manager.hpp" - - - "graphics/irr_driver.hpp" - "graphics/material.hpp" - "graphics/material_manager.hpp" - "io/file_manager.hpp" - "io/xml_node.hpp" - "items/bowling.hpp" - "items/cake.hpp" - "items/plunger.hpp" - "items/rubber_ball.hpp" - "modes/world.hpp" - "utils/constants.hpp" - "utils/string_utils.hpp" - -1332188472 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\items\rubber_ball.hpp - - "items/flyable.hpp" - "tracks/track_sector.hpp" - -1352321370 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\items\projectile_manager.cpp - "items/projectile_manager.hpp" - "graphics/explosion.hpp" - "graphics/hit_effect.hpp" - "items/bowling.hpp" - "items/cake.hpp" - "items/plunger.hpp" - "items/powerup_manager.hpp" - "items/powerup.hpp" - "items/rubber_ball.hpp" - "network/network_manager.hpp" - "network/race_state.hpp" - -1332188472 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\items\rubber_ball.cpp - "items/rubber_ball.hpp" - "audio/sfx_base.hpp" - "audio/sfx_manager.hpp" - "items/attachment.hpp" - "items/projectile_manager.hpp" - "karts/abstract_kart.hpp" - "modes/linear_world.hpp" - "physics/btKart.hpp" - "physics/triangle_mesh.hpp" - "tracks/track.hpp" - -1343605576 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\items\rubber_band.cpp - "items/rubber_band.hpp" - - "graphics/irr_driver.hpp" - "graphics/material_manager.hpp" - "items/plunger.hpp" - "items/projectile_manager.hpp" - "karts/abstract_kart.hpp" - "karts/kart_properties.hpp" - "karts/max_speed.hpp" - "modes/world.hpp" - "physics/physics.hpp" - "race/race_manager.hpp" - "utils/string_utils.hpp" - - -1354147526 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\items\swatter.cpp - "items/swatter.hpp" - "audio/music_manager.hpp" - "audio/sfx_base.hpp" - "audio/sfx_manager.hpp" - "graphics/explosion.hpp" - "graphics/irr_driver.hpp" - "io/file_manager.hpp" - "items/attachment.hpp" - "items/projectile_manager.hpp" - "karts/controller/controller.hpp" - "karts/explosion_animation.hpp" - "karts/kart_properties.hpp" - "modes/world.hpp" - "karts/abstract_kart.hpp" - -1333321062 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\abstract_kart.cpp - "karts/abstract_kart.hpp" - "items/powerup.hpp" - "karts/abstract_kart_animation.hpp" - "karts/kart_model.hpp" - "karts/kart_properties.hpp" - "karts/kart_properties_manager.hpp" - -1352267866 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\abstract_kart_animation.cpp - "karts/abstract_kart_animation.hpp" - "graphics/slip_stream.hpp" - "karts/abstract_kart.hpp" - "karts/skidding.hpp" - "modes/world.hpp" - "physics/physics.hpp" - -1346907202 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\cannon_animation.cpp - "karts/cannon_animation.hpp" - "animations/animation_base.hpp" - "animations/ipo.hpp" - "animations/three_d_animation.hpp" - "karts/abstract_kart.hpp" - "karts/kart_properties.hpp" - "modes/world.hpp" - "LinearMath/btTransform.h" - -1335478666 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\cannon_animation.hpp - "karts/abstract_kart_animation.hpp" - "utils/vec3.hpp" - -1351598724 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\controller\ai_base_controller.cpp - "karts/controller/ai_base_controller.hpp" - - "karts/abstract_kart.hpp" - "karts/kart_properties.hpp" - "karts/skidding_properties.hpp" - "karts/controller/ai_properties.hpp" - "modes/linear_world.hpp" - "tracks/track.hpp" - "utils/constants.hpp" - -1351598724 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\controller\ai_base_controller.hpp - "karts/controller/controller.hpp" - "states_screens/state_manager.hpp" - -1351598724 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\controller\ai_properties.hpp - "race/race_manager.hpp" - "utils/interpolation_array.hpp" - - - -1351598724 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\controller\ai_properties.cpp - "karts/controller/ai_properties.hpp" - "io/xml_node.hpp" - "utils/string_utils.hpp" - -1339256898 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\controller\controller.cpp - "karts/controller/controller.hpp" - "karts/abstract_kart.hpp" - -1352855280 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\controller\end_controller.cpp - "karts/controller/end_controller.hpp" - "irrlicht.h" - - - - - "graphics/irr_driver.hpp" - "karts/abstract_kart.hpp" - "karts/max_speed.hpp" - "karts/rescue_animation.hpp" - "modes/linear_world.hpp" - "network/network_manager.hpp" - "race/race_manager.hpp" - "states_screens/race_result_gui.hpp" - "tracks/quad_graph.hpp" - "tracks/track.hpp" - "utils/constants.hpp" - -1339256898 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\controller\end_controller.hpp - "karts/controller/ai_base_controller.hpp" - -1334013518 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\rescue_animation.hpp - "karts/abstract_kart_animation.hpp" - "utils/vec3.hpp" - -1350759706 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\race_result_gui.hpp - "states_screens/race_gui_base.hpp" - - - "guiengine/screen.hpp" - "states_screens/state_manager.hpp" - -1353291572 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\controller\player_controller.cpp - "karts/controller/player_controller.hpp" - "audio/sfx_base.hpp" - "audio/sfx_manager.hpp" - "config/player.hpp" - "config/stk_config.hpp" - "graphics/camera.hpp" - "graphics/irr_driver.hpp" - "input/input_manager.hpp" - "items/attachment.hpp" - "items/item.hpp" - "items/powerup.hpp" - "karts/abstract_kart.hpp" - "karts/kart_properties.hpp" - "karts/skidding.hpp" - "karts/rescue_animation.hpp" - "modes/world.hpp" - "race/history.hpp" - "states_screens/race_gui_base.hpp" - "utils/constants.hpp" - "utils/translation.hpp" - -1354167616 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\controller\skidding_ai.cpp - "karts/controller/skidding_ai.hpp" - "irrlicht.h" - - - - - - "graphics/irr_driver.hpp" - "graphics/show_curve.hpp" - "graphics/slip_stream.hpp" - "karts/abstract_kart.hpp" - "karts/controller/kart_control.hpp" - "karts/controller/ai_properties.hpp" - "karts/kart_properties.hpp" - "karts/max_speed.hpp" - "karts/rescue_animation.hpp" - "karts/skidding.hpp" - "karts/skidding_properties.hpp" - "items/attachment.hpp" - "items/item_manager.hpp" - "items/powerup.hpp" - "modes/linear_world.hpp" - "modes/profile_world.hpp" - "network/network_manager.hpp" - "race/race_manager.hpp" - "tracks/quad_graph.hpp" - "tracks/track.hpp" - "utils/constants.hpp" - -1351548378 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\controller\skidding_ai.hpp - "karts/controller/ai_base_controller.hpp" - "race/race_manager.hpp" - "tracks/graph_node.hpp" - "utils/random_generator.hpp" - -1352025364 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\explosion_animation.cpp - "karts/explosion_animation.hpp" - "audio/sfx_manager.hpp" - "items/attachment.hpp" - "karts/abstract_kart.hpp" - "karts/kart_properties.hpp" - "modes/world.hpp" - "tracks/track.hpp" - -1331766932 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\ghost_kart.cpp - "karts/ghost_kart.hpp" - "modes/world.hpp" - "LinearMath/btQuaternion.h" - -1331766932 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\ghost_kart.hpp - "karts/kart.hpp" - "replay/replay_base.hpp" - "LinearMath/btTransform.h" - - -1354485628 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\kart.hpp - "LinearMath/btTransform.h" - "items/powerup.hpp" - "karts/abstract_kart.hpp" - "karts/kart_properties.hpp" - "tracks/terrain_info.hpp" - "utils/no_copy.hpp" - -1354485568 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\kart.cpp - "karts/kart.hpp" - - - - - - "audio/music_manager.hpp" - "audio/sfx_manager.hpp" - "audio/sfx_base.hpp" - "challenges/unlock_manager.hpp" - "config/user_config.hpp" - "graphics/camera.hpp" - "graphics/material_manager.hpp" - "graphics/particle_emitter.hpp" - "graphics/particle_kind.hpp" - "graphics/particle_kind_manager.hpp" - "graphics/rain.hpp" - "graphics/shadow.hpp" - "graphics/skid_marks.hpp" - "graphics/slip_stream.hpp" - "graphics/stars.hpp" - "guiengine/scalable_font.hpp" - "karts/explosion_animation.hpp" - "karts/kart_gfx.hpp" - "karts/rescue_animation.hpp" - "modes/overworld.hpp" - "modes/world.hpp" - "io/file_manager.hpp" - "items/attachment.hpp" - "items/item_manager.hpp" - "karts/controller/end_controller.hpp" - "karts/abstract_kart_animation.hpp" - "karts/kart_model.hpp" - "karts/kart_properties_manager.hpp" - "karts/max_speed.hpp" - "karts/skidding.hpp" - "modes/linear_world.hpp" - "network/race_state.hpp" - "network/network_manager.hpp" - "physics/btKart.hpp" - "physics/btKartRaycast.hpp" - "physics/btUprightConstraint.hpp" - "physics/physics.hpp" - "race/history.hpp" - "tracks/track.hpp" - "tracks/track_manager.hpp" - "utils/constants.hpp" - - -1332188472 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\kart_gfx.hpp - - - -1348958790 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\modes\overworld.hpp - - "modes/linear_world.hpp" - "utils/aligned_array.hpp" - "LinearMath/btTransform.h" - -1317187162 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\physics\btuprightconstraint.hpp - "LinearMath/btVector3.h" - "BulletDynamics/ConstraintSolver/btJacobianEntry.h" - "BulletDynamics/ConstraintSolver/btTypedConstraint.h" - -1347573328 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\kart_gfx.cpp - "karts/kart_gfx.hpp" - "config/user_config.hpp" - "io/file_manager.hpp" - "graphics/particle_emitter.hpp" - "graphics/particle_kind.hpp" - "graphics/particle_kind_manager.hpp" - "karts/abstract_kart.hpp" - "karts/kart_properties.hpp" - "karts/skidding.hpp" - "physics/btKart.hpp" - - -1353882294 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\kart_model.cpp - "karts/kart_model.hpp" - - - "config/stk_config.hpp" - "config/user_config.hpp" - "graphics/irr_driver.hpp" - "graphics/lod_node.hpp" - "graphics/mesh_tools.hpp" - "io/xml_node.hpp" - "karts/abstract_kart.hpp" - "karts/kart_properties.hpp" - "physics/btKart.hpp" - "utils/constants.hpp" - -1352942436 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\kart_properties.cpp - "karts/kart_properties.hpp" - - - - "config/stk_config.hpp" - "config/user_config.hpp" - "graphics/irr_driver.hpp" - "graphics/material_manager.hpp" - "io/file_manager.hpp" - "karts/controller/ai_properties.hpp" - "karts/kart_model.hpp" - "karts/skidding_properties.hpp" - "modes/world.hpp" - "io/xml_node.hpp" - "utils/constants.hpp" - "utils/string_utils.hpp" - "utils/translation.hpp" - -1342478208 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\kart_properties_manager.cpp - "karts/kart_properties_manager.hpp" - - - - - - "challenges/unlock_manager.hpp" - "config/stk_config.hpp" - "config/user_config.hpp" - "graphics/irr_driver.hpp" - "guiengine/engine.hpp" - "io/file_manager.hpp" - "karts/kart_properties.hpp" - "utils/string_utils.hpp" - -1346910482 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\kart_with_stats.cpp - "karts/kart_with_stats.hpp" - "karts/explosion_animation.hpp" - "karts/rescue_animation.hpp" - "items/item.hpp" - "modes/linear_world.hpp" - -1346910482 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\kart_with_stats.hpp - "karts/kart.hpp" - -1352267866 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\max_speed.cpp - "karts/max_speed.hpp" - - - "karts/abstract_kart.hpp" - "karts/kart_properties.hpp" - "physics/btKart.hpp" - -1332693682 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\moveable.cpp - "karts/moveable.hpp" - "config/user_config.hpp" - "graphics/irr_driver.hpp" - "graphics/material.hpp" - "graphics/material_manager.hpp" - "modes/world.hpp" - "tracks/track.hpp" - "ISceneNode.h" - -1334754858 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\rescue_animation.cpp - "karts/rescue_animation.hpp" - "graphics/referee.hpp" - "items/attachment.hpp" - "karts/abstract_kart.hpp" - "karts/kart_properties.hpp" - "modes/three_strikes_battle.hpp" - "modes/world.hpp" - "physics/physics.hpp" - "ISceneNode.h" - -1351145040 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\skidding.cpp - "karts/skidding.hpp" - "graphics/show_curve.hpp" - "karts/kart.hpp" - "karts/kart_gfx.hpp" - "karts/kart_properties.hpp" - "karts/max_speed.hpp" - "karts/controller/controller.hpp" - "modes/world.hpp" - "physics/btKart.hpp" - "tracks/track.hpp" - -1351145040 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\karts\skidding_properties.cpp - "karts/skidding_properties.hpp" - "io/xml_node.hpp" - - -1353031056 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\main.cpp - - - - - - - - - - - - - - "main_loop.hpp" - "addons/addons_manager.hpp" - "addons/inetwork_http.hpp" - "addons/news_manager.hpp" - "audio/music_manager.hpp" - "audio/sfx_manager.hpp" - "challenges/unlock_manager.hpp" - "config/stk_config.hpp" - "config/user_config.hpp" - "config/player.hpp" - "graphics/hardware_skinning.hpp" - "graphics/irr_driver.hpp" - "graphics/material_manager.hpp" - "graphics/particle_kind_manager.hpp" - "graphics/referee.hpp" - "guiengine/engine.hpp" - "guiengine/event_handler.hpp" - "input/input_manager.hpp" - "input/device_manager.hpp" - "input/wiimote_manager.hpp" - "io/file_manager.hpp" - "items/attachment_manager.hpp" - "items/item_manager.hpp" - "items/projectile_manager.hpp" - "karts/controller/ai_base_controller.hpp" - "karts/kart_properties.hpp" - "karts/kart_properties_manager.hpp" - "modes/demo_world.hpp" - "modes/profile_world.hpp" - "network/network_manager.hpp" - "race/grand_prix_manager.hpp" - "race/highscore_manager.hpp" - "race/history.hpp" - "race/race_manager.hpp" - "replay/replay_play.hpp" - "replay/replay_recorder.hpp" - "states_screens/story_mode_lobby.hpp" - "states_screens/state_manager.hpp" - "states_screens/dialogs/message_dialog.hpp" - "tracks/track.hpp" - "tracks/track_manager.hpp" - "tutorial/tutorial_manager.hpp" - "utils/constants.hpp" - "utils/leak_check.hpp" - "utils/translation.hpp" - -1353288254 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\race\highscore_manager.hpp - - - - "race/highscores.hpp" - -1331766932 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\replay\replay_play.hpp - "replay/replay_base.hpp" - "utils/ptr_vector.hpp" - - - -1323197328 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\story_mode_lobby.hpp - - "guiengine/screen.hpp" - "states_screens/dialogs/enter_player_name_dialog.hpp" - -1335397428 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\dialogs\enter_player_name_dialog.hpp - - "guiengine/modaldialog.hpp" - "guiengine/widgets/text_box_widget.hpp" - -1294878424 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tutorial\tutorial_manager.hpp - - "tutorial/tutorial.hpp" - "tutorial/tutorial_data.hpp" - "utils/no_copy.hpp" - - -1306089086 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tutorial\tutorial.hpp - - - - - "utils/no_copy.hpp" - -1294878424 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tutorial\tutorial_data.hpp - - - - - "tutorial/tutorial.hpp" - "race/race_manager.hpp" - -1333291706 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\main_loop.cpp - "main_loop.hpp" - - "audio/music_manager.hpp" - "config/user_config.hpp" - "graphics/irr_driver.hpp" - "graphics/material_manager.hpp" - "guiengine/engine.hpp" - "input/input_manager.hpp" - "input/wiimote_manager.hpp" - "modes/profile_world.hpp" - "modes/world.hpp" - "network/network_manager.hpp" - "race/race_manager.hpp" - "states_screens/state_manager.hpp" - "utils/profiler.hpp" - -1352938176 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\modes\cutscene_world.cpp - "modes/cutscene_world.hpp" - - - - "animations/animation_base.hpp" - "audio/music_manager.hpp" - "challenges/game_slot.hpp" - "challenges/unlock_manager.hpp" - "graphics/irr_driver.hpp" - "io/file_manager.hpp" - "karts/abstract_kart.hpp" - "karts/kart_model.hpp" - "karts/kart_properties.hpp" - "modes/overworld.hpp" - "physics/physics.hpp" - "states_screens/credits.hpp" - "states_screens/cutscene_gui.hpp" - "states_screens/kart_selection.hpp" - "states_screens/main_menu_screen.hpp" - "tracks/track.hpp" - "tracks/track_object.hpp" - "tracks/track_object_manager.hpp" - "utils/constants.hpp" - "utils/ptr_vector.hpp" - -1349050308 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\modes\cutscene_world.hpp - "modes/world_with_rank.hpp" - "states_screens/race_gui_base.hpp" - - - - -1347581018 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\credits.hpp - - "audio/music_manager.hpp" - "guiengine/screen.hpp" - "utils/ptr_vector.hpp" - -1340577730 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\cutscene_gui.hpp - - - - "config/player.hpp" - "states_screens/race_gui_base.hpp" - "utils/cpp2011.h" - -1352033824 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\track_object_manager.hpp - "physics/physical_object.hpp" - "tracks/track_object.hpp" - "utils/ptr_vector.hpp" - - - - -1353069596 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\modes\demo_world.cpp - "modes/demo_world.hpp" - "guiengine/modaldialog.hpp" - "input/device_manager.hpp" - "input/input_manager.hpp" - "network/network_manager.hpp" - "race/race_manager.hpp" - "tracks/track.hpp" - "tracks/track_manager.hpp" - -1339190040 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\modes\follow_the_leader.cpp - "modes/follow_the_leader.hpp" - "audio/music_manager.hpp" - "challenges/unlock_manager.hpp" - "config/user_config.hpp" - "graphics/irr_driver.hpp" - "items/powerup_manager.hpp" - "karts/abstract_kart.hpp" - "states_screens/race_gui_base.hpp" - "tracks/track.hpp" - "utils/translation.hpp" - - -1337127694 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\modes\follow_the_leader.hpp - "modes/linear_world.hpp" - -1292540234 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\modes\game_tutorial.cpp - "modes/game_tutorial.hpp" - -1292540664 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\modes\game_tutorial.hpp - "modes/linear_world.hpp" - -1354190374 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\modes\linear_world.cpp - "modes/linear_world.hpp" - - "audio/music_manager.hpp" - "audio/sfx_base.hpp" - "audio/sfx_manager.hpp" - "karts/abstract_kart.hpp" - "karts/controller/controller.hpp" - "karts/kart_properties.hpp" - "network/network_manager.hpp" - "physics/physics.hpp" - "race/history.hpp" - "states_screens/race_gui_base.hpp" - "tracks/track_sector.hpp" - "tracks/track.hpp" - "utils/constants.hpp" - "utils/string_utils.hpp" - "utils/translation.hpp" - -1355090260 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\modes\overworld.cpp - "audio/music_manager.hpp" - "challenges/unlock_manager.hpp" - "graphics/irr_driver.hpp" - "input/device_manager.hpp" - "input/input.hpp" - "input/input_manager.hpp" - "karts/abstract_kart.hpp" - "karts/kart_properties.hpp" - "karts/kart_properties_manager.hpp" - "karts/rescue_animation.hpp" - "modes/overworld.hpp" - "physics/physics.hpp" - "network/network_manager.hpp" - "states_screens/dialogs/select_challenge.hpp" - "states_screens/kart_selection.hpp" - "states_screens/race_gui_overworld.hpp" - "tracks/track.hpp" - -1327716404 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\dialogs\select_challenge.hpp - "guiengine/event_handler.hpp" - "guiengine/modaldialog.hpp" - -1353844224 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\race_gui_overworld.hpp - - - - - "config/player.hpp" - "states_screens/race_gui_base.hpp" - -1347234356 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\modes\profile_world.cpp - "modes/profile_world.hpp" - "main_loop.hpp" - "graphics/camera.hpp" - "graphics/irr_driver.hpp" - "karts/kart_with_stats.hpp" - "karts/controller/controller.hpp" - "tracks/track.hpp" - - -1351207030 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\modes\standard_race.cpp - "modes/standard_race.hpp" - "challenges/unlock_manager.hpp" - "config/user_config.hpp" - "items/powerup_manager.hpp" - "karts/abstract_kart.hpp" - "karts/controller/controller.hpp" - -1341546818 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\modes\three_strikes_battle.cpp - "modes/three_strikes_battle.hpp" - - - "audio/music_manager.hpp" - "graphics/irr_driver.hpp" - "io/file_manager.hpp" - "karts/abstract_kart.hpp" - "karts/kart_model.hpp" - "karts/kart_properties.hpp" - "physics/physics.hpp" - "states_screens/race_gui_base.hpp" - "tracks/track.hpp" - "tracks/track_object_manager.hpp" - "utils/constants.hpp" - -1332188472 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\modes\tutorial_race.cpp - "modes/tutorial_race.hpp" - "audio/music_manager.hpp" - "tutorial/tutorial_manager.hpp" - "config/user_config.hpp" - "karts/abstract_kart.hpp" - "items/powerup_manager.hpp" - "states_screens/race_gui_base.hpp" - "tracks/track.hpp" - "utils/translation.hpp" - -1316137778 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\modes\tutorial_race.hpp - "modes/linear_world.hpp" - "states_screens/race_gui_base.hpp" - -1353546430 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\modes\world.cpp - "modes/world.hpp" - - - - - - "audio/music_manager.hpp" - "audio/sfx_base.hpp" - "audio/sfx_manager.hpp" - "challenges/unlock_manager.hpp" - "config/user_config.hpp" - "graphics/camera.hpp" - "graphics/hardware_skinning.hpp" - "io/file_manager.hpp" - "items/projectile_manager.hpp" - "karts/controller/player_controller.hpp" - "karts/controller/end_controller.hpp" - "karts/controller/skidding_ai.hpp" - "karts/kart.hpp" - "karts/kart_properties_manager.hpp" - "modes/profile_world.hpp" - "network/network_manager.hpp" - "network/race_state.hpp" - "physics/btKart.hpp" - "physics/physics.hpp" - "physics/triangle_mesh.hpp" - "race/highscore_manager.hpp" - "race/history.hpp" - "race/race_manager.hpp" - "replay/replay_play.hpp" - "replay/replay_recorder.hpp" - "states_screens/dialogs/race_paused_dialog.hpp" - "states_screens/race_gui_base.hpp" - "states_screens/race_gui.hpp" - "states_screens/state_manager.hpp" - "states_screens/minimal_race_gui.hpp" - "states_screens/race_result_gui.hpp" - "tracks/track.hpp" - "tracks/track_manager.hpp" - "utils/constants.hpp" - "utils/profiler.hpp" - "utils/translation.hpp" - "utils/string_utils.hpp" - -1283994122 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\dialogs\race_paused_dialog.hpp - "guiengine/modaldialog.hpp" - -1351466360 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\minimal_race_gui.hpp - - - - - - "config/player.hpp" - "states_screens/race_gui_base.hpp" - -1339875682 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\modes\world_status.cpp - "modes/world_status.hpp" - "audio/music_manager.hpp" - "audio/sfx_manager.hpp" - "audio/sfx_base.hpp" - "config/stk_config.hpp" - "graphics/irr_driver.hpp" - "guiengine/modaldialog.hpp" - "karts/abstract_kart.hpp" - "modes/world.hpp" - "tracks/track.hpp" - "network/network_manager.hpp" - "states_screens/dialogs/race_over_dialog.hpp" - - -1301672798 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\dialogs\race_over_dialog.hpp - "guiengine/modaldialog.hpp" - -1350253388 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\modes\world_with_rank.cpp - "modes/world_with_rank.hpp" - "karts/abstract_kart.hpp" - "race/history.hpp" - - -1323197016 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\network\connect_message.cpp - "network/connect_message.hpp" - - - - - "config/user_config.hpp" - "config/player.hpp" - "karts/kart_properties_manager.hpp" - "states_screens/state_manager.hpp" - "tracks/track_manager.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\network\connect_message.hpp - - "network/message.hpp" - -1332188472 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\network\kart_control_message.cpp - "network/kart_control_message.hpp" - "karts/controller/controller.hpp" - "modes/world.hpp" - "network/network_kart.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\network\kart_control_message.hpp - "network/message.hpp" - -1330321938 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\network\network_kart.hpp - "karts/kart.hpp" - -1332188472 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\network\kart_update_message.cpp - "network/kart_update_message.hpp" - "karts/abstract_kart.hpp" - "modes/world.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\network\kart_update_message.hpp - "network/message.hpp" - -1323197016 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\network\message.cpp - "network/message.hpp" - - - - - -1331088102 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\network\network_kart.cpp - "network/network_manager.hpp" - "network/network_kart.hpp" - -1338856054 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\network\network_manager.cpp - "network/network_manager.hpp" - "config/stk_config.hpp" - "config/user_config.hpp" - "karts/kart_properties_manager.hpp" - "modes/world.hpp" - "network/connect_message.hpp" - "network/character_info_message.hpp" - "network/character_selected_message.hpp" - "network/race_info_message.hpp" - "network/race_start_message.hpp" - "network/world_loaded_message.hpp" - "network/race_state.hpp" - "network/kart_control_message.hpp" - "network/character_confirm_message.hpp" - "network/race_result_message.hpp" - "network/race_result_ack_message.hpp" - "race/race_manager.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\network\character_info_message.hpp - "karts/kart_properties_manager.hpp" - "network/message.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\network\character_selected_message.hpp - "network/message.hpp" - "network/remote_kart_info.hpp" - "race/race_manager.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\network\race_info_message.hpp - - "network/message.hpp" - "network/remote_kart_info.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\network\race_start_message.hpp - "network/message.hpp" - "network/remote_kart_info.hpp" - "race/race_manager.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\network\world_loaded_message.hpp - "network/message.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\network\character_confirm_message.hpp - - "network/message.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\network\race_result_message.hpp - - "network/message.hpp" - -1323197016 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\network\race_result_ack_message.hpp - - "network/message.hpp" - -1323197016 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\network\race_info_message.cpp - "network/race_info_message.hpp" - "race/grand_prix_manager.hpp" - "race/race_manager.hpp" - -1332188472 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\network\race_result_message.cpp - "network/race_result_message.hpp" - "karts/abstract_kart.hpp" - "modes/world.hpp" - "race/race_manager.hpp" - -1352671014 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\network\race_state.cpp - "network/race_state.hpp" - "items/item_manager.hpp" - "items/powerup.hpp" - "items/projectile_manager.hpp" - "karts/rescue_animation.hpp" - "modes/world.hpp" - "network/network_manager.hpp" - "physics/physics.hpp" - -1354482980 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\physics\btkart.cpp - "LinearMath/btVector3.h" - "btKart.hpp" - "BulletDynamics/ConstraintSolver/btSolve2LinearConstraint.h" - "BulletDynamics/ConstraintSolver/btJacobianEntry.h" - "LinearMath/btQuaternion.h" - "BulletDynamics/Dynamics/btDynamicsWorld.h" - "BulletDynamics/Vehicle/btVehicleRaycaster.h" - "BulletDynamics/Vehicle/btWheelInfo.h" - "LinearMath/btMinMax.h" - "LinearMath/btIDebugDraw.h" - "BulletDynamics/ConstraintSolver/btContactConstraint.h" - "karts/kart.hpp" - -1320655912 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\lib\bullet\src\bulletdynamics\constraintsolver\btsolve2linearconstraint.h - "LinearMath/btMatrix3x3.h" - "LinearMath/btVector3.h" - -1336604272 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\physics\btkartraycast.cpp - "LinearMath/btVector3.h" - "btKartRaycast.hpp" - "BulletCollision/CollisionDispatch/btCollisionWorld.h" - "BulletDynamics/Dynamics/btDynamicsWorld.h" - "modes/world.hpp" - "physics/triangle_mesh.hpp" - "tracks/track.hpp" - -1317187162 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\physics\btuprightconstraint.cpp - "physics/btUprightConstraint.hpp" - - - "BulletDynamics/Dynamics/btRigidBody.h" - "LinearMath/btTransformUtil.h" - "karts/kart.hpp" - -1332188472 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\physics\irr_debug_drawer.cpp - "physics/irr_debug_drawer.hpp" - "karts/abstract_kart.hpp" - "modes/world.hpp" - - -1353893524 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\physics\physical_object.cpp - "physics/physical_object.hpp" - - - "graphics/irr_driver.hpp" - "graphics/mesh_tools.hpp" - "io/file_manager.hpp" - "io/xml_node.hpp" - "modes/world.hpp" - "physics/physics.hpp" - "tracks/track.hpp" - "utils/constants.hpp" - "utils/string_utils.hpp" - - - -1352938236 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\physics\physics.cpp - "physics/physics.hpp" - "animations/three_d_animation.hpp" - "config/user_config.hpp" - "karts/kart_properties.hpp" - "karts/rescue_animation.hpp" - "network/race_state.hpp" - "graphics/stars.hpp" - "karts/explosion_animation.hpp" - "physics/btKart.hpp" - "physics/btUprightConstraint.hpp" - "physics/irr_debug_drawer.hpp" - "physics/physical_object.hpp" - "physics/stk_dynamics_world.hpp" - "physics/triangle_mesh.hpp" - "tracks/track.hpp" - -1353277350 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\physics\triangle_mesh.cpp - "physics/triangle_mesh.hpp" - "btBulletDynamicsCommon.h" - "modes/world.hpp" - "physics/physics.hpp" - "utils/constants.hpp" - "utils/time.hpp" - - -1354018156 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\race\grand_prix_data.cpp - "race/grand_prix_data.hpp" - "challenges/unlock_manager.hpp" - "io/file_manager.hpp" - "tracks/track_manager.hpp" - "tracks/track.hpp" - "utils/string_utils.hpp" - "utils/translation.hpp" - - - -1323197016 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\race\grand_prix_manager.cpp - "race/grand_prix_manager.hpp" - - "io/file_manager.hpp" - "utils/string_utils.hpp" - -1353887502 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\race\highscore_manager.cpp - "race/highscore_manager.hpp" - - - "config/user_config.hpp" - "io/file_manager.hpp" - "io/xml_writer.hpp" - "race/race_manager.hpp" - "utils/constants.hpp" - "utils/string_utils.hpp" - "utils/translation.hpp" - -1331764676 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\race\highscores.cpp - "race/highscores.hpp" - - - "io/xml_node.hpp" - "io/xml_writer.hpp" - "race/race_manager.hpp" - -1342746856 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\race\history.cpp - "race/history.hpp" - - "io/file_manager.hpp" - "modes/world.hpp" - "karts/abstract_kart.hpp" - "physics/physics.hpp" - "race/race_manager.hpp" - "tracks/track.hpp" - "utils/constants.hpp" - -1354018156 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\race\race_manager.cpp - "race/race_manager.hpp" - - - "challenges/unlock_manager.hpp" - "config/user_config.hpp" - "config/stk_config.hpp" - "graphics/irr_driver.hpp" - "input/device_manager.hpp" - "input/input_manager.hpp" - "karts/abstract_kart.hpp" - "karts/controller/controller.hpp" - "karts/kart_properties_manager.hpp" - "modes/cutscene_world.hpp" - "modes/demo_world.hpp" - "modes/follow_the_leader.hpp" - "modes/overworld.hpp" - "modes/profile_world.hpp" - "modes/standard_race.hpp" - "modes/world.hpp" - "modes/three_strikes_battle.hpp" - "network/network_manager.hpp" - "states_screens/grand_prix_lose.hpp" - "states_screens/grand_prix_win.hpp" - "states_screens/kart_selection.hpp" - "states_screens/main_menu_screen.hpp" - "states_screens/state_manager.hpp" - "tracks/track_manager.hpp" - "utils/ptr_vector.hpp" - -1336953866 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\grand_prix_lose.hpp - "guiengine/screen.hpp" - "karts/kart_model.hpp" - - - -1336953866 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\grand_prix_win.hpp - "guiengine/screen.hpp" - "karts/kart_model.hpp" - -1330468430 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\replay\replay_base.cpp - "replay/replay_base.hpp" - "io/file_manager.hpp" - "race/race_manager.hpp" - -1331774496 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\replay\replay_play.cpp - "replay/replay_play.hpp" - "config/stk_config.hpp" - "io/file_manager.hpp" - "karts/ghost_kart.hpp" - "modes/world.hpp" - "race/race_manager.hpp" - "tracks/track.hpp" - - - -1352023716 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\replay\replay_recorder.cpp - "replay/replay_recorder.hpp" - "config/stk_config.hpp" - "io/file_manager.hpp" - "karts/ghost_kart.hpp" - "modes/world.hpp" - "race/race_manager.hpp" - "tracks/track.hpp" - - - - -1350157788 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\addons_screen.cpp - "states_screens/addons_screen.hpp" - - "addons/addons_manager.hpp" - "addons/inetwork_http.hpp" - "guiengine/CGUISpriteBank.h" - "guiengine/modaldialog.hpp" - "guiengine/scalable_font.hpp" - "guiengine/widget.hpp" - "guiengine/widgets/ribbon_widget.hpp" - "io/file_manager.hpp" - "states_screens/dialogs/addons_loading.hpp" - "states_screens/dialogs/message_dialog.hpp" - "states_screens/state_manager.hpp" - "utils/translation.hpp" - "utils/ptr_vector.hpp" - -1332434990 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\arenas_screen.cpp - "challenges/unlock_manager.hpp" - "graphics/irr_driver.hpp" - "guiengine/widget.hpp" - "guiengine/widgets/dynamic_ribbon_widget.hpp" - "guiengine/widgets/icon_button_widget.hpp" - "io/file_manager.hpp" - "states_screens/state_manager.hpp" - "states_screens/arenas_screen.hpp" - "states_screens/dialogs/track_info_dialog.hpp" - "tracks/track.hpp" - "tracks/track_manager.hpp" - "utils/random_generator.hpp" - "utils/translation.hpp" - - -1336953866 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\arenas_screen.hpp - "guiengine/screen.hpp" - -1329392722 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\dialogs\track_info_dialog.hpp - "guiengine/modaldialog.hpp" - "guiengine/widgets/check_box_widget.hpp" - -1347581018 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\credits.cpp - "states_screens/credits.hpp" - - "irrString.h" - "config/user_config.hpp" - "guiengine/engine.hpp" - "guiengine/scalable_font.hpp" - "guiengine/screen.hpp" - "guiengine/widget.hpp" - "io/file_manager.hpp" - "states_screens/state_manager.hpp" - "utils/string_utils.hpp" - "utils/translation.hpp" - -1353291572 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\cutscene_gui.cpp - "guiengine/engine.hpp" - "guiengine/scalable_font.hpp" - "graphics/irr_driver.hpp" - "states_screens/cutscene_gui.hpp" - -1325455956 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\dialogs\add_device_dialog.cpp - "states_screens/dialogs/add_device_dialog.hpp" - "states_screens/dialogs/message_dialog.hpp" - "config/player.hpp" - "guiengine/engine.hpp" - "guiengine/scalable_font.hpp" - "guiengine/widget.hpp" - "guiengine/widgets/button_widget.hpp" - "input/device_manager.hpp" - "input/input_manager.hpp" - "states_screens/options_screen_players.hpp" - "states_screens/options_screen_input.hpp" - "states_screens/state_manager.hpp" - "utils/string_utils.hpp" - "utils/translation.hpp" - "input/wiimote_manager.hpp" - - - -1283994122 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\dialogs\add_device_dialog.hpp - "config/player.hpp" - "guiengine/modaldialog.hpp" - -1340296410 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\options_screen_players.hpp - - - "guiengine/screen.hpp" - "states_screens/dialogs/enter_player_name_dialog.hpp" - -1306183878 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\options_screen_input.hpp - - "guiengine/screen.hpp" - -1351983538 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\dialogs\addons_loading.cpp - "states_screens/dialogs/addons_loading.hpp" - - "addons/addons_manager.hpp" - "addons/inetwork_http.hpp" - "addons/request.hpp" - "config/user_config.hpp" - "guiengine/engine.hpp" - "guiengine/scalable_font.hpp" - "guiengine/widgets.hpp" - "input/input_manager.hpp" - "io/file_manager.hpp" - "states_screens/addons_screen.hpp" - "states_screens/dialogs/message_dialog.hpp" - "utils/string_utils.hpp" - "utils/translation.hpp" - -1301267244 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\dialogs\confirm_resolution_dialog.cpp - "states_screens/dialogs/confirm_resolution_dialog.hpp" - "graphics/irr_driver.hpp" - "guiengine/engine.hpp" - "guiengine/screen.hpp" - "guiengine/widgets/label_widget.hpp" - "states_screens/state_manager.hpp" - "utils/string_utils.hpp" - "utils/translation.hpp" - -1335368658 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\dialogs\custom_video_settings.cpp - "states_screens/dialogs/custom_video_settings.hpp" - "config/user_config.hpp" - "guiengine/widgets/check_box_widget.hpp" - "guiengine/widgets/spinner_widget.hpp" - "states_screens/options_screen_video.hpp" - "utils/translation.hpp" - - -1324588498 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\dialogs\custom_video_settings.hpp - "guiengine/modaldialog.hpp" - -1336953866 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\options_screen_video.hpp - - "guiengine/screen.hpp" - -1341790518 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\dialogs\enter_player_name_dialog.cpp - "states_screens/dialogs/enter_player_name_dialog.hpp" - - "audio/sfx_manager.hpp" - "challenges/unlock_manager.hpp" - "config/player.hpp" - "guiengine/engine.hpp" - "guiengine/widgets/button_widget.hpp" - "guiengine/widgets/label_widget.hpp" - "guiengine/widgets/text_box_widget.hpp" - "states_screens/state_manager.hpp" - "utils/translation.hpp" - -1354018156 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\dialogs\gp_info_dialog.cpp - "states_screens/dialogs/gp_info_dialog.hpp" - "audio/sfx_manager.hpp" - "challenges/unlock_manager.hpp" - "guiengine/engine.hpp" - "guiengine/screen.hpp" - "guiengine/widgets/button_widget.hpp" - "guiengine/widgets/icon_button_widget.hpp" - "guiengine/widgets/label_widget.hpp" - "io/file_manager.hpp" - "race/grand_prix_manager.hpp" - "race/race_manager.hpp" - "states_screens/state_manager.hpp" - "states_screens/tracks_screen.hpp" - "tracks/track.hpp" - "tracks/track_manager.hpp" - "utils/translation.hpp" - - - - -1283994122 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\dialogs\gp_info_dialog.hpp - "guiengine/modaldialog.hpp" - -1336953866 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\tracks_screen.hpp - "guiengine/screen.hpp" - - -1335397922 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\dialogs\message_dialog.cpp - "states_screens/dialogs/message_dialog.hpp" - "guiengine/engine.hpp" - "guiengine/screen.hpp" - "guiengine/widgets/button_widget.hpp" - "guiengine/widgets/label_widget.hpp" - "states_screens/state_manager.hpp" - "utils/translation.hpp" - -1341790518 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\dialogs\player_info_dialog.cpp - "states_screens/dialogs/player_info_dialog.hpp" - - - "audio/sfx_manager.hpp" - "challenges/unlock_manager.hpp" - "config/player.hpp" - "guiengine/engine.hpp" - "guiengine/widgets/button_widget.hpp" - "guiengine/widgets/label_widget.hpp" - "guiengine/scalable_font.hpp" - "guiengine/widgets/text_box_widget.hpp" - "states_screens/options_screen_players.hpp" - "states_screens/state_manager.hpp" - "utils/string_utils.hpp" - "utils/translation.hpp" - -1303592218 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\dialogs\player_info_dialog.hpp - "config/player.hpp" - "guiengine/modaldialog.hpp" - -1290651382 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\dialogs\press_a_key_dialog.cpp - "guiengine/engine.hpp" - "input/input.hpp" - "input/input_manager.hpp" - "states_screens/dialogs/press_a_key_dialog.hpp" - "states_screens/options_screen_input2.hpp" - "utils/translation.hpp" - -1283994122 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\dialogs\press_a_key_dialog.hpp - "guiengine/modaldialog.hpp" - -1353976898 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\dialogs\race_over_dialog.cpp - "states_screens/dialogs/race_over_dialog.hpp" - "challenges/unlock_manager.hpp" - "guiengine/engine.hpp" - "guiengine/scalable_font.hpp" - "guiengine/widgets.hpp" - "io/file_manager.hpp" - "input/input_manager.hpp" - "karts/abstract_kart.hpp" - "karts/kart_properties.hpp" - "karts/kart_properties_manager.hpp" - "modes/overworld.hpp" - "modes/three_strikes_battle.hpp" - "modes/world.hpp" - "modes/world_with_rank.hpp" - "network/network_manager.hpp" - "race/race_manager.hpp" - "states_screens/feature_unlocked.hpp" - "states_screens/main_menu_screen.hpp" - "states_screens/race_setup_screen.hpp" - "states_screens/state_manager.hpp" - "utils/string_utils.hpp" - "utils/translation.hpp" - - - -1353976898 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\feature_unlocked.hpp - "graphics/irr_driver.hpp" - "guiengine/screen.hpp" - "race/race_manager.hpp" - "utils/ptr_vector.hpp" - -1336953866 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\race_setup_screen.hpp - "guiengine/screen.hpp" - -1354839960 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\dialogs\race_paused_dialog.cpp - "states_screens/dialogs/race_paused_dialog.hpp" - - "guiengine/engine.hpp" - "guiengine/scalable_font.hpp" - "guiengine/widgets/icon_button_widget.hpp" - "guiengine/widgets/ribbon_widget.hpp" - "input/input_manager.hpp" - "io/file_manager.hpp" - "modes/overworld.hpp" - "modes/world.hpp" - "network/network_manager.hpp" - "race/race_manager.hpp" - "states_screens/help_screen_1.hpp" - "states_screens/main_menu_screen.hpp" - "states_screens/race_setup_screen.hpp" - "states_screens/options_screen_video.hpp" - "states_screens/state_manager.hpp" - "utils/translation.hpp" - -1336953866 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\help_screen_1.hpp - "guiengine/screen.hpp" - -1352598112 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\dialogs\select_challenge.cpp - "challenges/unlock_manager.hpp" - "config/user_config.hpp" - "guiengine/engine.hpp" - "guiengine/widgets/icon_button_widget.hpp" - "guiengine/widgets/label_widget.hpp" - "input/device_manager.hpp" - "input/input_manager.hpp" - "io/file_manager.hpp" - "modes/world.hpp" - "network/network_manager.hpp" - "race/grand_prix_manager.hpp" - "race/race_manager.hpp" - "states_screens/dialogs/select_challenge.hpp" - "tracks/track_manager.hpp" - "tracks/track.hpp" - -1323122442 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\dialogs\story_mode_new.cpp - "states_screens/dialogs/story_mode_new.hpp" - "config/user_config.hpp" - "config/player.hpp" - "guiengine/widgets/ribbon_widget.hpp" - "guiengine/widgets/spinner_widget.hpp" - "states_screens/state_manager.hpp" - "utils/translation.hpp" - - -1323040014 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\dialogs\story_mode_new.hpp - "guiengine/modaldialog.hpp" - -1352238810 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\dialogs\track_info_dialog.cpp - "states_screens/dialogs/track_info_dialog.hpp" - "challenges/unlock_manager.hpp" - "graphics/irr_driver.hpp" - "guiengine/engine.hpp" - "guiengine/screen.hpp" - "guiengine/widgets/button_widget.hpp" - "guiengine/widgets/icon_button_widget.hpp" - "guiengine/widgets/label_widget.hpp" - "guiengine/widgets/spinner_widget.hpp" - "io/file_manager.hpp" - "karts/kart_properties.hpp" - "karts/kart_properties_manager.hpp" - "network/network_manager.hpp" - "race/highscores.hpp" - "race/highscore_manager.hpp" - "race/race_manager.hpp" - "states_screens/state_manager.hpp" - "states_screens/tracks_screen.hpp" - "tracks/track.hpp" - "tracks/track_manager.hpp" - "utils/string_utils.hpp" - "utils/translation.hpp" - - - - -1354331448 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\feature_unlocked.cpp - "states_screens/feature_unlocked.hpp" - - "audio/music_manager.hpp" - "challenges/challenge_data.hpp" - "challenges/game_slot.hpp" - "challenges/unlock_manager.hpp" - "guiengine/engine.hpp" - "guiengine/scalable_font.hpp" - "io/file_manager.hpp" - "karts/kart_properties.hpp" - "karts/kart_properties_manager.hpp" - "modes/overworld.hpp" - "modes/world.hpp" - "race/grand_prix_manager.hpp" - "states_screens/main_menu_screen.hpp" - "states_screens/state_manager.hpp" - "tracks/track.hpp" - "tracks/track_manager.hpp" - "utils/translation.hpp" - - - - - - - -1353976898 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\grand_prix_lose.cpp - "states_screens/grand_prix_lose.hpp" - "audio/music_manager.hpp" - "audio/sfx_manager.hpp" - "challenges/unlock_manager.hpp" - "graphics/irr_driver.hpp" - "guiengine/engine.hpp" - "guiengine/scalable_font.hpp" - "guiengine/widgets/label_widget.hpp" - "io/file_manager.hpp" - "items/item_manager.hpp" - "karts/kart_properties.hpp" - "karts/kart_properties_manager.hpp" - "modes/overworld.hpp" - "states_screens/feature_unlocked.hpp" - "states_screens/main_menu_screen.hpp" - "states_screens/state_manager.hpp" - "utils/translation.hpp" - - - - - - -1353976898 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\grand_prix_win.cpp - "states_screens/grand_prix_win.hpp" - - - "audio/music_manager.hpp" - "audio/sfx_manager.hpp" - "challenges/unlock_manager.hpp" - "graphics/irr_driver.hpp" - "guiengine/engine.hpp" - "guiengine/scalable_font.hpp" - "guiengine/widgets/label_widget.hpp" - "io/file_manager.hpp" - "items/item_manager.hpp" - "karts/kart_properties.hpp" - "karts/kart_properties_manager.hpp" - "states_screens/feature_unlocked.hpp" - "states_screens/state_manager.hpp" - "utils/translation.hpp" - - - - - - - -1343337856 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\help_screen_1.cpp - "states_screens/help_screen_1.hpp" - "guiengine/widget.hpp" - "guiengine/widgets/ribbon_widget.hpp" - "states_screens/help_screen_2.hpp" - "states_screens/help_screen_3.hpp" - "states_screens/help_screen_4.hpp" - "states_screens/state_manager.hpp" - -1336953866 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\help_screen_2.hpp - "guiengine/screen.hpp" - -1336953866 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\help_screen_3.hpp - "guiengine/screen.hpp" - -1336953866 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\help_screen_4.hpp - "guiengine/screen.hpp" - -1343337856 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\help_screen_2.cpp - "states_screens/help_screen_2.hpp" - "guiengine/widget.hpp" - "guiengine/widgets/ribbon_widget.hpp" - "states_screens/help_screen_1.hpp" - "states_screens/help_screen_3.hpp" - "states_screens/help_screen_4.hpp" - "states_screens/state_manager.hpp" - -1343337856 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\help_screen_3.cpp - "states_screens/help_screen_3.hpp" - "guiengine/widget.hpp" - "guiengine/widgets/ribbon_widget.hpp" - "modes/world.hpp" - "states_screens/help_screen_1.hpp" - "states_screens/help_screen_2.hpp" - "states_screens/help_screen_4.hpp" - "states_screens/state_manager.hpp" - -1343337856 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\help_screen_4.cpp - "states_screens/help_screen_4.hpp" - "guiengine/widget.hpp" - "guiengine/widgets/ribbon_widget.hpp" - "modes/world.hpp" - "states_screens/help_screen_1.hpp" - "states_screens/help_screen_2.hpp" - "states_screens/help_screen_3.hpp" - "states_screens/state_manager.hpp" - -1354838506 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\kart_selection.cpp - "challenges/unlock_manager.hpp" - "config/player.hpp" - "config/user_config.hpp" - "kart_selection.hpp" - "graphics/irr_driver.hpp" - "guiengine/engine.hpp" - "guiengine/screen.hpp" - "guiengine/widgets/bubble_widget.hpp" - "guiengine/widgets/dynamic_ribbon_widget.hpp" - "guiengine/widgets/label_widget.hpp" - "guiengine/widgets/model_view_widget.hpp" - "guiengine/widgets/ribbon_widget.hpp" - "guiengine/widgets/spinner_widget.hpp" - "input/input.hpp" - "input/input_manager.hpp" - "input/device_manager.hpp" - "input/input_device.hpp" - "items/item_manager.hpp" - "io/file_manager.hpp" - "karts/kart_properties.hpp" - "karts/kart_properties_manager.hpp" - "modes/overworld.hpp" - "states_screens/race_setup_screen.hpp" - "states_screens/state_manager.hpp" - "utils/translation.hpp" - "utils/random_generator.hpp" - "utils/string_utils.hpp" - - - - - - -1350860794 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\main_menu_screen.cpp - "states_screens/main_menu_screen.hpp" - - "addons/inetwork_http.hpp" - "challenges/game_slot.hpp" - "challenges/unlock_manager.hpp" - "graphics/irr_driver.hpp" - "guiengine/scalable_font.hpp" - "guiengine/widgets/label_widget.hpp" - "guiengine/widgets/list_widget.hpp" - "guiengine/widgets/ribbon_widget.hpp" - "input/device_manager.hpp" - "input/input_manager.hpp" - "io/file_manager.hpp" - "karts/kart_properties_manager.hpp" - "main_loop.hpp" - "modes/cutscene_world.hpp" - "modes/overworld.hpp" - "modes/demo_world.hpp" - "network/network_manager.hpp" - "states_screens/addons_screen.hpp" - "states_screens/credits.hpp" - "states_screens/help_screen_1.hpp" - "states_screens/kart_selection.hpp" - "states_screens/options_screen_video.hpp" - "states_screens/state_manager.hpp" - "states_screens/tutorial_screen.hpp" - "states_screens/feature_unlocked.hpp" - "states_screens/grand_prix_lose.hpp" - "states_screens/grand_prix_win.hpp" - "states_screens/dialogs/message_dialog.hpp" - "addons/news_manager.hpp" - "tracks/track_manager.hpp" - "tracks/track.hpp" - "utils/string_utils.hpp" - -1306089086 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\tutorial_screen.hpp - - "guiengine/screen.hpp" - "guiengine/CGUISpriteBank.h" - -1351466360 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\minimal_race_gui.cpp - "states_screens/minimal_race_gui.hpp" - "config/user_config.hpp" - "graphics/camera.hpp" - "graphics/irr_driver.hpp" - "graphics/material_manager.hpp" - "guiengine/engine.hpp" - "guiengine/modaldialog.hpp" - "guiengine/scalable_font.hpp" - "io/file_manager.hpp" - "input/input.hpp" - "input/input_manager.hpp" - "items/attachment.hpp" - "items/attachment_manager.hpp" - "items/powerup_manager.hpp" - "karts/abstract_kart.hpp" - "karts/controller/controller.hpp" - "karts/kart_properties.hpp" - "karts/kart_properties_manager.hpp" - "modes/follow_the_leader.hpp" - "modes/linear_world.hpp" - "modes/world.hpp" - "race/race_manager.hpp" - "tracks/track.hpp" - "utils/constants.hpp" - "utils/string_utils.hpp" - "utils/translation.hpp" - -1330042748 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\options_screen_audio.cpp - "states_screens/options_screen_audio.hpp" - "audio/music_manager.hpp" - "audio/sfx_manager.hpp" - "audio/sfx_base.hpp" - "graphics/irr_driver.hpp" - "guiengine/screen.hpp" - "guiengine/widgets/check_box_widget.hpp" - "guiengine/widgets/dynamic_ribbon_widget.hpp" - "guiengine/widgets/spinner_widget.hpp" - "guiengine/widget.hpp" - "io/file_manager.hpp" - "states_screens/options_screen_input.hpp" - "states_screens/options_screen_players.hpp" - "states_screens/options_screen_ui.hpp" - "states_screens/options_screen_video.hpp" - "states_screens/state_manager.hpp" - "utils/translation.hpp" - - - -1336953866 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\options_screen_audio.hpp - - "guiengine/screen.hpp" - -1336953866 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\options_screen_ui.hpp - - "guiengine/screen.hpp" - -1354838644 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\options_screen_input.cpp - "states_screens/options_screen_input.hpp" - "graphics/irr_driver.hpp" - "guiengine/CGUISpriteBank.h" - "guiengine/screen.hpp" - "guiengine/widget.hpp" - "guiengine/widgets/button_widget.hpp" - "guiengine/widgets/list_widget.hpp" - "guiengine/widgets/ribbon_widget.hpp" - "input/input_manager.hpp" - "input/device_manager.hpp" - "io/file_manager.hpp" - "states_screens/options_screen_input2.hpp" - "states_screens/options_screen_audio.hpp" - "states_screens/options_screen_players.hpp" - "states_screens/options_screen_video.hpp" - "states_screens/options_screen_ui.hpp" - "states_screens/dialogs/add_device_dialog.hpp" - "states_screens/state_manager.hpp" - "utils/string_utils.hpp" - "utils/translation.hpp" - - - - -1350090166 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\options_screen_input2.cpp - "states_screens/options_screen_input2.hpp" - "graphics/irr_driver.hpp" - "guiengine/CGUISpriteBank.h" - "guiengine/scalable_font.hpp" - "guiengine/screen.hpp" - "guiengine/widget.hpp" - "guiengine/widgets/button_widget.hpp" - "guiengine/widgets/label_widget.hpp" - "guiengine/widgets/list_widget.hpp" - "guiengine/widgets/ribbon_widget.hpp" - "input/input_manager.hpp" - "input/device_manager.hpp" - "io/file_manager.hpp" - "states_screens/dialogs/press_a_key_dialog.hpp" - "states_screens/options_screen_audio.hpp" - "states_screens/options_screen_input.hpp" - "states_screens/options_screen_players.hpp" - "states_screens/options_screen_video.hpp" - "states_screens/options_screen_ui.hpp" - "states_screens/state_manager.hpp" - "utils/translation.hpp" - - - - -1353028222 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\options_screen_players.cpp - "states_screens/options_screen_players.hpp" - "challenges/unlock_manager.hpp" - "config/player.hpp" - "config/device_config.hpp" - "graphics/irr_driver.hpp" - "guiengine/engine.hpp" - "guiengine/scalable_font.hpp" - "guiengine/screen.hpp" - "guiengine/widget.hpp" - "guiengine/widgets/list_widget.hpp" - "guiengine/widgets/ribbon_widget.hpp" - "states_screens/dialogs/enter_player_name_dialog.hpp" - "states_screens/dialogs/player_info_dialog.hpp" - "states_screens/options_screen_audio.hpp" - "states_screens/options_screen_input.hpp" - "states_screens/options_screen_video.hpp" - "states_screens/options_screen_ui.hpp" - "states_screens/state_manager.hpp" - "states_screens/story_mode_lobby.hpp" - - - - -1348120280 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\options_screen_ui.cpp - "states_screens/options_screen_ui.hpp" - "addons/inetwork_http.hpp" - "audio/music_manager.hpp" - "audio/sfx_manager.hpp" - "audio/sfx_base.hpp" - "graphics/irr_driver.hpp" - "guiengine/scalable_font.hpp" - "guiengine/screen.hpp" - "guiengine/widgets/button_widget.hpp" - "guiengine/widgets/check_box_widget.hpp" - "guiengine/widgets/dynamic_ribbon_widget.hpp" - "guiengine/widgets/list_widget.hpp" - "guiengine/widgets/spinner_widget.hpp" - "guiengine/widget.hpp" - "io/file_manager.hpp" - "states_screens/main_menu_screen.hpp" - "states_screens/options_screen_audio.hpp" - "states_screens/options_screen_input.hpp" - "states_screens/options_screen_players.hpp" - "states_screens/options_screen_video.hpp" - "states_screens/state_manager.hpp" - "utils/string_utils.hpp" - "utils/translation.hpp" - - - -1335368658 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\options_screen_video.cpp - "states_screens/options_screen_video.hpp" - "audio/music_manager.hpp" - "audio/sfx_manager.hpp" - "audio/sfx_base.hpp" - "graphics/irr_driver.hpp" - "guiengine/screen.hpp" - "guiengine/widgets/button_widget.hpp" - "guiengine/widgets/check_box_widget.hpp" - "guiengine/widgets/dynamic_ribbon_widget.hpp" - "guiengine/widgets/spinner_widget.hpp" - "guiengine/widget.hpp" - "io/file_manager.hpp" - "states_screens/dialogs/custom_video_settings.hpp" - "states_screens/options_screen_audio.hpp" - "states_screens/options_screen_input.hpp" - "states_screens/options_screen_players.hpp" - "states_screens/options_screen_ui.hpp" - "states_screens/state_manager.hpp" - "utils/string_utils.hpp" - "utils/translation.hpp" - - - -1351466360 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\race_gui.cpp - "states_screens/race_gui.hpp" - - "challenges/unlock_manager.hpp" - "config/user_config.hpp" - "graphics/camera.hpp" - "graphics/irr_driver.hpp" - "graphics/material_manager.hpp" - "guiengine/engine.hpp" - "guiengine/modaldialog.hpp" - "guiengine/scalable_font.hpp" - "io/file_manager.hpp" - "input/input.hpp" - "input/input_manager.hpp" - "items/attachment.hpp" - "items/attachment_manager.hpp" - "items/powerup_manager.hpp" - "karts/abstract_kart.hpp" - "karts/controller/controller.hpp" - "karts/kart_properties.hpp" - "karts/kart_properties_manager.hpp" - "modes/follow_the_leader.hpp" - "modes/linear_world.hpp" - "modes/world.hpp" - "race/race_manager.hpp" - "tracks/track.hpp" - "utils/constants.hpp" - "utils/string_utils.hpp" - "utils/translation.hpp" - -1354364086 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\race_gui_base.cpp - "states_screens/race_gui_base.hpp" - - - - - "audio/music_manager.hpp" - "graphics/irr_driver.hpp" - "graphics/material.hpp" - "graphics/material_manager.hpp" - "graphics/referee.hpp" - "guiengine/scalable_font.hpp" - "io/file_manager.hpp" - "items/attachment_manager.hpp" - "items/powerup.hpp" - "karts/abstract_kart.hpp" - "karts/abstract_kart_animation.hpp" - "karts/controller/controller.hpp" - "karts/explosion_animation.hpp" - "karts/kart_properties.hpp" - "karts/kart_properties_manager.hpp" - "karts/rescue_animation.hpp" - "modes/follow_the_leader.hpp" - "modes/world.hpp" - "tracks/track.hpp" - "utils/constants.hpp" - - -1353844224 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\race_gui_overworld.cpp - "states_screens/race_gui_overworld.hpp" - - "challenges/unlock_manager.hpp" - "config/user_config.hpp" - "graphics/camera.hpp" - "graphics/irr_driver.hpp" - "graphics/material_manager.hpp" - "guiengine/engine.hpp" - "guiengine/modaldialog.hpp" - "guiengine/scalable_font.hpp" - "io/file_manager.hpp" - "input/input.hpp" - "input/input_manager.hpp" - "items/attachment.hpp" - "items/attachment_manager.hpp" - "items/powerup_manager.hpp" - "karts/abstract_kart.hpp" - "karts/controller/controller.hpp" - "karts/kart_properties.hpp" - "karts/kart_properties_manager.hpp" - "modes/world.hpp" - "race/grand_prix_manager.hpp" - "race/race_manager.hpp" - "tracks/track.hpp" - "tracks/track_manager.hpp" - "utils/constants.hpp" - "utils/string_utils.hpp" - "utils/translation.hpp" - - - -1354839960 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\race_result_gui.cpp - "states_screens/race_result_gui.hpp" - "audio/music_manager.hpp" - "audio/sfx_base.hpp" - "challenges/unlock_manager.hpp" - "graphics/material.hpp" - "guiengine/engine.hpp" - "guiengine/scalable_font.hpp" - "guiengine/widget.hpp" - "guiengine/widgets/icon_button_widget.hpp" - "io/file_manager.hpp" - "karts/abstract_kart.hpp" - "karts/controller/controller.hpp" - "karts/kart_properties.hpp" - "karts/kart_properties_manager.hpp" - "modes/cutscene_world.hpp" - "modes/demo_world.hpp" - "modes/overworld.hpp" - "modes/world_with_rank.hpp" - "race/highscores.hpp" - "states_screens/dialogs/race_over_dialog.hpp" - "states_screens/feature_unlocked.hpp" - "states_screens/main_menu_screen.hpp" - "states_screens/race_setup_screen.hpp" - "tracks/track.hpp" - "tracks/track_manager.hpp" - "utils/string_utils.hpp" - -1350860794 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\race_setup_screen.cpp - "challenges/unlock_manager.hpp" - "guiengine/widgets/dynamic_ribbon_widget.hpp" - "guiengine/widgets/ribbon_widget.hpp" - "guiengine/widgets/spinner_widget.hpp" - "io/file_manager.hpp" - "race/race_manager.hpp" - "states_screens/arenas_screen.hpp" - "states_screens/state_manager.hpp" - "states_screens/tracks_screen.hpp" - "utils/translation.hpp" - "states_screens/race_setup_screen.hpp" - -1351465596 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\state_manager.cpp - "states_screens/state_manager.hpp" - "audio/sfx_manager.hpp" - "audio/music_manager.hpp" - "config/stk_config.hpp" - "graphics/irr_driver.hpp" - "guiengine/engine.hpp" - "guiengine/modaldialog.hpp" - "guiengine/screen.hpp" - "input/input_device.hpp" - "input/input_manager.hpp" - "main_loop.hpp" - "modes/profile_world.hpp" - "modes/world.hpp" - "utils/translation.hpp" - -1351466398 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\story_mode_lobby.cpp - "states_screens/story_mode_lobby.hpp" - "challenges/unlock_manager.hpp" - "guiengine/widgets/check_box_widget.hpp" - "guiengine/widgets/list_widget.hpp" - "states_screens/dialogs/enter_player_name_dialog.hpp" - "states_screens/main_menu_screen.hpp" - "states_screens/state_manager.hpp" - -1354018156 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\tracks_screen.cpp - "challenges/unlock_manager.hpp" - "graphics/irr_driver.hpp" - "guiengine/widget.hpp" - "guiengine/widgets/dynamic_ribbon_widget.hpp" - "guiengine/widgets/icon_button_widget.hpp" - "io/file_manager.hpp" - "race/grand_prix_data.hpp" - "race/grand_prix_manager.hpp" - "states_screens/state_manager.hpp" - "states_screens/tracks_screen.hpp" - "states_screens/dialogs/gp_info_dialog.hpp" - "states_screens/dialogs/track_info_dialog.hpp" - "tracks/track.hpp" - "tracks/track_manager.hpp" - "utils/translation.hpp" - - -1350860794 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\states_screens\tutorial_screen.cpp - "states_screens/tutorial_screen.hpp" - "guiengine/widgets/list_widget.hpp" - "utils/string_utils.hpp" - "graphics/irr_driver.hpp" - "tutorial/tutorial_manager.hpp" - "config/user_config.hpp" - "guiengine/engine.hpp" - "guiengine/widgets/dynamic_ribbon_widget.hpp" - "input/device_manager.hpp" - "input/input_manager.hpp" - "io/file_manager.hpp" - "karts/kart_properties_manager.hpp" - "network/network_manager.hpp" - "race/race_manager.hpp" - "states_screens/state_manager.hpp" - "utils/translation.hpp" - - "irrString.h" - -1300401266 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tinygettext\dictionary.cpp - - "log_stream.hpp" - "dictionary.hpp" - -1300320148 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tinygettext\log_stream.hpp - "log.hpp" - -1300320148 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tinygettext\log.hpp - - -1306089712 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tinygettext\dictionary_manager.cpp - "dictionary_manager.hpp" - - - - - - - "log_stream.hpp" - "po_parser.hpp" - "stk_file_system.hpp" - -1300320148 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tinygettext\po_parser.hpp - - - -1300320148 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tinygettext\stk_file_system.hpp - "file_system.hpp" - -1300320148 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tinygettext\file_system.hpp - - - - - -1300320148 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tinygettext\iconv.cpp - - - - - - - - "iconv.hpp" - "log_stream.hpp" - -1300320148 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tinygettext\iconv.hpp - - "SDL.h" - - -1355091350 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tinygettext\language.cpp - "language.hpp" - - - - -1300320148 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tinygettext\log.cpp - - "log.hpp" - -1300320148 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tinygettext\plural_forms.cpp - "plural_forms.hpp" - - -1300320148 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tinygettext\po_parser.cpp - "po_parser.hpp" - - - - - - - - "language.hpp" - "log_stream.hpp" - "iconv.hpp" - "dictionary.hpp" - "plural_forms.hpp" - -1300320148 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tinygettext\stk_file_system.cpp - "stk_file_system.hpp" - - - - - "io/file_manager.hpp" - -1300320148 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tinygettext\tinygettext.cpp - -1332188472 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\ambient_light_sphere.cpp - "tracks/ambient_light_sphere.hpp" - - - "graphics/camera.hpp" - "io/xml_node.hpp" - "karts/abstract_kart.hpp" - "modes/world.hpp" - "race/race_manager.hpp" - "tracks/track.hpp" - -1329392722 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\ambient_light_sphere.hpp - - "tracks/check_sphere.hpp" - -1329392722 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\check_sphere.hpp - "tracks/check_structure.hpp" - -1333417614 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\check_structure.hpp - - "utils/aligned_array.hpp" - "utils/vec3.hpp" - -1323197016 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\bezier_curve.cpp - "tracks/bezier_curve.hpp" - "io/xml_node.hpp" - -1337034402 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\check_cannon.cpp - "tracks/check_cannon.hpp" - "animations/animation_base.hpp" - "animations/ipo.hpp" - "graphics/show_curve.hpp" - "io/xml_node.hpp" - "karts/abstract_kart.hpp" - "karts/cannon_animation.hpp" - "modes/world.hpp" - -1337034402 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\check_cannon.hpp - "animations/animation_base.hpp" - "tracks/check_line.hpp" - -1334786866 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\check_line.hpp - - - - "tracks/check_structure.hpp" - -1332188472 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\check_lap.cpp - "tracks/check_lap.hpp" - - "io/xml_node.hpp" - "karts/abstract_kart.hpp" - "modes/linear_world.hpp" - "race/race_manager.hpp" - "tracks/track.hpp" - -1329392722 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\check_lap.hpp - "tracks/check_structure.hpp" - -1336460836 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\check_line.cpp - "tracks/check_line.hpp" - "graphics/irr_driver.hpp" - "io/xml_node.hpp" - "karts/abstract_kart.hpp" - "modes/world.hpp" - "race/race_manager.hpp" - "irrlicht.h" - - - -1333417614 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\check_manager.cpp - "tracks/check_manager.hpp" - - - "io/xml_node.hpp" - "tracks/ambient_light_sphere.hpp" - "tracks/check_cannon.hpp" - "tracks/check_lap.hpp" - "tracks/check_line.hpp" - "tracks/check_structure.hpp" - "tracks/track.hpp" - -1329392722 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\check_manager.hpp - "utils/no_copy.hpp" - - - - -1329392722 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\check_sphere.cpp - "tracks/check_sphere.hpp" - - - "io/xml_node.hpp" - "modes/world.hpp" - "race/race_manager.hpp" - -1334754858 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\check_structure.cpp - "tracks/check_structure.hpp" - - "karts/abstract_kart.hpp" - "modes/linear_world.hpp" - "modes/world.hpp" - "race/race_manager.hpp" - "tracks/check_lap.hpp" - "tracks/check_manager.hpp" - -1346712570 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\graph_node.cpp - "tracks/quad_graph.hpp" - "config/user_config.hpp" - "graphics/irr_driver.hpp" - "io/file_manager.hpp" - "io/xml_node.hpp" - "tracks/quad_graph.hpp" - "tracks/quad_set.hpp" - -1336266784 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\lod_node_loader.cpp - "tracks/lod_node_loader.hpp" - "graphics/irr_driver.hpp" - "graphics/lod_node.hpp" - "io/xml_node.hpp" - "tracks/track.hpp" - - - - - -1336266784 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\lod_node_loader.hpp - - - - "io/xml_node.hpp" - -1350852514 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\quad.cpp - "tracks/quad.hpp" - - - - "LinearMath/btTransform.h" - -1350878512 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\quad_graph.cpp - "tracks/quad_graph.hpp" - "LinearMath/btTransform.h" - - - "config/user_config.hpp" - "graphics/irr_driver.hpp" - "io/file_manager.hpp" - "io/xml_node.hpp" - "modes/world.hpp" - "tracks/check_lap.hpp" - "tracks/check_line.hpp" - "tracks/check_manager.hpp" - "tracks/quad_set.hpp" - "tracks/track.hpp" - -1344409076 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\quad_set.cpp - "tracks/quad_set.hpp" - - - "io/file_manager.hpp" - "io/xml_node.hpp" - "utils/string_utils.hpp" - -1323197016 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\terrain_info.cpp - "tracks/terrain_info.hpp" - - "modes/world.hpp" - "physics/triangle_mesh.hpp" - "race/race_manager.hpp" - "tracks/track.hpp" - "utils/constants.hpp" - -1353374884 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\track.cpp - "tracks/track.hpp" - - - - - "audio/music_manager.hpp" - "challenges/challenge.hpp" - "challenges/unlock_manager.hpp" - "config/stk_config.hpp" - "config/user_config.hpp" - "graphics/camera.hpp" - "graphics/CBatchingMesh.hpp" - "graphics/irr_driver.hpp" - "graphics/lod_node.hpp" - "graphics/material_manager.hpp" - "graphics/mesh_tools.hpp" - "graphics/moving_texture.hpp" - "graphics/particle_emitter.hpp" - "graphics/particle_kind.hpp" - "graphics/particle_kind_manager.hpp" - "guiengine/scalable_font.hpp" - "io/file_manager.hpp" - "io/xml_node.hpp" - "items/item.hpp" - "items/item_manager.hpp" - "modes/linear_world.hpp" - "modes/world.hpp" - "physics/physical_object.hpp" - "physics/physics.hpp" - "physics/triangle_mesh.hpp" - "race/race_manager.hpp" - "tracks/bezier_curve.hpp" - "tracks/check_manager.hpp" - "tracks/lod_node_loader.hpp" - "tracks/track_manager.hpp" - "tracks/quad_graph.hpp" - "tracks/quad_set.hpp" - "tracks/track_object_manager.hpp" - "utils/constants.hpp" - "utils/string_utils.hpp" - "utils/translation.hpp" - - - - - - -1335298712 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\track_manager.cpp - "tracks/track_manager.hpp" - - - - - - "audio/music_manager.hpp" - "config/stk_config.hpp" - "io/file_manager.hpp" - "tracks/track.hpp" - -1349007362 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\track_object.cpp - "tracks/track_object.hpp" - "audio/sfx_base.hpp" - "audio/sfx_buffer.hpp" - "audio/sfx_manager.hpp" - "graphics/irr_driver.hpp" - "graphics/lod_node.hpp" - "graphics/particle_emitter.hpp" - "graphics/particle_kind_manager.hpp" - "io/file_manager.hpp" - "io/xml_node.hpp" - "items/item_manager.hpp" - "modes/overworld.hpp" - "modes/world.hpp" - "states_screens/dialogs/race_paused_dialog.hpp" - "tracks/track.hpp" - - - - -1352033824 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\track_object_manager.cpp - "tracks/track_object_manager.hpp" - "animations/ipo.hpp" - "config/user_config.hpp" - "animations/billboard_animation.hpp" - "animations/three_d_animation.hpp" - "graphics/irr_driver.hpp" - "graphics/lod_node.hpp" - "graphics/material_manager.hpp" - "io/xml_node.hpp" - "physics/physical_object.hpp" - "tracks/track_object.hpp" - - - -1341989312 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tracks\track_sector.cpp - "modes/linear_world.hpp" - "modes/world.hpp" - "tracks/check_manager.hpp" - "tracks/check_structure.hpp" - "tracks/track.hpp" - "tracks/track_sector.hpp" - "tracks/quad_graph.hpp" - -1292540234 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tutorial\tutorial.cpp - "tutorial.hpp" - -1350860794 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tutorial\tutorial_data.cpp - "tutorial/tutorial_data.hpp" - - - "karts/abstract_kart.hpp" - "karts/kart_properties_manager.hpp" - "modes/linear_world.hpp" - "race/grand_prix_data.hpp" - "race/grand_prix_manager.hpp" - "race/race_manager.hpp" - "tracks/track.hpp" - "tracks/track_manager.hpp" - "utils/translation.hpp" - -1306698744 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\tutorial\tutorial_manager.cpp - "tutorial/tutorial_manager.hpp" - - - - - - "audio/sfx_base.hpp" - "audio/sfx_manager.hpp" - "config/user_config.hpp" - "io/file_manager.hpp" - "karts/kart_properties_manager.hpp" - "race/race_manager.hpp" - "tracks/track_manager.hpp" - "utils/string_utils.hpp" - -1355181700 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\utils\constants.cpp - -1344304468 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\utils\leak_check.cpp - "utils/leak_check.hpp" - "utils/synchronised.hpp" - "utils/ptr_vector.hpp" - - - - - - -1311305198 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\utils\profiler.cpp - "profiler.hpp" - "graphics/irr_driver.hpp" - "guiengine/event_handler.hpp" - "guiengine/engine.hpp" - "guiengine/scalable_font.hpp" - - - - - - -1323197016 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\utils\random_generator.cpp - "utils/random_generator.hpp" - - - -1353676418 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\utils\string_utils.cpp - "utils/string_utils.hpp" - "coreutil.h" - "math.h" - - - - - - -1323197016 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\utils\translation.cpp - "utils/translation.hpp" - - - - - - - - - - "io/file_manager.hpp" - "utils/constants.hpp" - "utils/utf8.h" - -1277980558 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\fribidi\fribidi.h - "fribidi-common.h" - "fribidi-unicode.h" - "fribidi-types.h" - "fribidi-flags.h" - "fribidi-bidi-types.h" - "fribidi-bidi.h" - "fribidi-joining-types.h" - "fribidi-joining.h" - "fribidi-mirroring.h" - "fribidi-arabic.h" - "fribidi-shape.h" - "fribidi-char-sets.h" - "fribidi-deprecated.h" - "fribidi-begindecls.h" - "fribidi-enddecls.h" - -1277982602 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\fribidi\fribidi-common.h - "fribidi-config.h" - - - -1277980596 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\fribidi\fribidi-config.h - -1277980558 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\fribidi\fribidi-unicode.h - "fribidi-common.h" - "fribidi-types.h" - "fribidi-begindecls.h" - "fribidi-unicode-version.h" - "fribidi-enddecls.h" - -1277980558 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\fribidi\fribidi-types.h - "fribidi-common.h" - "fribidi-begindecls.h" - - - - - - - - "fribidi-enddecls.h" - -1277980558 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\fribidi\fribidi-begindecls.h - -1277980558 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\fribidi\fribidi-enddecls.h - -1277980558 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\fribidi\fribidi-unicode-version.h - -1277980558 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\fribidi\fribidi-flags.h - "fribidi-common.h" - "fribidi-types.h" - "fribidi-begindecls.h" - "fribidi-enddecls.h" - -1277980558 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\fribidi\fribidi-bidi-types.h - "fribidi-common.h" - "fribidi-types.h" - "fribidi-begindecls.h" - "fribidi-bidi-types-list.h" - "fribidi-bidi-types-list.h" - "fribidi-enddecls.h" - -1277980558 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\fribidi\fribidi-bidi-types-list.h - "fribidi-bidi-types-list.h" - -1277980558 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\fribidi\fribidi-bidi.h - "fribidi-common.h" - "fribidi-types.h" - "fribidi-flags.h" - "fribidi-bidi-types.h" - "fribidi-begindecls.h" - "fribidi-enddecls.h" - -1277980558 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\fribidi\fribidi-joining-types.h - "fribidi-common.h" - "fribidi-types.h" - "fribidi-begindecls.h" - "fribidi-joining-types-list.h" - "fribidi-enddecls.h" - -1277980558 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\fribidi\fribidi-joining-types-list.h - -1277980558 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\fribidi\fribidi-joining.h - "fribidi-common.h" - "fribidi-types.h" - "fribidi-bidi-types.h" - "fribidi-joining-types.h" - "fribidi-begindecls.h" - "fribidi-enddecls.h" - -1277980558 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\fribidi\fribidi-mirroring.h - "fribidi-common.h" - "fribidi-types.h" - "fribidi-bidi-types.h" - "fribidi-begindecls.h" - "fribidi-enddecls.h" - -1277980558 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\fribidi\fribidi-arabic.h - "fribidi-common.h" - "fribidi-types.h" - "fribidi-flags.h" - "fribidi-bidi-types.h" - "fribidi-joining.h" - "fribidi-begindecls.h" - "fribidi-enddecls.h" - -1277980558 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\fribidi\fribidi-shape.h - "fribidi-types.h" - "fribidi-flags.h" - "fribidi-bidi-types.h" - "fribidi-joining-types.h" - "fribidi-begindecls.h" - "fribidi-enddecls.h" - -1277980616 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\fribidi\fribidi-char-sets.h - "fribidi-common.h" - "fribidi-types.h" - "fribidi-begindecls.h" - "fribidi-char-sets-list.h" - "fribidi-enddecls.h" - -1277980616 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\fribidi\fribidi-char-sets-list.h - -1277980558 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\dependencies\fribidi\fribidi-deprecated.h - "fribidi-common.h" - "fribidi-types.h" - "fribidi-bidi-types.h" - "fribidi-begindecls.h" - "fribidi-enddecls.h" - -1300320148 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\utils\utf8.h - "utf8/checked.h" - "utf8/unchecked.h" - -1336460992 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\utils\utf8\checked.h - "core.h" - - -1306963158 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\utils\utf8\core.h - - -1306963158 d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\utils\utf8\unchecked.h - "core.h" - -1323197016 source:d:\artifacts\projects\gsoc\gsoc2013\super tuxkart\trail2\supertuxkart-0.8\src\utils\vec3.cpp - "utils/vec3.hpp" - diff --git a/src/ide/codeblocks/supertuxkart.layout b/src/ide/codeblocks/supertuxkart.layout deleted file mode 100644 index c0bc4258b..000000000 --- a/src/ide/codeblocks/supertuxkart.layout +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/src/ide/codeblocks/supertuxkart.workspace b/src/ide/codeblocks/supertuxkart.workspace deleted file mode 100644 index 24418fde1..000000000 --- a/src/ide/codeblocks/supertuxkart.workspace +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/src/ide/vc10/bullet_lib.vcxproj b/src/ide/vc10/bullet_lib.vcxproj deleted file mode 100644 index b366b3281..000000000 --- a/src/ide/vc10/bullet_lib.vcxproj +++ /dev/null @@ -1,448 +0,0 @@ - - - - - debug - Win32 - - - debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4} - bullet_lib - ManagedCProj - - - - StaticLibrary - MultiByte - false - - - StaticLibrary - MultiByte - false - - - StaticLibrary - MultiByte - false - true - - - StaticLibrary - MultiByte - false - true - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - $(Configuration)\ - - - - false - ..\..\..\lib\bullet\src;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;BT_NO_PROFILE;HAVE_GLUT;%(PreprocessorDefinitions) - true - MultiThreaded - - - Level3 - ProgramDatabase - - - - - false - ..\..\..\lib\bullet\src;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;BT_NO_PROFILE;HAVE_GLUT;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - StreamingSIMDExtensions2 - - - - - Disabled - ..\..\..\lib\bullet\src;%(AdditionalIncludeDirectories) - WIN32;BT_NO_PROFILE;HAVE_GLUT;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - false - - - Level3 - EditAndContinue - - - - - Disabled - ..\..\..\lib\bullet\src;%(AdditionalIncludeDirectories) - WIN32;BT_NO_PROFILE;HAVE_GLUT;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - false - - - Level3 - ProgramDatabase - true - StreamingSIMDExtensions2 - - - - - true - true - - - true - true - - - true - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/ide/vc10/enet.vcxproj b/src/ide/vc10/enet.vcxproj deleted file mode 100644 index b539ee67c..000000000 --- a/src/ide/vc10/enet.vcxproj +++ /dev/null @@ -1,160 +0,0 @@ - - - - - debug - Win32 - - - debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF} - enet - Win32Proj - - - - StaticLibrary - Unicode - true - - - StaticLibrary - Unicode - true - - - StaticLibrary - Unicode - true - - - StaticLibrary - Unicode - true - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - $(Configuration)\ - - - - MaxSpeed - true - false - ../../../lib/enet/include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - - - MaxSpeed - true - false - ../../../lib/enet/include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - - - MaxSpeed - true - false - ../../../lib/enet/include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - - - MaxSpeed - true - false - ../../../lib/enet/include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/ide/vc10/supertuxkart.sln b/src/ide/vc10/supertuxkart.sln deleted file mode 100644 index 6ae4a4b0a..000000000 --- a/src/ide/vc10/supertuxkart.sln +++ /dev/null @@ -1,74 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual C++ Express 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "supertuxkart", "supertuxkart.vcxproj", "{B1BC2764-1A43-4800-A654-788B0D05EDA2}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bullet_lib", "bullet_lib.vcxproj", "{54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "enet", "enet.vcxproj", "{B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Irrlicht", "..\..\..\lib\irrlicht\source\Irrlicht\Irrlicht10.0.vcxproj", "{E08E042A-6C45-411B-92BE-3CC31331019F}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - debug|experimental_x64 = debug|experimental_x64 - debug|Win32 = debug|Win32 - Release - Fast FPU|experimental_x64 = Release - Fast FPU|experimental_x64 - Release - Fast FPU|Win32 = Release - Fast FPU|Win32 - Release|experimental_x64 = Release|experimental_x64 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.debug|experimental_x64.ActiveCfg = debug|x64 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.debug|experimental_x64.Build.0 = debug|x64 - {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 - Fast FPU|experimental_x64.ActiveCfg = Release|x64 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Release - Fast FPU|experimental_x64.Build.0 = Release|x64 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Release - Fast FPU|Win32.ActiveCfg = Release|Win32 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Release - Fast FPU|Win32.Build.0 = Release|Win32 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Release|experimental_x64.ActiveCfg = Release|x64 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Release|experimental_x64.Build.0 = Release|x64 - {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|experimental_x64.ActiveCfg = debug|x64 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.debug|experimental_x64.Build.0 = debug|x64 - {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}.Release - Fast FPU|experimental_x64.ActiveCfg = Release|x64 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Release - Fast FPU|experimental_x64.Build.0 = Release|x64 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Release - Fast FPU|Win32.ActiveCfg = Release|Win32 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Release - Fast FPU|Win32.Build.0 = Release|Win32 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Release|experimental_x64.ActiveCfg = Release|x64 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Release|experimental_x64.Build.0 = Release|x64 - {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|experimental_x64.ActiveCfg = debug|x64 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.debug|experimental_x64.Build.0 = debug|x64 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.debug|Win32.ActiveCfg = debug|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.debug|Win32.Build.0 = debug|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Release - Fast FPU|experimental_x64.ActiveCfg = Release|x64 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Release - Fast FPU|experimental_x64.Build.0 = Release|x64 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Release - Fast FPU|Win32.ActiveCfg = Release|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Release - Fast FPU|Win32.Build.0 = Release|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Release|experimental_x64.ActiveCfg = Release|x64 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Release|experimental_x64.Build.0 = Release|x64 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Release|Win32.ActiveCfg = Release|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Release|Win32.Build.0 = Release|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.debug|experimental_x64.ActiveCfg = Static lib - Debug|x64 - {E08E042A-6C45-411B-92BE-3CC31331019F}.debug|experimental_x64.Build.0 = Static lib - Debug|x64 - {E08E042A-6C45-411B-92BE-3CC31331019F}.debug|Win32.ActiveCfg = Static lib - Debug|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.debug|Win32.Build.0 = Static lib - Debug|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Release - Fast FPU|experimental_x64.ActiveCfg = Static lib - Debug|x64 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Release - Fast FPU|experimental_x64.Build.0 = Static lib - Debug|x64 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Release - Fast FPU|Win32.ActiveCfg = Static lib - Release - Fast FPU|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Release - Fast FPU|Win32.Build.0 = Static lib - Release - Fast FPU|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Release|experimental_x64.ActiveCfg = Static lib - Release|x64 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Release|experimental_x64.Build.0 = Static lib - Release|x64 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Release|Win32.ActiveCfg = Static lib - Release|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Release|Win32.Build.0 = Static lib - Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/src/ide/vc10/supertuxkart.vcxproj b/src/ide/vc10/supertuxkart.vcxproj deleted file mode 100644 index 569fe9653..000000000 --- a/src/ide/vc10/supertuxkart.vcxproj +++ /dev/null @@ -1,743 +0,0 @@ - - - - - debug - Win32 - - - debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {B1BC2764-1A43-4800-A654-788B0D05EDA2} - supertuxkart - Win32Proj - - - - Application - MultiByte - - - Application - NotSet - v100 - - - Application - MultiByte - true - - - Application - MultiByte - true - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\../ - ..\..\../ - $(Configuration)\ - $(Configuration)\ - false - false - ..\..\../ - ..\..\../ - $(Configuration)\ - $(Configuration)\ - true - true - $(ProjectName)_d - $(ProjectName)_d - C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include;$(IncludePath) - - - - true - ../../../src;../../../lib/bullet/src;../../../lib/enet/include;../../../dependencies/include;../../../lib/irrlicht/include;%(AdditionalIncludeDirectories) - HAVE_OGGVORBIS;NDEBUG;WIN32;NOMINMAX;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;BT_NO_PROFILE;PACKAGE="supertuxkart";ENABLE_BIDI;ADDONS_MANAGER;_IRR_STATIC_LIB_;%(PreprocessorDefinitions) - MultiThreadedDLL - - - Level3 - ProgramDatabase - - - opengl32.lib;user32.lib;gdi32.lib;winmm.lib;advapi32.lib;OpenAL32.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;Irrlicht.lib;ws2_32.lib;fribidi.lib;pthreadVC2.lib;libcurl_imp.lib;%(AdditionalDependencies) - $(OutDir)/$(ProjectName).exe - ../../../dependencies/lib;../../../lib/irrlicht/lib/Win32-visualstudio;%(AdditionalLibraryDirectories) - libcmt.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - MachineX86 - - - - - true - ../../../src;../../../lib/bullet/src;../../../lib/enet/include;../../../dependencies/include;../../../lib/irrlicht/include;%(AdditionalIncludeDirectories) - HAVE_OGGVORBIS;NDEBUG;WIN32;NOMINMAX;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;BT_NO_PROFILE;PACKAGE="supertuxkart";ENABLE_BIDI;WIN64;_IRR_STATIC_LIB_;%(PreprocessorDefinitions) - MultiThreadedDLL - NotUsing - Level3 - ProgramDatabase - StreamingSIMDExtensions2 - true - - - opengl32.lib;user32.lib;gdi32.lib;winmm.lib;advapi32.lib;OpenAL32.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;Irrlicht.lib;ws2_32.lib;libfribidi.lib;pthreadVC2.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)/$(ProjectName).exe - ../../../lib/irrlicht/lib/Win64-visualStudio;../../../dependencies/lib;%(AdditionalLibraryDirectories) - libcmt.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - true - true - false - - - - - - - Disabled - false - ../../../src;../../../lib/bullet/src;../../../lib/enet/include;../../../dependencies/include;../../../lib/irrlicht/include;%(AdditionalIncludeDirectories) - BT_NO_PROFILE;HAVE_OGGVORBIS;_DEBUG;WIN32;NOMINMAX;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;DEBUG;PACKAGE="supertuxkart";_CRTDBG_MAP_ALLOC;ENABLE_BIDI;_IRR_STATIC_LIB_;%(PreprocessorDefinitions) - false - false - true - EnableFastChecks - MultiThreadedDebugDLL - false - - - Level3 - EditAndContinue - - - opengl32.lib;user32.lib;gdi32.lib;winmm.lib;advapi32.lib;OpenAL32.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;Irrlicht.lib;ws2_32.lib;fribidi.lib;pthreadVC2.lib;libcurl_imp.lib;%(AdditionalDependencies) - $(TargetPath) - ../../../dependencies/lib;../../../lib/irrlicht/lib/Win32-visualstudio;%(AdditionalLibraryDirectories) - false - libcmt.lib;%(IgnoreSpecificDefaultLibraries) - true - false - - - false - Windows - - - false - - - MachineX86 - false - - - - - Disabled - false - ../../../src;../../../lib/bullet/src;../../../lib/enet/include;../../../dependencies/include;../../../lib/irrlicht/include;%(AdditionalIncludeDirectories) - BT_NO_PROFILE;HAVE_OGGVORBIS;_DEBUG;WIN32;NOMINMAX;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;DEBUG;PACKAGE="supertuxkart";_CRTDBG_MAP_ALLOC;ENABLE_BIDI;ADDONS_MANAGER;_WIN64;_IRR_STATIC_LIB_;%(PreprocessorDefinitions) - false - false - EnableFastChecks - MultiThreadedDebugDLL - false - - - Level3 - ProgramDatabase - false - StreamingSIMDExtensions2 - - - opengl32.lib;user32.lib;gdi32.lib;winmm.lib;advapi32.lib;OpenAL32.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;Irrlicht.lib;ws2_32.lib;libfribidi.lib;pthreadVC2.lib;libcurl.lib;%(AdditionalDependencies) - $(TargetPath) - ../../../dependencies/lib;../../../lib/irrlicht/lib/Win64-VisualStudio;%(AdditionalLibraryDirectories) - false - libcmt.lib;%(IgnoreSpecificDefaultLibraries) - true - false - - - false - Windows - - - false - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - false - false - false - false - false - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {e08e042a-6c45-411b-92be-3cc31331019f} - true - true - false - true - false - - - {54aa44b9-b07b-49da-8b1a-05bbfe8ad5d4} - false - - - {b0e92b97-089a-4d5b-bf17-77f1bc5daeef} - false - - - - - - \ No newline at end of file diff --git a/src/ide/vc10/supertuxkart.vcxproj.filters b/src/ide/vc10/supertuxkart.vcxproj.filters deleted file mode 100644 index 18d447b9c..000000000 --- a/src/ide/vc10/supertuxkart.vcxproj.filters +++ /dev/null @@ -1,1671 +0,0 @@ - - - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {55621666-34fd-482a-b2a0-077db2794fc5} - - - {386e9299-f42e-4175-8f00-c205aa480876} - - - {865587a4-41b6-4832-a961-2f012204ef4c} - - - {1953a99d-3f65-4efe-93d3-b0adb25f970d} - - - {fa2fbc61-28e7-44cc-830d-7d31019b910c} - - - {b231fec4-a731-46b5-a8cf-1ef8fa0bf7be} - - - {06defe0c-00ba-4c91-b0f4-fe0890362f0f} - - - {9f93fb34-c97b-4108-9cd0-3f844d421e11} - - - {6c09fe56-1df1-4fdc-9023-47887316c0b2} - - - {1298df87-da0e-462e-b074-a496598571d8} - - - {11a7d573-5959-4be8-8a3f-d455d7833333} - - - {d477b64b-eb9c-4059-a647-98f3a2f7203a} - - - {2f186570-85e9-4cea-88dc-0f716c6e141a} - - - {f2f3feeb-648b-4edf-8025-fb86e1a6d9bb} - - - {1ea79cd5-39b0-4228-b002-7bddf4d45fda} - - - {24d03539-463f-4c91-9ea0-6fd4b5f1dde0} - - - {24740454-5060-4191-bc49-7ff560db2aba} - - - {03371ee6-3cf3-4ed8-b69e-21a2d0f70351} - - - {62844994-aa74-4a31-b255-1815884856e2} - - - {79bdc1db-0db0-4d69-9e25-c9404a5ab2ee} - - - {fbc2e0f1-a87f-4205-94b4-2a8805338d2c} - - - {533141f3-f1ce-4815-8e9c-4253fd5e9f5e} - - - {5c9f42c5-1a5b-476b-998f-f84384767684} - - - {8da5c73a-5884-4e8d-818a-20521a66e611} - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {88b6497f-6336-4d65-b0e3-5fad9ff35ffb} - - - {c4431a49-640d-48e5-9ac7-473955a15283} - - - {6eeebf67-9364-4c48-9e24-e89164897f9e} - - - {3ee2b9d8-e9b8-4af3-a5bf-28ae532ed5cc} - - - {1bda54ec-85a1-4725-8425-e5942887808d} - - - {0f42eff9-e52c-4975-bc4a-52b0310ddb99} - - - {c3be189e-ac78-42f5-b6e2-7193d9b32e80} - - - {b91bda77-4ae6-4d47-8de1-65b8b992251e} - - - {cd929227-595c-45e8-bf99-ab06e6d586d8} - - - {4bb34709-b7d7-4c3b-9f26-e7a26ffd817a} - - - {8d8a1efe-f3d5-4532-8271-101ed960defc} - - - {45a7521f-d7d3-4404-8f6f-62e2b08c8f4c} - - - {07a426a7-14fb-495b-bff3-5a402664e035} - - - {00e74e62-f481-4883-a49f-661a5b3c9d88} - - - {1e496486-52dd-4fe4-9bd0-3ec0f2b280fc} - - - {7d4fb5af-51c8-4073-bdbf-e0420a211096} - - - {7d4c8018-8cb8-4335-b0db-217883ee8954} - - - {29b448e9-cfd5-4024-a3d7-360ad6d89fed} - - - {305929ad-22c9-4dce-8514-2b3ceab47d2b} - - - {02e2a507-6184-43fb-aa71-46ef3fc77a37} - - - {9ea7a6dd-0714-414c-970c-881b61411ef8} - - - {376d4c71-33a2-4def-949e-31bcb5b72812} - - - {5faa19dc-78e6-438e-a2a0-6a489961f098} - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav - - - - - Source Files - - - Source Files - - - Source Files\guiengine - - - Source Files\guiengine - - - Source Files\guiengine - - - Source Files\guiengine - - - Source Files\guiengine - - - Source Files\guiengine - - - Source Files\guiengine - - - Source Files\guiengine - - - Source Files\guiengine - - - Source Files\guiengine - - - Source Files\guiengine - - - Source Files\guiengine - - - Source Files\guiengine\widgets - - - Source Files\guiengine\widgets - - - Source Files\guiengine\widgets - - - Source Files\guiengine\widgets - - - Source Files\guiengine\widgets - - - Source Files\guiengine\widgets - - - Source Files\guiengine\widgets - - - Source Files\guiengine\widgets - - - Source Files\guiengine\widgets - - - Source Files\guiengine\widgets - - - Source Files\guiengine\widgets - - - Source Files\guiengine\widgets - - - Source Files\challenges - - - Source Files\challenges - - - Source Files\challenges - - - Source Files\utils - - - Source Files\utils - - - Source Files\utils - - - Source Files\utils - - - Source Files\utils - - - Source Files\audio - - - Source Files\audio - - - Source Files\audio - - - Source Files\audio - - - Source Files\audio - - - Source Files\audio - - - Source Files\modes - - - Source Files\modes - - - Source Files\modes - - - Source Files\modes - - - Source Files\modes - - - Source Files\modes - - - Source Files\modes - - - Source Files\modes - - - Source Files\items - - - Source Files\items - - - Source Files\items - - - Source Files\items - - - Source Files\items - - - Source Files\items - - - Source Files\items - - - Source Files\items - - - Source Files\items - - - Source Files\items - - - Source Files\items - - - Source Files\items - - - Source Files\physics - - - Source Files\physics - - - Source Files\physics - - - Source Files\physics - - - Source Files\physics - - - Source Files\physics - - - Source Files\karts - - - Source Files\karts - - - Source Files\karts - - - Source Files\karts - - - Source Files\karts - - - Source Files\karts - - - Source Files\karts\controller - - - Source Files\karts\controller - - - Source Files\karts\controller - - - Source Files\karts\controller - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\network - - - Source Files\network - - - Source Files\network - - - Source Files\network - - - Source Files\network - - - Source Files\network - - - Source Files\network - - - Source Files\network - - - Source Files\network - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\io - - - Source Files\io - - - Source Files\io - - - Source Files\input - - - Source Files\input - - - Source Files\input - - - Source Files\input - - - Source Files\race - - - Source Files\race - - - Source Files\race - - - Source Files\race - - - Source Files\race - - - Source Files\race - - - Source Files\config - - - Source Files\config - - - Source Files\config - - - Source Files\animations - - - Source Files\animations - - - Source Files\animations - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens\dialogs - - - Source Files\states_screens\dialogs - - - Source Files\states_screens\dialogs - - - Source Files\states_screens\dialogs - - - Source Files\states_screens\dialogs - - - Source Files\states_screens\dialogs - - - Source Files\states_screens\dialogs - - - Source Files\states_screens\dialogs - - - Source Files\states_screens\dialogs - - - Source Files\states_screens\dialogs - - - Source Files\addons - - - Source Files\addons - - - Source Files\addons - - - Source Files\addons - - - Source Files\graphics - - - Source Files\physics - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\tinygettext - - - Source Files\tinygettext - - - Source Files\tinygettext - - - Source Files\tinygettext - - - Source Files\tinygettext - - - Source Files\tinygettext - - - Source Files\tinygettext - - - Source Files\tinygettext - - - Source Files\graphics - - - Source Files\states_screens - - - Source Files\guiengine\widgets - - - Source Files\addons - - - Source Files\addons - - - Source Files\items - - - Source Files\utils - - - Source Files\graphics - - - Source Files\items - - - Source Files\graphics - - - Source Files\karts - - - Source Files\tracks - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\utils - - - Source Files - - - Source Files\challenges - - - Source Files\states_screens - - - Source Files\states_screens\dialogs - - - Source Files\modes - - - Source Files\states_screens - - - Source Files\karts - - - Source Files\states_screens\dialogs - - - Source Files\replay - - - Source Files\replay - - - Source Files\replay - - - Source Files\karts - - - Source Files\karts - - - Source Files\karts - - - Source Files\karts - - - Source Files\karts - - - Source Files\karts - - - Source Files\karts - - - Source Files\karts - - - Source Files\modes - - - Source Files\config - - - Source Files\tracks - - - Source Files\graphics - - - Source Files\karts\controller - - - Source Files\modes - - - Source Files\states_screens - - - Source Files\addons - - - Source Files\karts\controller - - - Source Files\states_screens - - - Source Files\tinygettext - - - Source Files\states_screens\dialogs - - - Source Files\utils - - - Source Files\modes - - - Source Files\modes - - - Source Files\modes - - - Source Files\states_screens - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\input - - - Source Files - - - Source Files\guiengine\widgets - - - - - Header Files - - - Header Files\guiengine - - - Header Files\guiengine - - - Header Files\guiengine - - - Header Files\guiengine - - - Header Files\guiengine - - - Header Files\guiengine - - - Header Files\guiengine - - - Header Files\guiengine - - - Header Files\guiengine - - - Header Files\guiengine - - - Header Files\guiengine - - - Header Files\guiengine\widgets - - - Header Files\guiengine\widgets - - - Header Files\guiengine\widgets - - - Header Files\guiengine\widgets - - - Header Files\guiengine\widgets - - - Header Files\guiengine\widgets - - - Header Files\guiengine\widgets - - - Header Files\guiengine\widgets - - - Header Files\guiengine\widgets - - - Header Files\guiengine\widgets - - - Header Files\guiengine\widgets - - - Header Files\guiengine\widgets - - - Header Files\challenges - - - Header Files\challenges - - - Header Files\challenges - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\utils - - - Header Files\utils - - - Header Files\utils - - - Header Files\utils - - - Header Files\utils - - - Header Files\utils - - - Header Files\utils - - - Header Files\utils - - - Header Files\audio - - - Header Files\audio - - - Header Files\audio - - - Header Files\audio - - - Header Files\audio - - - Header Files\audio - - - Header Files\audio - - - Header Files\audio - - - Header Files\modes - - - Header Files\modes - - - Header Files\modes - - - Header Files\modes - - - Header Files\modes - - - Header Files\modes - - - Header Files\modes - - - Header Files\modes - - - Header Files\items - - - Header Files\items - - - Header Files\items - - - Header Files\items - - - Header Files\items - - - Header Files\items - - - Header Files\items - - - Header Files\items - - - Header Files\items - - - Header Files\items - - - Header Files\items - - - Header Files\items - - - Header Files\physics - - - Header Files\physics - - - Header Files\physics - - - Header Files\physics - - - Header Files\physics - - - Header Files\physics - - - Header Files\physics - - - Header Files\physics - - - Header Files\karts - - - Header Files\karts - - - Header Files\karts - - - Header Files\karts - - - Header Files\karts - - - Header Files\karts - - - Header Files\karts - - - Header Files\karts\controller - - - Header Files\karts\controller - - - Header Files\karts\controller - - - Header Files\karts\controller - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\io - - - Header Files\io - - - Header Files\io - - - Header Files\input - - - Header Files\input - - - Header Files\input - - - Header Files\input - - - Header Files\input - - - Header Files\race - - - Header Files\race - - - Header Files\race - - - Header Files\race - - - Header Files\race - - - Header Files\race - - - Header Files\config - - - Header Files\config - - - Header Files\config - - - Header Files\config - - - Header Files\animations - - - Header Files\animations - - - Header Files\animations - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens\dialogs - - - Header Files\states_screens\dialogs - - - Header Files\states_screens\dialogs - - - Header Files\states_screens\dialogs - - - Header Files\states_screens\dialogs - - - Header Files\states_screens\dialogs - - - Header Files\states_screens\dialogs - - - Header Files\states_screens\dialogs - - - Header Files\states_screens\dialogs - - - Header Files\states_screens\dialogs - - - Header Files\addons - - - Header Files\addons - - - Header Files\addons - - - Header Files\addons - - - Header Files\graphics - - - Header Files\physics - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\tinygettext - - - Header Files\tinygettext - - - Header Files\tinygettext - - - Header Files\tinygettext - - - Header Files\tinygettext - - - Header Files\tinygettext - - - Header Files\tinygettext - - - Header Files\tinygettext - - - Header Files\tinygettext - - - Header Files\tinygettext - - - Header Files\utils\utf8 - - - Header Files\utils\utf8 - - - Header Files\utils\utf8 - - - Header Files\utils - - - Header Files\graphics - - - Header Files\states_screens - - - Header Files\utils - - - Header Files\guiengine\widgets - - - Header Files\addons - - - Header Files\addons - - - Header Files\items - - - Header Files\utils - - - Header Files\graphics - - - Header Files\items - - - Header Files\graphics - - - Header Files\karts - - - Header Files\tracks - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\utils - - - Header Files - - - Header Files\challenges - - - Header Files\states_screens - - - Header Files\states_screens\dialogs - - - Header Files\modes - - - Header Files\states_screens - - - Header Files\karts - - - Header Files\states_screens\dialogs - - - Header Files\replay - - - Header Files\replay - - - Header Files\replay - - - Header Files\karts - - - Header Files\karts - - - Header Files\karts - - - Header Files\karts - - - Header Files\karts - - - Header Files\karts - - - Header Files\karts - - - Header Files\karts - - - Header Files\modes - - - Header Files\tracks - - - Header Files\utils - - - Header Files\graphics - - - Header Files\karts\controller - - - Header Files\modes - - - Header Files\states_screens - - - Header Files\addons - - - Header Files\karts\controller - - - Header Files\utils - - - Header Files\tinygettext - - - Header Files\states_screens\dialogs - - - Header Files\utils - - - Header Files\modes - - - Header Files\modes - - - Header Files\modes - - - Header Files\states_screens - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\input - - - Header Files - - - Header Files\guiengine\widgets - - - \ No newline at end of file diff --git a/src/ide/vc11/bullet_lib.vcxproj b/src/ide/vc11/bullet_lib.vcxproj deleted file mode 100644 index 4bf6135bb..000000000 --- a/src/ide/vc11/bullet_lib.vcxproj +++ /dev/null @@ -1,452 +0,0 @@ - - - - - debug - Win32 - - - debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4} - bullet_lib - ManagedCProj - - - - StaticLibrary - MultiByte - false - v110 - - - StaticLibrary - MultiByte - false - v110 - - - StaticLibrary - MultiByte - false - true - v110 - - - StaticLibrary - MultiByte - false - true - v110 - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - $(Configuration)\ - - - - false - ..\..\..\lib\bullet\src;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;BT_NO_PROFILE;HAVE_GLUT;%(PreprocessorDefinitions) - true - MultiThreadedDLL - - - Level3 - ProgramDatabase - - - - - false - ..\..\..\lib\bullet\src;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;BT_NO_PROFILE;HAVE_GLUT;%(PreprocessorDefinitions) - MultiThreaded - - - Level3 - ProgramDatabase - StreamingSIMDExtensions2 - - - - - Disabled - ..\..\..\lib\bullet\src;%(AdditionalIncludeDirectories) - WIN32;BT_NO_PROFILE;HAVE_GLUT;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - false - - - Level3 - EditAndContinue - - - - - Disabled - ..\..\..\lib\bullet\src;%(AdditionalIncludeDirectories) - WIN32;BT_NO_PROFILE;HAVE_GLUT;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - false - - - Level3 - ProgramDatabase - true - StreamingSIMDExtensions2 - - - - - true - true - - - true - true - - - true - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/ide/vc11/enet.vcxproj b/src/ide/vc11/enet.vcxproj deleted file mode 100644 index 82e4a71ec..000000000 --- a/src/ide/vc11/enet.vcxproj +++ /dev/null @@ -1,164 +0,0 @@ - - - - - debug - Win32 - - - debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF} - enet - Win32Proj - - - - StaticLibrary - Unicode - true - v110 - - - StaticLibrary - Unicode - true - v110 - - - StaticLibrary - Unicode - true - v110 - - - StaticLibrary - Unicode - true - v110 - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - $(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - $(Configuration)\ - - - - MaxSpeed - true - false - ../../../lib/enet/include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - - - MaxSpeed - true - false - ../../../lib/enet/include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - - - - - MaxSpeed - true - false - ../../../lib/enet/include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - MultiThreadedDebugDLL - true - - - Level3 - ProgramDatabase - - - - - MaxSpeed - true - false - ../../../lib/enet/include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/ide/vc11/supertuxkart.sln b/src/ide/vc11/supertuxkart.sln deleted file mode 100644 index 818e251a7..000000000 --- a/src/ide/vc11/supertuxkart.sln +++ /dev/null @@ -1,190 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Express 2012 for Windows Desktop -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "supertuxkart", "supertuxkart.vcxproj", "{B1BC2764-1A43-4800-A654-788B0D05EDA2}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bullet_lib", "bullet_lib.vcxproj", "{54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "enet", "enet.vcxproj", "{B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Irrlicht", "..\..\..\lib\irrlicht\source\Irrlicht\Irrlicht11.0.vcxproj", "{E08E042A-6C45-411B-92BE-3CC31331019F}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - debug|experimental_x64 = debug|experimental_x64 - debug|Win32 = debug|Win32 - debug|x64 = debug|x64 - Release - Fast FPU|experimental_x64 = Release - Fast FPU|experimental_x64 - Release - Fast FPU|Win32 = Release - Fast FPU|Win32 - Release - Fast FPU|x64 = Release - Fast FPU|x64 - Release|experimental_x64 = Release|experimental_x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - SDL-Debug|experimental_x64 = SDL-Debug|experimental_x64 - SDL-Debug|Win32 = SDL-Debug|Win32 - SDL-Debug|x64 = SDL-Debug|x64 - Static lib - Debug|experimental_x64 = Static lib - Debug|experimental_x64 - Static lib - Debug|Win32 = Static lib - Debug|Win32 - Static lib - Debug|x64 = Static lib - Debug|x64 - Static lib - Release - Fast FPU|experimental_x64 = Static lib - Release - Fast FPU|experimental_x64 - Static lib - Release - Fast FPU|Win32 = Static lib - Release - Fast FPU|Win32 - Static lib - Release - Fast FPU|x64 = Static lib - Release - Fast FPU|x64 - Static lib - Release|experimental_x64 = Static lib - Release|experimental_x64 - Static lib - Release|Win32 = Static lib - Release|Win32 - Static lib - Release|x64 = Static lib - Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.debug|experimental_x64.ActiveCfg = debug|x64 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.debug|experimental_x64.Build.0 = debug|x64 - {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}.debug|x64.ActiveCfg = debug|x64 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.debug|x64.Build.0 = debug|x64 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Release - Fast FPU|experimental_x64.ActiveCfg = Release|x64 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Release - Fast FPU|experimental_x64.Build.0 = Release|x64 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Release - Fast FPU|Win32.ActiveCfg = Release|Win32 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Release - Fast FPU|Win32.Build.0 = Release|Win32 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Release - Fast FPU|x64.ActiveCfg = Release|x64 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Release - Fast FPU|x64.Build.0 = Release|x64 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Release|experimental_x64.ActiveCfg = Release|x64 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Release|experimental_x64.Build.0 = Release|x64 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Release|Win32.ActiveCfg = Release|Win32 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Release|Win32.Build.0 = Release|Win32 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Release|x64.ActiveCfg = Release|x64 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Release|x64.Build.0 = Release|x64 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.SDL-Debug|experimental_x64.ActiveCfg = Release|Win32 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.SDL-Debug|Win32.ActiveCfg = Release|Win32 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.SDL-Debug|Win32.Build.0 = Release|Win32 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.SDL-Debug|x64.ActiveCfg = Release|x64 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.SDL-Debug|x64.Build.0 = Release|x64 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Static lib - Debug|experimental_x64.ActiveCfg = Release|Win32 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Static lib - Debug|Win32.ActiveCfg = Release|Win32 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Static lib - Debug|Win32.Build.0 = Release|Win32 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Static lib - Debug|x64.ActiveCfg = Release|x64 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Static lib - Debug|x64.Build.0 = Release|x64 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Static lib - Release - Fast FPU|experimental_x64.ActiveCfg = Release|Win32 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Static lib - Release - Fast FPU|Win32.ActiveCfg = Release|Win32 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Static lib - Release - Fast FPU|Win32.Build.0 = Release|Win32 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Static lib - Release - Fast FPU|x64.ActiveCfg = Release|x64 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Static lib - Release - Fast FPU|x64.Build.0 = Release|x64 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Static lib - Release|experimental_x64.ActiveCfg = Release|Win32 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Static lib - Release|Win32.ActiveCfg = Release|Win32 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Static lib - Release|Win32.Build.0 = Release|Win32 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Static lib - Release|x64.ActiveCfg = Release|x64 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Static lib - Release|x64.Build.0 = Release|x64 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.debug|experimental_x64.ActiveCfg = debug|x64 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.debug|experimental_x64.Build.0 = debug|x64 - {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}.debug|x64.ActiveCfg = debug|x64 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.debug|x64.Build.0 = debug|x64 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Release - Fast FPU|experimental_x64.ActiveCfg = Release|x64 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Release - Fast FPU|experimental_x64.Build.0 = Release|x64 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Release - Fast FPU|Win32.ActiveCfg = Release|Win32 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Release - Fast FPU|Win32.Build.0 = Release|Win32 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Release - Fast FPU|x64.ActiveCfg = Release|x64 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Release - Fast FPU|x64.Build.0 = Release|x64 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Release|experimental_x64.ActiveCfg = Release|x64 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Release|experimental_x64.Build.0 = Release|x64 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Release|Win32.ActiveCfg = Release|Win32 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Release|Win32.Build.0 = Release|Win32 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Release|x64.ActiveCfg = Release|x64 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Release|x64.Build.0 = Release|x64 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.SDL-Debug|experimental_x64.ActiveCfg = Release|Win32 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.SDL-Debug|Win32.ActiveCfg = Release|Win32 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.SDL-Debug|Win32.Build.0 = Release|Win32 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.SDL-Debug|x64.ActiveCfg = Release|x64 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.SDL-Debug|x64.Build.0 = Release|x64 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Static lib - Debug|experimental_x64.ActiveCfg = Release|Win32 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Static lib - Debug|Win32.ActiveCfg = Release|Win32 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Static lib - Debug|Win32.Build.0 = Release|Win32 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Static lib - Debug|x64.ActiveCfg = Release|x64 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Static lib - Debug|x64.Build.0 = Release|x64 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Static lib - Release - Fast FPU|experimental_x64.ActiveCfg = Release|Win32 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Static lib - Release - Fast FPU|Win32.ActiveCfg = Release|Win32 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Static lib - Release - Fast FPU|Win32.Build.0 = Release|Win32 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Static lib - Release - Fast FPU|x64.ActiveCfg = Release|x64 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Static lib - Release - Fast FPU|x64.Build.0 = Release|x64 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Static lib - Release|experimental_x64.ActiveCfg = Release|Win32 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Static lib - Release|Win32.ActiveCfg = Release|Win32 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Static lib - Release|Win32.Build.0 = Release|Win32 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Static lib - Release|x64.ActiveCfg = Release|x64 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Static lib - Release|x64.Build.0 = Release|x64 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.debug|experimental_x64.ActiveCfg = debug|x64 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.debug|experimental_x64.Build.0 = debug|x64 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.debug|Win32.ActiveCfg = debug|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.debug|Win32.Build.0 = debug|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.debug|x64.ActiveCfg = debug|x64 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.debug|x64.Build.0 = debug|x64 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Release - Fast FPU|experimental_x64.ActiveCfg = Release|x64 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Release - Fast FPU|experimental_x64.Build.0 = Release|x64 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Release - Fast FPU|Win32.ActiveCfg = Release|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Release - Fast FPU|Win32.Build.0 = Release|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Release - Fast FPU|x64.ActiveCfg = Release|x64 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Release - Fast FPU|x64.Build.0 = Release|x64 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Release|experimental_x64.ActiveCfg = Release|x64 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Release|experimental_x64.Build.0 = Release|x64 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Release|Win32.ActiveCfg = Release|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Release|Win32.Build.0 = Release|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Release|x64.ActiveCfg = Release|x64 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Release|x64.Build.0 = Release|x64 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.SDL-Debug|experimental_x64.ActiveCfg = Release|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.SDL-Debug|Win32.ActiveCfg = Release|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.SDL-Debug|Win32.Build.0 = Release|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.SDL-Debug|x64.ActiveCfg = Release|x64 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.SDL-Debug|x64.Build.0 = Release|x64 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Static lib - Debug|experimental_x64.ActiveCfg = Release|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Static lib - Debug|Win32.ActiveCfg = Release|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Static lib - Debug|Win32.Build.0 = Release|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Static lib - Debug|x64.ActiveCfg = Release|x64 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Static lib - Debug|x64.Build.0 = Release|x64 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Static lib - Release - Fast FPU|experimental_x64.ActiveCfg = Release|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Static lib - Release - Fast FPU|Win32.ActiveCfg = Release|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Static lib - Release - Fast FPU|Win32.Build.0 = Release|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Static lib - Release - Fast FPU|x64.ActiveCfg = Release|x64 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Static lib - Release - Fast FPU|x64.Build.0 = Release|x64 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Static lib - Release|experimental_x64.ActiveCfg = Release|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Static lib - Release|Win32.ActiveCfg = Release|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Static lib - Release|Win32.Build.0 = Release|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Static lib - Release|x64.ActiveCfg = Release|x64 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Static lib - Release|x64.Build.0 = Release|x64 - {E08E042A-6C45-411B-92BE-3CC31331019F}.debug|experimental_x64.ActiveCfg = Debug|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.debug|Win32.ActiveCfg = Static lib - Debug|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.debug|Win32.Build.0 = Static lib - Debug|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.debug|x64.ActiveCfg = Debug|x64 - {E08E042A-6C45-411B-92BE-3CC31331019F}.debug|x64.Build.0 = Debug|x64 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Release - Fast FPU|experimental_x64.ActiveCfg = Release - Fast FPU|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Release - Fast FPU|Win32.ActiveCfg = Static lib - Release - Fast FPU|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Release - Fast FPU|Win32.Build.0 = Static lib - Release - Fast FPU|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Release - Fast FPU|x64.ActiveCfg = Release - Fast FPU|x64 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Release - Fast FPU|x64.Build.0 = Release - Fast FPU|x64 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Release|experimental_x64.ActiveCfg = Release|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Release|Win32.ActiveCfg = Static lib - Release|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Release|Win32.Build.0 = Static lib - Release|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Release|x64.ActiveCfg = Release|x64 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Release|x64.Build.0 = Release|x64 - {E08E042A-6C45-411B-92BE-3CC31331019F}.SDL-Debug|experimental_x64.ActiveCfg = SDL-Debug|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.SDL-Debug|Win32.ActiveCfg = SDL-Debug|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.SDL-Debug|Win32.Build.0 = SDL-Debug|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.SDL-Debug|x64.ActiveCfg = SDL-Debug|x64 - {E08E042A-6C45-411B-92BE-3CC31331019F}.SDL-Debug|x64.Build.0 = SDL-Debug|x64 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Debug|experimental_x64.ActiveCfg = Static lib - Debug|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Debug|Win32.ActiveCfg = Static lib - Debug|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Debug|Win32.Build.0 = Static lib - Debug|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Debug|x64.ActiveCfg = Static lib - Debug|x64 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Debug|x64.Build.0 = Static lib - Debug|x64 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Release - Fast FPU|experimental_x64.ActiveCfg = Static lib - Release - Fast FPU|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Release - Fast FPU|Win32.ActiveCfg = Static lib - Release - Fast FPU|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Release - Fast FPU|Win32.Build.0 = Static lib - Release - Fast FPU|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Release - Fast FPU|x64.ActiveCfg = Static lib - Release - Fast FPU|x64 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Release - Fast FPU|x64.Build.0 = Static lib - Release - Fast FPU|x64 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Release|experimental_x64.ActiveCfg = Static lib - Release|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Release|Win32.ActiveCfg = Static lib - Release|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Release|Win32.Build.0 = Static lib - Release|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Release|x64.ActiveCfg = Static lib - Release|x64 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Static lib - Release|x64.Build.0 = Static lib - Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/src/ide/vc11/supertuxkart.vcxproj b/src/ide/vc11/supertuxkart.vcxproj deleted file mode 100644 index 970c98d05..000000000 --- a/src/ide/vc11/supertuxkart.vcxproj +++ /dev/null @@ -1,737 +0,0 @@ - - - - - debug - Win32 - - - debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {B1BC2764-1A43-4800-A654-788B0D05EDA2} - supertuxkart - Win32Proj - - - - Application - MultiByte - v110 - - - Application - NotSet - v110 - - - Application - MultiByte - true - v110 - - - Application - MultiByte - true - v110 - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\../ - ..\..\../ - $(Configuration)\ - $(Configuration)\ - false - false - ..\..\../ - ..\..\../ - $(Configuration)\ - $(Configuration)\ - true - true - $(ProjectName)_d - $(ProjectName)_d - C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include;$(IncludePath) - - - - true - ../../../src;../../../lib/bullet/src;../../../lib/enet/include;../../../dependencies/include;../../../lib/irrlicht/include;%(AdditionalIncludeDirectories) - HAVE_OGGVORBIS;NDEBUG;_CONSOLE;WIN32;NOMINMAX;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;BT_NO_PROFILE;PACKAGE="supertuxkart";ENABLE_BIDI;ADDONS_MANAGER;_IRR_STATIC_LIB_;%(PreprocessorDefinitions) - MultiThreadedDLL - - - Level3 - ProgramDatabase - - - opengl32.lib;user32.lib;gdi32.lib;winmm.lib;advapi32.lib;OpenAL32.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;Irrlicht.lib;ws2_32.lib;fribidi.lib;pthreadVC2.lib;libcurl_imp.lib;%(AdditionalDependencies) - $(OutDir)/$(ProjectName).exe - ../../../dependencies/lib;../../../lib/irrlicht/lib/Win32-visualstudio;%(AdditionalLibraryDirectories) - libcmt.lib;%(IgnoreSpecificDefaultLibraries) - true - Console - true - true - false - - - MachineX86 - - - - - true - ../../../src;../../../lib/bullet/src;../../../lib/enet/include;../../../dependencies/include;../../../lib/irrlicht/include;%(AdditionalIncludeDirectories) - HAVE_OGGVORBIS;NDEBUG;_CONSOLE;WIN32;NOMINMAX;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;BT_NO_PROFILE;PACKAGE="supertuxkart";ENABLE_BIDI;WIN64;_IRR_STATIC_LIB_;%(PreprocessorDefinitions) - MultiThreadedDLL - NotUsing - Level3 - ProgramDatabase - StreamingSIMDExtensions2 - true - - - opengl32.lib;user32.lib;gdi32.lib;winmm.lib;advapi32.lib;OpenAL32.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;Irrlicht.lib;ws2_32.lib;libfribidi.lib;pthreadVC2.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)/$(ProjectName).exe - ../../../lib/irrlicht/lib/Win64-visualStudio;../../../dependencies/lib;%(AdditionalLibraryDirectories) - libcmt.lib;%(IgnoreSpecificDefaultLibraries) - true - Console - true - true - false - - - - - - - Disabled - false - ../../../src;../../../lib/bullet/src;../../../lib/enet/include;../../../dependencies/include;../../../lib/irrlicht/include;%(AdditionalIncludeDirectories) - BT_NO_PROFILE;HAVE_OGGVORBIS;_DEBUG;_CONSOLE;WIN32;NOMINMAX;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;DEBUG;PACKAGE="supertuxkart";_CRTDBG_MAP_ALLOC;ENABLE_BIDI;_IRR_STATIC_LIB_;%(PreprocessorDefinitions):_ITERATOR_DEBUG_LEVEL=0 - false - false - false - EnableFastChecks - MultiThreadedDebugDLL - false - - - Level3 - EditAndContinue - true - - - opengl32.lib;user32.lib;gdi32.lib;winmm.lib;advapi32.lib;OpenAL32.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;Irrlicht.lib;ws2_32.lib;fribidi.lib;pthreadVC2.lib;libcurl_imp.lib;%(AdditionalDependencies) - $(TargetPath) - ../../../lib/irrlicht/lib/Win32-visualstudio;../../../dependencies/lib;%(AdditionalLibraryDirectories) - false - libcmt.lib;%(IgnoreSpecificDefaultLibraries) - true - false - - - false - Console - - - false - - - MachineX86 - false - - - - - Disabled - false - ../../../src;../../../lib/bullet/src;../../../lib/enet/include;../../../dependencies/include;../../../lib/irrlicht/include;%(AdditionalIncludeDirectories) - BT_NO_PROFILE;HAVE_OGGVORBIS;_DEBUG;_CONSOLE;WIN32;NOMINMAX;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;DEBUG;PACKAGE="supertuxkart";_CRTDBG_MAP_ALLOC;ENABLE_BIDI;ADDONS_MANAGER;_WIN64;_IRR_STATIC_LIB_;%(PreprocessorDefinitions) - false - false - EnableFastChecks - MultiThreadedDebugDLL - false - - - Level3 - ProgramDatabase - false - StreamingSIMDExtensions2 - - - opengl32.lib;user32.lib;gdi32.lib;winmm.lib;advapi32.lib;OpenAL32.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;Irrlicht.lib;ws2_32.lib;libfribidi.lib;pthreadVC2.lib;libcurl.lib;%(AdditionalDependencies) - $(TargetPath) - ../../../dependencies/lib;../../../lib/irrlicht/lib/Win64-VisualStudio;%(AdditionalLibraryDirectories) - false - libcmt.lib;%(IgnoreSpecificDefaultLibraries) - true - false - - - false - Console - - - false - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - false - false - false - false - false - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {54aa44b9-b07b-49da-8b1a-05bbfe8ad5d4} - false - - - {b0e92b97-089a-4d5b-bf17-77f1bc5daeef} - false - - - - - - \ No newline at end of file diff --git a/src/ide/vc11/supertuxkart.vcxproj.filters b/src/ide/vc11/supertuxkart.vcxproj.filters deleted file mode 100644 index 14e1eac46..000000000 --- a/src/ide/vc11/supertuxkart.vcxproj.filters +++ /dev/null @@ -1,1665 +0,0 @@ - - - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {55621666-34fd-482a-b2a0-077db2794fc5} - - - {386e9299-f42e-4175-8f00-c205aa480876} - - - {865587a4-41b6-4832-a961-2f012204ef4c} - - - {1953a99d-3f65-4efe-93d3-b0adb25f970d} - - - {fa2fbc61-28e7-44cc-830d-7d31019b910c} - - - {b231fec4-a731-46b5-a8cf-1ef8fa0bf7be} - - - {06defe0c-00ba-4c91-b0f4-fe0890362f0f} - - - {9f93fb34-c97b-4108-9cd0-3f844d421e11} - - - {6c09fe56-1df1-4fdc-9023-47887316c0b2} - - - {1298df87-da0e-462e-b074-a496598571d8} - - - {11a7d573-5959-4be8-8a3f-d455d7833333} - - - {d477b64b-eb9c-4059-a647-98f3a2f7203a} - - - {2f186570-85e9-4cea-88dc-0f716c6e141a} - - - {f2f3feeb-648b-4edf-8025-fb86e1a6d9bb} - - - {1ea79cd5-39b0-4228-b002-7bddf4d45fda} - - - {24d03539-463f-4c91-9ea0-6fd4b5f1dde0} - - - {24740454-5060-4191-bc49-7ff560db2aba} - - - {03371ee6-3cf3-4ed8-b69e-21a2d0f70351} - - - {62844994-aa74-4a31-b255-1815884856e2} - - - {79bdc1db-0db0-4d69-9e25-c9404a5ab2ee} - - - {fbc2e0f1-a87f-4205-94b4-2a8805338d2c} - - - {533141f3-f1ce-4815-8e9c-4253fd5e9f5e} - - - {5c9f42c5-1a5b-476b-998f-f84384767684} - - - {8da5c73a-5884-4e8d-818a-20521a66e611} - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {88b6497f-6336-4d65-b0e3-5fad9ff35ffb} - - - {c4431a49-640d-48e5-9ac7-473955a15283} - - - {6eeebf67-9364-4c48-9e24-e89164897f9e} - - - {3ee2b9d8-e9b8-4af3-a5bf-28ae532ed5cc} - - - {1bda54ec-85a1-4725-8425-e5942887808d} - - - {0f42eff9-e52c-4975-bc4a-52b0310ddb99} - - - {c3be189e-ac78-42f5-b6e2-7193d9b32e80} - - - {b91bda77-4ae6-4d47-8de1-65b8b992251e} - - - {cd929227-595c-45e8-bf99-ab06e6d586d8} - - - {4bb34709-b7d7-4c3b-9f26-e7a26ffd817a} - - - {8d8a1efe-f3d5-4532-8271-101ed960defc} - - - {45a7521f-d7d3-4404-8f6f-62e2b08c8f4c} - - - {07a426a7-14fb-495b-bff3-5a402664e035} - - - {00e74e62-f481-4883-a49f-661a5b3c9d88} - - - {1e496486-52dd-4fe4-9bd0-3ec0f2b280fc} - - - {7d4fb5af-51c8-4073-bdbf-e0420a211096} - - - {7d4c8018-8cb8-4335-b0db-217883ee8954} - - - {29b448e9-cfd5-4024-a3d7-360ad6d89fed} - - - {305929ad-22c9-4dce-8514-2b3ceab47d2b} - - - {02e2a507-6184-43fb-aa71-46ef3fc77a37} - - - {9ea7a6dd-0714-414c-970c-881b61411ef8} - - - {376d4c71-33a2-4def-949e-31bcb5b72812} - - - {5faa19dc-78e6-438e-a2a0-6a489961f098} - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav - - - - - Source Files - - - Source Files - - - Source Files\guiengine - - - Source Files\guiengine - - - Source Files\guiengine - - - Source Files\guiengine - - - Source Files\guiengine - - - Source Files\guiengine - - - Source Files\guiengine - - - Source Files\guiengine - - - Source Files\guiengine - - - Source Files\guiengine - - - Source Files\guiengine - - - Source Files\guiengine - - - Source Files\guiengine\widgets - - - Source Files\guiengine\widgets - - - Source Files\guiengine\widgets - - - Source Files\guiengine\widgets - - - Source Files\guiengine\widgets - - - Source Files\guiengine\widgets - - - Source Files\guiengine\widgets - - - Source Files\guiengine\widgets - - - Source Files\guiengine\widgets - - - Source Files\guiengine\widgets - - - Source Files\guiengine\widgets - - - Source Files\guiengine\widgets - - - Source Files\challenges - - - Source Files\challenges - - - Source Files\challenges - - - Source Files\utils - - - Source Files\utils - - - Source Files\utils - - - Source Files\utils - - - Source Files\utils - - - Source Files\audio - - - Source Files\audio - - - Source Files\audio - - - Source Files\audio - - - Source Files\audio - - - Source Files\audio - - - Source Files\modes - - - Source Files\modes - - - Source Files\modes - - - Source Files\modes - - - Source Files\modes - - - Source Files\modes - - - Source Files\modes - - - Source Files\modes - - - Source Files\items - - - Source Files\items - - - Source Files\items - - - Source Files\items - - - Source Files\items - - - Source Files\items - - - Source Files\items - - - Source Files\items - - - Source Files\items - - - Source Files\items - - - Source Files\items - - - Source Files\items - - - Source Files\physics - - - Source Files\physics - - - Source Files\physics - - - Source Files\physics - - - Source Files\physics - - - Source Files\physics - - - Source Files\karts - - - Source Files\karts - - - Source Files\karts - - - Source Files\karts - - - Source Files\karts - - - Source Files\karts - - - Source Files\karts\controller - - - Source Files\karts\controller - - - Source Files\karts\controller - - - Source Files\karts\controller - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\network - - - Source Files\network - - - Source Files\network - - - Source Files\network - - - Source Files\network - - - Source Files\network - - - Source Files\network - - - Source Files\network - - - Source Files\network - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\io - - - Source Files\io - - - Source Files\io - - - Source Files\input - - - Source Files\input - - - Source Files\input - - - Source Files\input - - - Source Files\race - - - Source Files\race - - - Source Files\race - - - Source Files\race - - - Source Files\race - - - Source Files\race - - - Source Files\config - - - Source Files\config - - - Source Files\config - - - Source Files\animations - - - Source Files\animations - - - Source Files\animations - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens - - - Source Files\states_screens\dialogs - - - Source Files\states_screens\dialogs - - - Source Files\states_screens\dialogs - - - Source Files\states_screens\dialogs - - - Source Files\states_screens\dialogs - - - Source Files\states_screens\dialogs - - - Source Files\states_screens\dialogs - - - Source Files\states_screens\dialogs - - - Source Files\states_screens\dialogs - - - Source Files\states_screens\dialogs - - - Source Files\addons - - - Source Files\addons - - - Source Files\addons - - - Source Files\addons - - - Source Files\graphics - - - Source Files\physics - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\tinygettext - - - Source Files\tinygettext - - - Source Files\tinygettext - - - Source Files\tinygettext - - - Source Files\tinygettext - - - Source Files\tinygettext - - - Source Files\tinygettext - - - Source Files\tinygettext - - - Source Files\graphics - - - Source Files\states_screens - - - Source Files\guiengine\widgets - - - Source Files\addons - - - Source Files\addons - - - Source Files\items - - - Source Files\utils - - - Source Files\graphics - - - Source Files\items - - - Source Files\graphics - - - Source Files\karts - - - Source Files\tracks - - - Source Files\graphics - - - Source Files\graphics - - - Source Files\utils - - - Source Files - - - Source Files\challenges - - - Source Files\states_screens - - - Source Files\states_screens\dialogs - - - Source Files\modes - - - Source Files\states_screens - - - Source Files\karts - - - Source Files\states_screens\dialogs - - - Source Files\replay - - - Source Files\replay - - - Source Files\replay - - - Source Files\karts - - - Source Files\karts - - - Source Files\karts - - - Source Files\karts - - - Source Files\karts - - - Source Files\karts - - - Source Files\karts - - - Source Files\karts - - - Source Files\modes - - - Source Files\config - - - Source Files\tracks - - - Source Files\graphics - - - Source Files\karts\controller - - - Source Files\modes - - - Source Files\states_screens - - - Source Files\addons - - - Source Files\karts\controller - - - Source Files\states_screens - - - Source Files\tinygettext - - - Source Files\states_screens\dialogs - - - Source Files\utils - - - Source Files\modes - - - Source Files\modes - - - Source Files\modes - - - Source Files\states_screens - - - Source Files\tracks - - - Source Files\tracks - - - Source Files\input - - - Source Files - - - Source Files\guiengine\widgets - - - - - Header Files - - - Header Files\guiengine - - - Header Files\guiengine - - - Header Files\guiengine - - - Header Files\guiengine - - - Header Files\guiengine - - - Header Files\guiengine - - - Header Files\guiengine - - - Header Files\guiengine - - - Header Files\guiengine - - - Header Files\guiengine - - - Header Files\guiengine - - - Header Files\guiengine\widgets - - - Header Files\guiengine\widgets - - - Header Files\guiengine\widgets - - - Header Files\guiengine\widgets - - - Header Files\guiengine\widgets - - - Header Files\guiengine\widgets - - - Header Files\guiengine\widgets - - - Header Files\guiengine\widgets - - - Header Files\guiengine\widgets - - - Header Files\guiengine\widgets - - - Header Files\guiengine\widgets - - - Header Files\guiengine\widgets - - - Header Files\challenges - - - Header Files\challenges - - - Header Files\challenges - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\network - - - Header Files\utils - - - Header Files\utils - - - Header Files\utils - - - Header Files\utils - - - Header Files\utils - - - Header Files\utils - - - Header Files\utils - - - Header Files\utils - - - Header Files\audio - - - Header Files\audio - - - Header Files\audio - - - Header Files\audio - - - Header Files\audio - - - Header Files\audio - - - Header Files\audio - - - Header Files\audio - - - Header Files\modes - - - Header Files\modes - - - Header Files\modes - - - Header Files\modes - - - Header Files\modes - - - Header Files\modes - - - Header Files\modes - - - Header Files\modes - - - Header Files\items - - - Header Files\items - - - Header Files\items - - - Header Files\items - - - Header Files\items - - - Header Files\items - - - Header Files\items - - - Header Files\items - - - Header Files\items - - - Header Files\items - - - Header Files\items - - - Header Files\items - - - Header Files\physics - - - Header Files\physics - - - Header Files\physics - - - Header Files\physics - - - Header Files\physics - - - Header Files\physics - - - Header Files\physics - - - Header Files\physics - - - Header Files\karts - - - Header Files\karts - - - Header Files\karts - - - Header Files\karts - - - Header Files\karts - - - Header Files\karts - - - Header Files\karts - - - Header Files\karts\controller - - - Header Files\karts\controller - - - Header Files\karts\controller - - - Header Files\karts\controller - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\io - - - Header Files\io - - - Header Files\io - - - Header Files\input - - - Header Files\input - - - Header Files\input - - - Header Files\input - - - Header Files\input - - - Header Files\race - - - Header Files\race - - - Header Files\race - - - Header Files\race - - - Header Files\race - - - Header Files\race - - - Header Files\config - - - Header Files\config - - - Header Files\config - - - Header Files\config - - - Header Files\animations - - - Header Files\animations - - - Header Files\animations - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens - - - Header Files\states_screens\dialogs - - - Header Files\states_screens\dialogs - - - Header Files\states_screens\dialogs - - - Header Files\states_screens\dialogs - - - Header Files\states_screens\dialogs - - - Header Files\states_screens\dialogs - - - Header Files\states_screens\dialogs - - - Header Files\states_screens\dialogs - - - Header Files\states_screens\dialogs - - - Header Files\states_screens\dialogs - - - Header Files\addons - - - Header Files\addons - - - Header Files\addons - - - Header Files\addons - - - Header Files\graphics - - - Header Files\physics - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\tinygettext - - - Header Files\tinygettext - - - Header Files\tinygettext - - - Header Files\tinygettext - - - Header Files\tinygettext - - - Header Files\tinygettext - - - Header Files\tinygettext - - - Header Files\tinygettext - - - Header Files\tinygettext - - - Header Files\tinygettext - - - Header Files\utils\utf8 - - - Header Files\utils\utf8 - - - Header Files\utils\utf8 - - - Header Files\utils - - - Header Files\graphics - - - Header Files\states_screens - - - Header Files\utils - - - Header Files\guiengine\widgets - - - Header Files\addons - - - Header Files\addons - - - Header Files\items - - - Header Files\utils - - - Header Files\graphics - - - Header Files\items - - - Header Files\graphics - - - Header Files\karts - - - Header Files\tracks - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\graphics - - - Header Files\utils - - - Header Files - - - Header Files\challenges - - - Header Files\states_screens - - - Header Files\states_screens\dialogs - - - Header Files\modes - - - Header Files\states_screens - - - Header Files\karts - - - Header Files\states_screens\dialogs - - - Header Files\replay - - - Header Files\replay - - - Header Files\replay - - - Header Files\karts - - - Header Files\karts - - - Header Files\karts - - - Header Files\karts - - - Header Files\karts - - - Header Files\karts - - - Header Files\karts - - - Header Files\karts - - - Header Files\modes - - - Header Files\tracks - - - Header Files\utils - - - Header Files\graphics - - - Header Files\karts\controller - - - Header Files\modes - - - Header Files\states_screens - - - Header Files\addons - - - Header Files\karts\controller - - - Header Files\utils - - - Header Files\tinygettext - - - Header Files\states_screens\dialogs - - - Header Files\utils - - - Header Files\modes - - - Header Files\modes - - - Header Files\modes - - - Header Files\states_screens - - - Header Files\tracks - - - Header Files\tracks - - - Header Files\input - - - \ No newline at end of file diff --git a/src/ide/vc9/README b/src/ide/vc9/README deleted file mode 100644 index a3e69131e..000000000 --- a/src/ide/vc9/README +++ /dev/null @@ -1,35 +0,0 @@ -Basically 4 setups are included in the vc8-project: ---------------------------------------------------- -The first one is the one currently used and supported, -the others are more 'historical' and will be remove soon. - -BulletDebug/BulletRelease: - main setup (Debug/Relase) + BULLET - The debug version links in the optimised bullet (and sdl and plib) versions, since i is assumed that - mostly STK is being debugged, not everything. Using debug for everything creates a really slow executable. - -ReplayDebug/ReplayRelease: - main setup (Debug/Relase) + HAVE_GHOST_REPLAY - -Debug/Release: - main setup with openAL & vorbis: HAVE_OPENAL + HAVE_OGGVORBIS - -PlibSoundDebug/PlibSoundRelease: - no ogg-sound, no openAL, no vorbis, it is gonna be obsolete, when we move to OpenAL/ogg-vorbis completely - - -Create these environment-vars pointing to the folders of your installations: ----------------------------------------------------------------------------- -STK_LIB: pointing to a directory containing all libs -STK_INCLUDE: pointing to a directory containing all header files. -A separate package will be made available which contains all necessary windows -files to compile STK. If you prefer to have the packages in separate -directories, please add your directories to the paths in visual studio. - -Add the folders of the runtime-dlls to the PATH-variable, this is what i had to put: -(or copy the .dll files in the root directory of supertuxkart). - -Remarks for OpenAL-installation: --------------------------------- -My version of OpenAL 1.1-SDK didn't put its includes in OpenAL/include/AL but in OpenAL/include. -if yours did the same, create the folder OpenAL/include/AL and copy all the includes there. diff --git a/src/ide/vc9/bullet_lib.vcproj b/src/ide/vc9/bullet_lib.vcproj deleted file mode 100644 index 62640a199..000000000 --- a/src/ide/vc9/bullet_lib.vcproj +++ /dev/null @@ -1,1662 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/ide/vc9/enet.vcproj b/src/ide/vc9/enet.vcproj deleted file mode 100644 index 2d4f71ade..000000000 --- a/src/ide/vc9/enet.vcproj +++ /dev/null @@ -1,426 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/ide/vc9/supertuxkart.sln b/src/ide/vc9/supertuxkart.sln deleted file mode 100644 index 6c6e65523..000000000 --- a/src/ide/vc9/supertuxkart.sln +++ /dev/null @@ -1,68 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual C++ Express 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "supertuxkart", "supertuxkart.vcproj", "{B1BC2764-1A43-4800-A654-788B0D05EDA2}" - ProjectSection(ProjectDependencies) = postProject - {E08E042A-6C45-411B-92BE-3CC31331019F} = {E08E042A-6C45-411B-92BE-3CC31331019F} - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF} = {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF} - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4} = {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bullet_lib", "bullet_lib.vcproj", "{54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "enet", "enet.vcproj", "{B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Irrlicht", "..\..\..\lib\irrlicht\source\Irrlicht\Irrlicht9.0.vcproj", "{E08E042A-6C45-411B-92BE-3CC31331019F}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wiiuse", "..\..\..\lib\wiiuse\wiiuse\wiiuse.vcproj", "{FE4FCEBF-B53D-4B8A-81B0-F9AB059C8C83}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - debug|Win32 = debug|Win32 - Release|Win32 = Release|Win32 - wiiuse-debug|Win32 = wiiuse-debug|Win32 - wiiuse-release|Win32 = wiiuse-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}.Release|Win32.ActiveCfg = Release|Win32 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.Release|Win32.Build.0 = Release|Win32 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.wiiuse-debug|Win32.ActiveCfg = wiiuse-debug|Win32 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.wiiuse-debug|Win32.Build.0 = wiiuse-debug|Win32 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.wiiuse-release|Win32.ActiveCfg = wiiuse-release|Win32 - {B1BC2764-1A43-4800-A654-788B0D05EDA2}.wiiuse-release|Win32.Build.0 = wiiuse-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}.Release|Win32.ActiveCfg = Release|Win32 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Release|Win32.Build.0 = Release|Win32 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.wiiuse-debug|Win32.ActiveCfg = Release|Win32 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.wiiuse-debug|Win32.Build.0 = Release|Win32 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.wiiuse-release|Win32.ActiveCfg = wiiuse-release|Win32 - {54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.wiiuse-release|Win32.Build.0 = wiiuse-release|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.debug|Win32.ActiveCfg = Debug|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.debug|Win32.Build.0 = Debug|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Release|Win32.ActiveCfg = Release|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.Release|Win32.Build.0 = Release|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.wiiuse-debug|Win32.ActiveCfg = Debug|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.wiiuse-debug|Win32.Build.0 = Debug|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.wiiuse-release|Win32.ActiveCfg = wiiuse-release|Win32 - {B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.wiiuse-release|Win32.Build.0 = wiiuse-release|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.debug|Win32.ActiveCfg = Static lib - Debug|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.debug|Win32.Build.0 = Static lib - Debug|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Release|Win32.ActiveCfg = Static lib - Release|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.Release|Win32.Build.0 = Static lib - Release|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.wiiuse-debug|Win32.ActiveCfg = Static lib - Debug|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.wiiuse-debug|Win32.Build.0 = Static lib - Debug|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.wiiuse-release|Win32.ActiveCfg = Static lib - Release|Win32 - {E08E042A-6C45-411B-92BE-3CC31331019F}.wiiuse-release|Win32.Build.0 = Static lib - Release|Win32 - {FE4FCEBF-B53D-4B8A-81B0-F9AB059C8C83}.debug|Win32.ActiveCfg = Debug|Win32 - {FE4FCEBF-B53D-4B8A-81B0-F9AB059C8C83}.Release|Win32.ActiveCfg = Release|Win32 - {FE4FCEBF-B53D-4B8A-81B0-F9AB059C8C83}.wiiuse-debug|Win32.ActiveCfg = Debug|Win32 - {FE4FCEBF-B53D-4B8A-81B0-F9AB059C8C83}.wiiuse-release|Win32.ActiveCfg = wiiuse-release|Win32 - {FE4FCEBF-B53D-4B8A-81B0-F9AB059C8C83}.wiiuse-release|Win32.Build.0 = wiiuse-release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/src/ide/vc9/supertuxkart.vcproj b/src/ide/vc9/supertuxkart.vcproj deleted file mode 100644 index 75f6825ce..000000000 --- a/src/ide/vc9/supertuxkart.vcproj +++ /dev/null @@ -1,2841 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/input/binding.cpp b/src/input/binding.cpp index ece9a9de4..dcac002ea 100644 --- a/src/input/binding.cpp +++ b/src/input/binding.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Marianne Gagnon +// Copyright (C) 2010-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -275,13 +275,23 @@ irr::core::stringw Binding::getAsString() const } else { - //I18N: to appear in input configuration screen, for gamepad axes if (m_range == Input::AR_HALF) + { + //I18N: to appear in input configuration screen, for gamepad axes s = _("Axis %d %s", m_id, (m_dir == Input::AD_NEGATIVE) ? L"-" : L"+"); + } else { - irr::core::stringw inv = _("inverted"); - s = _("Axis %d %s", m_id, (m_dir == Input::AD_NEGATIVE) ? inv : L""); + if(m_dir == Input::AD_NEGATIVE) + { + //I18N: to appear in input configuration screen, for gamepad axes + s = _("Axis %d inverted", m_id); + } + else + { + //I18N: to appear in input configuration screen, for gamepad axes + s = _("Axis %d", m_id); + } } } diff --git a/src/input/binding.hpp b/src/input/binding.hpp index 2af59f154..0362f2d05 100644 --- a/src/input/binding.hpp +++ b/src/input/binding.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Marianne Gagnon +// Copyright (C) 2010-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/input/device_manager.cpp b/src/input/device_manager.cpp index e01c54388..44baadbbd 100644 --- a/src/input/device_manager.cpp +++ b/src/input/device_manager.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 SuperTuxKart-Team +// Copyright (C) 2010-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/input/device_manager.hpp b/src/input/device_manager.hpp index 34d097421..c18a5b43f 100644 --- a/src/input/device_manager.hpp +++ b/src/input/device_manager.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 SuperTuxKart-Team +// Copyright (C) 2010-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -156,7 +156,7 @@ public: StateManager::ActivePlayer** player /* out */, PlayerAction* action /* out */ ); - void clearLatestUsedDevice(); + void clearLatestUsedDevice(); InputDevice* getLatestUsedDevice(); bool initialize(); void serialize(); diff --git a/src/input/input.hpp b/src/input/input.hpp index c911e2dcd..26366ebc6 100644 --- a/src/input/input.hpp +++ b/src/input/input.hpp @@ -1,6 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2007-2008 Robert Schuster +// Copyright (C) 2007-2013 Robert Schuster +// Copyright (C) 2012-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/input/input_device.cpp b/src/input/input_device.cpp index b1ecfcebf..f6bb5c3fb 100644 --- a/src/input/input_device.cpp +++ b/src/input/input_device.cpp @@ -1,3 +1,20 @@ +// SuperTuxKart - a fun racing game with go-kart +// +// Copyright (C) 2009-2013 Marianne Gagnon +// +// 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/device_config.hpp" #include "guiengine/abstract_state_manager.hpp" diff --git a/src/input/input_device.hpp b/src/input/input_device.hpp index fc28da1de..17ab816ed 100644 --- a/src/input/input_device.hpp +++ b/src/input/input_device.hpp @@ -1,3 +1,21 @@ +// SuperTuxKart - a fun racing game with go-kart +// +// Copyright (C) 2009-2013 Marianne Gagnon +// +// 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 INPUT_DEVICE_HPP #define INPUT_DEVICE_HPP diff --git a/src/input/input_manager.cpp b/src/input/input_manager.cpp index c56184bdd..90a1ec8a6 100644 --- a/src/input/input_manager.cpp +++ b/src/input/input_manager.cpp @@ -1,6 +1,7 @@ -// // SuperTuxKart - a fun racing game with go-kart // +// Copyright (C) 2012-2013 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 @@ -21,6 +22,7 @@ #include "guiengine/event_handler.hpp" #include "guiengine/modaldialog.hpp" #include "guiengine/screen.hpp" +#include "graphics/irr_driver.hpp" #include "input/device_manager.hpp" #include "input/input.hpp" #include "karts/controller/controller.hpp" @@ -288,15 +290,51 @@ void InputManager::handleStaticAction(int key, int value) UserConfigParams::m_profiler_enabled = !UserConfigParams::m_profiler_enabled; break; + + // Debug views + // These should be available in normal (non-artist) mode + // to enable easier bug reports (go there, press this key, screenshot) + // without requiring editing the UTF-32 config files (which is inconvenient). case KEY_HOME: if (value) { - video::SOverrideMaterial &mat = - irr_driver->getVideoDriver()->getOverrideMaterial(); - - mat.Material.Wireframe ^= 1; - mat.EnableFlags = video::EMF_WIREFRAME; - mat.EnablePasses = scene::ESNRP_SOLID | scene::ESNRP_TRANSPARENT; + irr_driver->toggleWireframe(); + } + break; + case KEY_END: + if (value) + { + irr_driver->toggleMipVisualization(); + } + break; + case KEY_DELETE: + if (value) + { + irr_driver->toggleNormals(); + } + break; + case KEY_NEXT: // pgdown + if (value) + { + irr_driver->toggleSSAOViz(); + } + break; + case KEY_PRIOR: // pgup + if (value) + { + irr_driver->toggleLightViz(); + } + break; + case KEY_INSERT: + if (value) + { + irr_driver->toggleShadowViz(); + } + break; + case KEY_SCROLL: + if (value) + { + irr_driver->toggleDistortViz(); } break; default: diff --git a/src/input/input_manager.hpp b/src/input/input_manager.hpp index 6cf357612..19069efe8 100644 --- a/src/input/input_manager.hpp +++ b/src/input/input_manager.hpp @@ -1,6 +1,7 @@ -// // SuperTuxKart - a fun racing game with go-kart +// // Copyright (C) 2004-2006 Steve Baker +// Copyright (C) 2006-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/input/wiimote.cpp b/src/input/wiimote.cpp index 67670619e..d27c6b38c 100644 --- a/src/input/wiimote.cpp +++ b/src/input/wiimote.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2013 SuperTuxKart-Team +// Copyright (C) 2013-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -76,24 +76,16 @@ void Wiimote::resetIrrEvent() */ void Wiimote::update() { -#ifdef DEBUG - if(UserConfigParams::m_wiimote_debug) - { - Log::verbose("wiimote", "pitch: %f yaw %f roll %f", - m_wiimote_handle->orient.pitch, - m_wiimote_handle->orient.yaw, - m_wiimote_handle->orient.roll); - } -#endif + float normalized_angle = -(m_wiimote_handle->accel.y-128) + / UserConfigParams::m_wiimote_raw_max; - float normalized_angle = -m_wiimote_handle->orient.pitch / UserConfigParams::m_wiimote_max; if(normalized_angle<-1.0f) normalized_angle = -1.0f; else if(normalized_angle>1.0f) normalized_angle = 1.0f; - // Shape the curve that determines steering depending on wiimote angle. - // The wiimote value is already normalized to be in [-1,1]. Now use a + // Shape the curve that determines steering depending on wiimote angle. + // The wiimote value is already normalized to be in [-1,1]. Now use a // weighted linear combination to compute the steering value used in game. float w1 = UserConfigParams::m_wiimote_weight_linear; float w2 = UserConfigParams::m_wiimote_weight_square; @@ -103,8 +95,17 @@ void Wiimote::update() const float sign = normalized_angle >= 0.0f ? 1.0f : -1.0f; const float normalized_angle_2 = w1 * normalized_angle + w2 * sign*normalized_angle*normalized_angle - + wa * asin(normalized_angle)*(2.0f/M_PI) + + wa * asin(normalized_angle)*(2.0f/M_PI) + ws * sin(normalized_angle*(M_PI/2.0f)); + + if(UserConfigParams::m_wiimote_debug) + { + Log::verbose("wiimote", "raw %d normal %f result %f", + m_wiimote_handle->accel.y, + normalized_angle, + normalized_angle_2); + } + const float JOYSTICK_ABS_MAX_ANGLE = 32766.0f; const float angle = normalized_angle_2 * JOYSTICK_ABS_MAX_ANGLE; diff --git a/src/input/wiimote.hpp b/src/input/wiimote.hpp index 1eae85de9..60e29eab5 100644 --- a/src/input/wiimote.hpp +++ b/src/input/wiimote.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2013 SuperTuxKart-Team +// Copyright (C) 2013-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/input/wiimote_manager.cpp b/src/input/wiimote_manager.cpp index 6300f8c26..61be4e05b 100644 --- a/src/input/wiimote_manager.cpp +++ b/src/input/wiimote_manager.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 SuperTuxKart-Team +// Copyright (C) 2012-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -304,13 +304,19 @@ void* WiimoteManager::threadFuncWrapper(void *data) */ int WiimoteManager::askUserToConnectWiimotes() { - new MessageDialog( - _("Press the buttons 1+2 simultaneously on your wiimote to put " - "it in discovery mode, then click on OK."), - MessageDialog::MESSAGE_DIALOG_CONFIRM, - new WiimoteDialogListener(), true); + new MessageDialog( +#ifdef WIN32 + _("Connect your wiimote to the Bluetooth manager, then click on Ok." + "Detailed instructions at supertuxkart.net/Wiimote"), +#else + _("Press the buttons 1+2 simultaneously on your wiimote to put " + "it in discovery mode, then click on Ok." + "Detailed instructions at supertuxkart.net/Wiimote"), +#endif + MessageDialog::MESSAGE_DIALOG_OK_CANCEL, + new WiimoteDialogListener(), true); - return getNumberOfWiimotes(); + return getNumberOfWiimotes(); } // askUserToConnectWiimotes // ============================================================================ @@ -319,23 +325,23 @@ int WiimoteManager::askUserToConnectWiimotes() */ void WiimoteManager::WiimoteDialogListener::onConfirm() { - GUIEngine::ModalDialog::dismiss(); + GUIEngine::ModalDialog::dismiss(); - wiimote_manager->launchDetection(5); + wiimote_manager->launchDetection(5); - int nb_wiimotes = wiimote_manager->getNumberOfWiimotes(); - if(nb_wiimotes > 0) - { - core::stringw msg = StringUtils::insertValues( - _("Found %d wiimote(s)"), - core::stringw(nb_wiimotes)); + int nb_wiimotes = wiimote_manager->getNumberOfWiimotes(); + if(nb_wiimotes > 0) + { + core::stringw msg = StringUtils::insertValues( + _("Found %d wiimote(s)"), + core::stringw(nb_wiimotes)); - new MessageDialog( msg ); + new MessageDialog( msg ); - } - else - { - new MessageDialog( _("Could not detect any wiimote :/") ); - } + } + else + { + new MessageDialog( _("Could not detect any wiimote :/") ); + } } // WiimoteDialogListeneronConfirm #endif // ENABLE_WIIUSE diff --git a/src/input/wiimote_manager.hpp b/src/input/wiimote_manager.hpp index 75dd7c3d3..e701472ec 100644 --- a/src/input/wiimote_manager.hpp +++ b/src/input/wiimote_manager.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 SuperTuxKart-Team +// Copyright (C) 2012-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -63,8 +63,8 @@ private: bool m_shut; #endif - /** True if wii is enabled via command line option. */ - static bool m_enabled; + /** True if wii is enabled via command line option. */ + static bool m_enabled; /** Wiimotes update thread */ void threadFunc(); @@ -75,11 +75,11 @@ public: WiimoteManager(); ~WiimoteManager(); - /** Sets the wiimote to be enabled. */ - static void enable() { m_enabled = true; } + /** Sets the wiimote to be enabled. */ + static void enable() { m_enabled = true; } - /** Returns if the wii was enabled on the command line. */ - static bool isEnabled() { return m_enabled; } + /** Returns if the wii was enabled on the command line. */ + static bool isEnabled() { return m_enabled; } void launchDetection(int timeout); void update(); @@ -87,20 +87,20 @@ public: void enableAccelerometer(bool state); - /** A simple listener to allow the user to connect wiimotes. It - * will display a feedback windows (# wiimotes connected or 'no wiimotes - * found'). - */ - class WiimoteDialogListener : public MessageDialog::IConfirmDialogListener - { - public: - virtual void onConfirm() OVERRIDE; - }; // class WiimoteDialoListener + /** A simple listener to allow the user to connect wiimotes. It + * will display a feedback windows (# wiimotes connected or 'no wiimotes + * found'). + */ + class WiimoteDialogListener : public MessageDialog::IConfirmDialogListener + { + public: + virtual void onConfirm() OVERRIDE; + }; // class WiimoteDialoListener - /** Shows a dialog allowing the user to connect wiimotes. - * \return Number of wiimotes connected. - */ - int askUserToConnectWiimotes(); + /** Shows a dialog allowing the user to connect wiimotes. + * \return Number of wiimotes connected. + */ + int askUserToConnectWiimotes(); // ------------------------------------------------------------------------ /** Returns the number of wiimotes connected. */ unsigned int getNumberOfWiimotes() const {return m_wiimotes.size();} diff --git a/src/io/file_manager.cpp b/src/io/file_manager.cpp index f44567998..c8543e1bb 100644 --- a/src/io/file_manager.cpp +++ b/src/io/file_manager.cpp @@ -1,7 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart // Copyright (C) 2004 Steve Baker -// (C) 2008 Steve Baker, Joerg Henrichs +// Copyright (C) 2008-2013 Steve Baker, Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -244,7 +244,7 @@ FileManager::~FileManager() } struct stat mystat; stat(full_path.c_str(), &mystat); - Time::TimeType current = Time::getTimeSinceEpoch(); + StkTime::TimeType current = StkTime::getTimeSinceEpoch(); if(current - mystat.st_ctime <24*3600) { if(UserConfigParams::logAddons()) diff --git a/src/io/file_manager.hpp b/src/io/file_manager.hpp index 2527cdb15..ebe8d8ef5 100644 --- a/src/io/file_manager.hpp +++ b/src/io/file_manager.hpp @@ -1,6 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart // Copyright (C) 2004 Steve Baker +// Copyright (C) 2008-2013 Steve Baker, Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/io/xml_node.cpp b/src/io/xml_node.cpp index 264bba0aa..d78dc379f 100644 --- a/src/io/xml_node.cpp +++ b/src/io/xml_node.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/io/xml_node.hpp b/src/io/xml_node.hpp index 37e4ade41..bbd0ebe9a 100644 --- a/src/io/xml_node.hpp +++ b/src/io/xml_node.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/io/xml_writer.cpp b/src/io/xml_writer.cpp index dca8f59e2..bc9443414 100644 --- a/src/io/xml_writer.cpp +++ b/src/io/xml_writer.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Marianne Gagnon +// Copyright (C) 2010-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/io/xml_writer.hpp b/src/io/xml_writer.hpp index 474c8791f..3fcb9132b 100644 --- a/src/io/xml_writer.hpp +++ b/src/io/xml_writer.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Marianne Gagnon +// Copyright (C) 2010-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/items/attachment.cpp b/src/items/attachment.cpp index 5979f7bfc..328b4b099 100644 --- a/src/items/attachment.cpp +++ b/src/items/attachment.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -25,6 +25,7 @@ #include "graphics/explosion.hpp" #include "graphics/irr_driver.hpp" #include "items/attachment_manager.hpp" +#include "items/item_manager.hpp" #include "items/projectile_manager.hpp" #include "items/swatter.hpp" #include "karts/abstract_kart.hpp" @@ -33,19 +34,23 @@ #include "karts/kart_properties.hpp" #include "modes/three_strikes_battle.hpp" #include "modes/world.hpp" +#include "physics/triangle_mesh.hpp" +#include "tracks/track.hpp" #include "utils/constants.hpp" -#include "utils/log.hpp" //TODO: remove after debugging is done -// Log::verbose("attachment", "Decreasing shield \n"); +#include "utils/log.hpp" + /** Initialises the attachment each kart has. */ Attachment::Attachment(AbstractKart* kart) { - m_type = ATTACH_NOTHING; - m_time_left = 0.0; - m_plugin = NULL; - m_kart = kart; - m_previous_owner = NULL; - m_bomb_sound = NULL; + m_type = ATTACH_NOTHING; + m_time_left = 0.0; + m_plugin = NULL; + m_kart = kart; + m_previous_owner = NULL; + m_bomb_sound = NULL; + m_bubble_explode_sound = NULL; + m_node_scale = 1.0f; // If we attach a NULL mesh, we get a NULL scene node back. So we // have to attach some kind of mesh, but make it invisible. @@ -74,6 +79,12 @@ Attachment::~Attachment() sfx_manager->deleteSFX(m_bomb_sound); m_bomb_sound = NULL; } + + if (m_bubble_explode_sound) + { + sfx_manager->deleteSFX(m_bubble_explode_sound); + m_bubble_explode_sound = NULL; + } } // ~Attachment //----------------------------------------------------------------------------- @@ -109,7 +120,8 @@ void Attachment::set(AttachmentType type, float time, } clear(); - + m_node_scale = 0.3f; + // If necessary create the appropriate plugin which encapsulates // the associated behavior switch(type) @@ -140,6 +152,8 @@ void Attachment::set(AttachmentType type, float time, m_node->setCurrentFrame(0); } + m_node->setScale(core::vector3df(m_node_scale,m_node_scale,m_node_scale)); + m_type = type; m_time_left = time; m_previous_owner = current_kart; @@ -161,6 +175,8 @@ void Attachment::set(AttachmentType type, float time, } } m_node->setVisible(true); + + irr_driver->applyObjectPassShader(m_node); } // set // ----------------------------------------------------------------------------- @@ -206,9 +222,10 @@ void Attachment::clear() void Attachment::hitBanana(Item *item, int new_attachment) { //Bubble gum shield effect: - if(m_type == ATTACH_BUBBLEGUM_SHIELD) + if(m_type == ATTACH_BUBBLEGUM_SHIELD || + m_type == ATTACH_NOLOK_BUBBLEGUM_SHIELD) { - m_time_left -= stk_config->m_bubblegum_shield_time; + m_time_left = 0.0f; return; } @@ -304,9 +321,15 @@ void Attachment::hitBanana(Item *item, int new_attachment) void Attachment::handleCollisionWithKart(AbstractKart *other) { Attachment *attachment_other=other->getAttachment(); - + if(getType()==Attachment::ATTACH_BOMB) { + // Don't attach a bomb when the kart is shielded + if(other->isShielded()) + { + other->decreaseShieldTime(); + return; + } // If both karts have a bomb, explode them immediately: if(attachment_other->getType()==Attachment::ATTACH_BOMB) { @@ -331,6 +354,12 @@ void Attachment::handleCollisionWithKart(AbstractKart *other) else if(attachment_other->getType()==Attachment::ATTACH_BOMB && (attachment_other->getPreviousOwner()!=m_kart || World::getWorld()->getNumKarts() <= 2)) { + // Don't attach a bomb when the kart is shielded + if(m_kart->isShielded()) + { + m_kart->decreaseShieldTime(); + return; + } set(ATTACH_BOMB, other->getAttachment()->getTimeLeft()+ stk_config->m_bomb_time_increase, other); other->getAttachment()->clear(); @@ -349,6 +378,17 @@ void Attachment::update(float dt) { if(m_type==ATTACH_NOTHING) return; m_time_left -=dt; + + + bool is_shield = (m_type == ATTACH_BUBBLEGUM_SHIELD|| m_type == ATTACH_NOLOK_BUBBLEGUM_SHIELD); + float m_wanted_node_scale = is_shield ? std::max(1.0f, m_kart->getHighestPoint()*1.1f) : 1.0f; + + if (m_node_scale < m_wanted_node_scale) + { + m_node_scale += dt*1.5f; + if (m_node_scale > m_wanted_node_scale) m_node_scale = m_wanted_node_scale; + m_node->setScale(core::vector3df(m_node_scale,m_node_scale,m_node_scale)); + } if(m_plugin) { @@ -412,15 +452,34 @@ void Attachment::update(float dt) // Nothing to do for tinytux, this is all handled in EmergencyAnimation break; case ATTACH_BUBBLEGUM_SHIELD: - if(!m_kart->isShielded()) + case ATTACH_NOLOK_BUBBLEGUM_SHIELD: + if (m_time_left < 0) { m_time_left = 0.0f; - if (m_kart->m_bubble_drop) + if (m_bubble_explode_sound) sfx_manager->deleteSFX(m_bubble_explode_sound); + m_bubble_explode_sound = sfx_manager->createSoundSource("bubblegum_explode"); + m_bubble_explode_sound->position(m_kart->getXYZ()); + m_bubble_explode_sound->play(); + + // drop a small bubble gum + Vec3 hit_point; + Vec3 normal; + const Material* material_hit; + Vec3 pos = m_kart->getXYZ(); + Vec3 to=pos+Vec3(0, -10000, 0); + World* world = World::getWorld(); + world->getTrack()->getTriangleMesh().castRay(pos, to, &hit_point, + &material_hit, &normal); + // This can happen if the kart is 'over nothing' when dropping + // the bubble gum + if(material_hit) { - Log::verbose("Attachment", "Drop a small bubble gum. \n");; - //TODO: drop a bubble gum item on the track - } + normal.normalize(); + pos.setY(hit_point.getY()-0.05f); + + ItemManager::get()->newItem(Item::ITEM_BUBBLEGUM, pos, normal, m_kart); + } } break; } // switch diff --git a/src/items/attachment.hpp b/src/items/attachment.hpp index b6c65ae79..6fa469562 100644 --- a/src/items/attachment.hpp +++ b/src/items/attachment.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -60,6 +60,7 @@ public: ATTACH_NOLOKS_SWATTER, ATTACH_TINYTUX, ATTACH_BUBBLEGUM_SHIELD, + ATTACH_NOLOK_BUBBLEGUM_SHIELD, ATTACH_MAX, ATTACH_NOTHING }; @@ -77,6 +78,9 @@ private: /** For parachutes only. */ float m_initial_speed; + /** For zoom-in animation */ + float m_node_scale; + /** Scene node of the attachment, which will be attached to the kart's * scene node. */ scene::IAnimatedMeshSceneNode @@ -95,6 +99,9 @@ private: /** Ticking sound for the bomb */ SFXBase *m_bomb_sound; + /** Soung for exploding bubble gum shield */ + SFXBase *m_bubble_explode_sound; + public: Attachment(AbstractKart* kart); ~Attachment(); diff --git a/src/items/attachment_manager.cpp b/src/items/attachment_manager.cpp index 61fc031b0..a3121e8d5 100644 --- a/src/items/attachment_manager.cpp +++ b/src/items/attachment_manager.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -54,6 +54,7 @@ static const initAttachmentType iat[]= {Attachment::ATTACH_NOLOKS_SWATTER, "swatter_nolok.b3d", "swatter-icon.png" }, {Attachment::ATTACH_TINYTUX, "reset-button.b3d", "reset-attach-icon.png" }, {Attachment::ATTACH_BUBBLEGUM_SHIELD, "bubblegum_shield.b3d", "shield-icon.png" }, + {Attachment::ATTACH_NOLOK_BUBBLEGUM_SHIELD, "bubblegum_shield_nolok.b3d", "shield-icon.png" }, {Attachment::ATTACH_MAX, "", "" }, }; diff --git a/src/items/attachment_manager.hpp b/src/items/attachment_manager.hpp index fbb41c19f..92bc6cba9 100644 --- a/src/items/attachment_manager.hpp +++ b/src/items/attachment_manager.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/items/attachment_plugin.hpp b/src/items/attachment_plugin.hpp index cb006ceb2..1b90a6ef1 100644 --- a/src/items/attachment_plugin.hpp +++ b/src/items/attachment_plugin.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Joerg Henrichs +// Copyright (C) 2011-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/items/bowling.cpp b/src/items/bowling.cpp index 7d1eef68a..b7fe73699 100644 --- a/src/items/bowling.cpp +++ b/src/items/bowling.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2007 Joerg Henrichs +// Copyright (C) 2007-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -18,6 +18,8 @@ #include "items/bowling.hpp" +#include "audio/sfx_base.hpp" +#include "audio/sfx_manager.hpp" #include "graphics/hit_sfx.hpp" #include "graphics/material.hpp" #include "io/xml_node.hpp" @@ -74,8 +76,22 @@ Bowling::Bowling(AbstractKart *kart) // should not live forever, auto-destruct after 20 seconds m_max_lifespan = 20; + m_roll_sfx = sfx_manager->createSoundSource("bowling_roll"); + m_roll_sfx->play(); + m_roll_sfx->setLoop(true); + } // Bowling +// ---------------------------------------------------------------------------- +/** Destructor, removes any playing sfx. + */ +Bowling::~Bowling() +{ + if(m_roll_sfx->getStatus()==SFXManager::SFX_PLAYING) + m_roll_sfx->stop(); + sfx_manager->deleteSFX(m_roll_sfx); +} // ~RubberBall + // ----------------------------------------------------------------------------- /** Initialises this object with data from the power.xml file. * \param node XML Node @@ -94,51 +110,6 @@ void Bowling::init(const XMLNode &node, scene::IMesh *bowling) node.get("force-to-target", &m_st_force_to_target); } // init -// ---------------------------------------------------------------------------- -/** Picks a random message to be displayed when a kart is hit by a bowling - * ball. This function picks a different message if a kart hit itself. - * \param kart The kart that was hit. - * \returns The string to display. - */ -const core::stringw Bowling::getHitString(const AbstractKart *kart) const -{ - RandomGenerator r; - - if(kart!=m_owner) - { - const int BOWLING_STRINGS_AMOUNT = 3; - switch (r.get(BOWLING_STRINGS_AMOUNT)) - { - //I18N: shown when hit by bowling ball. %1 is the attacker, %0 is - // the victim. - case 0 : return _LTR("%0 will not go bowling with %1 again"); - //I18N: shown when hit by bowling ball. %1 is the attacker, %0 is - // the victim. - case 1 : return _LTR("%1 strikes %0"); - //I18N: shown when hit by bowling ball. %1 is the attacker, %0 is - // the victim. - case 2 : return _LTR("%0 is bowled over by %1"); - default: assert(false); return L""; // avoid compiler warning - } - } - else - { - const int SELFBOWLING_STRINGS_AMOUNT = 3; - switch (r.get(SELFBOWLING_STRINGS_AMOUNT)) - { - //I18N: shown when hit by own bowling ball. %s is the kart. - case 0 : return _LTR("%s is practicing with a blue, big, spheric yo-yo"); - //I18N: shown when hit by own bowling ball. %s is the kart. - case 1 : return _LTR("%s is the world master of the boomerang ball"); - //I18N: shown when hit by own bowling ball. %s is the kart. - case 2 : return _LTR("%s should play (rubber) darts instead of bowling"); - default: assert(false); return L""; // avoid compiler warning - } // switch - } // if kart_hit==owner - - -} // getHitString - // ---------------------------------------------------------------------------- /** Updates the bowling ball ineach frame. If this function returns true, the * object will be removed by the projectile manager. @@ -200,6 +171,10 @@ bool Bowling::updateAndDelete(float dt) hit(NULL); return true; } + + if (m_roll_sfx->getStatus()==SFXManager::SFX_PLAYING) + m_roll_sfx->position(getXYZ()); + return false; } // updateAndDelete // ----------------------------------------------------------------------------- @@ -217,8 +192,7 @@ bool Bowling::hit(AbstractKart* kart, PhysicalObject* obj) { if(kart && kart->isShielded()) { - kart->decreaseShieldTime(0.0f); //Decreasing the shield time by the default value. - Log::verbose("Bowling", "Decreasing shield!"); + kart->decreaseShieldTime(); return true; } else @@ -238,5 +212,6 @@ HitEffect* Bowling::getHitEffect() const { if(m_has_hit_kart) return new HitSFX(getXYZ(), "strike"); - return NULL; + else + return new HitSFX(getXYZ(), "crash"); } // getHitEffect diff --git a/src/items/bowling.hpp b/src/items/bowling.hpp index 9841ee0f7..8b84c3f3b 100644 --- a/src/items/bowling.hpp +++ b/src/items/bowling.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2007 Joerg Henrichs, Marianne Gagnon +// Copyright (C) 2007-2013 Joerg Henrichs, Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -29,6 +29,7 @@ using namespace irr; #include "items/flyable.hpp" class XMLNode; +class SFXBase; /** * \ingroup items @@ -45,11 +46,14 @@ private: * kart was hit. */ bool m_has_hit_kart; + /** A sound effect for rolling ball. */ + SFXBase *m_roll_sfx; + public: - Bowling(AbstractKart* kart); + Bowling(AbstractKart* kart); + virtual ~Bowling(); static void init(const XMLNode &node, scene::IMesh *bowling); virtual bool updateAndDelete(float dt); - virtual const core::stringw getHitString(const AbstractKart *kart) const; virtual bool hit(AbstractKart* kart, PhysicalObject* obj=NULL); virtual HitEffect *getHitEffect() const; diff --git a/src/items/cake.cpp b/src/items/cake.cpp index d09ccc11f..7f802dcbb 100644 --- a/src/items/cake.cpp +++ b/src/items/cake.cpp @@ -1,9 +1,9 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2007 Joerg Henrichs +// Copyright (C) 2007-2013 Joerg Henrichs // // Physics improvements and linear intersection algorithm by -// by David Mikos. Copyright (C) 2009. +// Copyright (C) 2009-2013 David Mikos. // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -136,28 +136,6 @@ void Cake::init(const XMLNode &node, scene::IMesh *cake_model) m_st_max_distance_squared = max_distance*max_distance; } // init -// ---------------------------------------------------------------------------- -/** Picks a random message to be displayed when a kart is hit by a cake. - * \param The kart that was hit (ignored here). - * \returns The string to display. - */ -const core::stringw Cake::getHitString(const AbstractKart *kart) const -{ - const int CAKE_STRINGS_AMOUNT = 4; - RandomGenerator r; - switch (r.get(CAKE_STRINGS_AMOUNT)) - { - //I18N: shown when hit by cake. %1 is the attacker, %0 is the victim. - case 0: return _LTR("%0 eats too much of %1's cake"); - //I18N: shown when hit by cake. %1 is the attacker, %0 is the victim. - case 1: return _LTR("%0 is dubious of %1's cooking skills"); - //I18N: shown when hit by cake. %1 is the attacker, %0 is the victim. - case 2: return _LTR("%0 should not play with %1's lunch"); - //I18N: shown when hit by cake. %1 is the attacker, %0 is the victim. - case 3: return _LTR("%1 ruins %0's cakeless diet"); - default: assert(false); return L""; // avoid compiler warning - } -} // getHitString // ---------------------------------------------------------------------------- /** Callback from the physics in case that a kart or physical object is hit. * The cake triggers an explosion when hit. @@ -173,8 +151,7 @@ bool Cake::hit(AbstractKart* kart, PhysicalObject* obj) { if(kart && kart->isShielded()) { - kart->decreaseShieldTime(0.0f); //Decreasing the shield time by the default value. - Log::verbose("Cake", "Decreasing shield! \n"); + kart->decreaseShieldTime(); return false; //Not sure if a shield hit is a real hit. } explode(kart, obj); diff --git a/src/items/cake.hpp b/src/items/cake.hpp index 111a74cb8..626a671e6 100644 --- a/src/items/cake.hpp +++ b/src/items/cake.hpp @@ -1,9 +1,9 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2007 Joerg Henrichs +// Copyright (C) 2007-2013 Joerg Henrichs // // Physics improvements and linear intersection algorithm by -// by David Mikos. Copyright (C) 2009. +// Copyright (C) 2009-2013 David Mikos. // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -49,8 +49,6 @@ private: public: Cake (AbstractKart *kart); static void init (const XMLNode &node, scene::IMesh *cake_model); - virtual const core::stringw - getHitString(const AbstractKart *kart) const; virtual bool hit(AbstractKart* kart, PhysicalObject* obj=NULL); // ------------------------------------------------------------------------ virtual void hitTrack () { hit(NULL); } diff --git a/src/items/flyable.cpp b/src/items/flyable.cpp index c23a8c306..9d5525075 100644 --- a/src/items/flyable.cpp +++ b/src/items/flyable.cpp @@ -1,9 +1,9 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2007 Joerg Henrichs +// Copyright (C) 2007-2013 Joerg Henrichs // // Linear item-kart intersection function written by -// by David Mikos. Copyright (C) 2009. +// Copyright (C) 2009-2013 David Mikos // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -21,9 +21,6 @@ #include "items/flyable.hpp" -#if defined(WIN32) && !defined(__CYGWIN__) && !defined(__MINGW32__) -# define isnan _isnan -#endif #include #include @@ -42,6 +39,7 @@ #include "tracks/track.hpp" #include "utils/constants.hpp" #include "utils/string_utils.hpp" +#include "utils/vs.hpp" // static variables: float Flyable::m_st_speed [PowerupManager::POWERUP_MAX]; @@ -77,6 +75,7 @@ Flyable::Flyable(AbstractKart *kart, PowerupManager::PowerupType type, // Add the graphical model setNode(irr_driver->addMesh(m_st_model[type])); + irr_driver->applyObjectPassShader(getNode()); #ifdef DEBUG std::string debug_name("flyable: "); debug_name += type; @@ -432,20 +431,6 @@ bool Flyable::hit(AbstractKart *kart_hit, PhysicalObject* object) { // the owner of this flyable should not be hit by his own flyable if(isOwnerImmunity(kart_hit)) return false; - - if (kart_hit != NULL) - { //TODO: reduce shield time; add other string ? - RaceGUIBase* gui = World::getWorld()->getRaceGUI(); - irr::core::stringw hit_message = - StringUtils::insertValues(getHitString(kart_hit), - core::stringw(kart_hit->getName()), - core::stringw(m_owner ->getName()) - ); - if(hit_message.size()>0) - gui->addMessage(translations->fribidize(hit_message), NULL, 3.0f, - video::SColor(255, 255, 255, 255), false); - } - m_has_hit_something=true; return true; @@ -501,4 +486,9 @@ HitEffect* Flyable::getHitEffect() const return new Explosion(getXYZ(), "explosion", "explosion_cake.xml"); } // getHitEffect +// ---------------------------------------------------------------------------- +unsigned int Flyable::getOwnerId() +{ + return m_owner->getWorldKartId(); +} /* EOF */ diff --git a/src/items/flyable.hpp b/src/items/flyable.hpp index 9030209f3..e36381d6e 100644 --- a/src/items/flyable.hpp +++ b/src/items/flyable.hpp @@ -1,9 +1,9 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2007 Joerg Henrichs +// Copyright (C) 2007-2013 Joerg Henrichs // // Linear item-kart intersection function written by -// by David Mikos. Copyright (C) 2009. +// Copyright (C) 2009-2013 David Mikos. // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -166,7 +166,6 @@ public: static void init (const XMLNode &node, scene::IMesh *model, PowerupManager::PowerupType type); virtual bool updateAndDelete(float); - virtual const core::stringw getHitString(const AbstractKart *kart) const = 0; virtual HitEffect* getHitEffect() const; bool isOwnerImmunity(const AbstractKart *kart_hit) const; virtual bool hit(AbstractKart* kart, PhysicalObject* obj=NULL); @@ -206,6 +205,8 @@ public: * call, or if the inheriting object will update TerrainInfo itself * (or perhaps not at all if it is not needed). */ void setDoTerrainInfo(bool d) { m_do_terrain_info = d; } + // ------------------------------------------------------------------------ + unsigned int getOwnerId(); }; // Flyable #endif diff --git a/src/items/item.cpp b/src/items/item.cpp index 0713fa85a..2a15d4399 100644 --- a/src/items/item.cpp +++ b/src/items/item.cpp @@ -1,6 +1,7 @@ -// // SuperTuxKart - a fun racing game with go-kart +// // Copyright (C) 2004 Steve Baker +// Copyright (C) 2006-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -110,8 +111,7 @@ void Item::initItem(ItemType type, const Vec3 &xyz) m_deactive_time = 0; m_time_till_return = 0.0f; // not strictly necessary, see isCollected() m_emitter = NULL; - m_rotate = (type!=ITEM_BUBBLEGUM) && (type!=ITEM_TRIGGER) && - (type!=ITEM_EASTER_EGG); + m_rotate = (type!=ITEM_BUBBLEGUM) && (type!=ITEM_TRIGGER); switch(m_type) { case ITEM_BUBBLEGUM: @@ -186,8 +186,11 @@ void Item::switchTo(ItemType type, scene::IMesh *mesh, scene::IMesh *lowmesh) { node = m_node->getAllNodes()[1]; ((scene::IMeshSceneNode*)node)->setMesh(lowmesh); + irr_driver->applyObjectPassShader(m_node->getAllNodes()[1]); } + irr_driver->applyObjectPassShader(m_node->getAllNodes()[0]); + World::getWorld()->getTrack()->adjustForFog(m_node); } // switchTo diff --git a/src/items/item.hpp b/src/items/item.hpp index 40aedad00..df6125197 100644 --- a/src/items/item.hpp +++ b/src/items/item.hpp @@ -1,6 +1,7 @@ -// // SuperTuxKart - a fun racing game with go-kart +// // Copyright (C) 2004 Steve Baker +// Copyright (C) 2006-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/items/item_manager.cpp b/src/items/item_manager.cpp index 599a14dcd..4ac439453 100644 --- a/src/items/item_manager.cpp +++ b/src/items/item_manager.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/items/item_manager.hpp b/src/items/item_manager.hpp index 90ba4e36c..a69736153 100644 --- a/src/items/item_manager.hpp +++ b/src/items/item_manager.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/items/plunger.cpp b/src/items/plunger.cpp index b849c28b5..ca7ea56f0 100644 --- a/src/items/plunger.cpp +++ b/src/items/plunger.cpp @@ -1,9 +1,9 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2007 Joerg Henrichs +// Copyright (C) 2007-2013 Joerg Henrichs // // Physics improvements and linear intersection algorithm by -// by David Mikos. Copyright (C) 2009. +// Copyright (C) 2009-2013 David Mikos. // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -118,25 +118,6 @@ void Plunger::init(const XMLNode &node, scene::IMesh *plunger_model) Flyable::init(node, plunger_model, PowerupManager::POWERUP_PLUNGER); } // init -// ---------------------------------------------------------------------------- -/** Picks a random message to be displayed when a kart is hit by a plunger. - * \param The kart that was hit (ignored here). - * \returns The string to display. - */ -const core::stringw Plunger::getHitString(const AbstractKart *kart) const -{ - const int PLUNGER_IN_FACE_STRINGS_AMOUNT = 2; - RandomGenerator r; - switch (r.get(PLUNGER_IN_FACE_STRINGS_AMOUNT)) - { - //I18N: shown when a player receives a plunger in his face - case 0: return _LTR("%0 gets a fancy mask from %1"); - //I18N: shown when a player receives a plunger in his face - case 1: return _LTR("%1 merges %0's face with a plunger"); - default:assert(false); return L""; // avoid compiler warning - } -} // getHitString - // ---------------------------------------------------------------------------- /** Updates the bowling ball ineach frame. If this function returns true, the * object will be removed by the projectile manager. @@ -179,17 +160,7 @@ bool Plunger::updateAndDelete(float dt) bool Plunger::hit(AbstractKart *kart, PhysicalObject *obj) { if(isOwnerImmunity(kart)) return false; - - /*if(kart && kart->isShielded()) - { - //kart->decreaseShieldTime(0.0f); //Decreasing the shield time by the default value. - Log::verbose("Plunger", "Almost Decreasing shield! \n"); - - return false; //Not sure if a shield hit is a real hit. - }*/ - RaceGUIBase* gui = World::getWorld()->getRaceGUI(); - irr::core::stringw hit_message; - + // pulling back makes no sense in battle mode, since this mode is not a race. // so in battle mode, always hide view if( m_reverse_mode || race_manager->isBattleMode() ) @@ -199,13 +170,6 @@ bool Plunger::hit(AbstractKart *kart, PhysicalObject *obj) kart->blockViewWithPlunger(); if (kart->getController()->isPlayerController()) sfx_manager->quickSound("plunger"); - - hit_message += StringUtils::insertValues(getHitString(kart), - core::stringw(kart->getName()), - core::stringw(m_owner->getName()) - ).c_str(); - gui->addMessage(translations->fribidize(hit_message), NULL, 3.0f, - video::SColor(255, 255, 255, 255), false); } m_keep_alive = 0; diff --git a/src/items/plunger.hpp b/src/items/plunger.hpp index 951a1eef1..446c7c2ed 100644 --- a/src/items/plunger.hpp +++ b/src/items/plunger.hpp @@ -1,9 +1,9 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2007 Joerg Henrichs +// Copyright (C) 2007-2013 Joerg Henrichs // // Physics improvements and linear intersection algorithm by -// by David Mikos. Copyright (C) 2009. +// Copyright (C) 2009-2013 David Mikos. // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -51,7 +51,6 @@ public: static void init(const XMLNode &node, scene::IMesh* missile); virtual bool updateAndDelete(float dt); virtual void hitTrack (); - virtual const core::stringw getHitString(const AbstractKart *kart) const; virtual bool hit (AbstractKart *kart, PhysicalObject *obj=NULL); // ------------------------------------------------------------------------ diff --git a/src/items/powerup.cpp b/src/items/powerup.cpp index 90bf8324b..fe184b210 100644 --- a/src/items/powerup.cpp +++ b/src/items/powerup.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -34,57 +34,6 @@ #include "utils/string_utils.hpp" #include "utils/log.hpp" //TODO: remove after debugging is done -const wchar_t* getAnchorString() -{ - const int ANCHOR_STRINGS_COUNT = 3; - - RandomGenerator r; - const int id = r.get(ANCHOR_STRINGS_COUNT); - - switch (id) - { - //I18N: shown when anchor applied. %s is the victim. - case 0: return _LTR("Arrr, the %s dropped anchor, Captain!"); - case 1: return _LTR("%s pays the next round of grog!"); - case 2: return _LTR("%s is a mighty pirate!"); - default: assert(false); return L""; // avoid compiler warning. - } -} // getAnchorString - -//----------------------------------------------------------------------------- -const wchar_t* getParachuteString() -{ - const int PARACHUTE_STRINGS_COUNT = 3; - - RandomGenerator r; - const int id = r.get(PARACHUTE_STRINGS_COUNT); - - switch (id) - { - case 0: return _("Geronimo!!!"); // Parachutist shout - case 1: return _("The Space Shuttle has landed!"); - case 2: return _("Do you want to fly kites?"); - default: assert(false); return L""; // avoid compiler warning - } -} // getParachuteString - -//----------------------------------------------------------------------------- -const wchar_t* getSwapperString() -{ - const int SWAPPER_STRINGS_COUNT = 3; - - RandomGenerator r; - const int id = r.get(SWAPPER_STRINGS_COUNT); - - switch (id) - { - case 0: return _("Magic, son. Nothing else in the world smells like that."); - case 1: return _("A wizard did it!"); - case 2: return _("Banana? Box? Banana? Box? Banana? Box?"); - default: assert(false); return L""; // avoid compiler warning - } -} // getSwapperString - //----------------------------------------------------------------------------- /** Constructor, stores the kart to which this powerup belongs. * \param kart The kart to which this powerup belongs. @@ -150,7 +99,7 @@ void Powerup::set(PowerupManager::PowerupType type, int n) break ; case PowerupManager::POWERUP_BOWLING: - m_sound_use = sfx_manager->createSoundSource("bowling_roll"); + m_sound_use = sfx_manager->createSoundSource("bowling_shoot"); break ; case PowerupManager::POWERUP_ANVIL: @@ -237,7 +186,6 @@ void Powerup::use() m_number--; World *world = World::getWorld(); - RaceGUIBase* gui = world->getRaceGUI(); switch (m_type) { case PowerupManager::POWERUP_ZIPPER: @@ -248,9 +196,6 @@ void Powerup::use() ItemManager::get()->switchItems(); m_sound_use->position(m_owner->getXYZ()); m_sound_use->play(); - - gui->addMessage(getSwapperString(), NULL, 3.0f, - video::SColor(255, 255, 255, 255), false); break; } case PowerupManager::POWERUP_CAKE: @@ -262,7 +207,7 @@ void Powerup::use() Powerup::adjustSound(); m_sound_use->play(); - projectile_manager->newProjectile(m_owner, world->getTrack(), m_type); + projectile_manager->newProjectile(m_owner, m_type); break ; case PowerupManager::POWERUP_SWATTER: @@ -300,13 +245,29 @@ void Powerup::use() if(!m_owner->isShielded()) //if the previous shield had been used up. { - m_owner->getAttachment()->set(Attachment::ATTACH_BUBBLEGUM_SHIELD, - stk_config->m_bubblegum_shield_time); + if (m_owner->getIdent() == "nolok") + { + m_owner->getAttachment()->set(Attachment::ATTACH_NOLOK_BUBBLEGUM_SHIELD, + stk_config->m_bubblegum_shield_time); + } + else + { + m_owner->getAttachment()->set(Attachment::ATTACH_BUBBLEGUM_SHIELD, + stk_config->m_bubblegum_shield_time); + } } else // using a bubble gum while still having a shield { - m_owner->getAttachment()->set(Attachment::ATTACH_BUBBLEGUM_SHIELD, - stk_config->m_bubblegum_shield_time + m_owner->getShieldTime()); + if (m_owner->getIdent() == "nolok") + { + m_owner->getAttachment()->set(Attachment::ATTACH_NOLOK_BUBBLEGUM_SHIELD, + stk_config->m_bubblegum_shield_time + m_owner->getShieldTime()); + } + else + { + m_owner->getAttachment()->set(Attachment::ATTACH_BUBBLEGUM_SHIELD, + stk_config->m_bubblegum_shield_time + m_owner->getShieldTime()); + } } m_sound_use = sfx_manager->createSoundSource("inflate");//Extraordinary. Usually sounds are set in Powerup::set() @@ -343,11 +304,6 @@ void Powerup::use() m_sound_use->position(m_owner->getXYZ()); m_sound_use->play(); - - irr::core::stringw anchor_message; - anchor_message += StringUtils::insertValues(getAnchorString(), core::stringw(kart->getName())); - gui->addMessage(translations->fribidize(anchor_message), NULL, 3.0f, - video::SColor(255, 255, 255, 255), false); break; } } @@ -366,8 +322,7 @@ void Powerup::use() if(kart->isEliminated() || kart== m_owner) continue; if(kart->isShielded()) { - kart->decreaseShieldTime(stk_config->m_bubblegum_shield_time); - Log::verbose("Powerup", "Decreasing shield \n"); + kart->decreaseShieldTime(); continue; } if(m_owner->getPosition() > kart->getPosition()) @@ -390,9 +345,6 @@ void Powerup::use() else if(player_kart) m_sound_use->position(player_kart->getXYZ()); m_sound_use->play(); - - gui->addMessage(getParachuteString(), NULL, 3.0f, - video::SColor(255, 255, 255, 255), false); } break; diff --git a/src/items/powerup.hpp b/src/items/powerup.hpp index 4d76dad48..a21335342 100644 --- a/src/items/powerup.hpp +++ b/src/items/powerup.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/items/powerup_manager.cpp b/src/items/powerup_manager.cpp index 5d39c84df..3536a0ce4 100644 --- a/src/items/powerup_manager.cpp +++ b/src/items/powerup_manager.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/items/powerup_manager.hpp b/src/items/powerup_manager.hpp index 096b6a6a1..ec6ce3c7c 100644 --- a/src/items/powerup_manager.hpp +++ b/src/items/powerup_manager.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/items/projectile_manager.cpp b/src/items/projectile_manager.cpp index 18e299560..091c64f97 100644 --- a/src/items/projectile_manager.cpp +++ b/src/items/projectile_manager.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -26,6 +26,7 @@ #include "items/powerup_manager.hpp" #include "items/powerup.hpp" #include "items/rubber_ball.hpp" +#include "karts/abstract_kart.hpp" ProjectileManager *projectile_manager=0; @@ -112,7 +113,11 @@ void ProjectileManager::updateServer(float dt) } // updateServer // ----------------------------------------------------------------------------- -Flyable *ProjectileManager::newProjectile(AbstractKart *kart, Track* track, +/** Creates a new projectile of the given type. + * \param kart The kart which shoots the projectile. + * \param type Type of projectile. + */ +Flyable *ProjectileManager::newProjectile(AbstractKart *kart, PowerupManager::PowerupType type) { Flyable *f; @@ -128,3 +133,23 @@ Flyable *ProjectileManager::newProjectile(AbstractKart *kart, Track* track, m_active_projectiles.push_back(f); return f; } // newProjectile + +// ----------------------------------------------------------------------------- +/** Returns true if a projectile is within the given distance of the specified + * kart. + * \param kart The kart for which the test is done. + * \param radius Distance within which the projectile must be. +*/ +bool ProjectileManager::projectileIsClose(const AbstractKart * const kart, + float radius) +{ + float r2 = radius*radius; + + for(Projectiles::iterator i = m_active_projectiles.begin(); + i != m_active_projectiles.end(); i++) + { + float dist2 = (*i)->getXYZ().distance2(kart->getXYZ()); + if(dist2(World::getWorld()); + // FIXME: what does the rubber ball do in case of battle mode?? + if(!world) return; + computeTarget(); // initialises the current graph node @@ -141,8 +145,6 @@ void RubberBall::initializeControlPoints(const Vec3 &xyz) void RubberBall::computeTarget() { LinearWorld *world = dynamic_cast(World::getWorld()); - // FIXME: what does the rubber ball do in case of battle mode?? - if(!world) return; for(unsigned int p = race_manager->getFinishedKarts()+1; p < world->getNumKarts()+1; p++) @@ -190,13 +192,11 @@ unsigned int RubberBall::getSuccessorToHitTarget(unsigned int node_index, { int succ = 0; LinearWorld *lin_world = dynamic_cast(World::getWorld()); - // FIXME: what does the rubber ball do in case of battle mode?? - if(lin_world) - { - unsigned int sect = - lin_world->getSectorForKart(m_target); - succ = QuadGraph::get()->getNode(node_index).getSuccessorToReach(sect); - } + + unsigned int sect = + lin_world->getSectorForKart(m_target); + succ = QuadGraph::get()->getNode(node_index).getSuccessorToReach(sect); + if(dist) *dist += QuadGraph::get()->getNode(node_index) .getDistanceToSuccessor(succ); @@ -222,7 +222,7 @@ void RubberBall::getNextControlPoint() int next = getSuccessorToHitTarget(m_last_aimed_graph_node, &dist); float d = QuadGraph::get()->getDistanceFromStart(next)-f; - while(d0) + while(d=0) { next = getSuccessorToHitTarget(next, &dist); d = QuadGraph::get()->getDistanceFromStart(next)-f; @@ -293,28 +293,6 @@ void RubberBall::init(const XMLNode &node, scene::IMesh *rubberball) Flyable::init(node, rubberball, PowerupManager::POWERUP_RUBBERBALL); } // init -// ---------------------------------------------------------------------------- -/** Picks a random message to be displayed when a kart is hit by the - * rubber ball. - * \param The kart that was hit (ignored here). - * \returns The string to display. - */ -const core::stringw RubberBall::getHitString(const AbstractKart *kart) const -{ - const int COUNT = 2; - RandomGenerator r; - switch (r.get(COUNT)) - { - //I18N: shown when a player is hit by a rubber ball. %1 is the - // attacker, %0 is the victim. - case 0: return _LTR("%s is being bounced around."); - //I18N: shown when a player is hit by a rubber ball. %1 is the - // attacker, %0 is the victim. - case 1: return _LTR("Fetch the ball, %0!"); - default:assert(false); return L""; // avoid compiler warning - } -} // getHitString - // ---------------------------------------------------------------------------- /** Updates the rubber ball. * \param dt Time step size. @@ -322,6 +300,10 @@ const core::stringw RubberBall::getHitString(const AbstractKart *kart) const */ bool RubberBall::updateAndDelete(float dt) { + LinearWorld *world = dynamic_cast(World::getWorld()); + // FIXME: what does the rubber ball do in case of battle mode?? + if(!world) return true; + if(m_delete_timer>0) { m_delete_timer -= dt; @@ -422,9 +404,11 @@ void RubberBall::moveTowardsTarget(Vec3 *next_xyz, float dt) // at it directly, stop interpolating, instead fly straight // towards it. Vec3 diff = m_target->getXYZ()-getXYZ(); - if(diff.length()==0) - printf("diff=0\n"); - *next_xyz = getXYZ() + (dt*m_speed/diff.length())*diff; + // Avoid potential division by zero + if(diff.length2()==0) + *next_xyz = getXYZ(); + else + *next_xyz = getXYZ() + (dt*m_speed/diff.length())*diff; Vec3 old_vec = getXYZ()-m_previous_xyz; Vec3 new_vec = *next_xyz - getXYZ(); @@ -572,7 +556,7 @@ float RubberBall::updateHeight() if(m_current_max_height>m_max_height) m_current_max_height = m_max_height; m_interval = m_current_max_height / 10.0f; - // Avoid too small hops and esp. a division by zero + // Avoid too small hops and esp. a division by zero if(m_interval<0.01f) m_interval = 0.1f; } @@ -631,7 +615,6 @@ float RubberBall::getMaxTerrainHeight(const Vec3 &vertical_offset) const void RubberBall::updateDistanceToTarget() { const LinearWorld *world = dynamic_cast(World::getWorld()); - if(!world) return; // FIXME battle mode float target_distance = world->getDistanceDownTrackForKart(m_target->getWorldKartId()); @@ -723,17 +706,9 @@ bool RubberBall::hit(AbstractKart* kart, PhysicalObject* object) bool was_real_hit = Flyable::hit(kart, object); if(was_real_hit) { - /*if(kart && kart->isShielded() && kart->getShieldTime() > stk_config->m_bubblegum_shield_time ) - { //remove twice the default shield time - kart->decreaseShieldTime(stk_config->m_bubblegum_shield_time * 2); - Log::verbose("rubber_ball", "Decreasing shield 1! \n"); - } - else */if(kart && kart->isShielded()) + if(kart && kart->isShielded()) { - kart->decreaseShieldTime(stk_config->m_bubblegum_shield_time); - //kart->getAttachment()->update(0.0f); - //kart->setSquash(m_st_squash_duration, m_st_squash_slowdown); - Log::verbose("rubber_ball", "Decreasing shield 2! \n"); + kart->decreaseShieldTime(); } else explode(kart, object); diff --git a/src/items/rubber_ball.hpp b/src/items/rubber_ball.hpp index f0a1da0a9..deb0cc776 100644 --- a/src/items/rubber_ball.hpp +++ b/src/items/rubber_ball.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Joerg Henrichs +// Copyright (C) 2011-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -207,8 +207,6 @@ public: static void init(const XMLNode &node, scene::IMesh *rubberball); virtual bool updateAndDelete(float dt); virtual bool hit(AbstractKart* kart, PhysicalObject* obj=NULL); - virtual const core::stringw getHitString(const AbstractKart *kart) const; - static float getTimeBetweenRubberBalls() {return m_time_between_balls;} // ------------------------------------------------------------------------ /** This object does not create an explosion, all affects on diff --git a/src/items/rubber_band.cpp b/src/items/rubber_band.cpp index a049e89ba..99ad6e16a 100644 --- a/src/items/rubber_band.cpp +++ b/src/items/rubber_band.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2008 Joerg Henrichs +// Copyright (C) 2008-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -67,7 +67,7 @@ const wchar_t* getPlungerString() RubberBand::RubberBand(Plunger *plunger, AbstractKart *kart) : m_plunger(plunger), m_owner(kart) { - video::SColor color(77, 179, 0, 0); + const video::SColor color(77, 179, 0, 0); video::SMaterial m; m.AmbientColor = color; m.DiffuseColor = color; @@ -78,8 +78,19 @@ RubberBand::RubberBand(Plunger *plunger, AbstractKart *kart) m_attached_state = RB_TO_PLUNGER; assert(m_buffer->getVertexType()==video::EVT_STANDARD); + // Set the vertex colors properly, as the new pipeline doesn't use the old light values + u32 i; + scene::IMeshBuffer * const mb = m_mesh->getMeshBuffer(0); + video::S3DVertex * const verts = (video::S3DVertex *) mb->getVertices(); + const u32 max = mb->getVertexCount(); + for (i = 0; i < max; i++) + { + verts[i].Color = color; + } + updatePosition(); m_node = irr_driver->addMesh(m_mesh); + irr_driver->applyObjectPassShader(m_node); #ifdef DEBUG std::string debug_name = m_owner->getIdent()+" (rubber-band)"; m_node->setName(debug_name.c_str()); @@ -137,7 +148,7 @@ void RubberBand::updatePosition() */ void RubberBand::update(float dt) { - if(m_owner->isEliminated() || m_owner->isShielded()) + if(m_owner->isEliminated()) { // Rubber band snaps m_plunger->hit(NULL); @@ -247,9 +258,8 @@ void RubberBand::hit(AbstractKart *kart_hit, const Vec3 *track_xyz) { if(kart_hit->isShielded()) { - kart_hit->decreaseShieldTime(0.0f); //Decreasing the shield time by the default value. + kart_hit->decreaseShieldTime(); m_plunger->setKeepAlive(0.0f); - Log::verbose("rubber_band", "Decreasing shield! \n"); return; } diff --git a/src/items/rubber_band.hpp b/src/items/rubber_band.hpp index bab96d15d..68e07fb7e 100644 --- a/src/items/rubber_band.hpp +++ b/src/items/rubber_band.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2008 Joerg Henrichs +// Copyright (C) 2008-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/items/swatter.cpp b/src/items/swatter.cpp index 0a147dadb..65c3bbda1 100644 --- a/src/items/swatter.cpp +++ b/src/items/swatter.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Joerg Henrichs +// Copyright (C) 2011-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -295,16 +295,6 @@ void Swatter::squashThingsAround() kart->setSquash(kp->getSquashDuration(), kp->getSquashSlowdown()); - RaceGUIBase* gui = World::getWorld()->getRaceGUI(); - irr::core::stringw hit_message = - StringUtils::insertValues(getHitString(kart), - core::stringw(kart->getName()), - core::stringw(m_kart->getName()) - ); - if(hit_message.size()>0) - gui->addMessage(translations->fribidize(hit_message), NULL, 3.0f, - video::SColor(255, 255, 255, 255), false); - if (kart->getAttachment()->getType()==Attachment::ATTACH_BOMB) { // make bomb explode kart->getAttachment()->update(10000); @@ -318,28 +308,4 @@ void Swatter::squashThingsAround() } // for i < num_kartrs // TODO: squash items -} - - - -// ---------------------------------------------------------------------------- -/** Picks a random message to be displayed when a kart is hit by a swatter - * \param kart The kart that was hit. - * \returns The string to display. - */ -const core::stringw Swatter::getHitString(const AbstractKart *kart) const -{ - RandomGenerator r; - - const int SWATTER_STRINGS_AMOUNT = 3; - switch (r.get(SWATTER_STRINGS_AMOUNT)) - { - //I18N: shown when hit by swatter. %1 is the attacker, %0 is the victim. - case 0 : return _LTR("%1 thinks %0 is a big fly"); - //I18N: shown when hit by swatter. %1 is the attacker, %0 is the victim. - case 1 : return _LTR("%1 flattens %0"); - //I18N: shown when hit by swatter. %s is the victim - case 2 : return _LTR("%s feels flat today"); - default: assert(false); return L""; // avoid compiler warning - } -} +} // squashThingsAround diff --git a/src/items/swatter.hpp b/src/items/swatter.hpp index 5d5c55a23..5dd42a8e6 100644 --- a/src/items/swatter.hpp +++ b/src/items/swatter.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Joerg Henrichs +// Copyright (C) 2011-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -67,8 +67,6 @@ private: /** For some reason the built-in animation system doesn't work correctly here?? */ float m_swat_bomb_frame; - const core::stringw getHitString(const AbstractKart *kart) const; - public: Swatter(AbstractKart *kart, bool was_bomb, scene::ISceneNode* bomb_scene_node); diff --git a/src/karts/abstract_kart.cpp b/src/karts/abstract_kart.cpp index 656c422f1..8024f23f9 100644 --- a/src/karts/abstract_kart.cpp +++ b/src/karts/abstract_kart.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -53,8 +53,8 @@ AbstractKart::AbstractKart(const std::string& ident, m_kart_width = m_kart_model->getWidth(); m_kart_height = m_kart_model->getHeight(); m_kart_length = m_kart_model->getLength(); + m_kart_highest_point = m_kart_model->getHighestPoint(); m_wheel_graphics_position = m_kart_model->getWheelsGraphicsPosition(); - m_nitro_emitter_position = m_kart_model->getNitroEmittersPositon(); } // AbstractKart // ---------------------------------------------------------------------------- diff --git a/src/karts/abstract_kart.hpp b/src/karts/abstract_kart.hpp index ef8cfb602..bbf77cd7c 100644 --- a/src/karts/abstract_kart.hpp +++ b/src/karts/abstract_kart.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -51,10 +51,10 @@ private: float m_kart_width; /** Height of the kart, copy of the data from KartModel. */ float m_kart_height; + /** Coordinate on up axis */ + float m_kart_highest_point; /** The position of all four wheels in the 3d model */ const Vec3* m_wheel_graphics_position; - /** The position of all nitro emitters in the 3d model */ - const Vec3* m_nitro_emitter_position; /** Index of kart in world. */ unsigned int m_world_kart_id; @@ -140,6 +140,9 @@ public: /** Returns this kart's kart model. */ KartModel* getKartModel() { return m_kart_model; } // ------------------------------------------------------------------------ + /** Returns this kart's kart model. */ + const KartModel* getKartModel() const { return m_kart_model; } + // ------------------------------------------------------------------------ /** Returns the length of the kart. */ float getKartLength() const { return m_kart_length; } // ------------------------------------------------------------------------ @@ -149,6 +152,9 @@ public: /** Returns the width of the kart. */ float getKartWidth() const {return m_kart_width; } // ------------------------------------------------------------------------ + /** Returns the highest point of the kart (coordinate on up axis) */ + float getHighestPoint() const { return m_kart_highest_point; } + // ------------------------------------------------------------------------ /** Returns true if this kart has no wheels. */ bool isWheeless() const; // ------------------------------------------------------------------------ @@ -157,10 +163,6 @@ public: * right, 3 = rear left. */ const Vec3& getWheelGraphicsPosition(int i) const {assert(i>=0 && i<4); return m_wheel_graphics_position[i];} - // ------------------------------------------------------------------------ - /** Returns the position of a nitro emitter relative to the kart */ - const Vec3& getNitroEmitterPosition(int i) const - {assert(i>=0 && i<2); return m_nitro_emitter_position[i];} // ======================================================================== // Emergency animation related functions. @@ -352,14 +354,6 @@ public: * over. */ virtual void startEngineSFX() = 0; // ------------------------------------------------------------------------ - /** Stores the current suspension length. This function is called from - * world after all karts are in resting position (see - * World::resetAllKarts), so that the default suspension rest length can - * be stored. This is then used later to move the wheels depending on - * actual suspension, so that when a kart is in rest, the wheels are at - * the position at which they were modelled. */ - virtual void setSuspensionLength() = 0; - // ------------------------------------------------------------------------ /** This method is to be called every time the mass of the kart is updated, * which includes attaching an anvil to the kart (and detaching). */ virtual void updateWeight() = 0; @@ -386,8 +380,7 @@ public: virtual float getShieldTime() const = 0; // ------------------------------------------------------------------------ /** Decreases the kart's shield time. */ - //Hard coded shield decrease time - virtual void decreaseShieldTime(float t) = 0; + virtual void decreaseShieldTime() = 0; // ------------------------------------------------------------------------ /** Shows the star effect for a certain time. */ @@ -415,9 +408,7 @@ public: /** Set a text that is displayed on top of a kart. */ virtual void setOnScreenText(const wchar_t *text) = 0; - /** Whether an unused bubble gum shield becomes a bubble gum on the ground. - * */ - bool m_bubble_drop; + }; // AbstractKart diff --git a/src/karts/abstract_kart_animation.cpp b/src/karts/abstract_kart_animation.cpp index 3c85fbb07..7062c3f7a 100644 --- a/src/karts/abstract_kart_animation.cpp +++ b/src/karts/abstract_kart_animation.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Joerg Henrichs +// Copyright (C) 2010-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/karts/abstract_kart_animation.hpp b/src/karts/abstract_kart_animation.hpp index 423b69b15..14f318e82 100644 --- a/src/karts/abstract_kart_animation.hpp +++ b/src/karts/abstract_kart_animation.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -41,8 +41,8 @@ private: /** Name of this animation, used for debug prints only. */ std::string m_name; protected: - /** A pointer to the kart which is animated by this class. */ - AbstractKart *m_kart; + /** A pointer to the kart which is animated by this class. */ + AbstractKart *m_kart; /** Timer for the explosion. */ float m_timer; diff --git a/src/karts/cannon_animation.cpp b/src/karts/cannon_animation.cpp index 8d98c40f8..cc47cba94 100644 --- a/src/karts/cannon_animation.cpp +++ b/src/karts/cannon_animation.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/karts/cannon_animation.hpp b/src/karts/cannon_animation.hpp index 39057c37f..7a58cc414 100644 --- a/src/karts/cannon_animation.hpp +++ b/src/karts/cannon_animation.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/karts/controller/ai_base_controller.cpp b/src/karts/controller/ai_base_controller.cpp index 32d5173d1..2580b5fa1 100644 --- a/src/karts/controller/ai_base_controller.cpp +++ b/src/karts/controller/ai_base_controller.cpp @@ -1,7 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006-2009 Eduardo Hernandez Munoz -// Copyright (C) 2009, 2010 Joerg Henrichs +// Copyright (C) 2006-2013 Eduardo Hernandez Munoz +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -94,7 +94,8 @@ AIBaseController::AIBaseController(AbstractKart *kart, m_ai_properties = m_kart->getKartProperties()->getAIPropertiesForDifficulty(); - if(race_manager->getMinorMode()!=RaceManager::MINOR_MODE_3_STRIKES) + if(race_manager->getMinorMode()!=RaceManager::MINOR_MODE_3_STRIKES && + race_manager->getMinorMode()!=RaceManager::MINOR_MODE_SOCCER) { m_world = dynamic_cast(World::getWorld()); m_track = m_world->getTrack(); @@ -118,8 +119,8 @@ AIBaseController::AIBaseController(AbstractKart *kart, //----------------------------------------------------------------------------- void AIBaseController::reset() { - m_stuck_trigger_rescue = false; - m_collision_times.clear(); + m_stuck_trigger_rescue = false; + m_collision_times.clear(); } // reset //----------------------------------------------------------------------------- @@ -219,7 +220,7 @@ void AIBaseController::computePath() */ void AIBaseController::update(float dt) { - m_stuck_trigger_rescue = false; + m_stuck_trigger_rescue = false; if(QuadGraph::get()) { @@ -254,52 +255,52 @@ void AIBaseController::update(float dt) */ void AIBaseController::crashed(const Material *m) { - // Defines how many collision in what time will trigger a rescue. - // Note that typically it takes ~0.5 seconds for the AI to hit - // the track again if it is stuck (i.e. time for the push back plus - // time for the AI to accelerate and hit the terrain again). - const unsigned int NUM_COLLISION = 3; - const float COLLISION_TIME = 1.5f; + // Defines how many collision in what time will trigger a rescue. + // Note that typically it takes ~0.5 seconds for the AI to hit + // the track again if it is stuck (i.e. time for the push back plus + // time for the AI to accelerate and hit the terrain again). + const unsigned int NUM_COLLISION = 3; + const float COLLISION_TIME = 1.5f; - float time = World::getWorld()->getTime(); - if(m_collision_times.size()==0) - { - m_collision_times.push_back(time); - return; - } + float time = World::getWorld()->getTime(); + if(m_collision_times.size()==0) + { + m_collision_times.push_back(time); + return; + } - // Filter out multiple collisions report caused by single collision - // (bullet can report a collision more than once per frame, and - // resolving it can take a few frames as well, causing more reported - // collisions to happen). The time of 0.2 seconds was experimentally - // found, typically it takes 0.5 seconds for a kart to be pushed back - // from the terrain and accelerate to hit the same terrain again. - if(time - m_collision_times.back() < 0.2f) - return; + // Filter out multiple collisions report caused by single collision + // (bullet can report a collision more than once per frame, and + // resolving it can take a few frames as well, causing more reported + // collisions to happen). The time of 0.2 seconds was experimentally + // found, typically it takes 0.5 seconds for a kart to be pushed back + // from the terrain and accelerate to hit the same terrain again. + if(time - m_collision_times.back() < 0.2f) + return; - // Remove all outdated entries, i.e. entries that are older than the - // collision time plus 1 second. Older entries must be deleted, - // otherwise a collision that happened (say) 10 seconds ago could - // contribute to a stuck condition. - while(m_collision_times.size()>0 && - time - m_collision_times[0] > 1.0f+COLLISION_TIME) - m_collision_times.erase(m_collision_times.begin()); + // Remove all outdated entries, i.e. entries that are older than the + // collision time plus 1 second. Older entries must be deleted, + // otherwise a collision that happened (say) 10 seconds ago could + // contribute to a stuck condition. + while(m_collision_times.size()>0 && + time - m_collision_times[0] > 1.0f+COLLISION_TIME) + m_collision_times.erase(m_collision_times.begin()); - m_collision_times.push_back(time); + m_collision_times.push_back(time); - // Now detect if there are enough collision records in the - // specified time interval. - if(time - m_collision_times.front() > COLLISION_TIME - && m_collision_times.size()>=NUM_COLLISION) - { - // We can't call m_kart->forceRescue here, since crased() is - // called during physics processing, and forceRescue() removes the - // chassis from the physics world, which would then cause - // inconsistencies and potentially a crash during the physics - // processing. So only set a flag, which is tested during update. - m_stuck_trigger_rescue = true; - } + // Now detect if there are enough collision records in the + // specified time interval. + if(time - m_collision_times.front() > COLLISION_TIME + && m_collision_times.size()>=NUM_COLLISION) + { + // We can't call m_kart->forceRescue here, since crased() is + // called during physics processing, and forceRescue() removes the + // chassis from the physics world, which would then cause + // inconsistencies and potentially a crash during the physics + // processing. So only set a flag, which is tested during update. + m_stuck_trigger_rescue = true; + } } // crashed(Material) diff --git a/src/karts/controller/ai_base_controller.hpp b/src/karts/controller/ai_base_controller.hpp index 3fbeda17c..a47339ec3 100644 --- a/src/karts/controller/ai_base_controller.hpp +++ b/src/karts/controller/ai_base_controller.hpp @@ -1,6 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Joerg Henrichs +// Copyright (C) 2010-2013 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 @@ -107,7 +108,7 @@ public: virtual void handleZipper(bool play_sound) {}; virtual void finishedRace(float time) {}; virtual void collectedItem(const Item &item, int add_info=-1, - float previous_energy=0) {}; + float previous_energy=0) {}; virtual void setPosition(int p) {}; virtual bool isNetworkController() const { return false; } virtual bool isPlayerController() const { return false; } diff --git a/src/karts/controller/ai_properties.cpp b/src/karts/controller/ai_properties.cpp index 49ce34ee7..c9dc6f655 100644 --- a/src/karts/controller/ai_properties.cpp +++ b/src/karts/controller/ai_properties.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -38,6 +38,7 @@ AIProperties::AIProperties(RaceManager::Difficulty difficulty) m_skidding_threshold = UNDEFINED; m_min_start_delay = UNDEFINED; m_max_start_delay = UNDEFINED; + m_shield_incoming_radius = UNDEFINED; m_false_start_probability = UNDEFINED; m_make_use_of_slipstream = false; m_collect_avoid_items = false; @@ -68,6 +69,7 @@ void AIProperties::load(const XMLNode *ai_node) ai_node->get("collect-avoid-items", &m_collect_avoid_items ); ai_node->get("handle-bomb", &m_handle_bomb ); ai_node->get("skidding-threshold", &m_skidding_threshold ); + ai_node->get("shield-incoming-radius", &m_shield_incoming_radius ); ai_node->get("false-start-probability", &m_false_start_probability ); ai_node->get("min-start-delay", &m_min_start_delay ); ai_node->get("max-start-delay", &m_max_start_delay ); @@ -109,6 +111,7 @@ void AIProperties::checkAllSet(const std::string &filename) const CHECK_NEG(m_bad_item_closeness_2, "bad-item-closeness" ); CHECK_NEG(m_straight_length_for_zipper,"straight-length-for-zipper"); CHECK_NEG(m_skidding_threshold, "skidding-threshold" ); + CHECK_NEG(m_shield_incoming_radius, "shield-incoming-radius" ); CHECK_NEG(m_false_start_probability, "false-start-probability" ); CHECK_NEG(m_min_start_delay, "min-start-delay" ); CHECK_NEG(m_max_start_delay, "max-start-delay" ); diff --git a/src/karts/controller/ai_properties.hpp b/src/karts/controller/ai_properties.hpp index d8bd0a92c..aadad7c07 100644 --- a/src/karts/controller/ai_properties.hpp +++ b/src/karts/controller/ai_properties.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -79,7 +79,10 @@ protected: /** To determine the probability of selecting an item. */ InterpolationArray m_collect_item_probability; - + + /** Distance at which a detected projectile triggers a shield. */ + float m_shield_incoming_radius; + /** Probability of a false start. Note that Nolok in boss battle will never * have a false start. */ float m_false_start_probability; diff --git a/src/karts/controller/controller.cpp b/src/karts/controller/controller.cpp index 0677ecffe..334e2bf08 100644 --- a/src/karts/controller/controller.cpp +++ b/src/karts/controller/controller.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Joerg Henrichs +// Copyright (C) 2010-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/karts/controller/controller.hpp b/src/karts/controller/controller.hpp index 869d22f16..556d3b699 100644 --- a/src/karts/controller/controller.hpp +++ b/src/karts/controller/controller.hpp @@ -1,7 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Joerg Henrichs +// Copyright (C) 2010-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -72,20 +72,20 @@ public: virtual bool isPlayerController () const = 0; virtual bool isNetworkController() const = 0; virtual bool disableSlipstreamBonus() const = 0; - // --------------------------------------------------------------------------- + // --------------------------------------------------------------------------- /** Sets the controller name for this controller. */ virtual void setControllerName(const std::string &name) { m_controller_name = name; } - // --------------------------------------------------------------------------- + // --------------------------------------------------------------------------- /** Returns the name of this controller. */ const std::string &getControllerName() const { return m_controller_name; } - // --------------------------------------------------------------------------- + // --------------------------------------------------------------------------- /** Returns the active player for this controller (NULL * if this controller does not belong to a player. */ StateManager::ActivePlayer *getPlayer () {return m_player;} - // --------------------------------------------------------------------------- - /** Returns the player object (or NULL if it's a computer controller). */ + // --------------------------------------------------------------------------- + /** Returns the player object (or NULL if it's a computer controller). */ const StateManager::ActivePlayer *getPlayer () const { return m_player; } // ------------------------------------------------------------------------ diff --git a/src/karts/controller/end_controller.cpp b/src/karts/controller/end_controller.cpp index 8b72439c2..9e4b586d4 100644 --- a/src/karts/controller/end_controller.cpp +++ b/src/karts/controller/end_controller.cpp @@ -1,8 +1,8 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004-2010 Steve Baker -// Copyright (C) 2006-2010 Eduardo Hernandez Munoz -// Copyright (C) 2008-2010 Joerg Henrichs +// Copyright (C) 2004-2013 Steve Baker +// Copyright (C) 2006-2013 Eduardo Hernandez Munoz +// Copyright (C) 2008-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -55,7 +55,8 @@ EndController::EndController(AbstractKart *kart, StateManager::ActivePlayer *pla : AIBaseController(kart, player) { m_previous_controller = prev_controller; - if(race_manager->getMinorMode()!=RaceManager::MINOR_MODE_3_STRIKES) + if(race_manager->getMinorMode()!=RaceManager::MINOR_MODE_3_STRIKES && + race_manager->getMinorMode()!=RaceManager::MINOR_MODE_SOCCER) { // Overwrite the random selected default path from AIBaseController // with a path that always picks the first branch (i.e. it follows @@ -130,7 +131,8 @@ void EndController::reset() m_track_node = QuadGraph::UNKNOWN_SECTOR; // In battle mode there is no quad graph, so nothing to do in this case - if(race_manager->getMinorMode()!=RaceManager::MINOR_MODE_3_STRIKES) + if(race_manager->getMinorMode()!=RaceManager::MINOR_MODE_3_STRIKES && + race_manager->getMinorMode()!=RaceManager::MINOR_MODE_SOCCER) { QuadGraph::get()->findRoadSector(m_kart->getXYZ(), &m_track_node); @@ -180,7 +182,9 @@ void EndController::update(float dt) AIBaseController::update(dt); // In case of battle mode: don't do anything - if(race_manager->getMinorMode()==RaceManager::MINOR_MODE_3_STRIKES) + if(race_manager->getMinorMode()==RaceManager::MINOR_MODE_3_STRIKES || + race_manager->getMinorMode()==RaceManager::MINOR_MODE_SOCCER || + race_manager->getMinorMode()==RaceManager::MINOR_MODE_EASTER_EGG) { m_controls->m_accel = 0.0f; // Brake while we are still driving forwards (if we keep diff --git a/src/karts/controller/end_controller.hpp b/src/karts/controller/end_controller.hpp index c2c09ecab..3cb4d22f3 100644 --- a/src/karts/controller/end_controller.hpp +++ b/src/karts/controller/end_controller.hpp @@ -1,8 +1,8 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004-2010 Steve Baker -// Copyright (C) 2006-2010 Eduardo Hernandez Munoz -// Copyright (C) 2010 Joerg Henrichs +// Copyright (C) 2004-2013 Steve Baker +// Copyright (C) 2006-2013 Eduardo Hernandez Munoz +// Copyright (C) 2010-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/karts/controller/kart_control.hpp b/src/karts/controller/kart_control.hpp index ed330d820..68cc312ff 100644 --- a/src/karts/controller/kart_control.hpp +++ b/src/karts/controller/kart_control.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2008 Joerg Henrichs +// Copyright (C) 2008-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/karts/controller/player_controller.cpp b/src/karts/controller/player_controller.cpp index 258556b08..0950b24c1 100644 --- a/src/karts/controller/player_controller.cpp +++ b/src/karts/controller/player_controller.cpp @@ -1,7 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004-2005 Steve Baker -// Copyright (C) 2006-2009 Joerg Henrichs, Steve Baker +// Copyright (C) 2004-2013 Steve Baker +// Copyright (C) 2006-2013 Joerg Henrichs, Steve Baker // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/karts/controller/player_controller.hpp b/src/karts/controller/player_controller.hpp index cd43bcbba..7bb7c0a13 100644 --- a/src/karts/controller/player_controller.hpp +++ b/src/karts/controller/player_controller.hpp @@ -1,7 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004-2005 Steve Baker -// Copyright (C) 2006 Joerg Henrichs, Steve Baker +// Copyright (C) 2004-2013 Steve Baker +// Copyright (C) 2006-2013 Joerg Henrichs, Steve Baker // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/karts/controller/skidding_ai.cpp b/src/karts/controller/skidding_ai.cpp index 39ab9cff7..418c79260 100644 --- a/src/karts/controller/skidding_ai.cpp +++ b/src/karts/controller/skidding_ai.cpp @@ -1,8 +1,8 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004-2005 Steve Baker -// Copyright (C) 2006-2007 Eduardo Hernandez Munoz -// Copyright (C) 2008-2012 Joerg Henrichs +// Copyright (C) 2004-2013 Steve Baker +// Copyright (C) 2006-2013 Eduardo Hernandez Munoz +// Copyright (C) 2008-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -41,6 +41,10 @@ #endif #include "graphics/show_curve.hpp" #include "graphics/slip_stream.hpp" +#include "items/attachment.hpp" +#include "items/item_manager.hpp" +#include "items/powerup.hpp" +#include "items/projectile_manager.hpp" #include "karts/abstract_kart.hpp" #include "karts/controller/kart_control.hpp" #include "karts/controller/ai_properties.hpp" @@ -49,9 +53,6 @@ #include "karts/rescue_animation.hpp" #include "karts/skidding.hpp" #include "karts/skidding_properties.hpp" -#include "items/attachment.hpp" -#include "items/item_manager.hpp" -#include "items/powerup.hpp" #include "modes/linear_world.hpp" #include "modes/profile_world.hpp" #include "race/race_manager.hpp" @@ -59,18 +60,14 @@ #include "tracks/track.hpp" #include "utils/constants.hpp" #include "utils/log.hpp" +#include "utils/vs.hpp" #ifdef AI_DEBUG # include "irrlicht.h" using namespace irr; #endif -#if defined(WIN32) && !defined(__CYGWIN__) && !defined(__MINGW32__) -# define isnan _isnan -#else -# include -#endif - +#include #include #include #include @@ -206,7 +203,7 @@ void SkiddingAI::reset() m_track_node = QuadGraph::get()->findOutOfRoadSector(m_kart->getXYZ()); } - AIBaseController::reset(); + AIBaseController::reset(); } // reset //----------------------------------------------------------------------------- @@ -477,8 +474,8 @@ void SkiddingAI::handleSteering(float dt) *finite state machine. */ //Reaction to being outside of the road - float side_dist = - m_world->getDistanceToCenterForKart( m_kart->getWorldKartId() ); + float side_dist = + m_world->getDistanceToCenterForKart( m_kart->getWorldKartId() ); if( fabsf(side_dist) > 0.5f* QuadGraph::get()->getNode(m_track_node).getPathWidth()+0.5f ) @@ -1161,7 +1158,7 @@ void SkiddingAI::handleItems(const float dt) if( m_time_since_last_shot > 3.0f ) { - m_controls->m_fire = true; + m_controls->m_fire = true; if (m_kart->getPowerup()->getType() == PowerupManager::POWERUP_SWATTER) m_time_since_last_shot = 3.0f; else @@ -1193,29 +1190,54 @@ void SkiddingAI::handleItems(const float dt) switch( m_kart->getPowerup()->getType() ) { case PowerupManager::POWERUP_BUBBLEGUM: - // Avoid dropping all bubble gums one after another - if( m_time_since_last_shot < 3.0f) break; + { + Attachment::AttachmentType type = m_kart->getAttachment()->getType(); + // Don't use shield when we have a swatter. + if( type == Attachment::ATTACH_SWATTER || + type == Attachment::ATTACH_NOLOKS_SWATTER ) + break; - // Either use the bubble gum after 10 seconds, or if the next kart - // behind is 'close' but not too close (too close likely means that the - // kart is not behind but more to the side of this kart and so won't - // be hit by the bubble gum anyway). Should we check the speed of the - // kart as well? I.e. only drop if the kart behind is faster? Otoh - // this approach helps preventing an overtaken kart to overtake us - // again. - m_controls->m_look_back = true; //handle traditinal usage as bubble gum - m_controls->m_fire = (m_distance_behind < 15.0f && - m_distance_behind > 3.0f );//TODO: is this criteria sufficient to hit another kart with a high probability + // Check if a flyable (cake, ...) is close. If so, use bubblegum + // as shield + if( !m_kart->isShielded() && + projectile_manager->projectileIsClose(m_kart, + m_ai_properties->m_shield_incoming_radius) ) + { + m_controls->m_fire = true; + m_controls->m_look_back = false; + break; + } - m_controls->m_look_back = false; - //Do not use a shield, when you still have a swatter - if (m_kart->getAttachment()->getType() == Attachment::ATTACH_SWATTER || m_kart->getAttachment()->getType() == Attachment::ATTACH_NOLOKS_SWATTER) - break; - //else there are no objections not to use a shield - m_controls->m_fire = true; + // Avoid dropping all bubble gums one after another + if( m_time_since_last_shot < 3.0f) break; - break; // POWERUP_BUBBLEGUM + // Use bubblegum if the next kart behind is 'close' but not too close + // (too close likely means that the kart is not behind but more to the + // side of this kart and so won't be hit by the bubble gum anyway). + // Should we check the speed of the kart as well? I.e. only drop if + // the kart behind is faster? Otoh this approach helps preventing an + // overtaken kart to overtake us again. + if(m_distance_behind < 15.0f && m_distance_behind > 3.0f ) + { + m_controls->m_fire = true; + m_controls->m_look_back = true; + break; + } + // If this kart is in its last lap, drop bubble gums at every + // opportunity, since this kart won't envounter them anymore. + LinearWorld *lin_world = dynamic_cast(World::getWorld()); + if(m_time_since_last_shot > 3.0f && + lin_world && + lin_world->getKartLaps(m_kart->getWorldKartId()) + == race_manager->getNumLaps()-1) + { + m_controls->m_fire = true; + m_controls->m_look_back = true; + break; + } + break; // POWERUP_BUBBLEGUM + } // All the thrown/fired items might be improved by considering the angle // towards m_kart_ahead. case PowerupManager::POWERUP_CAKE: diff --git a/src/karts/controller/skidding_ai.hpp b/src/karts/controller/skidding_ai.hpp index f7d2aacd4..11ef347cf 100644 --- a/src/karts/controller/skidding_ai.hpp +++ b/src/karts/controller/skidding_ai.hpp @@ -1,9 +1,9 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004-2005 Steve Baker -// Copyright (C) 2006-2007 Eduardo Hernandez Munoz -// Copyright (C) 2010 Joerg Henrichs +// Copyright (C) 2004-2013 Steve Baker +// Copyright (C) 2006-2013 Eduardo Hernandez Munoz +// Copyright (C) 2010-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/karts/explosion_animation.cpp b/src/karts/explosion_animation.cpp index e5236ecc3..08ac464ce 100644 --- a/src/karts/explosion_animation.cpp +++ b/src/karts/explosion_animation.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -38,17 +38,18 @@ ExplosionAnimation *ExplosionAnimation::create(AbstractKart *kart, bool direct_hit) { if(kart->isInvulnerable()) return NULL; - /*else if(kart->isShielded() && !direct_hit) //How can I test this code ?? - { - kart->decreaseShieldTime(0.0f); //Decreasing the shield time by the default value. - Log::verbose("ExlosionAnimation", "Decreasing shield \n"); - return NULL; - }*/ + float r = kart->getKartProperties()->getExplosionRadius(); // Ignore explosion that are too far away. if(!direct_hit && pos.distance2(kart->getXYZ())>r*r) return NULL; + if(kart->isShielded()) + { + kart->decreaseShieldTime(); + return NULL; + } + return new ExplosionAnimation(kart, pos, direct_hit); } // create @@ -61,8 +62,7 @@ ExplosionAnimation *ExplosionAnimation::create(AbstractKart *kart) if(kart->isInvulnerable()) return NULL; else if(kart->isShielded()) { - kart->decreaseShieldTime(0.0f) ; //decreasing the shieldtime by the default amount - Log::verbose("ExplosionAnimation", "Decreasing shield 2\n"); + kart->decreaseShieldTime(); return NULL; } return new ExplosionAnimation(kart, kart->getXYZ(), /*direct hit*/true); diff --git a/src/karts/explosion_animation.hpp b/src/karts/explosion_animation.hpp index 387dd6b58..457f6dcda 100644 --- a/src/karts/explosion_animation.hpp +++ b/src/karts/explosion_animation.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/karts/ghost_kart.cpp b/src/karts/ghost_kart.cpp index caef906ed..36b49721e 100644 --- a/src/karts/ghost_kart.cpp +++ b/src/karts/ghost_kart.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/karts/ghost_kart.hpp b/src/karts/ghost_kart.hpp index 3b691127e..9fb66dbea 100644 --- a/src/karts/ghost_kart.hpp +++ b/src/karts/ghost_kart.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/karts/kart.cpp b/src/karts/kart.cpp index 9159100d5..08829b505 100644 --- a/src/karts/kart.cpp +++ b/src/karts/kart.cpp @@ -1,7 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004-2005 Steve Baker -// Copyright (C) 2006 SuperTuxKart-Team, Joerg Henrichs, Steve Baker +// Copyright (C) 2004-2013 Steve Baker +// Copyright (C) 2006-2013 SuperTuxKart-Team, Joerg Henrichs, Steve Baker // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -33,6 +33,7 @@ #include "config/user_config.hpp" #include "graphics/camera.hpp" #include "graphics/explosion.hpp" +#include "graphics/irr_driver.hpp" #include "graphics/material_manager.hpp" #include "graphics/particle_emitter.hpp" #include "graphics/particle_kind.hpp" @@ -67,6 +68,7 @@ #include "tracks/track_manager.hpp" #include "utils/constants.hpp" #include "utils/log.hpp" //TODO: remove after debugging is done +#include "utils/vs.hpp" @@ -75,12 +77,6 @@ # pragma warning(disable:4355) #endif -#if defined(WIN32) && !defined(__CYGWIN__) && !defined(__MINGW32__) -# define isnan _isnan -#else -# include -#endif - /** The kart constructor. * \param ident The identifier for the kart model to use. * \param position The position (or rank) for this kart (between 1 and @@ -122,6 +118,7 @@ Kart::Kart (const std::string& ident, unsigned int world_kart_id, m_jump_time = 0; m_is_jumping = false; m_min_nitro_time = 0.0f; + m_fire_clicked = 0; m_view_blocked_by_plunger = 0; m_has_caught_nolok_bubblegum = false; @@ -153,6 +150,7 @@ Kart::Kart (const std::string& ident, unsigned int world_kart_id, m_engine_sound = sfx_manager->createSoundSource(m_kart_properties->getEngineSfxType()); m_beep_sound = sfx_manager->createSoundSource( "horn" ); m_crash_sound = sfx_manager->createSoundSource( "crash" ); + m_boing_sound = sfx_manager->createSoundSource( "boing" ); m_goo_sound = sfx_manager->createSoundSource( "goo" ); m_skid_sound = sfx_manager->createSoundSource( "skid" ); m_terrain_sound = NULL; @@ -177,6 +175,7 @@ void Kart::init(RaceManager::KartType type) m_goo_sound->volume( 1.0f / factor ); m_skid_sound->volume( 1.0f / factor ); m_crash_sound->volume( 1.0f / factor ); + m_boing_sound->volume( 1.0f / factor ); m_beep_sound->volume( 1.0f / factor ); } else @@ -185,6 +184,7 @@ void Kart::init(RaceManager::KartType type) m_skid_sound->volume( 1.0f / race_manager->getNumberOfKarts() ); m_crash_sound->volume( 1.0f / race_manager->getNumberOfKarts() ); m_beep_sound->volume( 1.0f / race_manager->getNumberOfKarts() ); + m_boing_sound->volume( 1.0f / race_manager->getNumberOfKarts() ); } } @@ -240,6 +240,7 @@ Kart::~Kart() sfx_manager->deleteSFX(m_skid_sound ); sfx_manager->deleteSFX(m_goo_sound ); sfx_manager->deleteSFX(m_beep_sound ); + sfx_manager->deleteSFX(m_boing_sound ); delete m_kart_gfx; if(m_terrain_sound) sfx_manager->deleteSFX(m_terrain_sound); if(m_previous_terrain_sound) sfx_manager->deleteSFX(m_previous_terrain_sound); @@ -522,8 +523,7 @@ void Kart::blockViewWithPlunger() m_kart_properties->getPlungerInFaceTime(); if(isShielded()) { - decreaseShieldTime(0.0f); //decrease the default amount of time - Log::verbose("Kart", "Decreasing shield, because of removing the plunger. \n"); + decreaseShieldTime(); } } // blockViewWithPlunger @@ -832,15 +832,22 @@ void Kart::finishedRace(float time) RaceGUIBase* m = World::getWorld()->getRaceGUI(); if(m) { - m->addMessage((getPosition() == 2 ? _("You won the race!") : _("You finished the race!")) , - this, 2.0f); + if (getPosition() == 2) + m->addMessage(_("You won the race!"), this, 2.0f); } } - else if (race_manager->getMinorMode() == RaceManager::MINOR_MODE_3_STRIKES) + else if (race_manager->getMinorMode() == RaceManager::MINOR_MODE_3_STRIKES || + race_manager->getMinorMode() == RaceManager::MINOR_MODE_SOCCER) { setController(new EndController(this, m_controller->getPlayer(), m_controller)); } + else if (race_manager->getMinorMode() == RaceManager::MINOR_MODE_EASTER_EGG) + { + m_kart_model->setAnimation(KartModel::AF_WIN_START); + setController(new EndController(this, m_controller->getPlayer(), + m_controller)); + } } // finishedRace @@ -955,9 +962,9 @@ bool Kart::isNearGround() const */ void Kart::setShieldTime(float t) { - if(this->isShielded()) + if(isShielded()) { - this->getAttachment()->setTimeLeft(t); + getAttachment()->setTimeLeft(t); } } // ------------------------------------------------------------------------ @@ -967,10 +974,17 @@ void Kart::setShieldTime(float t) bool Kart::isShielded() const { if(getAttachment() != NULL) - return getAttachment()->getType() == Attachment::ATTACH_BUBBLEGUM_SHIELD; + { + Attachment::AttachmentType type = getAttachment()->getType(); + return type == Attachment::ATTACH_BUBBLEGUM_SHIELD || + type == Attachment::ATTACH_NOLOK_BUBBLEGUM_SHIELD; + } else + { return false; -} + } +} // isShielded + // ------------------------------------------------------------------------ /** *Returns the remaining time the kart is protected by a shield. @@ -981,34 +995,20 @@ float Kart::getShieldTime() const return getAttachment()->getTimeLeft(); else return 0.0f; -} +} // getShieldTime + // ------------------------------------------------------------------------ /** * Decreases the kart's shield time. * \param t The time substracted from the shield timer. If t == 0.0f, the default amout of time is substracted. */ -void Kart::decreaseShieldTime(float t) +void Kart::decreaseShieldTime() { - if(this->isShielded()) + if (isShielded()) { - getAttachment()->setTimeLeft( getAttachment()->getTimeLeft() - t ); - if(t == 0.0f) - { - getAttachment()->setTimeLeft( getAttachment()->getTimeLeft() - - stk_config->m_bubblegum_shield_time); - } - + getAttachment()->setTimeLeft(0.0f); } - //Let the kart drop a bubble gum, if the shield was not damaged. - //This is the default, whenever a powerup is used by a kart. - //It is turned off, if the shield was reduced below zero by a hit. (Or by intently damaging the shield.) - if(!this->isShielded()) - m_bubble_drop = false; - -} - - - +} // decreaseShieldTime //----------------------------------------------------------------------------- /** Shows the star effect for a certain time. @@ -1032,6 +1032,7 @@ void Kart::eliminate() m_stars_effect->update(1); } + m_kart_gfx->setCreationRateAbsolute(KartGFX::KGFX_TERRAIN, 0); m_eliminated = true; m_node->setVisible(false); @@ -1140,17 +1141,17 @@ void Kart::update(float dt) if (m_collision_particles) m_collision_particles->update(dt); updatePhysics(dt); + + if(!m_controls.m_fire) m_fire_clicked = 0; - if(m_controls.m_fire && !m_kart_animation) + if(m_controls.m_fire && !m_fire_clicked && !m_kart_animation) { // use() needs to be called even if there currently is no collecteable // since use() can test if something needs to be switched on/off. m_powerup->use() ; World::getWorld()->onFirePressed(getController()); - m_bubble_drop = true; + m_fire_clicked = 1; } - // Reset the fire button - m_controls.m_fire = 0; /* (TODO: add back when properly done) for (int n = 0; n < SFXManager::NUM_CUSTOMS; n++) @@ -1163,6 +1164,7 @@ void Kart::update(float dt) m_engine_sound->position ( getXYZ() ); m_crash_sound->position ( getXYZ() ); m_skid_sound->position ( getXYZ() ); + m_boing_sound->position ( getXYZ() ); // Check if a kart is (nearly) upside down and not moving much --> automatic rescue if(World::getWorld()->getTrack()->isAutoRescueEnabled() && @@ -1299,8 +1301,13 @@ void Kart::update(float dt) m_kart_model->setAnimation(KartModel::AF_DEFAULT); m_jump_time = 0; } - - if( (!isOnGround() || emergency) && m_shadow_enabled) + + //const bool dyn_shadows = World::getWorld()->getTrack()->hasShadows() && + // UserConfigParams::m_shadows && + // irr_driver->isGLSL(); + + // Disable the fake shadow if we're flying + if((!isOnGround() || emergency) && m_shadow_enabled) { m_shadow_enabled = false; m_shadow->disableShadow(); @@ -1333,8 +1340,7 @@ void Kart::setSquash(float time, float slowdown) if (isShielded()) { - decreaseShieldTime(stk_config->m_bubblegum_shield_time/2.0f); - Log::verbose("Kart", "Decreasing shield \n"); + decreaseShieldTime(); return; } @@ -1398,6 +1404,7 @@ void Kart::handleMaterialSFX(const Material *material) m_terrain_sound = NULL; } } + if(m_previous_terrain_sound && m_previous_terrain_sound->getStatus()==SFXManager::SFX_STOPPED) { @@ -1407,15 +1414,19 @@ void Kart::handleMaterialSFX(const Material *material) sfx_manager->deleteSFX(m_previous_terrain_sound); m_previous_terrain_sound = NULL; } + + bool m_schedule_pause = m_flying || + dynamic_cast(getKartAnimation()) || + dynamic_cast(getKartAnimation()); // terrain sound is not necessarily a looping sound so check its status before // setting its speed, to avoid 'ressuscitating' sounds that had already stopped - if(m_terrain_sound - && (m_terrain_sound->getStatus() == SFXManager::SFX_PLAYING - || m_terrain_sound->getStatus() == SFXManager::SFX_PAUSED)) + if(m_terrain_sound && + (m_terrain_sound->getStatus()==SFXManager::SFX_PLAYING || + m_terrain_sound->getStatus()==SFXManager::SFX_PAUSED)) { m_terrain_sound->position(getXYZ()); - material->setSFXSpeed(m_terrain_sound, m_speed); + material->setSFXSpeed(m_terrain_sound, m_speed, m_schedule_pause); } } // handleMaterialSFX @@ -1661,7 +1672,7 @@ void Kart::crashed(AbstractKart *k, bool update_attachments) getAttachment()->handleCollisionWithKart(k); } m_controller->crashed(k); - crashed(); + crashed(NULL, k); } // crashed(Kart, update_attachments // ----------------------------------------------------------------------------- @@ -1801,13 +1812,15 @@ void Kart::crashed(const Material *m, const Vec3 &normal) } // if(m && m->getCollisionReaction() != Material::NORMAL && // !getKartAnimation()) m_controller->crashed(m); - crashed(); + crashed(m, NULL); } // crashed(Material) // ----------------------------------------------------------------------------- /** Common code used when a kart or a material was hit. + * @param m The material collided into, or NULL if none + * @param k The kart collided into, or NULL if none */ -void Kart::crashed() +void Kart::crashed(const Material* m, AbstractKart *k) { if(World::getWorld()->getTime()-m_time_last_crash < 0.5f) return; @@ -1821,8 +1834,16 @@ void Kart::crashed() { // In case that the sfx is longer than 0.5 seconds, only play it if // it's not already playing. - if(m_crash_sound->getStatus() != SFXManager::SFX_PLAYING) - m_crash_sound->play(); + if (isShielded() || (k != NULL && k->isShielded())) + { + if (m_boing_sound->getStatus() != SFXManager::SFX_PLAYING) + m_boing_sound->play(); + } + else + { + if(m_crash_sound->getStatus() != SFXManager::SFX_PLAYING) + m_crash_sound->play(); + } } m_bounce_back_time = 0.1f; @@ -1935,7 +1956,7 @@ void Kart::updatePhysics(float dt) m_skidding->update(dt, isOnGround(), m_controls.m_steer, m_controls.m_skid); - + m_vehicle->setVisualRotation(m_skidding->getVisualSkidRotation()); if(( m_skidding->getSkidState() == Skidding::SKID_ACCUMULATE_LEFT || m_skidding->getSkidState() == Skidding::SKID_ACCUMULATE_RIGHT ) && m_skidding->getGraphicalJumpOffset()==0) @@ -1991,6 +2012,13 @@ void Kart::updatePhysics(float dt) //at low velocity, forces on kart push it back and forth so we ignore this if(fabsf(m_speed) < 0.2f) // quick'n'dirty workaround for bug 1776883 m_speed = 0; + + if (dynamic_cast(getKartAnimation()) || + dynamic_cast(getKartAnimation())) + { + m_speed = 0; + } + updateEngineSFX(); #ifdef XX Log::info("Kart","forward %f %f %f %f side %f %f %f %f angVel %f %f %f heading %f\n" @@ -2298,23 +2326,6 @@ void Kart::loadData(RaceManager::KartType type, bool is_animated_model) } // loadData // ---------------------------------------------------------------------------- -/** Stores the current suspension length. This function is called from world - * after all karts are in resting position (see World::resetAllKarts), so - * that the default suspension rest length can be stored. This is then used - * later to move the wheels depending on actual suspension, so that when - * a kart is in rest, the wheels are at the position at which they were - * modelled. - */ -void Kart::setSuspensionLength() -{ - for(unsigned int i=0; i<4; i++) - { - m_default_suspension_length[i] = - m_vehicle->getWheelInfo(i).m_raycastInfo.m_suspensionLength; - } // for i -} // setSuspensionLength - -//----------------------------------------------------------------------------- /** Applies engine power to all the wheels that are traction capable, * so other parts of code do not have to be adjusted to simulate different * kinds of vehicles in the general case, only if they are trying to @@ -2352,25 +2363,11 @@ void Kart::applyEngineForce(float force) void Kart::updateGraphics(float dt, const Vec3& offset_xyz, const btQuaternion& rotation) { - float wheel_up_axis[4]; - for(unsigned int i=0; i<4; i++) - { - // Set the suspension length - wheel_up_axis[i] = m_default_suspension_length[i] - - m_vehicle->getWheelInfo(i).m_raycastInfo.m_suspensionLength; - } - m_kart_model->update(m_wheel_rotation_dt, getSteerPercent(), wheel_up_axis); - - Vec3 center_shift = m_kart_properties->getGravityCenterShift(); - float y = m_vehicle->getWheelInfo(0).m_chassisConnectionPointCS.getY() - - m_default_suspension_length[0] - - m_vehicle->getWheelInfo(0).m_wheelsRadius - - (m_kart_model->getWheelGraphicsRadius(0) - -m_kart_model->getWheelGraphicsPosition(0).getY() ); - y += m_skidding->getGraphicalJumpOffset(); - center_shift.setY(y); - - if ((m_controls.m_nitro || m_min_nitro_time > 0.0f) && isOnGround() && m_collected_energy > 0) + // Upate particle effects (creation rate, and emitter size + // depending on speed) + // -------------------------------------------------------- + if ( (m_controls.m_nitro || m_min_nitro_time > 0.0f) && + isOnGround() && m_collected_energy > 0 ) { // fabs(speed) is important, otherwise the negative number will // become a huge unsigned number in the particle scene node! @@ -2398,6 +2395,8 @@ void Kart::updateGraphics(float dt, const Vec3& offset_xyz, m_kart_gfx->resizeBox(KartGFX::KGFX_ZIPPER, getSpeed(), dt); + // Handle leaning of karts + // ----------------------- // Note that we compare with maximum speed of the kart, not // maximum speed including terrain effects. This avoids that // leaning might get less if a kart gets a special that increases @@ -2452,6 +2451,50 @@ void Kart::updateGraphics(float dt, const Vec3& offset_xyz, } } + // Now determine graphical chassis and wheel position depending on + // the physics result. The center of gravity of the chassis is at the + // bottom of the chassis, but the position of the graphical chassis is at + // the bottom of the wheels (i.e. in blender the kart is positioned on + // the horizonal plane through (0,0,0)). So first determine how far + // above the terrain is the center of the physics body. If the minimum + // of those values is larger than the lowest point of the chassis model + // the kart chassis would be too high (and look odd), so in this case + // move the chassis down so that the wheels (when touching the ground) + // look close enough to the chassis. + float height_above_terrain[4]; + float min_hat = 9999.9f; + for(unsigned int i=0; i<4; i++) + { + // Set the suspension length + height_above_terrain[i] = + ( m_vehicle->getWheelInfo(i).m_raycastInfo.m_hardPointWS + - m_vehicle->getWheelInfo(i).m_raycastInfo.m_contactPointWS).length() + - m_vehicle->getWheelInfo(i).m_chassisConnectionPointCS.getY(); + if(height_above_terrain[i] < min_hat) min_hat = height_above_terrain[i]; + } + + float chassis_delta = 0; + // Check if the chassis needs to be moved down so that the wheels look + // like they are in the rest state, i.e. the wheels are not too far down. + if(min_hat > m_kart_model->getLowestPoint()) + { + chassis_delta = min_hat - m_kart_model->getLowestPoint(); + for(unsigned int i=0; i<4; i++) + height_above_terrain[i] -= chassis_delta; + } + + m_kart_model->update(dt, m_wheel_rotation_dt, getSteerPercent(), + height_above_terrain, m_speed); + + + // If the kart is leaning, part of the kart might end up 'in' the track. + // To avoid this, raise the kart enough to offset the leaning. + float lean_height = tan(fabsf(m_current_lean)) * getKartWidth()*0.5f; + + Vec3 center_shift = m_kart_properties->getGravityCenterShift(); + + center_shift.setY(m_skidding->getGraphicalJumpOffset() + lean_height + - m_kart_model->getLowestPoint() -chassis_delta ); float heading = m_skidding->getVisualSkidRotation(); Moveable::updateGraphics(dt, center_shift, btQuaternion(heading, 0, m_current_lean)); diff --git a/src/karts/kart.hpp b/src/karts/kart.hpp index e81a14708..5dd049226 100644 --- a/src/karts/kart.hpp +++ b/src/karts/kart.hpp @@ -1,7 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004-2005 Steve Baker -// Copyright (C) 2006 SuperTuxKart-Team, Joerg Henrichs, Steve Baker +// Copyright (C) 2004-2013 Steve Baker +// Copyright (C) 2006-2013 SuperTuxKart-Team, Joerg Henrichs, Steve Baker // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -130,11 +130,14 @@ private: /** Current leaning of the kart. */ float m_current_lean; - /** If > 0 then bubble gum effect is on */ + /** If > 0 then bubble gum effect is on. This is the sliding when hitting a gum on the floor, not the shield. */ float m_bubblegum_time; /** The torque to apply after hitting a bubble gum. */ float m_bubblegum_torque; + + /** True if fire button was pushed and not released */ + bool m_fire_clicked; @@ -181,12 +184,6 @@ private: /** Rotation change in the last time delta, same for all wheels */ float m_wheel_rotation_dt; - /** For each wheel it stores the suspension length after the karts are at - * the start position, i.e. the suspension will be somewhat compressed. - * The bullet suspensionRestLength is the value when the suspension is not - * at all compressed. */ - float m_default_suspension_length[4]; - /** The skidmarks object for this kart. */ SkidMarks *m_skidmarks; @@ -208,6 +205,7 @@ private: SFXBase *m_previous_terrain_sound; SFXBase *m_skid_sound; SFXBase *m_goo_sound; + SFXBase *m_boing_sound; float m_time_last_crash; /** To prevent using nitro in too short bursts */ @@ -222,7 +220,7 @@ private: void updateEngineSFX(); void updateNitro(float dt); float getActualWheelForce(); - void crashed(); + void crashed(const Material* m, AbstractKart *k); void loadData(RaceManager::KartType type, bool animatedModel); public: @@ -235,7 +233,6 @@ public: virtual void createPhysics (); virtual void updateWeight (); virtual bool isInRest () const; - virtual void setSuspensionLength(); virtual void applyEngineForce (float force); virtual void flyUp(); @@ -406,8 +403,7 @@ public: virtual float getShieldTime() const; // ------------------------------------------------------------------------ /** Decreases the kart's shield time. */ - //If t = 0.0f: decrease shield time by the default amount. - virtual void decreaseShieldTime(float t); + virtual void decreaseShieldTime(); // ------------------------------------------------------------------------ /** Sets the energy the kart has collected. */ diff --git a/src/karts/kart_gfx.cpp b/src/karts/kart_gfx.cpp index cf2906ffc..fa04661f9 100644 --- a/src/karts/kart_gfx.cpp +++ b/src/karts/kart_gfx.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -40,33 +40,26 @@ KartGFX::KartGFX(const AbstractKart *kart) } m_kart = kart; - /* - // FIXME Old Positioning system Maybe usefull for a future effect - Vec3 rear_left(-(kart->getKartWidth()+0.20f)*0.35f, (kart->getKartHeight()-0.6f)*0.35f, - -kart->getKartLength()*0.35f); - Vec3 rear_right((kart->getKartWidth()+0.20f)*0.35f, (kart->getKartHeight()-0.6f)*0.35f, - -kart->getKartLength()*0.35f); - - - */ - Vec3 rear_left(kart->getWheelGraphicsPosition(3).toIrrVector().X, (kart->getKartHeight()-0.6f)*0.35f, - kart->getWheelGraphicsPosition(3).toIrrVector().Z); - Vec3 rear_right(kart->getWheelGraphicsPosition(2).toIrrVector().X, (kart->getKartHeight()-0.6f)*0.35f, - kart->getWheelGraphicsPosition(2).toIrrVector().Z); + Vec3 rear_left(kart->getWheelGraphicsPosition(3).getX(), 0.05f, + kart->getWheelGraphicsPosition(3).getZ()-0.1f ); + Vec3 rear_right(kart->getWheelGraphicsPosition(2).getX(), 0.05f, + kart->getWheelGraphicsPosition(2).getZ()-0.1f ); Vec3 rear_center(0, kart->getKartHeight()*0.35f, -kart->getKartLength()*0.35f); + + Vec3 rear_nitro_center(0, kart->getKartHeight()*0.2f, + -kart->getKartLength()*0.1f); // FIXME Used to match the emitter as seen in blender - const float delta = 0.6f; - Vec3 rear_nitro_right(kart->getNitroEmitterPosition(0).toIrrVector().X, - kart->getNitroEmitterPosition(0).toIrrVector().Y, - kart->getNitroEmitterPosition(0).toIrrVector().Z + delta); - - Vec3 rear_nitro_left(kart->getNitroEmitterPosition(1).toIrrVector().X, - kart->getNitroEmitterPosition(1).toIrrVector().Y, - kart->getNitroEmitterPosition(1).toIrrVector().Z + delta); + const Vec3 delta(0, 0, 0.6f); + Vec3 rear_nitro_right = kart->getKartModel()->getNitroEmittersPositon(0) + + delta; + Vec3 rear_nitro_left = kart->getKartModel()->getNitroEmittersPositon(1) + + delta; + if (!kart->getKartModel()->hasNitroEmitters()) + rear_nitro_right = rear_nitro_left = rear_nitro_center; // Create all effects. Note that they must be created // in the order of KartGFXType. diff --git a/src/karts/kart_gfx.hpp b/src/karts/kart_gfx.hpp index 24d178760..19c122485 100644 --- a/src/karts/kart_gfx.hpp +++ b/src/karts/kart_gfx.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/karts/kart_model.cpp b/src/karts/kart_model.cpp index 730dbb549..20419c581 100644 --- a/src/karts/kart_model.cpp +++ b/src/karts/kart_model.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2008 Joerg Henrichs +// Copyright (C) 2008-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -34,10 +34,43 @@ #include "utils/constants.hpp" #include "utils/log.hpp" +#include "IMeshManipulator.h" + #define SKELETON_DEBUG 0 float KartModel::UNDEFINED = -99.9f; +// ------------------------------------------------------------ +// SpeedWeightedObject implementation + +#define SPEED_WEIGHTED_OBJECT_PROPERTY_UNDEFINED -99.f + +SpeedWeightedObject::Properties::Properties() +{ + m_strength_factor = m_speed_factor = m_texture_speed.X = m_texture_speed.Y = SPEED_WEIGHTED_OBJECT_PROPERTY_UNDEFINED; +} + +void SpeedWeightedObject::Properties::loadFromXMLNode(const XMLNode* xml_node) +{ + xml_node->get("strength-factor", &m_strength_factor); + xml_node->get("speed-factor", &m_speed_factor); + xml_node->get("texture-speed-x", &m_texture_speed.X); + xml_node->get("texture-speed-y", &m_texture_speed.Y); +} + +void SpeedWeightedObject::Properties::checkAllSet() +{ +#define CHECK_NEG( a,strA) if(a<=SPEED_WEIGHTED_OBJECT_PROPERTY_UNDEFINED) { \ + Log::fatal("SpeedWeightedObject", "Missing default value for '%s'.", \ + strA); \ + } + CHECK_NEG(m_strength_factor, "speed-weighted strength-factor" ); + CHECK_NEG(m_speed_factor, "speed-weighted speed-factor" ); + CHECK_NEG(m_texture_speed.X, "speed-weighted texture speed X" ); + CHECK_NEG(m_texture_speed.Y, "speed-weighted texture speed Y" ); +#undef CHECK_NEG +} + /** Default constructor which initialises all variables with defaults. * Note that the KartModel is copied, so make sure to update makeCopy * if any more variables are added to this object. @@ -89,6 +122,7 @@ KartModel::KartModel(bool is_master) m_wheel_filename[1] = ""; m_wheel_filename[2] = ""; m_wheel_filename[3] = ""; + m_speed_weighted_objects.clear(); m_animated_node = NULL; m_mesh = NULL; for(unsigned int i=AF_BEGIN; i<=AF_END; i++) @@ -123,6 +157,8 @@ void KartModel::loadInfo(const XMLNode &node) animation_node->get("start-jump", &m_animation_frame[AF_JUMP_START]); animation_node->get("start-jump-loop",&m_animation_frame[AF_JUMP_LOOP] ); animation_node->get("end-jump", &m_animation_frame[AF_JUMP_END] ); + animation_node->get("start-speed-weighted", &m_animation_frame[AF_SPEED_WEIGHTED_START] ); + animation_node->get("end-speed-weighted", &m_animation_frame[AF_SPEED_WEIGHTED_END] ); animation_node->get("speed", &m_animation_speed ); } @@ -135,26 +171,31 @@ void KartModel::loadInfo(const XMLNode &node) } m_nitro_emitter_position[0] = Vec3 (0,0.1f,0); - m_nitro_emitter_position[1] = Vec3 (0,0.1f,0); + m_has_nitro_emitter = false; if(const XMLNode *nitroEmitter_node=node.getNode("nitro-emitter")) { loadNitroEmitterInfo(*nitroEmitter_node, "nitro-emitter-a", 0); loadNitroEmitterInfo(*nitroEmitter_node, "nitro-emitter-b", 1); + m_has_nitro_emitter = true; + } + + if(const XMLNode *speed_weighted_objects_node=node.getNode("speed-weighted-objects")) + { + SpeedWeightedObject::Properties fallback_properties; + fallback_properties.loadFromXMLNode(speed_weighted_objects_node); + + for(unsigned int i=0 ; i < speed_weighted_objects_node->getNumNodes() ; i++) + { + loadSpeedWeightedInfo(speed_weighted_objects_node->getNode(i), fallback_properties); + } } if(const XMLNode *hat_node=node.getNode("hat")) { - if(hat_node->get("offset", &m_hat_offset)) - { - // Xmas mode handling :) - if(UserConfigParams::m_xmas_enabled) - setHatMeshName("christmas_hat.b3d"); - } + hat_node->get("offset", &m_hat_offset); } - else - m_hat_offset = core::vector3df(0,0,0); } // loadInfo // ---------------------------------------------------------------------------- @@ -184,6 +225,22 @@ KartModel::~KartModel() } } + for(size_t i=0; idrop(); + } + if(m_is_master && m_speed_weighted_objects[i].m_model) + { + irr_driver->dropAllTextures(m_speed_weighted_objects[i].m_model); + irr_driver->removeMeshFromCache(m_speed_weighted_objects[i].m_model); + } + } + if(m_is_master && m_mesh) { m_mesh->drop(); @@ -221,6 +278,8 @@ KartModel* KartModel::makeCopy() km->m_kart_width = m_kart_width; km->m_kart_length = m_kart_length; km->m_kart_height = m_kart_height; + km->m_kart_highest_point= m_kart_highest_point; + km->m_kart_lowest_point = m_kart_lowest_point; km->m_mesh = m_mesh; km->m_model_filename = m_model_filename; km->m_animation_speed = m_animation_speed; @@ -231,6 +290,7 @@ KartModel* KartModel::makeCopy() km->m_nitro_emitter_position[0] = m_nitro_emitter_position[0]; km->m_nitro_emitter_position[1] = m_nitro_emitter_position[1]; + km->m_has_nitro_emitter = m_has_nitro_emitter; for(unsigned int i=0; i<4; i++) { @@ -245,6 +305,15 @@ KartModel* KartModel::makeCopy() km->m_max_suspension[i] = m_max_suspension[i]; km->m_dampen_suspension_amplitude[i]= m_dampen_suspension_amplitude[i]; } + + km->m_speed_weighted_objects.resize(m_speed_weighted_objects.size()); + for(size_t i=0; im_speed_weighted_objects[i] = m_speed_weighted_objects[i]; + } + for(unsigned int i=AF_BEGIN; i<=AF_END; i++) km->m_animation_frame[i] = m_animation_frame[i]; @@ -284,7 +353,7 @@ scene::ISceneNode* KartModel::attachModel(bool animated_models) std::string debug_name = m_model_filename+" (animated-kart-model)"; node->setName(debug_name.c_str()); #if SKELETON_DEBUG - irr_driber->addDebugMesh(m_animated_node); + irr_driver->addDebugMesh(m_animated_node); #endif #endif m_animated_node->setLoopMode(false); @@ -297,6 +366,22 @@ scene::ISceneNode* KartModel::attachModel(bool animated_models) if(!m_wheel_model[i]) continue; m_wheel_node[i]->setParent(lod_node); } + + // Become the owner of the speed weighted objects + for(size_t i=0; isetParent(lod_node); + } + + // Enable rim lighting for the kart + irr_driver->applyObjectPassShader(lod_node, true); + std::vector &lodnodes = lod_node->getAllNodes(); + const u32 max = lodnodes.size(); + for (u32 i = 0; i < max; i++) + { + irr_driver->applyObjectPassShader(lodnodes[i], true); + } } else { @@ -314,17 +399,45 @@ scene::ISceneNode* KartModel::attachModel(bool animated_models) std::string debug_name = m_model_filename+" (kart-model)"; node->setName(debug_name.c_str()); #endif + + // Attach the wheels for(unsigned int i=0; i<4; i++) { if(!m_wheel_model[i]) continue; m_wheel_node[i] = irr_driver->addMesh(m_wheel_model[i], node); + Vec3 wheel_min, wheel_max; + MeshTools::minMax3D(m_wheel_model[i], &wheel_min, &wheel_max); + m_wheel_graphics_radius[i] = 0.5f*(wheel_max.getY() - wheel_min.getY()); + m_wheel_node[i]->grab(); + ((scene::IMeshSceneNode *) m_wheel_node[i])->setReadOnlyMaterials(true); #ifdef DEBUG std::string debug_name = m_wheel_filename[i]+" (wheel)"; m_wheel_node[i]->setName(debug_name.c_str()); #endif m_wheel_node[i]->setPosition(m_wheel_graphics_position[i].toIrrVector()); } + + // Attach the speed weighted objects + set the animation state + for(size_t i=0 ; i < m_speed_weighted_objects.size() ; i++) + { + SpeedWeightedObject& obj = m_speed_weighted_objects[i]; + obj.m_node = NULL; + if(obj.m_model) + { + obj.m_node = irr_driver->addAnimatedMesh(obj.m_model, node); + obj.m_node->grab(); + + obj.m_node->setAnimationStrength(0.0f); + obj.m_node->setFrameLoop(m_animation_frame[AF_SPEED_WEIGHTED_START], m_animation_frame[AF_SPEED_WEIGHTED_END]); + + #ifdef DEBUG + std::string debug_name = obj.m_name+" (speed-weighted)"; + obj.m_node->setName(debug_name.c_str()); + #endif + obj.m_node->setPosition(obj.m_position.toIrrVector()); + } + } } return node; } // attachModel @@ -348,10 +461,53 @@ bool KartModel::loadModels(const KartProperties &kart_properties) m_mesh->grab(); irr_driver->grabAllTextures(m_mesh); - Vec3 min, max; - MeshTools::minMax3D(m_mesh->getMesh(m_animation_frame[AF_STRAIGHT]), &min, &max); + Vec3 kart_min, kart_max; + MeshTools::minMax3D(m_mesh->getMesh(m_animation_frame[AF_STRAIGHT]), + &kart_min, &kart_max); - Vec3 size = max-min; +#undef MOVE_KART_MESHES +#ifdef MOVE_KART_MESHES + // Kart models are not exactly centered. The following code would + // transform the mesh so that they are properly centered, but it + // would also mean all location relative to the original kart's + // center (wheel position, emitter, hat) would need to be modified. + scene::IMeshManipulator *mani = + irr_driver->getVideoDriver()->getMeshManipulator(); + Vec3 offset_from_center = -0.5f*(kart_max+kart_min); + offset_from_center.setY(-kart_min.getY()); + offset_from_center.setY(0); + + core::matrix4 translate(core::matrix4::EM4CONST_IDENTITY); + translate.setTranslation(offset_from_center.toIrrVector()); + mani->transform(m_mesh, translate); + MeshTools::minMax3D(m_mesh->getMesh(m_animation_frame[AF_STRAIGHT]), + &kart_min, &kart_max); +#endif + m_kart_highest_point = kart_max.getY(); + m_kart_lowest_point = kart_min.getY(); + + // Load the speed weighted object models. We need to do that now because it can affect the dimensions of the kart + for(size_t i=0 ; i < m_speed_weighted_objects.size() ; i++) + { + SpeedWeightedObject& obj = m_speed_weighted_objects[i]; + std::string full_name = + kart_properties.getKartDir()+obj.m_name; + obj.m_model = irr_driver->getAnimatedMesh(full_name); + // Grab all textures. This is done for the master only, so + // the destructor will only free the textures if a master + // copy is freed. + irr_driver->grabAllTextures(obj.m_model); + + // Update min/max + Vec3 obj_min, obj_max; + MeshTools::minMax3D(obj.m_model, &obj_min, &obj_max); + obj_min += obj.m_position; + obj_max += obj.m_position; + kart_min.min(obj_min); + kart_max.max(obj_max); + } + + Vec3 size = kart_max-kart_min; m_kart_width = size.getX(); m_kart_height = size.getY(); m_kart_length = size.getZ(); @@ -416,6 +572,20 @@ void KartModel::loadNitroEmitterInfo(const XMLNode &node, emitter_node->get("position", &m_nitro_emitter_position[index]); } // loadNitroEmitterInfo +/** Loads a single speed weighted node. */ +void KartModel::loadSpeedWeightedInfo(const XMLNode* speed_weighted_node, const SpeedWeightedObject::Properties& fallback_properties) +{ + SpeedWeightedObject obj; + obj.m_properties = fallback_properties; + obj.m_properties.loadFromXMLNode(speed_weighted_node); + + speed_weighted_node->get("position", &obj.m_position); + speed_weighted_node->get("model", &obj.m_name); + + if(!obj.m_name.empty()) + m_speed_weighted_objects.push_back(obj); +} + // ---------------------------------------------------------------------------- /** Loads a single wheel node. Currently this is the name of the wheel model * and the position of the wheel relative to the kart. @@ -486,7 +656,7 @@ void KartModel::reset() { // Reset the wheels const float suspension[4]={0,0,0,0}; - update(0, 0.0f, suspension); + update(0.0f, 0.0f, 0.0f, suspension, 0.0f); // Stop any animations currently being played. setAnimation(KartModel::AF_DEFAULT); @@ -592,35 +762,18 @@ void KartModel::OnAnimationEnd(scene::IAnimatedMeshSceneNode *node) } // OnAnimationEnd // ---------------------------------------------------------------------------- -/** Rotates and turns the wheels appropriately, and adjust for suspension. +/** Rotates and turns the wheels appropriately, and adjust for suspension + + updates the speed-weighted objects' animations. + * \param dt time since last frame * \param rotation_dt How far the wheels have rotated since last time. * \param steer The actual steer settings. * \param suspension Suspension height for all four wheels. + * \param speed The speed of the kart in meters/sec, used for the speed-weighted objects' animations */ -void KartModel::update(float rotation_dt, float steer, const float suspension[4]) +void KartModel::update(float dt, float rotation_dt, float steer, + const float height_above_terrain[4], float speed) { - float clamped_suspension[4]; - // Clamp suspension to minimum and maximum suspension length, so that - // the graphical wheel models don't look too wrong. - for(unsigned int i=0; i<4; i++) - { - const float suspension_length = (m_max_suspension[i]-m_min_suspension[i])/2; - - // limit amplitude between set limits, first dividing it by a - // somewhat arbitrary constant to reduce visible wheel movement - clamped_suspension[i] = suspension[i]/m_dampen_suspension_amplitude[i]; - float ratio = clamped_suspension[i] / suspension_length; - const int sign = ratio < 0 ? -1 : 1; - // expanded form of 1 - (1 - x)^2, i.e. making suspension display - // quadratic and not linear - ratio = sign * fabsf(ratio*(2-ratio)); -// clamped_suspension[i] = ratio*suspension_length; - clamped_suspension[i] = std::min(std::max(ratio*suspension_length, - m_min_suspension[i]), - m_max_suspension[i]); - } // for i<4 - - core::vector3df wheel_steer(0, steer*30.0f, 0); + core::vector3df wheel_steer(0, steer*30.0f, 0); for(unsigned int i=0; i<4; i++) { @@ -636,7 +789,8 @@ void KartModel::update(float rotation_dt, float steer, const float suspension[4] } #endif core::vector3df pos = m_wheel_graphics_position[i].toIrrVector(); - pos.Y += clamped_suspension[i]; + pos.Y = m_kart_lowest_point - height_above_terrain[i] + + m_wheel_graphics_radius[i]; m_wheel_node[i]->setPosition(pos); // Now calculate the new rotation: (old + change) mod 360 @@ -653,6 +807,58 @@ void KartModel::update(float rotation_dt, float steer, const float suspension[4] // If animations are disabled, stop here if (m_animated_node == NULL) return; + // Update the speed-weighted objects' animations + for(size_t i=0 ; i < m_speed_weighted_objects.size() ; i++) + { + SpeedWeightedObject& obj = m_speed_weighted_objects[i]; + +#define GET_VALUE(obj, value_name) \ + obj.m_properties.value_name > SPEED_WEIGHTED_OBJECT_PROPERTY_UNDEFINED ? obj.m_properties.value_name : \ + m_kart->getKartProperties()->getSpeedWeightedObjectProperties().value_name + + // Animation strength + float strength = 1.0f; + const float strength_factor = GET_VALUE(obj, m_strength_factor); + if(strength_factor >= 0.0f) + { + strength = speed * strength_factor; + btClamp(strength, 0.0f, 1.0f); + } + obj.m_node->setAnimationStrength(strength); + + // Animation speed + const float speed_factor = GET_VALUE(obj, m_speed_factor); + if(speed_factor >= 0.0f) + { + float anim_speed = speed * speed_factor; + obj.m_node->setAnimationSpeed(anim_speed); + } + + // Texture animation + core::vector2df tex_speed; + tex_speed.X = GET_VALUE(obj, m_texture_speed.X); + tex_speed.Y = GET_VALUE(obj, m_texture_speed.Y); + if(tex_speed != core::vector2df(0.0f, 0.0f)) + { + obj.m_texture_cur_offset += speed * tex_speed * dt; + if(obj.m_texture_cur_offset.X > 1.0f) obj.m_texture_cur_offset.X = fmod(obj.m_texture_cur_offset.X, 1.0f); + if(obj.m_texture_cur_offset.Y > 1.0f) obj.m_texture_cur_offset.Y = fmod(obj.m_texture_cur_offset.Y, 1.0f); + + for(unsigned int i=0; igetMaterialCount(); i++) + { + video::SMaterial &irrMaterial=obj.m_node->getMaterial(i); + for(unsigned int j=0; jsetTextureTranslate(obj.m_texture_cur_offset.X, obj.m_texture_cur_offset.Y); + } // for j0) + m_hat_node = NULL; + if(m_hat_name.size()>0) + { + scene::IBoneSceneNode *bone = m_animated_node->getJointNode("Head"); + if(!bone) + bone = m_animated_node->getJointNode("head"); + if(bone) { - scene::IBoneSceneNode *bone = m_animated_node->getJointNode("Head"); - if(!bone) - bone = m_animated_node->getJointNode("head"); - if(bone) - { - - // Till we have all models fixed, accept Head and head as bone naartme - scene::IMesh *hat_mesh = - irr_driver->getAnimatedMesh( - file_manager->getModelFile(m_hat_name)); - m_hat_node = irr_driver->addMesh(hat_mesh); - bone->addChild(m_hat_node); - m_animated_node->setCurrentFrame((float)m_animation_frame[AF_STRAIGHT]); - m_animated_node->OnAnimate(0); - bone->updateAbsolutePosition(); - - // With the hat node attached to the head bone, we have to - // reverse the transformation of the bone, so that the hat - // is still properly placed. Esp. the hat offset needs - // to be rotated. - const core::matrix4 mat = bone->getAbsoluteTransformation(); - core::matrix4 inv; - mat.getInverse(inv); - core::vector3df rotated_offset; - inv.rotateVect(rotated_offset, m_hat_offset); - m_hat_node->setPosition(rotated_offset); - m_hat_node->setScale(inv.getScale()); - m_hat_node->setRotation(inv.getRotationDegrees()); - } // if bone - } // if(m_hat_name) + // Till we have all models fixed, accept Head and head as bone naartme + scene::IMesh *hat_mesh = + irr_driver->getAnimatedMesh( + file_manager->getModelFile(m_hat_name)); + m_hat_node = irr_driver->addMesh(hat_mesh); + bone->addChild(m_hat_node); + m_animated_node->setCurrentFrame((float)m_animation_frame[AF_STRAIGHT]); + m_animated_node->OnAnimate(0); + bone->updateAbsolutePosition(); + // With the hat node attached to the head bone, we have to + // reverse the transformation of the bone, so that the hat + // is still properly placed. Esp. the hat offset needs + // to be rotated. + const core::matrix4 mat = bone->getAbsoluteTransformation(); + core::matrix4 inv; + mat.getInverse(inv); + core::vector3df rotated_offset; + inv.rotateVect(rotated_offset, m_hat_offset); + m_hat_node->setPosition(rotated_offset); + m_hat_node->setScale(inv.getScale()); + m_hat_node->setRotation(inv.getRotationDegrees()); + } // if bone + } // if(m_hat_name) } - diff --git a/src/karts/kart_model.hpp b/src/karts/kart_model.hpp index 9fdb3eea9..bc01dafc2 100644 --- a/src/karts/kart_model.hpp +++ b/src/karts/kart_model.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2008 Joerg Henrichs +// Copyright (C) 2008-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -20,6 +20,7 @@ #define HEADER_KART_MODEL_HPP #include +#include #include namespace irr @@ -36,6 +37,50 @@ class AbstractKart; class KartProperties; class XMLNode; +/** A speed-weighted object is an object whose characteristics are influenced by the kart's speed */ +struct SpeedWeightedObject +{ + /** Parameters for a speed-weighted object */ + struct Properties + { + Properties(); + + /** Strength factor: how much the kart speed affects the animation's distance from a static pose (-1 to disable) */ + float m_strength_factor; + + /** Speed factor: how much the kart speed affects the animation's speed (-1 to disable) */ + float m_speed_factor; + + /** Texture speed, in UV coordinates */ + core::vector2df m_texture_speed; + + void loadFromXMLNode(const XMLNode* xml_node); + + void checkAllSet(); + }; + + SpeedWeightedObject() : m_model(NULL), m_node(NULL), m_position(), m_name() {} + /** Model */ + scene::IAnimatedMesh * m_model; + + /** The scene node the speed weighted model is attached to */ + scene::IAnimatedMeshSceneNode * m_node; + + /** The position of the "speed weighted" objects relative to the kart */ + Vec3 m_position; + + /** Filename of the "speed weighted" object */ + std::string m_name; + + /** Current uv translation in the texture matrix for speed-weighted texture animations */ + core::vector2df m_texture_cur_offset; + + /** Specific properties for this given speed-weighted object, + * otherwise just a copy of the values from the kart's properties */ + Properties m_properties; +}; +typedef std::vector SpeedWeightedObjectList; + /** * \brief This class stores a 3D kart model. * It takes especially care of attaching @@ -66,7 +111,9 @@ public: AF_WIN_START, // Begin of win animation AF_WIN_LOOP_START, // Begin of win loop animation AF_WIN_END, // End of win animation - AF_END=AF_WIN_END, // Last animation frame + AF_SPEED_WEIGHTED_START, // Start of speed-weighted animation + AF_SPEED_WEIGHTED_END, // End of speed-weighted animation + AF_END=AF_SPEED_WEIGHTED_END, // Last animation frame AF_COUNT}; // Number of entries here private: /** Which frame number starts/end which animation. */ @@ -120,6 +167,12 @@ private: /** The position of the nitro emitters */ Vec3 m_nitro_emitter_position[2]; + /** True if kart has nitro emitters */ + bool m_has_nitro_emitter; + + /** The speed weighted objects. */ + SpeedWeightedObjectList m_speed_weighted_objects; + /** Minimum suspension length. If the displayed suspension is * shorter than this, the wheel would look wrong. */ float m_min_suspension[4]; @@ -137,9 +190,21 @@ private: * to AF_DEFAULT the default steering animation is shown. */ AnimationFrameType m_current_animation; - float m_kart_width; /**< Width of kart. */ - float m_kart_length; /**< Length of kart. */ - float m_kart_height; /**< Height of kart. */ + /** Width of kart. */ + float m_kart_width; + + /** Length of kart. */ + float m_kart_length; + + /** Height of kart. */ + float m_kart_height; + + /** Largest coordinate on up axis. */ + float m_kart_highest_point; + + /** Smallest coordinate on up axis. */ + float m_kart_lowest_point; + /** True if this is the master copy, managed by KartProperties. This * is mainly used for debugging, e.g. the master copies might not have * anything attached to it etc. */ @@ -151,6 +216,9 @@ private: void loadNitroEmitterInfo(const XMLNode &node, const std::string &emitter_name, int index); + void loadSpeedWeightedInfo(const XMLNode* speed_weighted_node, + const SpeedWeightedObject::Properties& fallback_properties); + void OnAnimationEnd(scene::IAnimatedMeshSceneNode *node); /** Pointer to the kart object belonging to this kart model. */ @@ -163,8 +231,8 @@ public: void reset(); void loadInfo(const XMLNode &node); bool loadModels(const KartProperties &kart_properties); - void update(float rotation_dt, float steer, - const float suspension[4]); + void update(float dt, float rotation_dt, float steer, + const float height_abve_terrain[4], float speed); void setDefaultPhysicsPosition(const Vec3 ¢er_shift, float wheel_radius); void finishedRace(); @@ -210,9 +278,23 @@ public: {assert(i>=0 && i<4); return m_wheel_graphics_radius[i]; } // ------------------------------------------------------------------------ /** Returns the position of nitro emitter relative to the kart. + * \param i Index of the emitter: 0 = right, 1 = left */ - const Vec3* getNitroEmittersPositon() const - {return m_nitro_emitter_position;} + const Vec3& getNitroEmittersPositon(unsigned int i) const + { assert(i>=0 && i<2); return m_nitro_emitter_position[i]; } + // ------------------------------------------------------------------------ + /** Returns true if kart has nitro emitters */ + const bool hasNitroEmitters() const + {return m_has_nitro_emitter;} + // ------------------------------------------------------------------------ + /** Returns the number of speed weighted objects for this kart */ + size_t getSpeedWeightedObjectsCount() const + {return m_speed_weighted_objects.size();} + // ------------------------------------------------------------------------ + /** Returns the position of a speed weighted object relative to the kart. + * \param i Index of the object */ + const SpeedWeightedObject& getSpeedWeightedObject(int i) const + {return m_speed_weighted_objects[i];} // ------------------------------------------------------------------------ /** Returns the length of the kart model. */ float getLength () const {return m_kart_length; } @@ -223,6 +305,12 @@ public: /** Returns the height of the kart. */ float getHeight () const {return m_kart_height; } // ------------------------------------------------------------------------ + /** Highest coordinate on up axis */ + float getHighestPoint () const { return m_kart_highest_point; } + // ------------------------------------------------------------------------ + /** Lowest coordinate on up axis */ + float getLowestPoint () const { return m_kart_lowest_point; } + // ------------------------------------------------------------------------ /** Enables- or disables the end animation. */ void setAnimation(AnimationFrameType type); // ------------------------------------------------------------------------ @@ -231,15 +319,15 @@ public: // ------------------------------------------------------------------------ /** Name of the hat mesh to use. */ void setHatMeshName(const std::string &name) {m_hat_name = name; } - // ------------------------------------------------------------------------ - void attachHat(); + // ------------------------------------------------------------------------ + void attachHat(); // ------------------------------------------------------------------------ /** Returns the array of wheel nodes. */ scene::ISceneNode** getWheelNodes() { return m_wheel_node; } - // ------------------------------------------------------------------------ - scene::IAnimatedMeshSceneNode* getAnimatedNode(){ return m_animated_node; } - // ------------------------------------------------------------------------ - core::vector3df getHatOffset() { return m_hat_offset; } + // ------------------------------------------------------------------------ + scene::IAnimatedMeshSceneNode* getAnimatedNode(){ return m_animated_node; } + // ------------------------------------------------------------------------ + core::vector3df getHatOffset() { return m_hat_offset; } }; // KartModel #endif diff --git a/src/karts/kart_properties.cpp b/src/karts/kart_properties.cpp index c3a20dc15..3ac459622 100644 --- a/src/karts/kart_properties.cpp +++ b/src/karts/kart_properties.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team +// Copyright (C) 2006-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -108,7 +108,7 @@ KartProperties::KartProperties(const std::string &filename) m_engine_sfx_type = "engine_small"; m_kart_model = NULL; m_has_rand_wheels = false; - m_nitro_min_consumption = 1.05f; + m_nitro_min_consumption = 0.53f; // The default constructor for stk_config uses filename="" if (filename != "") { @@ -217,6 +217,9 @@ void KartProperties::load(const std::string &filename, const std::string &node) file_manager->pushModelSearchPath (m_root); file_manager->pushTextureSearchPath(m_root); + irr_driver->setTextureErrorMessage("Error while loading kart '%s':", + m_name); + // addShared makes sure that these textures/material infos stay in memory material_manager->addSharedMaterial(materials_file); @@ -269,6 +272,8 @@ void KartProperties::load(const std::string &filename, const std::string &node) } m_shadow_texture = irr_driver->getTexture(m_shadow_file); + + irr_driver->unsetTextureErrorMessage(); file_manager->popTextureSearchPath(); file_manager->popModelSearchPath(); @@ -426,6 +431,11 @@ void KartProperties::getAllData(const XMLNode * root) wheels_node->get("radius", &m_wheel_radius ); } + if(const XMLNode *speed_weighted_objects_node = root->getNode("speed-weighted-objects")) + { + m_speed_weighted_object_properties.loadFromXMLNode(speed_weighted_objects_node); + } + if(const XMLNode *friction_node = root->getNode("friction")) friction_node->get("slip", &m_friction_slip); @@ -707,6 +717,8 @@ void KartProperties::checkAllSet(const std::string &filename) CHECK_NEG(m_plunger_in_face_duration[i],"plunger in-face-time"); } + m_speed_weighted_object_properties.checkAllSet(); + m_skidding_properties->checkAllSet(filename); for(unsigned int i=0; icheckAllSet(filename); diff --git a/src/karts/kart_properties.hpp b/src/karts/kart_properties.hpp index 03e82c56c..bbadd2230 100644 --- a/src/karts/kart_properties.hpp +++ b/src/karts/kart_properties.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team +// Copyright (C) 2006-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -264,6 +264,9 @@ private: float m_roll_influence; float m_wheel_radius; + /** Parameters for the speed-weighted objects */ + SpeedWeightedObject::Properties m_speed_weighted_object_properties; + /** An impulse pushing the kart down which is proportional to speed. So * the actual impulse is speed * m_downward_impulse_factor. Set it to * 0 to disable completely. Based on @@ -416,6 +419,14 @@ public: * should not be modified, not attachModel be called on it. */ const KartModel& getMasterKartModel() const {return *m_kart_model; } + // ------------------------------------------------------------------------ + /** Sets the name of a mesh to be used for this kart. + * \param hat_name Name of the mesh. + */ + void setHatMeshName(const std::string &hat_name) + { + m_kart_model->setHatMeshName(hat_name); + } // setHatMeshName // ------------------------------------------------------------------------ /** Returns the name of this kart. \note Pass it through fridibi as needed, this is the LTR name @@ -528,6 +539,10 @@ public: /** Returns wheel radius. */ float getWheelRadius () const {return m_wheel_radius; } + // ------------------------------------------------------------------------ + /** Returns parameters for the speed-weighted objects */ + const SpeedWeightedObject::Properties& getSpeedWeightedObjectProperties() const {return m_speed_weighted_object_properties;} + // ------------------------------------------------------------------------ /** Returns the wheel base (distance front to rear axis). */ float getWheelBase () const {return m_wheel_base; } diff --git a/src/karts/kart_properties_manager.cpp b/src/karts/kart_properties_manager.cpp index 0c58555b9..a1d0cbd3a 100644 --- a/src/karts/kart_properties_manager.cpp +++ b/src/karts/kart_properties_manager.cpp @@ -1,6 +1,7 @@ -// // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004-2006 Ingo Ruhnke +// +// Copyright (C) 2004-2013 Ingo Ruhnke +// Copyright (C) 2006-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -191,7 +192,7 @@ bool KartPropertiesManager::loadKart(const std::string &dir) { std::string config_filename=dir+"/kart.xml"; if(!file_manager->fileExists(config_filename)) - return false; + return false; KartProperties* kart_properties; try @@ -232,6 +233,18 @@ bool KartPropertiesManager::loadKart(const std::string &dir) return true; } // loadKartData +//----------------------------------------------------------------------------- +/** Sets the name of a mesh to use as a hat for all karts. + * \param hat_name Name of the hat mash. + */ +void KartPropertiesManager::setHatMeshName(const std::string &hat_name) +{ + for (int i=0; i +// +// Copyright (C) 2004-2013 Ingo Ruhnke +// Copyright (C) 2006-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -87,6 +88,7 @@ public: void getRandomKartList(int count, RemoteKartInfoList& existing_karts, std::vector *ai_list); + void setHatMeshName(const std::string &hat_name); // ------------------------------------------------------------------------ /** Returns a list of all groups. */ const std::vector& getAllGroups() const {return m_all_groups;} diff --git a/src/karts/kart_with_stats.cpp b/src/karts/kart_with_stats.cpp index d1620119b..455b9df5f 100644 --- a/src/karts/kart_with_stats.cpp +++ b/src/karts/kart_with_stats.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Joerg Henrichs +// Copyright (C) 2011-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/karts/kart_with_stats.hpp b/src/karts/kart_with_stats.hpp index 5087350a5..8c5544a6e 100644 --- a/src/karts/kart_with_stats.hpp +++ b/src/karts/kart_with_stats.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Joerg Henrichs +// Copyright (C) 2011-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/karts/max_speed.cpp b/src/karts/max_speed.cpp index cacde5a88..9dff0781a 100644 --- a/src/karts/max_speed.cpp +++ b/src/karts/max_speed.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Joerg Henrichs +// Copyright (C) 2010-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/karts/max_speed.hpp b/src/karts/max_speed.hpp index c57cb0f64..63ddbefca 100644 --- a/src/karts/max_speed.hpp +++ b/src/karts/max_speed.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Joerg Henrichs +// Copyright (C) 2010-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/karts/moveable.cpp b/src/karts/moveable.cpp index 5a5c6c225..afeb56e4c 100644 --- a/src/karts/moveable.cpp +++ b/src/karts/moveable.cpp @@ -1,7 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004-2005 Steve Baker -// Copyright (C) 2006 Joerg Henrichs, Steve Baker +// Copyright (C) 2004-2013 Steve Baker +// Copyright (C) 2006-2013 Joerg Henrichs, Steve Baker // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -17,6 +17,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 #include "karts/moveable.hpp" #include "graphics/irr_driver.hpp" diff --git a/src/karts/moveable.hpp b/src/karts/moveable.hpp index d6bafea84..42d82217a 100644 --- a/src/karts/moveable.hpp +++ b/src/karts/moveable.hpp @@ -1,7 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004-2005 Steve Baker -// Copyright (C) 2006 Joerg Henrichs, Steve Baker +// Copyright (C) 2004-2013 Steve Baker +// Copyright (C) 2006-2013 Joerg Henrichs, Steve Baker // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/karts/rescue_animation.cpp b/src/karts/rescue_animation.cpp index c75d4e1cb..4c77b9813 100644 --- a/src/karts/rescue_animation.cpp +++ b/src/karts/rescue_animation.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Joerg Henrichs +// Copyright (C) 2010-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/karts/rescue_animation.hpp b/src/karts/rescue_animation.hpp index 854d7a094..89df1cf03 100644 --- a/src/karts/rescue_animation.hpp +++ b/src/karts/rescue_animation.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/karts/skidding.cpp b/src/karts/skidding.cpp index 4b5ff45e0..1bbdb4c99 100644 --- a/src/karts/skidding.cpp +++ b/src/karts/skidding.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -74,6 +74,7 @@ void Skidding::reset() m_jump_speed = 0.0f; m_kart->getKartGFX()->setCreationRateAbsolute(KartGFX::KGFX_SKIDL, 0); m_kart->getKartGFX()->setCreationRateAbsolute(KartGFX::KGFX_SKIDR, 0); + m_kart->getControls().m_skid = KartControl::SC_NONE; } // reset // ---------------------------------------------------------------------------- @@ -115,6 +116,15 @@ void Skidding::updateSteering(float steer, float dt) m_visual_rotation = f; } break; + case SKID_BREAK: + m_real_steering = steer; + if (m_visual_rotation > 0.05f) m_visual_rotation -= 0.05f; + else if (m_visual_rotation < -0.05f) m_visual_rotation += 0.05f; + else + { + reset(); + } + break; case SKID_ACCUMULATE_RIGHT: { float f = (1.0f+steer)*0.5f; // map [-1,1] --> [0, 1] @@ -139,6 +149,8 @@ void Skidding::updateSteering(float steer, float dt) m_visual_rotation = m_skid_visual * m_real_steering; break; } + + } // switch m_skid_state } // updateSteering @@ -160,6 +172,7 @@ float Skidding::getSteeringWhenSkidding(float steering) const case SKID_OLD: assert(false); break; case SKID_SHOW_GFX_LEFT: case SKID_SHOW_GFX_RIGHT: + case SKID_BREAK: case SKID_NONE: return steering; break; case SKID_ACCUMULATE_RIGHT: @@ -199,9 +212,12 @@ void Skidding::update(float dt, bool is_on_ground, } // No skidding backwards or while stopped - if(m_kart->getSpeed() < 0.001f) + if(m_kart->getSpeed() < 0.001f && + m_skid_state != SKID_NONE && m_skid_state != SKID_BREAK) { - reset(); + m_skid_state = SKID_BREAK; + m_kart->getKartGFX()->setCreationRateAbsolute(KartGFX::KGFX_SKIDL, 0); + m_kart->getKartGFX()->setCreationRateAbsolute(KartGFX::KGFX_SKIDR, 0); } m_skid_bonus_ready = false; @@ -337,6 +353,11 @@ void Skidding::update(float dt, bool is_on_ground, #endif m_skid_time = 0; // fallthrough } + case SKID_BREAK: + { + updateSteering(steering, dt); + break; + } case SKID_ACCUMULATE_LEFT: case SKID_ACCUMULATE_RIGHT: { diff --git a/src/karts/skidding.hpp b/src/karts/skidding.hpp index d2feaf19e..83afb927e 100644 --- a/src/karts/skidding.hpp +++ b/src/karts/skidding.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -81,10 +81,11 @@ public: * SKID_ACCUMULATE_RIGHT: Similar for turning right * SKID_SHOW_GFX_LEFT: Shows the gfx, while the bonus is active, * and the kart was turning left. - * SKID_SHOW_GFX_RIGHT: Similar for turning right. */ + * SKID_SHOW_GFX_RIGHT: Similar for turning right. + * SKID_BREAK: Skidding was stopped without bonus */ enum SkidState {SKID_OLD, SKID_NONE, SKID_ACCUMULATE_LEFT, SKID_ACCUMULATE_RIGHT, SKID_SHOW_GFX_LEFT, - SKID_SHOW_GFX_RIGHT} ; + SKID_SHOW_GFX_RIGHT, SKID_BREAK} ; private: /** The current skidding state. */ diff --git a/src/karts/skidding_properties.cpp b/src/karts/skidding_properties.cpp index 425dc834c..1bf1a246e 100644 --- a/src/karts/skidding_properties.cpp +++ b/src/karts/skidding_properties.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/karts/skidding_properties.hpp b/src/karts/skidding_properties.hpp index e5e2c30af..ef1bc7042 100644 --- a/src/karts/skidding_properties.hpp +++ b/src/karts/skidding_properties.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/main.cpp b/src/main.cpp index ce0aba3dc..8a71eacb1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,7 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004-2006 Steve Baker -// Copyright (C) 2011 Joerg Henrichs, Marianne Gagnon +// Copyright (C) 2004-2013 Steve Baker +// Copyright (C) 2011-2013 Joerg Henrichs, Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -129,7 +129,6 @@ #else # include #endif -#include #include #include #include @@ -191,10 +190,13 @@ #include "tracks/track.hpp" #include "tracks/track_manager.hpp" #include "utils/constants.hpp" +#include "utils/crash_reporting.hpp" #include "utils/leak_check.hpp" #include "utils/log.hpp" #include "utils/translation.hpp" +static void cleanSuperTuxKart(); + // ============================================================================ // gamepad visualisation screen // ============================================================================ @@ -348,11 +350,38 @@ void gamepadVisualisation() driver->endScene(); } -} +} // gamepadVisualisation + // ============================================================================ +/** Sets the Christmas flag (m_xmas_enabled), depending on currently set + * Christ mode (m_xmas_mode) + */ +void handleXmasMode() +{ + bool xmas = false; + switch(UserConfigParams::m_xmas_mode) + { + case 0: + { + int day, month; + StkTime::getDate(&day, &month); + // Christmat hats are shown between 17. of December + // and 5th of January + xmas = (month == 12 && day>=17) || (month == 1 && day <=5); + break; + } + case 1: xmas = true; break; + default: xmas = false; break; + } // switch m_xmas_mode + if(xmas) + kart_properties_manager->setHatMeshName("christmas_hat.b3d"); +} // handleXmasMode -void cmdLineHelp (char* invocation) +// ---------------------------------------------------------------------------- +/** Prints help for command line options to stdout. + */ +void cmdLineHelp(char* invocation) { Log::info("main", "Usage: %s [OPTIONS]\n\n" @@ -474,14 +503,7 @@ int handleCmdLinePreliminary(int argc, char **argv) } else if ( sscanf(argv[i], "--xmas=%d", &n) ) { - if (n) - { - UserConfigParams::m_xmas_enabled = true; - } - else - { - UserConfigParams::m_xmas_enabled = false; - } + UserConfigParams::m_xmas_mode = n; } else if( !strcmp(argv[i], "--no-console")) { @@ -600,7 +622,7 @@ int handleCmdLinePreliminary(int argc, char **argv) } // --verbose or -v } return 0; -} +} // handleCmdLinePreliminary // ============================================================================ /** Handles command line options. @@ -646,6 +668,11 @@ int handleCmdLine(int argc, char **argv) { UserConfigParams::m_ftl_debug = true; } + else if(UserConfigParams::m_artist_debug_mode && + !strcmp(argv[i], "--camera-wheel-debug")) + { + UserConfigParams::m_camera_debug=2; + } else if(UserConfigParams::m_artist_debug_mode && !strcmp(argv[i], "--camera-debug")) { @@ -1097,8 +1124,12 @@ int handleCmdLine(int argc, char **argv) #endif else { + // invalid param needs to go to console + UserConfigParams::m_log_errors_to_console = true; + Log::error("main", "Invalid parameter: %s.\n", argv[i] ); cmdLineHelp(argv[0]); + cleanSuperTuxKart(); return 0; } } // for i loadConfig(); - + const bool config_ok = user_config->loadConfig(); if (UserConfigParams::m_language.toString() != "system") { #ifdef WIN32 @@ -1151,7 +1181,7 @@ void initUserConfig(char *argv[]) translations = new Translations(); // needs file_manager stk_config = new STKConfig(); // in case of --stk-config // command line parameters - + user_config->postLoadInit(); if (!config_ok || UserConfigParams::m_all_players.size() == 0) { user_config->addDefaultPlayer(); @@ -1222,8 +1252,10 @@ void initRest() // Consistency check for challenges, and enable all challenges // that have all prerequisites fulfilled grand_prix_manager->checkConsistency(); - GUIEngine::addLoadingIcon( irr_driver->getTexture( - file_manager->getTextureFile("cup_gold.png")) ); + std::string file = file_manager->getTextureFile("cup_gold.png"); + if(file.size()==0) + Log::fatal("main", "Can not find cup_gold.png, aborting."); + GUIEngine::addLoadingIcon( irr_driver->getTexture(file) ); race_manager = new RaceManager (); // default settings for Quickstart @@ -1239,8 +1271,11 @@ void initRest() //============================================================================= /** Frees all manager and their associated memory. */ -void cleanSuperTuxKart() +static void cleanSuperTuxKart() { + + delete main_loop; + irr_driver->updateConfigIfRelevant(); if(INetworkHttp::get()) @@ -1279,19 +1314,6 @@ void cleanSuperTuxKart() if(music_manager) delete music_manager; delete ParticleKindManager::get(); if(stk_config) delete stk_config; - -#ifndef WIN32 - if (user_config) //close logfiles - { - Log::closeOutputFiles(); -#endif - fclose(stderr); - fclose(stdout); -#ifndef WIN32 - } -#endif - - if(user_config) delete user_config; if(unlock_manager) delete unlock_manager; if(translations) delete translations; @@ -1317,15 +1339,6 @@ bool ShowDumpResults(const wchar_t* dump_path, } #endif -static bool checkXmasTime() -{ - time_t rawtime; - struct tm* timeinfo; - time(&rawtime); - timeinfo = localtime(&rawtime); - return (timeinfo->tm_mon == 12-1); // Xmas mode happens in December -} - #if defined(DEBUG) && defined(WIN32) && !defined(__CYGWIN__) #pragma comment(linker, "/SUBSYSTEM:console") #endif @@ -1336,6 +1349,8 @@ int main(int argc, char *argv[] ) google_breakpad::ExceptionHandler eh(L"C:\\Temp", NULL, ShowDumpResults, NULL, google_breakpad::ExceptionHandler::HANDLER_ALL); #endif + CrashReporting::installHandlers(); + srand(( unsigned ) time( 0 )); try { @@ -1345,8 +1360,6 @@ int main(int argc, char *argv[] ) initUserConfig(argv); // argv passed so config file can be // found more reliably - UserConfigParams::m_xmas_enabled = checkXmasTime(); - handleCmdLinePreliminary(argc, argv); initRest(); @@ -1369,10 +1382,12 @@ int main(int argc, char *argv[] ) GUIEngine::addLoadingIcon( irr_driver->getTexture( file_manager->getGUIDir() + "options_video.png") ); kart_properties_manager -> loadAllKarts (); + handleXmasMode(); unlock_manager = new UnlockManager(); - //m_tutorial_manager = new TutorialManager(); - GUIEngine::addLoadingIcon( irr_driver->getTexture( - file_manager->getTextureFile("gui_lock.png")) ); + std::string file = file_manager->getTextureFile("gui_lock.png"); + if(file.size()==0) + Log::fatal("main", "Can not find gui_lock.png, aborting."); + GUIEngine::addLoadingIcon( irr_driver->getTexture(file)); projectile_manager -> loadData (); // Both item_manager and powerup_manager load models and therefore @@ -1571,7 +1586,6 @@ int main(int argc, char *argv[] ) // Profiling // ========= race_manager->setMajorMode (RaceManager::MAJOR_MODE_SINGLE); - race_manager->setDifficulty(RaceManager::DIFFICULTY_HARD); race_manager->setupPlayerKartInfo(); race_manager->startNew(false); } @@ -1609,6 +1623,19 @@ int main(int argc, char *argv[] ) MemoryLeaks::checkForLeaks(); #endif +#ifndef WIN32 + if (user_config) //close logfiles + { + Log::closeOutputFiles(); +#endif + fclose(stderr); + fclose(stdout); +#ifndef WIN32 + } +#endif + + + return 0 ; } // main diff --git a/src/main_loop.cpp b/src/main_loop.cpp index 29ae30f19..4a7480ab1 100644 --- a/src/main_loop.cpp +++ b/src/main_loop.cpp @@ -1,6 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004 Ingo Ruhnke +// Copyright (C) 2004-2013 Ingo Ruhnke +// Copyright (C) 2006-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/main_loop.hpp b/src/main_loop.hpp index f2a376ad6..345e36c7a 100644 --- a/src/main_loop.hpp +++ b/src/main_loop.hpp @@ -1,6 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004 Ingo Ruhnke +// Copyright (C) 2004-2013 Ingo Ruhnke +// Copyright (C) 2006-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -39,6 +40,9 @@ public: ~MainLoop(); void run(); void abort(); + // ------------------------------------------------------------------------ + /** Returns true if STK is to be stoppe. */ + bool isAborted() const { return m_abort; } }; // MainLoop extern MainLoop* main_loop; diff --git a/src/modes/cutscene_world.cpp b/src/modes/cutscene_world.cpp index 2646d3ea1..ea01df566 100644 --- a/src/modes/cutscene_world.cpp +++ b/src/modes/cutscene_world.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team +// Copyright (C) 2006-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -198,7 +198,7 @@ void CutsceneWorld::update(float dt) curr->reset(); } m_time = 0.01f; - m_time_at_second_reset = Time::getRealTime(); + m_time_at_second_reset = StkTime::getRealTime(); m_second_reset = true; } else if (m_second_reset) @@ -213,7 +213,7 @@ void CutsceneWorld::update(float dt) } //m_time_at_second_reset = m_time; - m_time_at_second_reset = Time::getRealTime(); + m_time_at_second_reset = StkTime::getRealTime(); m_time = 0.01f; } else @@ -221,7 +221,7 @@ void CutsceneWorld::update(float dt) // this way of calculating time and dt is more in line with what // irrlicht does andprovides better synchronisation double prev_time = m_time; - double now = Time::getRealTime(); + double now = StkTime::getRealTime(); m_time = now - m_time_at_second_reset; dt = (float)(m_time - prev_time); } diff --git a/src/modes/cutscene_world.hpp b/src/modes/cutscene_world.hpp index a1b5025ef..db76d182a 100644 --- a/src/modes/cutscene_world.hpp +++ b/src/modes/cutscene_world.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004 SuperTuxKart-Team +// Copyright (C) 2004-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/modes/demo_world.cpp b/src/modes/demo_world.cpp index 35a91def1..c78c1abd9 100644 --- a/src/modes/demo_world.cpp +++ b/src/modes/demo_world.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/modes/demo_world.hpp b/src/modes/demo_world.hpp index 23f8d46bf..a31811e67 100644 --- a/src/modes/demo_world.hpp +++ b/src/modes/demo_world.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/modes/easter_egg_hunt.cpp b/src/modes/easter_egg_hunt.cpp index 107df704d..4d44192cb 100644 --- a/src/modes/easter_egg_hunt.cpp +++ b/src/modes/easter_egg_hunt.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -24,7 +24,7 @@ //----------------------------------------------------------------------------- /** Constructor. Sets up the clock mode etc. */ -EasterEggHunt::EasterEggHunt() : WorldWithRank() +EasterEggHunt::EasterEggHunt() : LinearWorld() { WorldStatus::setClockMode(CLOCK_CHRONO); m_use_highscores = true; @@ -36,7 +36,7 @@ EasterEggHunt::EasterEggHunt() : WorldWithRank() */ void EasterEggHunt::init() { - WorldWithRank::init(); + LinearWorld::init(); m_display_rank = false; // check for possible problems if AI karts were incorrectly added @@ -160,8 +160,8 @@ void EasterEggHunt::collectedEasterEgg(const AbstractKart *kart) */ void EasterEggHunt::update(float dt) { - WorldWithRank::update(dt); - WorldWithRank::updateTrack(dt); + LinearWorld::update(dt); + LinearWorld::updateTrack(dt); } // update //----------------------------------------------------------------------------- @@ -181,7 +181,7 @@ bool EasterEggHunt::isRaceOver() */ void EasterEggHunt::reset() { - WorldWithRank::reset(); + LinearWorld::reset(); for(unsigned int i=0; igetControls().reset(); + WorldWithRank::terminateRace(); +} +//----------------------------------------------------------------------------- +/** In Easter Egg mode the finish time is just the time the race is over, + * since there are no AI karts. + */ +float EasterEggHunt::estimateFinishTimeForKart(AbstractKart* kart) +{ + return getTime(); +} // estimateFinishTimeForKart diff --git a/src/modes/easter_egg_hunt.hpp b/src/modes/easter_egg_hunt.hpp index 31ba96fb4..309bd1f5e 100755 --- a/src/modes/easter_egg_hunt.hpp +++ b/src/modes/easter_egg_hunt.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -19,7 +19,7 @@ #ifndef EASTER_EGG_HUNT_HPP #define EASTER_EGG_HUNT_HPP -#include "modes/world_with_rank.hpp" +#include "modes/linear_world.hpp" #include "states_screens/race_gui_base.hpp" #include @@ -31,7 +31,7 @@ class AbstractKart; * \brief An implementation of World to provide an easter egg hunt like mode * \ingroup modes */ -class EasterEggHunt: public WorldWithRank +class EasterEggHunt: public LinearWorld { private: /** Keeps track of how many eggs each kart has found. */ @@ -56,7 +56,7 @@ public: virtual bool raceHasLaps(){ return false; } virtual const std::string& getIdent() const; - + virtual void terminateRace(); virtual void update(float dt); virtual void getKartsDisplayInfo( std::vector *info); @@ -64,6 +64,10 @@ public: void updateKartRanks(); void collectedEasterEgg(const AbstractKart *kart); void readData(const std::string &filename); + + virtual void checkForWrongDirection(unsigned int i) OVERRIDE; + virtual float estimateFinishTimeForKart(AbstractKart* kart) OVERRIDE; + }; // EasterEggHunt diff --git a/src/modes/follow_the_leader.cpp b/src/modes/follow_the_leader.cpp index dda32aede..a3a712d97 100644 --- a/src/modes/follow_the_leader.cpp +++ b/src/modes/follow_the_leader.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004 SuperTuxKart-Team +// Copyright (C) 2004-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -43,6 +43,7 @@ FollowTheLeaderRace::FollowTheLeaderRace() : LinearWorld() stk_config->m_leader_time_per_kart*race_manager->getNumberOfKarts(); m_use_highscores = false; // disable high scores setClockMode(WorldStatus::CLOCK_COUNTDOWN, m_leader_intervals[0]); + m_is_over_delay = 5.0f; } //----------------------------------------------------------------------------- @@ -77,6 +78,8 @@ void FollowTheLeaderRace::reset() stk_config->m_leader_time_per_kart*race_manager->getNumberOfKarts(); WorldStatus::setClockMode(WorldStatus::CLOCK_COUNTDOWN, m_leader_intervals[0]); + + m_is_over_delay = 2.0f; } // reset //----------------------------------------------------------------------------- @@ -145,15 +148,18 @@ void FollowTheLeaderRace::countdownReachedZero() // Move any camera for this kart to the leader, facing backwards, // so that the eliminated player has something to watch. - for(unsigned int i=0; igetNumPlayers() > 1) { - Camera *camera = Camera::getCamera(i); - if(camera->getKart()==kart) + for(unsigned int i=0; isetMode(Camera::CM_LEADER_MODE); - camera->setKart(getKart(0)); - } - } // for igetKart()==kart) + { + camera->setMode(Camera::CM_LEADER_MODE); + camera->setKart(getKart(0)); + } + } // for i m_leader_intervals; // time till elimination in follow leader + float m_is_over_delay; //!< A timer used before terminating the race public: diff --git a/src/modes/linear_world.cpp b/src/modes/linear_world.cpp index 81cadfa95..b96d7ac98 100644 --- a/src/modes/linear_world.cpp +++ b/src/modes/linear_world.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004 SuperTuxKart-Team +// Copyright (C) 2004-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/modes/linear_world.hpp b/src/modes/linear_world.hpp index 15ed57ed7..e4dd3e6bd 100644 --- a/src/modes/linear_world.hpp +++ b/src/modes/linear_world.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004 SuperTuxKart-Team +// Copyright (C) 2004-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/modes/overworld.cpp b/src/modes/overworld.cpp index f6d420c57..00344b3c2 100644 --- a/src/modes/overworld.cpp +++ b/src/modes/overworld.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004 SuperTuxKart-Team +// Copyright (C) 2004-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -85,10 +85,10 @@ void OverWorld::enterOverWorld() race_manager->setupPlayerKartInfo(); race_manager->startNew(false); if(race_manager->haveKartLastPositionOnOverworld()){ - OverWorld *ow = (OverWorld*)World::getWorld(); - ow->getKart(0)->setXYZ(race_manager->getKartLastPositionOnOverworld()); - ow->moveKartAfterRescue(ow->getKart(0)); - } + OverWorld *ow = (OverWorld*)World::getWorld(); + ow->getKart(0)->setXYZ(race_manager->getKartLastPositionOnOverworld()); + ow->moveKartAfterRescue(ow->getKart(0)); + } irr_driver->showPointer(); // User should be able to click on the minimap } // enterOverWorld @@ -115,6 +115,7 @@ void OverWorld::update(float dt) m_karts[0]->startEngineSFX(); } WorldWithRank::update(dt); + WorldWithRank::updateTrack(dt); const unsigned int kart_amount = m_karts.size(); // isn't it cool, on the overworld nitro is free! diff --git a/src/modes/overworld.hpp b/src/modes/overworld.hpp index a1dbdb752..569a8d515 100644 --- a/src/modes/overworld.hpp +++ b/src/modes/overworld.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004 SuperTuxKart-Team +// Copyright (C) 2004-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/modes/profile_world.cpp b/src/modes/profile_world.cpp index f8a632fe2..b6bb5d109 100644 --- a/src/modes/profile_world.cpp +++ b/src/modes/profile_world.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/modes/profile_world.hpp b/src/modes/profile_world.hpp index bc05260d9..f7c7b4ad2 100644 --- a/src/modes/profile_world.hpp +++ b/src/modes/profile_world.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/modes/soccer_world.cpp b/src/modes/soccer_world.cpp index 33942d62c..d3a18a5bc 100644 --- a/src/modes/soccer_world.cpp +++ b/src/modes/soccer_world.cpp @@ -1,417 +1,524 @@ -// 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 "modes/soccer_world.hpp" - -#include -#include - -#include "audio/music_manager.hpp" -#include "io/file_manager.hpp" -#include "karts/abstract_kart.hpp" -#include "karts/kart.hpp" -#include "karts/kart_model.hpp" -#include "karts/kart_properties.hpp" -#include "karts/rescue_animation.hpp" -#include "karts/controller/player_controller.hpp" -#include "physics/physics.hpp" -#include "states_screens/race_gui_base.hpp" -#include "tracks/track.hpp" -#include "tracks/track_object_manager.hpp" -#include "utils/constants.hpp" - -//----------------------------------------------------------------------------- -/** Constructor. Sets up the clock mode etc. - */ -SoccerWorld::SoccerWorld() : WorldWithRank() -{ - WorldStatus::setClockMode(CLOCK_CHRONO); - m_use_highscores = false; -} // SoccerWorld - -//----------------------------------------------------------------------------- -/** Initializes the soccer world. It sets up the data structure - * to keep track of points etc. for each kart. - */ -void SoccerWorld::init() -{ - WorldWithRank::init(); - m_display_rank = false; - - // check for possible problems if AI karts were incorrectly added - if(getNumKarts() > race_manager->getNumPlayers()) - { - fprintf(stderr, "No AI exists for this game mode\n"); - exit(1); - } - m_goal_target = race_manager->getMaxGoal(); - printf("Max Goal: %d\n", m_goal_target); -} // init - -//----------------------------------------------------------------------------- -/** Called then a battle is restarted. - */ -void SoccerWorld::reset() -{ - WorldWithRank::reset(); - - m_can_score_points = true; - memset(m_team_goals, 0, sizeof(m_team_goals)); - - initKartList(); -} // reset - -//----------------------------------------------------------------------------- -/** Returns the internal identifier for this race. - */ -const std::string& SoccerWorld::getIdent() const -{ - return IDENT_SOCCER; -} // getIdent - -//----------------------------------------------------------------------------- -/** Update the world and the track. - * \param dt Time step size. - */ -void SoccerWorld::update(float dt) -{ - WorldWithRank::update(dt); - WorldWithRank::updateTrack(dt); - - // TODO -} // update - -void SoccerWorld::onCheckGoalTriggered(bool first_goal) -{ - if (m_can_score_points) - { - //I18N: soccer mode - m_race_gui->addMessage(_("GOAL!"), NULL, - /* time */ 3.0f, - video::SColor(255,255,255,255), - /*important*/ true, - /*big font*/ true); - m_team_goals[first_goal]++; - //printf("Score:\nTeam One %d : %d Team Two\n", m_team_goals[0], m_team_goals[1]); - } - - //m_check_goals_enabled = false; // TODO: remove? - - // Reset original positions for the soccer balls - TrackObjectManager* tom = getTrack()->getTrackObjectManager(); - assert(tom); - - PtrVector& objects = tom->getObjects(); - for(int i=0; iisSoccerBall()) - continue; - - obj->reset(); - obj->getPhysics()->reset(); - } - - //Resetting the ball triggers the goal check line one more time. - //This ensures that only one goal is counted, and the second is ignored. - m_can_score_points = !m_can_score_points; - - //for(int i=0 ; i < getNumKarts() ; i++ - - /*if(World::getWorld()->getTrack()->isAutoRescueEnabled() && - !getKartAnimation() && fabs(getRoll())>60*DEGREE_TO_RAD && - fabs(getSpeed())<3.0f ) - { - new RescueAnimation(this, true); - }*/ - - // TODO: rescue the karts - // TODO: score a point -} // onCheckGoalTriggered - -//----------------------------------------------------------------------------- -/** The battle is over if only one kart is left, or no player kart. - */ -bool SoccerWorld::isRaceOver() -{ - // for tests : never over when we have a single player there :) - if (race_manager->getNumPlayers() < 2) - { - return false; - } - // One team scored the target goals ... - else if(getScore(0) >= m_goal_target || - getScore(1) >= m_goal_target){ - return true; - } - // TODO - return getCurrentNumKarts()==1 || getCurrentNumPlayers()==0; -} // isRaceOver - -//----------------------------------------------------------------------------- -/** Called when the race finishes, i.e. after playing (if necessary) an - * end of race animation. It updates the time for all karts still racing, - * and then updates the ranks. - */ -void SoccerWorld::terminateRace() -{ - m_can_score_points = false; - WorldWithRank::terminateRace(); -} // terminateRace - -//----------------------------------------------------------------------------- -/** Returns the data to display in the race gui. - */ -void SoccerWorld::getKartsDisplayInfo( - std::vector *info) -{ - // TODO!! - /* - const unsigned int kart_amount = getNumKarts(); - for(unsigned int i = 0; i < kart_amount ; i++) - { - RaceGUIBase::KartIconDisplayInfo& rank_info = (*info)[i]; - - // reset color - rank_info.lap = -1; - - AbstractKart* kart = getKart(i); - switch(kart->getSoccerTeam()) - { - case SOCCER_TEAM_BLUE: - rank_info.r = 0.0f; - rank_info.g = 0.0f; - rank_info.b = 0.7f; - break; - case SOCCER_TEAM_RED: - rank_info.r = 0.9f; - rank_info.g = 0.0f; - rank_info.b = 0.0f; - break; - default: - assert(false && "Soccer team not set to blue or red"); - rank_info.r = 0.0f; - rank_info.g = 0.0f; - rank_info.b = 0.0f; - } - } - */ -} // getKartsDisplayInfo - -//----------------------------------------------------------------------------- -/** Moves a kart to its rescue position. - * \param kart The kart that was rescued. - */ -void SoccerWorld::moveKartAfterRescue(AbstractKart* kart) -{ - // find closest point to drop kart on - World *world = World::getWorld(); - const int start_spots_amount = world->getTrack()->getNumberOfStartPositions(); - assert(start_spots_amount > 0); - - float largest_accumulated_distance_found = -1; - int furthest_id_found = -1; - - const float kart_x = kart->getXYZ().getX(); - const float kart_z = kart->getXYZ().getZ(); - - for(int n=0; ngetTrack()->getStartTransform(n); - const Vec3 &v=s.getOrigin(); - float accumulatedDistance = .0f; - bool spawnPointClear = true; - - for(unsigned int k=0; kgetKart(k); - const float currentKart_x = currentKart->getXYZ().getX(); - const float currentKartk_z = currentKart->getXYZ().getZ(); - - if(kart_x!=currentKart_x && kart_z !=currentKartk_z) - { - float absDistance = fabs(currentKart_x - v.getX()) + - fabs(currentKartk_z - v.getZ()); - if(absDistance < CLEAR_SPAWN_RANGE) - { - spawnPointClear = false; - break; - } - accumulatedDistance += absDistance; - } - } - - if(largest_accumulated_distance_found < accumulatedDistance && spawnPointClear) - { - furthest_id_found = n; - largest_accumulated_distance_found = accumulatedDistance; - } - } - - assert(furthest_id_found != -1); - const btTransform &s = world->getTrack()->getStartTransform(furthest_id_found); - const Vec3 &xyz = s.getOrigin(); - kart->setXYZ(xyz); - kart->setRotation(s.getRotation()); - - //position kart from same height as in World::resetAllKarts - btTransform pos; - pos.setOrigin(kart->getXYZ()+btVector3(0, 0.5f*kart->getKartHeight(), 0.0f)); - pos.setRotation( btQuaternion(btVector3(0.0f, 1.0f, 0.0f), 0 /* angle */) ); - - kart->getBody()->setCenterOfMassTransform(pos); - - //project kart to surface of track - bool kart_over_ground = m_track->findGround(kart); - - if (kart_over_ground) - { - //add vertical offset so that the kart starts off above the track - float vertical_offset = kart->getKartProperties()->getVertRescueOffset() * - kart->getKartHeight(); - kart->getBody()->translate(btVector3(0, vertical_offset, 0)); - } - else - { - fprintf(stderr, "WARNING: invalid position after rescue for kart %s on track %s.\n", - (kart->getIdent().c_str()), m_track->getIdent().c_str()); - } -} // moveKartAfterRescue - -/** Set position and team for the karts */ -void SoccerWorld::initKartList() -{ - const unsigned int kart_amount = m_karts.size(); - - // Set kart positions, ordering them by team - for(unsigned int n=0; nsetPosition(-1); - } - // TODO: remove - - int team_karts_amount[NB_SOCCER_TEAMS]; - memset(team_karts_amount, 0, sizeof(team_karts_amount)); - - { - // Set the kart teams if they haven't been already set by the setup screen - // (happens when the setup screen is skipped, with 1 player) - SoccerTeam round_robin_team = SOCCER_TEAM_RED; - for(unsigned int n=0; ngetLocalKartInfo(n).getSoccerTeam() == SOCCER_TEAM_NONE) - race_manager->setLocalKartSoccerTeam( - race_manager->getLocalKartInfo(n).getLocalPlayerId(),round_robin_team); - - team_karts_amount[race_manager->getLocalKartInfo(n).getSoccerTeam()]++; - - round_robin_team = (round_robin_team==SOCCER_TEAM_RED ? - SOCCER_TEAM_BLUE : SOCCER_TEAM_RED); - }// next kart - } - - //Loading the indicator textures - irr::video::ITexture *redTeamTexture = irr_driver->getTexture( - file_manager->getTextureFile("soccer_player_red.png")); - irr::video::ITexture *blueTeamTexture = irr_driver->getTexture( - file_manager->getTextureFile("soccer_player_blue.png")); - //Assigning indicators - for(unsigned int i=0; igetLocalKartInfo(i).getSoccerTeam() == SOCCER_TEAM_RED) - hatNode = irr_driver->addBillboard(core::dimension2d(0.3f,0.3f) - ,redTeamTexture,m_karts[i]->getNode(), true); - else - hatNode = irr_driver->addBillboard(core::dimension2d(0.3f,0.3f) - ,blueTeamTexture,m_karts[i]->getNode(),true); - hatNode->setPosition(m_karts[i]->getKartModel()->getHatOffset()); - } - - // Compute start positions for each team - int team_cur_position[NB_SOCCER_TEAMS]; - team_cur_position[0] = 1; - for(int i=1 ; i < (int)NB_SOCCER_TEAMS ; i++) - team_cur_position[i] = team_karts_amount[i-1] + team_cur_position[i-1]; - - // Set kart positions, ordering them by team - for(unsigned int n=0; ngetLocalKartInfo(n).getSoccerTeam(); - m_karts[n]->setPosition(team_cur_position[team]); - team_cur_position[team]++; - }// next kart -} -//----------------------------------------------------------------------------- -int SoccerWorld::getScore(unsigned int i){ - return m_team_goals[i]; -} -//----------------------------------------------------------------------------- -int SoccerWorld::getTeamLeader(unsigned int team){ - for(int i = 0; i< m_karts.size(); i++) - { - if(race_manager->getLocalKartInfo(i).getSoccerTeam() == (SoccerTeam) team) - return i; - } - return -1; -} -//----------------------------------------------------------------------------- -AbstractKart *SoccerWorld::createKart(const std::string &kart_ident, int index, - int local_player_id, int global_player_id, - RaceManager::KartType kart_type) -{ - int posIndex = index; - if(race_manager->getLocalKartInfo(index).getSoccerTeam() == SOCCER_TEAM_RED){ - if(index % 2 != 0) posIndex += 1; - } - else if(race_manager->getLocalKartInfo(index).getSoccerTeam() == SOCCER_TEAM_BLUE){ - if(index % 2 != 1) posIndex += 1; - } - int position = index+1; - btTransform init_pos = m_track->getStartTransform(posIndex); - AbstractKart *new_kart = new Kart(kart_ident, index, position, init_pos); - new_kart->init(race_manager->getKartType(index)); - Controller *controller = NULL; - switch(kart_type) - { - case RaceManager::KT_PLAYER: - controller = new PlayerController(new_kart, - StateManager::get()->getActivePlayer(local_player_id), - local_player_id); - m_num_players ++; - break; - case RaceManager::KT_NETWORK_PLAYER: - break; // Avoid compiler warning about enum not handled. - //controller = new NetworkController(kart_ident, position, init_pos, - // global_player_id); - //m_num_players++; - //break; - case RaceManager::KT_AI: - controller = loadAIController(new_kart); - break; - case RaceManager::KT_GHOST: - break; - case RaceManager::KT_LEADER: - break; - } - - new_kart->setController(controller); - - return new_kart; -} // createKart \ No newline at end of file +// SuperTuxKart - a fun racing game with go-kart +// Copyright (C) 2006-2013 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 "modes/soccer_world.hpp" + +#include +#include + +#include "audio/music_manager.hpp" +#include "audio/sfx_base.hpp" +#include "io/file_manager.hpp" +#include "graphics/irr_driver.hpp" +#include "karts/abstract_kart.hpp" +#include "karts/kart.hpp" +#include "karts/kart_model.hpp" +#include "karts/kart_properties.hpp" +#include "karts/rescue_animation.hpp" +#include "karts/controller/player_controller.hpp" +#include "physics/physics.hpp" +#include "states_screens/race_gui_base.hpp" +#include "tracks/track.hpp" +#include "tracks/track_object_manager.hpp" +#include "utils/constants.hpp" + +//----------------------------------------------------------------------------- +/** Constructor. Sets up the clock mode etc. + */ +SoccerWorld::SoccerWorld() : WorldWithRank() +{ + if(race_manager->hasTimeTarget()){ + WorldStatus::setClockMode(WorldStatus::CLOCK_COUNTDOWN, race_manager->getTimeTarget()); + countDownReachedZero = false; + } + else WorldStatus::setClockMode(CLOCK_CHRONO); + m_use_highscores = false; +} // SoccerWorld +//----------------------------------------------------------------------------- + +/** The destructor frees al data structures. + */ +SoccerWorld::~SoccerWorld() +{ + sfx_manager->deleteSFX(m_goal_sound); +} // ~SoccerWorld +//----------------------------------------------------------------------------- + +/** Initializes the soccer world. It sets up the data structure + * to keep track of points etc. for each kart. + */ +void SoccerWorld::init() +{ + WorldWithRank::init(); + m_display_rank = false; + m_goal_timer = 0.f; + m_lastKartToHitBall = -1; + + // check for possible problems if AI karts were incorrectly added + if(getNumKarts() > race_manager->getNumPlayers()) + { + fprintf(stderr, "No AI exists for this game mode\n"); + exit(1); + } + m_goal_target = race_manager->getMaxGoal(); + m_goal_sound = sfx_manager->createSoundSource("goal_scored"); + +} // init + +//----------------------------------------------------------------------------- +/** Called then a battle is restarted. + */ +void SoccerWorld::reset() +{ + WorldWithRank::reset(); + if(race_manager->hasTimeTarget()){ + WorldStatus::setClockMode(WorldStatus::CLOCK_COUNTDOWN, race_manager->getTimeTarget()); + countDownReachedZero = false; + } + else WorldStatus::setClockMode(CLOCK_CHRONO); + + m_can_score_points = true; + memset(m_team_goals, 0, sizeof(m_team_goals)); + + // Reset original positions for the soccer balls + TrackObjectManager* tom = getTrack()->getTrackObjectManager(); + assert(tom); + m_redScorers.clear(); + m_redScoreTimes.clear(); + m_blueScorers.clear(); + m_blueScoreTimes.clear(); + m_lastKartToHitBall = -1; + PtrVector& objects = tom->getObjects(); + for(int i=0; iisSoccerBall()) + continue; + + obj->reset(); + obj->getPhysics()->reset(); + } + + if (m_goal_sound != NULL && + m_goal_sound->getStatus() == SFXManager::SFX_PLAYING) + { + m_goal_sound->stop(); + } + + initKartList(); +} // reset + +//----------------------------------------------------------------------------- +/** Returns the internal identifier for this race. + */ +const std::string& SoccerWorld::getIdent() const +{ + return IDENT_SOCCER; +} // getIdent + +//----------------------------------------------------------------------------- +/** Update the world and the track. + * \param dt Time step size. + */ +void SoccerWorld::update(float dt) +{ + World *world = World::getWorld(); + + WorldWithRank::update(dt); + WorldWithRank::updateTrack(dt); + + if (world->getPhase() == World::GOAL_PHASE) + { + m_goal_timer += dt; + + if (m_goal_timer > 3.0f) + { + world->setPhase(WorldStatus::RACE_PHASE); + m_goal_timer = 0; + } + } + + // TODO +} // update + +void SoccerWorld::onCheckGoalTriggered(bool first_goal) +{ + if (m_can_score_points) + { + //I18N: soccer mode + //~ m_race_gui->addMessage(_("GOAL!"), NULL, + //~ /* time */ 5.0f, + //~ video::SColor(255,255,255,255), + //~ /*important*/ true, + //~ /*big font*/ true); + m_team_goals[first_goal ? 0 : 1]++; + //printf("Score:\nTeam One %d : %d Team Two\n", m_team_goals[0], m_team_goals[1]); + World *world = World::getWorld(); + world->setPhase(WorldStatus::GOAL_PHASE); + m_goal_sound->play(); + if(m_lastKartToHitBall != -1) + { + if(first_goal){ + m_redScorers.push_back(m_lastKartToHitBall); + if(race_manager->hasTimeTarget()) + m_redScoreTimes.push_back(race_manager->getTimeTarget() - world->getTime()); + else + m_redScoreTimes.push_back(world->getTime()); + } + else{ + m_blueScorers.push_back(m_lastKartToHitBall); + if(race_manager->hasTimeTarget()) + m_blueScoreTimes.push_back(race_manager->getTimeTarget() - world->getTime()); + else + m_blueScoreTimes.push_back(world->getTime()); + } + } + } + + //m_check_goals_enabled = false; // TODO: remove? + + // Reset original positions for the soccer balls + TrackObjectManager* tom = getTrack()->getTrackObjectManager(); + assert(tom); + + PtrVector& objects = tom->getObjects(); + for(int i=0; iisSoccerBall()) + continue; + + obj->reset(); + obj->getPhysics()->reset(); + } + + //Resetting the ball triggers the goal check line one more time. + //This ensures that only one goal is counted, and the second is ignored. + m_can_score_points = !m_can_score_points; + + //for(int i=0 ; i < getNumKarts() ; i++ + + /*if(World::getWorld()->getTrack()->isAutoRescueEnabled() && + !getKartAnimation() && fabs(getRoll())>60*DEGREE_TO_RAD && + fabs(getSpeed())<3.0f ) + { + new RescueAnimation(this, true); + }*/ + + // TODO: rescue the karts +} // onCheckGoalTriggered + +//----------------------------------------------------------------------------- +/** Sets the last kart that hit the ball, to be able to +* identify the scorer later. +*/ +void SoccerWorld::setLastKartTohitBall(unsigned int kartId){ + m_lastKartToHitBall = kartId; +} +//----------------------------------------------------------------------------- +/** The battle is over if only one kart is left, or no player kart. + */ +bool SoccerWorld::isRaceOver() +{ + // for tests : never over when we have a single player there :) + if (race_manager->getNumPlayers() < 2) + { + return false; + } + + else if(race_manager->hasTimeTarget()){ + return countDownReachedZero; + } + // One team scored the target goals ... + else if(getScore(0) >= m_goal_target || + getScore(1) >= m_goal_target ) + { + return true; + } + // TODO + return getCurrentNumKarts()==1 || getCurrentNumPlayers()==0; +} // isRaceOver + +//----------------------------------------------------------------------------- +/** Called when the race finishes, i.e. after playing (if necessary) an + * end of race animation. It updates the time for all karts still racing, + * and then updates the ranks. + */ +void SoccerWorld::terminateRace() +{ + m_can_score_points = false; + WorldWithRank::terminateRace(); +} // terminateRace +//----------------------------------------------------------------------------- +/** Called when the match time ends. +*/ +void SoccerWorld::countdownReachedZero(){ + countDownReachedZero = true; +} + +//----------------------------------------------------------------------------- +/** Returns the data to display in the race gui. + */ +void SoccerWorld::getKartsDisplayInfo( + std::vector *info) +{ + // TODO!! + /* + const unsigned int kart_amount = getNumKarts(); + for(unsigned int i = 0; i < kart_amount ; i++) + { + RaceGUIBase::KartIconDisplayInfo& rank_info = (*info)[i]; + + // reset color + rank_info.lap = -1; + + AbstractKart* kart = getKart(i); + switch(kart->getSoccerTeam()) + { + case SOCCER_TEAM_BLUE: + rank_info.r = 0.0f; + rank_info.g = 0.0f; + rank_info.b = 0.7f; + break; + case SOCCER_TEAM_RED: + rank_info.r = 0.9f; + rank_info.g = 0.0f; + rank_info.b = 0.0f; + break; + default: + assert(false && "Soccer team not set to blue or red"); + rank_info.r = 0.0f; + rank_info.g = 0.0f; + rank_info.b = 0.0f; + } + } + */ +} // getKartsDisplayInfo + +//----------------------------------------------------------------------------- +/** Moves a kart to its rescue position. + * \param kart The kart that was rescued. + */ +void SoccerWorld::moveKartAfterRescue(AbstractKart* kart) +{ + // find closest point to drop kart on + World *world = World::getWorld(); + const int start_spots_amount = world->getTrack()->getNumberOfStartPositions(); + assert(start_spots_amount > 0); + + float largest_accumulated_distance_found = -1; + int furthest_id_found = -1; + + const float kart_x = kart->getXYZ().getX(); + const float kart_z = kart->getXYZ().getZ(); + + for(int n=0; ngetTrack()->getStartTransform(n); + const Vec3 &v=s.getOrigin(); + float accumulatedDistance = .0f; + bool spawnPointClear = true; + + for(unsigned int k=0; kgetKart(k); + const float currentKart_x = currentKart->getXYZ().getX(); + const float currentKartk_z = currentKart->getXYZ().getZ(); + + if(kart_x!=currentKart_x && kart_z !=currentKartk_z) + { + float absDistance = fabs(currentKart_x - v.getX()) + + fabs(currentKartk_z - v.getZ()); + if(absDistance < CLEAR_SPAWN_RANGE) + { + spawnPointClear = false; + break; + } + accumulatedDistance += absDistance; + } + } + + if(largest_accumulated_distance_found < accumulatedDistance && spawnPointClear) + { + furthest_id_found = n; + largest_accumulated_distance_found = accumulatedDistance; + } + } + + assert(furthest_id_found != -1); + const btTransform &s = world->getTrack()->getStartTransform(furthest_id_found); + const Vec3 &xyz = s.getOrigin(); + kart->setXYZ(xyz); + kart->setRotation(s.getRotation()); + + //position kart from same height as in World::resetAllKarts + btTransform pos; + pos.setOrigin(kart->getXYZ()+btVector3(0, 0.5f*kart->getKartHeight(), 0.0f)); + pos.setRotation( btQuaternion(btVector3(0.0f, 1.0f, 0.0f), 0 /* angle */) ); + + kart->getBody()->setCenterOfMassTransform(pos); + + //project kart to surface of track + bool kart_over_ground = m_track->findGround(kart); + + if (kart_over_ground) + { + //add vertical offset so that the kart starts off above the track + float vertical_offset = kart->getKartProperties()->getVertRescueOffset() * + kart->getKartHeight(); + kart->getBody()->translate(btVector3(0, vertical_offset, 0)); + } + else + { + fprintf(stderr, "WARNING: invalid position after rescue for kart %s on track %s.\n", + (kart->getIdent().c_str()), m_track->getIdent().c_str()); + } +} // moveKartAfterRescue + +//-----------------------------------------------------------------------------/** Set position and team for the karts */ +void SoccerWorld::initKartList() +{ + const unsigned int kart_amount = m_karts.size(); + + // Set kart positions, ordering them by team + for(unsigned int n=0; nsetPosition(-1); + } + // TODO: remove + + int team_karts_amount[NB_SOCCER_TEAMS]; + memset(team_karts_amount, 0, sizeof(team_karts_amount)); + + { + // Set the kart teams if they haven't been already set by the setup screen + // (happens when the setup screen is skipped, with 1 player) + SoccerTeam round_robin_team = SOCCER_TEAM_RED; + for(unsigned int n=0; ngetLocalKartInfo(n).getSoccerTeam() == SOCCER_TEAM_NONE) + race_manager->setLocalKartSoccerTeam( + race_manager->getLocalKartInfo(n).getLocalPlayerId(),round_robin_team); + + team_karts_amount[race_manager->getLocalKartInfo(n).getSoccerTeam()]++; + + round_robin_team = (round_robin_team==SOCCER_TEAM_RED ? + SOCCER_TEAM_BLUE : SOCCER_TEAM_RED); + }// next kart + } + + //Loading the indicator textures + irr::video::ITexture *redTeamTexture = irr_driver->getTexture( + file_manager->getTextureFile("soccer_player_red.png")); + irr::video::ITexture *blueTeamTexture = irr_driver->getTexture( + file_manager->getTextureFile("soccer_player_blue.png")); + //Assigning indicators + for(unsigned int i=0; igetKartModel()->getHeight()+0.5f; + + if(race_manager->getLocalKartInfo(i).getSoccerTeam() == SOCCER_TEAM_RED) + arrowNode = irr_driver->addBillboard(core::dimension2d(0.3f,0.3f), + redTeamTexture,m_karts[i]->getNode(), true); + else + arrowNode = irr_driver->addBillboard(core::dimension2d(0.3f,0.3f), + blueTeamTexture,m_karts[i]->getNode(),true); + arrowNode->setPosition(core::vector3df(0, arrow_pos_height, 0)); + } + + // Compute start positions for each team + int team_cur_position[NB_SOCCER_TEAMS]; + team_cur_position[0] = 1; + for(int i=1 ; i < (int)NB_SOCCER_TEAMS ; i++) + team_cur_position[i] = team_karts_amount[i-1] + team_cur_position[i-1]; + + // Set kart positions, ordering them by team + for(unsigned int n=0; ngetLocalKartInfo(n).getSoccerTeam(); + m_karts[n]->setPosition(team_cur_position[team]); + team_cur_position[team]++; + } // next kart +} + +//----------------------------------------------------------------------------- +int SoccerWorld::getScore(unsigned int i) +{ + return m_team_goals[i]; +} +//----------------------------------------------------------------------------- +int SoccerWorld::getTeamLeader(unsigned int team){ + for(int i = 0; i< m_karts.size(); i++) + { + if(race_manager->getLocalKartInfo(i).getSoccerTeam() == (SoccerTeam) team) + return i; + } + return -1; +} +//----------------------------------------------------------------------------- +AbstractKart *SoccerWorld::createKart(const std::string &kart_ident, int index, + int local_player_id, int global_player_id, + RaceManager::KartType kart_type) +{ + int posIndex = index; + if(race_manager->getLocalKartInfo(index).getSoccerTeam() == SOCCER_TEAM_RED) + { + if(index % 2 != 1) posIndex += 1; + } + else if(race_manager->getLocalKartInfo(index).getSoccerTeam() == SOCCER_TEAM_BLUE) + { + if(index % 2 != 0) posIndex += 1; + } + int position = index+1; + btTransform init_pos = m_track->getStartTransform(posIndex); + AbstractKart *new_kart = new Kart(kart_ident, index, position, init_pos); + new_kart->init(race_manager->getKartType(index)); + Controller *controller = NULL; + switch(kart_type) + { + case RaceManager::KT_PLAYER: + controller = new PlayerController(new_kart, + StateManager::get()->getActivePlayer(local_player_id), + local_player_id); + m_num_players ++; + break; + case RaceManager::KT_NETWORK_PLAYER: + break; // Avoid compiler warning about enum not handled. + //controller = new NetworkController(kart_ident, position, init_pos, + // global_player_id); + //m_num_players++; + //break; + case RaceManager::KT_AI: + controller = loadAIController(new_kart); + break; + case RaceManager::KT_GHOST: + break; + case RaceManager::KT_LEADER: + break; + } + + new_kart->setController(controller); + + return new_kart; +} // createKart + +//----------------------------------------------------------------------------- + diff --git a/src/modes/soccer_world.hpp b/src/modes/soccer_world.hpp index ff09af2a2..d2778c599 100644 --- a/src/modes/soccer_world.hpp +++ b/src/modes/soccer_world.hpp @@ -1,94 +1,113 @@ -// -// SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004 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 SOCCER_WORLD_HPP -#define SOCCER_WORLD_HPP - -#include "modes/world_with_rank.hpp" -#include "states_screens/race_gui_base.hpp" -#include "karts/abstract_kart.hpp" - - -#include - -#include - -#define CLEAR_SPAWN_RANGE 5 - -class PhysicalObject; -class AbstractKart; -class Controller; - -/** - * \brief An implementation of World, to provide the soccer game mode - * \ingroup modes - */ -class SoccerWorld : public WorldWithRank -{ -private: - /** Number of goals each team scored - */ - int m_team_goals[NB_SOCCER_TEAMS]; - /** Number of goals needed to win - */ - int m_goal_target; - /** Whether or not goals can be scored (they are disabled when a point is scored - and re-enabled when the next game can be played)*/ - bool m_can_score_points; - - /** Team karts */ - - -public: - - SoccerWorld(); - virtual ~SoccerWorld() {} - - virtual void init(); - - // clock events - virtual bool isRaceOver(); - virtual void terminateRace(); - - // overriding World methods - virtual void reset(); - - virtual bool useFastMusicNearEnd() const { return false; } - virtual void getKartsDisplayInfo( - std::vector *info); - int getScore(unsigned int i); - virtual bool raceHasLaps(){ return false; } - virtual void moveKartAfterRescue(AbstractKart* kart); - - virtual const std::string& getIdent() const; - - virtual void update(float dt); - - void onCheckGoalTriggered(bool first_goal); - int getTeamLeader(unsigned int i); - -private: - void initKartList(); -protected: - virtual AbstractKart *createKart(const std::string &kart_ident, int index, - int local_player_id, int global_player_id, - RaceManager::KartType type); -}; // SoccerWorld - - -#endif +// +// SuperTuxKart - a fun racing game with go-kart +// Copyright (C) 2004-2013 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 SOCCER_WORLD_HPP +#define SOCCER_WORLD_HPP + +#include "modes/world_with_rank.hpp" +#include "states_screens/race_gui_base.hpp" +#include "karts/abstract_kart.hpp" + + +#include + +#include + +#define CLEAR_SPAWN_RANGE 5 + +class PhysicalObject; +class AbstractKart; +class Controller; + +/** + * \brief An implementation of World, to provide the soccer game mode + * \ingroup modes + */ +class SoccerWorld : public WorldWithRank +{ +private: + /** Number of goals each team scored */ + int m_team_goals[NB_SOCCER_TEAMS]; + /** Number of goals needed to win */ + int m_goal_target; + bool countDownReachedZero; + /** Whether or not goals can be scored (they are disabled when a point is scored + and re-enabled when the next game can be played)*/ + bool m_can_score_points; + SFXBase *m_goal_sound; + /** Timer for displaying goal text*/ + float m_goal_timer; + int m_lastKartToHitBall; + std::vector m_redScorers; + std::vector m_redScoreTimes; + std::vector m_blueScorers; + std::vector m_blueScoreTimes; +public: + + SoccerWorld(); + virtual ~SoccerWorld(); + + virtual void init(); + + // clock events + virtual bool isRaceOver(); + virtual void terminateRace(); + virtual void countdownReachedZero() OVERRIDE; + + // overriding World methods + virtual void reset(); + + virtual bool useFastMusicNearEnd() const { return false; } + virtual void getKartsDisplayInfo( + std::vector *info); + int getScore(unsigned int i); + virtual bool raceHasLaps(){ return false; } + virtual void moveKartAfterRescue(AbstractKart* kart); + + virtual const std::string& getIdent() const; + + virtual void update(float dt); + + void onCheckGoalTriggered(bool first_goal); + int getTeamLeader(unsigned int i); + void setLastKartTohitBall(unsigned int kartId); + std::vector getScorers(unsigned int team) + { + if(team == 0) + return m_redScorers; + else + return m_blueScorers; + } + std::vector getScoreTimes(unsigned int team) + { + if(team == 0) + return m_redScoreTimes; + else + return m_blueScoreTimes; + } + +private: + void initKartList(); +protected: + virtual AbstractKart *createKart(const std::string &kart_ident, int index, + int local_player_id, int global_player_id, + RaceManager::KartType type); +}; // SoccerWorld + + +#endif diff --git a/src/modes/standard_race.cpp b/src/modes/standard_race.cpp index 1571992bf..db2dea1f2 100644 --- a/src/modes/standard_race.cpp +++ b/src/modes/standard_race.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team +// Copyright (C) 2006-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/modes/standard_race.hpp b/src/modes/standard_race.hpp index b37f24a7d..ddfc6efc5 100644 --- a/src/modes/standard_race.hpp +++ b/src/modes/standard_race.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004 SuperTuxKart-Team +// Copyright (C) 2004-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/modes/three_strikes_battle.cpp b/src/modes/three_strikes_battle.cpp index 023bb4c3f..8e696e028 100644 --- a/src/modes/three_strikes_battle.cpp +++ b/src/modes/three_strikes_battle.cpp @@ -1,7 +1,7 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team +// Copyright (C) 2006-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -296,15 +296,14 @@ void ThreeStrikesBattle::update(float dt) WorldWithRank::update(dt); WorldWithRank::updateTrack(dt); - core::vector3df tire_offset; - std::string tire; - float scale = 0.5f; - float radius = 0.5f; - PhysicalObject::bodyTypes body_shape; - // insert blown away tire(s) now if was requested while (m_insert_tire > 0) { + std::string tire; + core::vector3df tire_offset; + float scale = 0.5f; + float radius = 0.5f; + PhysicalObject::BodyTypes body_shape; if(m_insert_tire == 1) { tire_offset = core::vector3df(0.0f, 0.0f, 0.0f); @@ -332,35 +331,31 @@ void ThreeStrikesBattle::update(float dt) core::vector3df tire_xyz = m_tire_position + tire_offset; core::vector3df tire_hpr = core::vector3df(800.0f,0, - m_tire_rotation / M_PI * 180 + 180); + m_tire_rotation *RAD_TO_DEGREE + 180); core::vector3df tire_scale(scale,scale,scale); - PhysicalObject::Settings physicsSettings; - physicsSettings.body_type = PhysicalObject::MP_CYLINDER_Y; - physicsSettings.crash_reset = false; - physicsSettings.knock_kart = false; - physicsSettings.mass = 15.0f; - physicsSettings.radius = radius; - physicsSettings.reset_when_too_low = false; + PhysicalObject::Settings physics_settings(body_shape, + radius, /*mass*/15.0f); TrackObjectPresentationMesh* tire_presentation = new TrackObjectPresentationMesh(tire, tire_xyz, tire_hpr, tire_scale); - TrackObject* tire = new TrackObject(tire_xyz, tire_hpr, tire_scale, - "movable", tire_presentation, - true /* is_dynamic */, - &physicsSettings); - getTrack()->getTrackObjectManager()->insertObject(tire); + TrackObject* tire_obj = new TrackObject(tire_xyz, tire_hpr, tire_scale, + "movable", tire_presentation, + true /* is_dynamic */, + &physics_settings); + getTrack()->getTrackObjectManager()->insertObject(tire_obj); // FIXME: orient the force relative to kart orientation - tire->getPhysics()->getBody()->applyCentralForce(btVector3(60.0f, 0.0f, 0.0f)); + tire_obj->getPhysics()->getBody() + ->applyCentralForce(btVector3(60.0f, 0.0f, 0.0f)); m_insert_tire--; if(m_insert_tire == 1) m_insert_tire = 0; - m_tires.push_back(tire); - } + m_tires.push_back(tire_obj); + } // while } // update //----------------------------------------------------------------------------- diff --git a/src/modes/three_strikes_battle.hpp b/src/modes/three_strikes_battle.hpp index 7cb8c8eb3..aa144a666 100644 --- a/src/modes/three_strikes_battle.hpp +++ b/src/modes/three_strikes_battle.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004 SuperTuxKart-Team +// Copyright (C) 2004-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/modes/tutorial_world.cpp b/src/modes/tutorial_world.cpp index 70ddabad8..d94d154a0 100644 --- a/src/modes/tutorial_world.cpp +++ b/src/modes/tutorial_world.cpp @@ -1,3 +1,21 @@ +// SuperTuxKart - a fun racing game with go-kart +// +// Copyright (C) 2012-2013 Marianne Gagnon +// +// 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 "modes/tutorial_world.hpp" #include "karts/kart.hpp" diff --git a/src/modes/tutorial_world.hpp b/src/modes/tutorial_world.hpp index 5c2b3b2a1..e18adc6b4 100644 --- a/src/modes/tutorial_world.hpp +++ b/src/modes/tutorial_world.hpp @@ -1,3 +1,21 @@ +// SuperTuxKart - a fun racing game with go-kart +// +// Copyright (C) 2012-2013 Marianne Gagnon +// +// 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_TUTORIAL_MODE_HPP #define HEADER_TUTORIAL_MODE_HPP diff --git a/src/modes/world.cpp b/src/modes/world.cpp index 1cc1040a1..310e0e1d4 100644 --- a/src/modes/world.cpp +++ b/src/modes/world.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team +// Copyright (C) 2006-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -182,6 +182,9 @@ void World::init() } // for i + // Now that all models are loaded, apply the overrides + irr_driver->applyObjectPassShader(); + // Must be called after all karts are created m_race_gui->init(); @@ -262,11 +265,7 @@ void World::reset() void World::createRaceGUI() { - //if(UserConfigParams::m_minimal_race_gui && - // race_manager->getTrackName() != "tutorial") - // m_race_gui = new MinimalRaceGUI(); - //else - m_race_gui = new RaceGUI(); + m_race_gui = new RaceGUI(); } //----------------------------------------------------------------------------- @@ -600,9 +599,6 @@ void World::resetAllKarts() for ( KartList::iterator i=m_karts.begin(); i!=m_karts.end(); i++) { - // Now store the current (i.e. in rest) suspension length for each - // kart, so that the karts can visualise the suspension. - (*i)->setSuspensionLength(); // Update the kart transforms with the newly computed position // after all karts are reset (*i)->setTrans((*i)->getBody()->getWorldTransform()); @@ -741,6 +737,7 @@ void World::updateWorld(float dt) race_manager->setNumKarts( 1 ); race_manager->setTrack( "tutorial" ); race_manager->setDifficulty(RaceManager::DIFFICULTY_EASY); + race_manager->setReverseTrack(false); // Use keyboard 0 by default (FIXME: let player choose?) InputDevice* device = input_manager->getDeviceList()->getKeyboard(0); diff --git a/src/modes/world.hpp b/src/modes/world.hpp index d6aaffd95..3f3750b66 100644 --- a/src/modes/world.hpp +++ b/src/modes/world.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004 SuperTuxKart-Team +// Copyright (C) 2004-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/modes/world_status.cpp b/src/modes/world_status.cpp index 294009f1e..440903230 100644 --- a/src/modes/world_status.cpp +++ b/src/modes/world_status.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004 SuperTuxKart-Team +// Copyright (C) 2004-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -129,7 +129,7 @@ void WorldStatus::update(const float dt) case SETUP_PHASE: m_auxiliary_timer = 0.0f; m_phase = TRACK_INTRO_PHASE; - if (UserConfigParams::m_music && m_play_racestart_sounds) + if (m_play_racestart_sounds) { m_track_intro_sound->play(); } @@ -143,7 +143,10 @@ void WorldStatus::update(const float dt) // long, we use the aux timer to force the next phase // after 3.5 seconds. if(m_track_intro_sound->getStatus()==SFXManager::SFX_PLAYING - && m_auxiliary_timer<3.5f) + && m_auxiliary_timer<3.5f) + return; + // Wait before ready phase if sounds are disabled + if(!UserConfigParams::m_sfx && m_auxiliary_timer<3.0f) return; m_auxiliary_timer = 0.0f; if (m_play_racestart_sounds) m_prestart_sound->play(); @@ -233,6 +236,9 @@ void WorldStatus::update(const float dt) case FINISH_PHASE: // Nothing to do here. break; + case GOAL_PHASE: + // Nothing to do here as well. + default: break; } diff --git a/src/modes/world_status.hpp b/src/modes/world_status.hpp index 5a255cfc7..bfdf30aa9 100644 --- a/src/modes/world_status.hpp +++ b/src/modes/world_status.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004 SuperTuxKart-Team +// Copyright (C) 2004-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -77,7 +77,10 @@ public: IN_GAME_MENU_PHASE, // Undefined, used in asserts to catch incorrect states. - UNDEFINED_PHASE + UNDEFINED_PHASE, + + //Goal scored phase + GOAL_PHASE }; protected: /** Sound to play at the beginning of a race, during which a diff --git a/src/modes/world_with_rank.cpp b/src/modes/world_with_rank.cpp index e4668ef41..7db5f6047 100644 --- a/src/modes/world_with_rank.cpp +++ b/src/modes/world_with_rank.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Joerg Henrichs +// Copyright (C) 2010-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/modes/world_with_rank.hpp b/src/modes/world_with_rank.hpp index 887ca1028..100802d7c 100644 --- a/src/modes/world_with_rank.hpp +++ b/src/modes/world_with_rank.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Joerg Henrichs +// Copyright (C) 2010-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/network/protocols/connect_to_server.cpp b/src/network/protocols/connect_to_server.cpp index 72c6445b8..8f1bcc07e 100644 --- a/src/network/protocols/connect_to_server.cpp +++ b/src/network/protocols/connect_to_server.cpp @@ -155,9 +155,9 @@ void ConnectToServer::asynchronousUpdate() case CONNECTING: // waiting the server to answer our connection { static double timer = 0; - if (Time::getRealTime() > timer+5.0) // every 5 seconds + if (StkTime::getRealTime() > timer+5.0) // every 5 seconds { - timer = Time::getRealTime(); + timer = StkTime::getRealTime(); NetworkManager::getInstance()->connect(m_server_address); Log::info("ConnectToServer", "Trying to connect"); } diff --git a/src/network/protocols/kart_update_protocol.cpp b/src/network/protocols/kart_update_protocol.cpp index 0652c22c5..1f46a6794 100644 --- a/src/network/protocols/kart_update_protocol.cpp +++ b/src/network/protocols/kart_update_protocol.cpp @@ -38,7 +38,6 @@ void KartUpdateProtocol::notifyEvent(Event* event) Log::info("KartUpdateProtocol", "Message too short."); return; } - float game_time = ns.getFloat(0); ns.removeFront(4); while(ns.size() >= 16) { @@ -69,7 +68,7 @@ void KartUpdateProtocol::setup() void KartUpdateProtocol::update() { static double time = 0; - double current_time = Time::getRealTime(); + double current_time = StkTime::getRealTime(); if (current_time > time + 0.1) // 10 updates per second { time = current_time; diff --git a/src/network/protocols/ping_protocol.cpp b/src/network/protocols/ping_protocol.cpp index 4a4c29332..f6f2993af 100644 --- a/src/network/protocols/ping_protocol.cpp +++ b/src/network/protocols/ping_protocol.cpp @@ -42,9 +42,9 @@ void PingProtocol::setup() void PingProtocol::asynchronousUpdate() { - if (Time::getRealTime() > m_last_ping_time+m_delay_between_pings) + if (StkTime::getRealTime() > m_last_ping_time+m_delay_between_pings) { - m_last_ping_time = Time::getRealTime(); + m_last_ping_time = StkTime::getRealTime(); uint8_t data = 0; NetworkManager::getInstance()->getHost()->sendRawPacket(&data, 1, m_ping_dst); Log::info("PingProtocol", "Ping message sent"); diff --git a/src/network/protocols/server_lobby_room_protocol.cpp b/src/network/protocols/server_lobby_room_protocol.cpp index 736833b9b..eeb5991e6 100644 --- a/src/network/protocols/server_lobby_room_protocol.cpp +++ b/src/network/protocols/server_lobby_room_protocol.cpp @@ -110,9 +110,9 @@ void ServerLobbyRoomProtocol::update() { // first poll every 5 seconds static double last_poll_time = 0; - if (Time::getRealTime() > last_poll_time+10.0) + if (StkTime::getRealTime() > last_poll_time+10.0) { - last_poll_time = Time::getRealTime(); + last_poll_time = StkTime::getRealTime(); TransportAddress addr = NetworkManager::getInstance()->getPublicAddress(); Online::XMLRequest* request = new Online::XMLRequest(); request->setURL((std::string)UserConfigParams::m_server_multiplayer + "address-management.php"); diff --git a/src/network/protocols/synchronization_protocol.cpp b/src/network/protocols/synchronization_protocol.cpp index f9f4c626c..c916f7628 100644 --- a/src/network/protocols/synchronization_protocol.cpp +++ b/src/network/protocols/synchronization_protocol.cpp @@ -94,7 +94,7 @@ void SynchronizationProtocol::notifyEvent(Event* event) Log::warn("SynchronizationProtocol", "The sequence# %u isn't known.", sequence); return; } - double current_time = Time::getRealTime(); + double current_time = StkTime::getRealTime(); m_total_diff[peer_id] += current_time - m_pings[peer_id][sequence]; Log::verbose("SynchronizationProtocol", "InstantPing is %u", (unsigned int)((current_time - m_pings[peer_id][sequence])*1000)); @@ -118,8 +118,8 @@ void SynchronizationProtocol::setup() void SynchronizationProtocol::asynchronousUpdate() { - static double timer = Time::getRealTime(); - double current_time = Time::getRealTime(); + static double timer = StkTime::getRealTime(); + double current_time = StkTime::getRealTime(); if (m_countdown_activated) { m_countdown -= (current_time - m_last_countdown_update); @@ -174,6 +174,6 @@ void SynchronizationProtocol::startCountdown(int ms_countdown) { m_countdown_activated = true; m_countdown = (double)(ms_countdown)/1000.0; - m_last_countdown_update = Time::getRealTime(); + m_last_countdown_update = StkTime::getRealTime(); Log::info("SynchronizationProtocol", "Countdown started with value %f", m_countdown); } diff --git a/src/online/http_manager.cpp b/src/online/http_manager.cpp index 07526772e..4130e575f 100644 --- a/src/online/http_manager.cpp +++ b/src/online/http_manager.cpp @@ -195,7 +195,7 @@ namespace Online{ { HTTPManager *me = (HTTPManager*) obj; - //pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); + pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); me->m_current_request = NULL; me->m_request_queue.lock(); diff --git a/src/online/messages.cpp b/src/online/messages.cpp index 1e768fdf6..cd93e6742 100644 --- a/src/online/messages.cpp +++ b/src/online/messages.cpp @@ -100,7 +100,7 @@ namespace Online */ irr::core::stringw loadingDots(bool spaces, float interval, int max_dots) { - int nr_dots = int(floor(Time::getRealTime() * (1 / interval))) % (max_dots+1); + int nr_dots = int(floor(StkTime::getRealTime() * (1 / interval))) % (max_dots+1); return irr::core::stringw((std::string(nr_dots,'.') + std::string(max_dots-nr_dots,' ')).c_str()); } } // namespace messages diff --git a/src/online/request.cpp b/src/online/request.cpp index cc61d3f59..f75c4bf95 100644 --- a/src/online/request.cpp +++ b/src/online/request.cpp @@ -18,6 +18,7 @@ #include "online/http_manager.hpp" #include "utils/translation.hpp" +#include "utils/constants.hpp" #ifdef WIN32 # include diff --git a/src/online/servers_manager.cpp b/src/online/servers_manager.cpp index 128165a4d..6184a91b4 100644 --- a/src/online/servers_manager.cpp +++ b/src/online/servers_manager.cpp @@ -72,7 +72,7 @@ namespace Online{ ServersManager::RefreshRequest * ServersManager::refreshRequest(bool request_now) const { RefreshRequest * request = NULL; - if(Time::getRealTime() - m_last_load_time.getAtomic() > SERVER_REFRESH_INTERVAL) + if(StkTime::getRealTime() - m_last_load_time.getAtomic() > SERVER_REFRESH_INTERVAL) { request = new RefreshRequest(); request->setURL((std::string)UserConfigParams::m_server_multiplayer + "client-user.php"); @@ -93,7 +93,7 @@ namespace Online{ { addServer(new Server(*servers_xml->getNode(i))); } - m_last_load_time.setAtomic((float)Time::getRealTime()); + m_last_load_time.setAtomic((float)StkTime::getRealTime()); } //FIXME error message } diff --git a/src/physics/btKart.cpp b/src/physics/btKart.cpp index 6cbefbd75..2647c8756 100644 --- a/src/physics/btKart.cpp +++ b/src/physics/btKart.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005 Erwin Coumans http://continuousphysics.com/Bullet/ + * Copyright (C) 2005-2013 Erwin Coumans http://continuousphysics.com/Bullet/ * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, @@ -84,6 +84,7 @@ btWheelInfo& btKart::addWheel(const btVector3& connectionPointCS, ci.m_maxSuspensionForce = tuning.m_maxSuspensionForce; m_wheelInfo.push_back( btWheelInfo(ci)); + m_visual_contact_point.push_back(btVector3()); btWheelInfo& wheel = m_wheelInfo[getNumWheels()-1]; @@ -111,16 +112,18 @@ void btKart::reset() wheel.m_rotation = 0; updateWheelTransform(i, true); } - m_zipper_active = false; - m_zipper_velocity = btScalar(0); - m_skid_angular_velocity = 0; - m_is_skidding = false; - m_allow_sliding = false; - m_num_wheels_on_ground = 0; - m_additional_impulse = btVector3(0,0,0); - m_time_additional_impulse = 0; - m_additional_rotation = btVector3(0,0,0); - m_time_additional_rotation = 0; + m_visual_wheels_touch_ground = false; + m_zipper_active = false; + m_zipper_velocity = btScalar(0); + m_skid_angular_velocity = 0; + m_is_skidding = false; + m_allow_sliding = false; + m_num_wheels_on_ground = 0; + m_additional_impulse = btVector3(0,0,0); + m_time_additional_impulse = 0; + m_additional_rotation = btVector3(0,0,0); + m_time_additional_rotation = 0; + m_visual_rotation = 0; // Set the brakes so that karts don't slide downhill setAllBrakes(5.0f); @@ -209,8 +212,12 @@ void btKart::updateWheelTransformsWS(btWheelInfo& wheel, } // updateWheelTransformsWS // ---------------------------------------------------------------------------- -btScalar btKart::rayCast(btWheelInfo& wheel) +/** + */ +btScalar btKart::rayCast(unsigned int index) { + btWheelInfo &wheel = m_wheelInfo[index]; + // Work around a bullet problem: when using a convex hull the raycast // would sometimes hit the chassis (which does not happen when using a // box shape). Therefore set the collision mask in the chassis body so @@ -225,7 +232,6 @@ btScalar btKart::rayCast(btWheelInfo& wheel) updateWheelTransformsWS( wheel,false); - btScalar depth = -1; btScalar raylen = wheel.getSuspensionRestLength()+wheel.m_wheelsRadius @@ -311,12 +317,53 @@ btScalar btKart::rayCast(btWheelInfo& wheel) wheel.m_clippedInvContactDotSuspension = btScalar(1.0); } +#define USE_VISUAL +#ifndef USE_VISUAL + m_visual_contact_point[index] = rayResults.m_hitPointInWorld; +#else + if(index==2 || index==3) + { + if(m_visual_rotation==0.123123123) + { + m_visual_contact_point[index ] = rayResults.m_hitPointInWorld; + m_visual_contact_point[index-2] = source; + m_visual_wheels_touch_ground &= (object!=NULL); + } + else + { + btTransform chassisTrans = getChassisWorldTransform(); + if (getRigidBody()->getMotionState()) + { + getRigidBody()->getMotionState()->getWorldTransform(chassisTrans); + } + btQuaternion q(m_visual_rotation, 0, 0); + btQuaternion rot_new = chassisTrans.getRotation() * q; + chassisTrans.setRotation(rot_new); + btVector3 pos = m_kart->getKartModel()->getWheelGraphicsPosition(index); + pos.setZ(pos.getZ()*0.9f); + //pos.setX(pos.getX()*0.1f); + //btVector3 pos = wheel.m_chassisConnectionPointCS; + btVector3 source = chassisTrans( pos ); + btVector3 target = source + rayvector; + btVehicleRaycaster::btVehicleRaycasterResult rayResults; + + void* object = m_vehicleRaycaster->castRay(source,target,rayResults); + m_visual_contact_point[index] = rayResults.m_hitPointInWorld; + m_visual_contact_point[index-2] = source; + m_visual_wheels_touch_ground &= (object!=NULL); + } + } +#endif + if(m_chassisBody->getBroadphaseHandle()) { m_chassisBody->getBroadphaseHandle()->m_collisionFilterGroup = old_group; } + + return depth; + } // rayCast // ---------------------------------------------------------------------------- @@ -342,11 +389,12 @@ void btKart::updateVehicle( btScalar step ) // Simulate suspension // ------------------- - m_num_wheels_on_ground = 0; + m_num_wheels_on_ground = 0; + m_visual_wheels_touch_ground = true; for (int i=0;idrawLine(m_visual_contact_point[0], m_visual_contact_point[2], yellow); + debugDrawer->drawLine(m_visual_contact_point[1], m_visual_contact_point[3], yellow); } // debugDraw diff --git a/src/physics/btKart.hpp b/src/physics/btKart.hpp index 6f1945fb7..268836a4a 100644 --- a/src/physics/btKart.hpp +++ b/src/physics/btKart.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005 Erwin Coumans http://continuousphysics.com/Bullet/ + * Copyright (C) 2005-2013 Erwin Coumans http://continuousphysics.com/Bullet/ * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, @@ -122,6 +122,17 @@ private: * properties. */ Kart *m_kart; + /** A visual rotation applied to the kart (for skidding). + * The physics use this to provide proper wheel contact points + * for skid marks. */ + float m_visual_rotation; + + /** True if the visual wheels touch the ground. */ + bool m_visual_wheels_touch_ground; + + /** Contact point of the visual wheel position. */ + btAlignedObjectArray m_visual_contact_point; + btAlignedObjectArray m_wheelInfo; void defaultInit(); @@ -142,7 +153,7 @@ public: void reset(); void debugDraw(btIDebugDraw* debugDrawer); const btTransform& getChassisWorldTransform() const; - btScalar rayCast(btWheelInfo& wheel); + btScalar rayCast(unsigned int index); virtual void updateVehicle(btScalar step); void resetSuspension(); btScalar getSteeringValue(int wheel) const; @@ -169,7 +180,22 @@ public: void setSliding(bool active); void instantSpeedIncreaseTo(float speed); void capSpeed(float max_speed); - + // ------------------------------------------------------------------------ + /** Returns true if both rear visual wheels touch the ground. */ + bool visualWheelsTouchGround() const + { + return m_visual_wheels_touch_ground; + } // visualWheelsTouchGround + // ------------------------------------------------------------------------ + /** Returns the contact point of a visual wheel. + * \param n Index of the wheel, must be 2 or 3 since only the two rear + * wheels define the visual position + */ + const btVector3& getVisualContactPoint(int n) const + { + assert(n>=2 && n<=3); + return m_visual_contact_point[n]; + } // getVisualContactPoint // ------------------------------------------------------------------------ /** btActionInterface interface. */ virtual void updateAction(btCollisionWorld* collisionWorld, @@ -230,6 +256,14 @@ public: /** Returns the time an additional impulse is activated. */ float getCentralImpulseTime() const { return m_time_additional_impulse; } // ------------------------------------------------------------------------ + /** Sets a visual rotation to be applied, which the physics use to provide + * the location where the graphical wheels touch the ground (for + * skidmarks). */ + void setVisualRotation(float angle) + { + m_visual_rotation = angle; + } // setVisualRotation + // ------------------------------------------------------------------------ /** Sets a rotation that is applied over a certain amount of time (to avoid * a too rapid changes in the kart). * \param t Time for the rotation to be applied. diff --git a/src/physics/btKartRaycast.cpp b/src/physics/btKartRaycast.cpp index 9fee3075a..13b310f76 100644 --- a/src/physics/btKartRaycast.cpp +++ b/src/physics/btKartRaycast.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005 Erwin Coumans http://continuousphysics.com/Bullet/ + * Copyright (C) 2005-2013 Erwin Coumans http://continuousphysics.com/Bullet/ * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, @@ -37,9 +37,9 @@ void* btKartRaycaster::castRay(const btVector3& from, const btVector3& to, } // CloestWithNormal // -------------------------------------------------------------------- /** Stores the index of the triangle hit. */ - virtual btScalar addSingleResult(btCollisionWorld::LocalRayResult& rayResult, + virtual btScalar addSingleResult(btCollisionWorld::LocalRayResult& rayResult, bool normalInWorldSpace) - { + { // We don't always get a triangle index, sometimes (e.g. ray hits // other kart) we get shapePart=-1, or no localShapeInfo at all if(rayResult.m_localShapeInfo && @@ -48,7 +48,7 @@ void* btKartRaycaster::castRay(const btVector3& from, const btVector3& to, return btCollisionWorld::ClosestRayResultCallback::addSingleResult(rayResult, normalInWorldSpace); - } + } // -------------------------------------------------------------------- /** Returns the index of the triangle which was hit, or -1 if * no triangle was hit. */ @@ -57,19 +57,19 @@ void* btKartRaycaster::castRay(const btVector3& from, const btVector3& to, }; // CloestWithNormal // ======================================================================== - ClosestWithNormal rayCallback(from,to); + ClosestWithNormal rayCallback(from,to); - m_dynamicsWorld->rayTest(from, to, rayCallback); + m_dynamicsWorld->rayTest(from, to, rayCallback); - if (rayCallback.hasHit()) - { - btRigidBody* body = btRigidBody::upcast(rayCallback.m_collisionObject); + if (rayCallback.hasHit()) + { + btRigidBody* body = btRigidBody::upcast(rayCallback.m_collisionObject); if (body && body->hasContactResponse()) - { - result.m_hitPointInWorld = rayCallback.m_hitPointWorld; - result.m_hitNormalInWorld = rayCallback.m_hitNormalWorld; - result.m_hitNormalInWorld.normalize(); - result.m_distFraction = rayCallback.m_closestHitFraction; + { + result.m_hitPointInWorld = rayCallback.m_hitPointWorld; + result.m_hitNormalInWorld = rayCallback.m_hitNormalWorld; + result.m_hitNormalInWorld.normalize(); + result.m_distFraction = rayCallback.m_closestHitFraction; const TriangleMesh &tm = World::getWorld()->getTrack()->getTriangleMesh(); if(m_smooth_normals && @@ -89,8 +89,8 @@ void* btKartRaycaster::castRay(const btVector3& from, const btVector3& to, #endif } return body; - } - } - return 0; + } + } + return 0; } diff --git a/src/physics/btKartRaycast.hpp b/src/physics/btKartRaycast.hpp index 624d2012e..f9c7faa16 100644 --- a/src/physics/btKartRaycast.hpp +++ b/src/physics/btKartRaycast.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005 Erwin Coumans http://continuousphysics.com/Bullet/ + * Copyright (C) 2005-2013 Erwin Coumans http://continuousphysics.com/Bullet/ * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, @@ -23,17 +23,17 @@ class btDynamicsWorld; class btKartRaycaster : public btVehicleRaycaster { private: - btDynamicsWorld* m_dynamicsWorld; + btDynamicsWorld* m_dynamicsWorld; /** True if the normals should be smoothed. Not all tracks support this, * so this flag is set depending on track when constructing this object. */ bool m_smooth_normals; public: - btKartRaycaster(btDynamicsWorld* world, bool smooth_normals=false) - :m_dynamicsWorld(world), m_smooth_normals(smooth_normals) - { - } + btKartRaycaster(btDynamicsWorld* world, bool smooth_normals=false) + :m_dynamicsWorld(world), m_smooth_normals(smooth_normals) + { + } - virtual void* castRay(const btVector3& from,const btVector3& to, + virtual void* castRay(const btVector3& from,const btVector3& to, btVehicleRaycasterResult& result); }; diff --git a/src/physics/btUprightConstraint.cpp b/src/physics/btUprightConstraint.cpp index 5221207f8..3b183c5e6 100644 --- a/src/physics/btUprightConstraint.cpp +++ b/src/physics/btUprightConstraint.cpp @@ -1,7 +1,7 @@ /* Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ +Copyright (C) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the diff --git a/src/physics/btUprightConstraint.hpp b/src/physics/btUprightConstraint.hpp index 4fc425faf..a2711fa9f 100644 --- a/src/physics/btUprightConstraint.hpp +++ b/src/physics/btUprightConstraint.hpp @@ -1,7 +1,7 @@ /* Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ +Copyright (C) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the @@ -111,7 +111,7 @@ public: timeStep); virtual void getInfo1 (btConstraintInfo1* info); virtual void getInfo2 (btConstraintInfo2* info); - virtual void setParam(int num, btScalar value, int axis = -1); + virtual void setParam(int num, btScalar value, int axis = -1); virtual btScalar getParam(int num, int axis) const; }; diff --git a/src/physics/irr_debug_drawer.cpp b/src/physics/irr_debug_drawer.cpp index 690790545..7f82ffa7c 100644 --- a/src/physics/irr_debug_drawer.cpp +++ b/src/physics/irr_debug_drawer.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Joerg Henrichs +// Copyright (C) 2010-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -18,6 +18,7 @@ #include "physics/irr_debug_drawer.hpp" +#include "graphics/irr_driver.hpp" #include "karts/abstract_kart.hpp" #include "modes/world.hpp" diff --git a/src/physics/irr_debug_drawer.hpp b/src/physics/irr_debug_drawer.hpp index 00eddcdbf..3b11f217f 100644 --- a/src/physics/irr_debug_drawer.hpp +++ b/src/physics/irr_debug_drawer.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/physics/kart_motion_state.hpp b/src/physics/kart_motion_state.hpp index 0fcc89b0c..8e0fa80e0 100644 --- a/src/physics/kart_motion_state.hpp +++ b/src/physics/kart_motion_state.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2008 Joerg Henrichs +// Copyright (C) 2008-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -19,11 +19,8 @@ #ifndef HEADER_KART_MOTION_STATE_HPP #define HEADER_KART_MOTION_STATE_HPP -#if defined(WIN32) && !defined(__CYGWIN__) && !defined(__MINGW32__) -# define isnan _isnan -#else -# include -#endif +#include +#include "utils/vs.hpp" #include "LinearMath/btMotionState.h" diff --git a/src/physics/physical_object.cpp b/src/physics/physical_object.cpp index ca0a8f6dc..dee4f40bb 100644 --- a/src/physics/physical_object.cpp +++ b/src/physics/physical_object.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -38,48 +38,71 @@ using namespace irr; #include #include -// ---------------------------------------------------------------------------- +/** Creates a physical Settings object with the given type, radius and mass. + */ +PhysicalObject::Settings::Settings(BodyTypes type, float radius, float mass) +{ + init(); + m_body_type = type; + m_mass = mass; + m_radius = radius; +} // Settings +// ---------------------------------------------------------------------------- +/** Reads the physical settings values from a given XML node. + */ +PhysicalObject::Settings::Settings(const XMLNode &xml_node) +{ + init(); + std::string shape; + xml_node.get("mass", &m_mass ); + xml_node.get("radius", &m_radius ); + xml_node.get("shape", &shape ); + xml_node.get("reset", &m_crash_reset ); + xml_node.get("explode", &m_knock_kart ); + xml_node.get("flatten", &m_flatten_kart); + + m_reset_when_too_low = + xml_node.get("reset-when-below", &m_reset_height) == 1; + + m_body_type = MP_NONE; + if (shape=="cone" || + shape=="coneY" ) m_body_type = MP_CONE_Y; + else if(shape=="coneX" ) m_body_type = MP_CONE_X; + else if(shape=="coneZ" ) m_body_type = MP_CONE_Z; + else if(shape=="cylinder"|| + shape=="cylinderY") m_body_type = MP_CYLINDER_Y; + else if(shape=="cylinderX") m_body_type = MP_CYLINDER_X; + else if(shape=="cylinderZ") m_body_type = MP_CYLINDER_Z; + else if(shape=="box" ) m_body_type = MP_BOX; + else if(shape=="sphere" ) m_body_type = MP_SPHERE; + else if(shape=="exact" ) m_body_type = MP_EXACT; + + else + Log::error("PhysicalObject", "Unknown shape type : %s.", + shape.c_str()); +} // Settings(XMLNode) + +// ---------------------------------------------------------------------------- +/** Initialises a Settings object. + */ +void PhysicalObject::Settings::init() +{ + m_body_type = PhysicalObject::MP_NONE; + m_crash_reset = false; + m_knock_kart = false; + m_mass = -1.0f; + m_radius = -1.0f; + m_reset_when_too_low = false; + m_flatten_kart = false; +} // Settings + +// ============================================================================ PhysicalObject* PhysicalObject::fromXML(bool is_dynamic, const XMLNode &xml_node, TrackObject* object) { - PhysicalObject::Settings settings; - - settings.reset_height = 0; - settings.mass = 1; - settings.radius = -1; - settings.crash_reset = false; - settings.knock_kart = false; - settings.flatten_kart = false; - - std::string shape; - xml_node.get("mass", &settings.mass ); - xml_node.get("radius", &settings.radius ); - xml_node.get("shape", &shape ); - xml_node.get("reset", &settings.crash_reset ); - xml_node.get("explode", &settings.knock_kart ); - xml_node.get("flatten", &settings.flatten_kart); - - settings.reset_when_too_low = - xml_node.get("reset-when-below", &settings.reset_height) == 1; - - settings.body_type = MP_NONE; - if (shape=="cone" || - shape=="coneY" ) settings.body_type = MP_CONE_Y; - else if(shape=="coneX" ) settings.body_type = MP_CONE_X; - else if(shape=="coneZ" ) settings.body_type = MP_CONE_Z; - else if(shape=="cylinder"|| - shape=="cylinderY") settings.body_type = MP_CYLINDER_Y; - else if(shape=="cylinderX") settings.body_type = MP_CYLINDER_X; - else if(shape=="cylinderZ") settings.body_type = MP_CYLINDER_Z; - - else if(shape=="box" ) settings.body_type = MP_BOX; - else if(shape=="sphere" ) settings.body_type = MP_SPHERE; - else if(shape=="exact") settings.body_type = MP_EXACT; - - else fprintf(stderr, "Unknown shape type : %s\n", shape.c_str()); - + PhysicalObject::Settings settings(xml_node); return new PhysicalObject(is_dynamic, settings, object); } // fromXML @@ -107,14 +130,14 @@ PhysicalObject::PhysicalObject(bool is_dynamic, m_init_hpr = object->getRotation(); m_init_scale = object->getScale(); - m_mass = settings.mass; - m_radius = settings.radius; - m_body_type = settings.body_type; - m_crash_reset = settings.crash_reset; - m_explode_kart = settings.knock_kart; - m_flatten_kart = settings.flatten_kart; - m_reset_when_too_low = settings.reset_when_too_low; - m_reset_height = settings.reset_height; + m_mass = settings.m_mass; + m_radius = settings.m_radius; + m_body_type = settings.m_body_type; + m_crash_reset = settings.m_crash_reset; + m_explode_kart = settings.m_knock_kart; + m_flatten_kart = settings.m_flatten_kart; + m_reset_when_too_low = settings.m_reset_when_too_low; + m_reset_height = settings.m_reset_height; m_init_pos.setIdentity(); Vec3 radHpr(m_init_hpr); @@ -528,6 +551,29 @@ void PhysicalObject::handleExplosion(const Vec3& pos, bool direct_hit) } // handleExplosion +// ---------------------------------------------------------------------------- +/** Returns true if this object is a soccer ball. + */ +bool PhysicalObject::isSoccerBall() const +{ + return m_object->isSoccerBall(); +} // is SoccerBall + +// ---------------------------------------------------------------------------- +/** Called when a physical object hits the track. Atm only used to push a + * soccer ball away from the edge of the field. + * \param m Material which was hit. + * \param normal Normal of the track at the hit point. + */ +void PhysicalObject::hit(const Material *m, const Vec3 &normal) +{ + if(isSoccerBall() && m != NULL && + m->getCollisionReaction() == Material::PUSH_SOCCER_BALL) + { + m_body->applyCentralImpulse(normal * 1000.0f); + } +} // hit + // ---------------------------------------------------------------------------- /* EOF */ diff --git a/src/physics/physical_object.hpp b/src/physics/physical_object.hpp index f8a699000..0cb52df59 100644 --- a/src/physics/physical_object.hpp +++ b/src/physics/physical_object.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -27,8 +27,10 @@ #include "utils/vec3.hpp" #include "utils/leak_check.hpp" -class XMLNode; + +class Material; class TrackObject; +class XMLNode; /** * \ingroup physics @@ -37,22 +39,38 @@ class PhysicalObject { public: /** The supported collision shapes. */ - enum bodyTypes {MP_NONE, + enum BodyTypes {MP_NONE, MP_CONE_Y, MP_CONE_X, MP_CONE_Z, MP_CYLINDER_Y, MP_CYLINDER_X, MP_CYLINDER_Z, MP_BOX, MP_SPHERE, MP_EXACT}; - struct Settings + class Settings { - float mass; - float radius; - PhysicalObject::bodyTypes body_type; - bool crash_reset; - bool knock_kart; - bool flatten_kart; - bool reset_when_too_low; - float reset_height; - }; + public: + /** Mass of the object. */ + float m_mass; + /** Radius of the object. */ + float m_radius; + /** Shape of the object. */ + PhysicalObject::BodyTypes m_body_type; + /** Trigger a reset in karts touching it? */ + bool m_crash_reset; + /** Knock the kart around. */ + bool m_knock_kart; + /** Flatten the kart when this object is touched. */ + bool m_flatten_kart; + /** Reset the object when it falls under the track (useful + * e.g. for a boulder rolling down a hill). */ + bool m_reset_when_too_low; + /** If the item is below that height, it is reset (when + * m_reset_when_too_low is true). */ + float m_reset_height; + private: + void init(); + public: + Settings(BodyTypes type, float radius, float mass); + Settings(const XMLNode &xml_node); + }; // Settings private: @@ -68,7 +86,7 @@ private: TrackObject *m_object; /** The shape of this object. */ - bodyTypes m_body_type; + BodyTypes m_body_type; /** The bullet collision shape. */ btCollisionShape *m_shape; @@ -138,7 +156,9 @@ public: virtual void handleExplosion(const Vec3& pos, bool directHit); void update (float dt); void init (); - + void move (const Vec3& xyz, const core::vector3df& hpr); + void hit (const Material *m, const Vec3 &normal); + bool isSoccerBall () const; // ------------------------------------------------------------------------ /** Returns the rigid body of this physical object. */ btRigidBody *getBody () { return m_body; } @@ -146,10 +166,15 @@ public: /** Returns true if this object should trigger a rescue in a kart that * hits it. */ bool isCrashReset() const { return m_crash_reset; } + // ------------------------------------------------------------------------ + /** Returns true if this object should cause an explosion if a kart hits + * it. */ bool isExplodeKartObject () const { return m_explode_kart; } + // ------------------------------------------------------------------------ + /** Returns true if this object should cause a kart that touches it to + * be flattened. */ bool isFlattenKartObject () const { return m_flatten_kart; } - void move(const Vec3& xyz, const core::vector3df& hpr); LEAK_CHECK() }; // PhysicalObject diff --git a/src/physics/physics.cpp b/src/physics/physics.cpp index ee15f0617..c90899406 100644 --- a/src/physics/physics.cpp +++ b/src/physics/physics.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -21,6 +21,7 @@ #include "achievements/achievements_manager.hpp" #include "animations/three_d_animation.hpp" #include "karts/abstract_kart.hpp" +#include "graphics/irr_driver.hpp" #include "karts/kart_properties.hpp" #include "karts/rescue_animation.hpp" #include "items/flyable.hpp" @@ -34,6 +35,7 @@ #include "physics/stk_dynamics_world.hpp" #include "physics/triangle_mesh.hpp" #include "tracks/track.hpp" +#include "modes/soccer_world.hpp" // ---------------------------------------------------------------------------- /** Initialise physics. @@ -86,13 +88,13 @@ Physics::~Physics() */ void Physics::addKart(const AbstractKart *kart) { - const btCollisionObjectArray &all_objs = - m_dynamics_world->getCollisionObjectArray(); - for(unsigned int i=0; i<(unsigned int)all_objs.size(); i++) - { - if(btRigidBody::upcast(all_objs[i])== kart->getBody()) - return; - } + const btCollisionObjectArray &all_objs = + m_dynamics_world->getCollisionObjectArray(); + for(unsigned int i=0; i<(unsigned int)all_objs.size(); i++) + { + if(btRigidBody::upcast(all_objs[i])== kart->getBody()) + return; + } m_dynamics_world->addRigidBody(kart->getBody()); m_dynamics_world->addVehicle(kart->getVehicle()); m_dynamics_world->addConstraint(kart->getUprightConstraint()); @@ -188,6 +190,12 @@ void Physics::update(float dt) const KartProperties* kp = kart->getKartProperties(); kart->setSquash(kp->getSquashDuration(), kp->getSquashSlowdown()); } + else if(obj->isSoccerBall()) + { + int kartId = p->getUserPointer(1)->getPointerKart()->getWorldKartId(); + SoccerWorld* soccerWorld = (SoccerWorld*)World::getWorld(); + soccerWorld->setLastKartTohitBall(kartId); + } continue; } @@ -228,6 +236,13 @@ void Physics::update(float dt) // ------------------------------- p->getUserPointer(0)->getPointerFlyable() ->hit(NULL, p->getUserPointer(1)->getPointerPhysicalObject()); + PhysicalObject* obj = p->getUserPointer(1)->getPointerPhysicalObject(); + if(obj->isSoccerBall()) + { + int kartId = p->getUserPointer(0)->getPointerFlyable()->getOwnerId(); + SoccerWorld* soccerWorld = (SoccerWorld*)World::getWorld(); + soccerWorld->setLastKartTohitBall(kartId); + } } else if(p->getUserPointer(1)->is(UserPointer::UP_KART)) @@ -471,6 +486,16 @@ btScalar Physics::solveGroup(btCollisionObject** bodies, int numBodies, .m_normalWorldOnB; kart->crashed(m, normal); } + else if(upB->is(UserPointer::UP_PHYSICAL_OBJECT)) + { + int n = contact_manifold->getContactPoint(0).m_index1; + const Material *m + = n>=0 ? upA->getPointerTriangleMesh()->getMaterial(n) + : NULL; + const btVector3 &normal = contact_manifold->getContactPoint(0) + .m_normalWorldOnB; + upB->getPointerPhysicalObject()->hit(m, normal); + } } // 2) object a is a kart // ===================== @@ -537,6 +562,16 @@ btScalar Physics::solveGroup(btCollisionObject** bodies, int numBodies, m_all_collisions.push_back( upA, contact_manifold->getContactPoint(0).m_localPointA, upB, contact_manifold->getContactPoint(0).m_localPointB); + else if(upB->is(UserPointer::UP_TRACK)) + { + int n = contact_manifold->getContactPoint(0).m_index1; + const Material *m + = n>=0 ? upB->getPointerTriangleMesh()->getMaterial(n) + : NULL; + const btVector3 &normal = contact_manifold->getContactPoint(0) + .m_normalWorldOnB; + upA->getPointerPhysicalObject()->hit(m, normal); + } } else if (upA->is(UserPointer::UP_ANIMATION)) { diff --git a/src/physics/physics.hpp b/src/physics/physics.hpp index 9b160aed0..d933c18c2 100644 --- a/src/physics/physics.hpp +++ b/src/physics/physics.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/physics/stk_dynamics_world.hpp b/src/physics/stk_dynamics_world.hpp index 5be3db306..d0f2f49d0 100644 --- a/src/physics/stk_dynamics_world.hpp +++ b/src/physics/stk_dynamics_world.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Joerg Henrichs +// Copyright (C) 2011-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -24,7 +24,7 @@ class STKDynamicsWorld : public btDiscreteDynamicsWorld { public: - /** The standard constructor which just created a btDiscreteDynamicsWorld. */ + /** The standard constructor which just created a btDiscreteDynamicsWorld. */ STKDynamicsWorld(btDispatcher* dispatcher, btBroadphaseInterface* pairCache, btConstraintSolver* constraintSolver, diff --git a/src/physics/triangle_mesh.cpp b/src/physics/triangle_mesh.cpp index 4b61aea92..83f79dfa4 100644 --- a/src/physics/triangle_mesh.cpp +++ b/src/physics/triangle_mesh.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/physics/triangle_mesh.hpp b/src/physics/triangle_mesh.hpp index 9a2978ef5..118ec2de5 100644 --- a/src/physics/triangle_mesh.hpp +++ b/src/physics/triangle_mesh.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/physics/user_pointer.hpp b/src/physics/user_pointer.hpp index fc8615c09..b9f6612df 100644 --- a/src/physics/user_pointer.hpp +++ b/src/physics/user_pointer.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2007 Joerg Henrichs +// Copyright (C) 2007-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/race/grand_prix_data.cpp b/src/race/grand_prix_data.cpp index 3c1f18cc9..bcb3d2bec 100644 --- a/src/race/grand_prix_data.cpp +++ b/src/race/grand_prix_data.cpp @@ -1,7 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004-2005 Ingo Ruhnke -// Copyright (C) 2006 Joerg Henrichs, Ingo Ruhnke +// Copyright (C) 2004-2013 Ingo Ruhnke +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/race/grand_prix_data.hpp b/src/race/grand_prix_data.hpp index 2004bef9c..074b6534f 100644 --- a/src/race/grand_prix_data.hpp +++ b/src/race/grand_prix_data.hpp @@ -1,7 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004-2006 Ingo Ruhnke -// Copyright (C) 2006 Joerg Henirchs, Ingo Ruhnke +// Copyright (C) 2004-2013 Ingo Ruhnke +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/race/grand_prix_manager.cpp b/src/race/grand_prix_manager.cpp index 72400dcea..cd63f0e14 100644 --- a/src/race/grand_prix_manager.cpp +++ b/src/race/grand_prix_manager.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2008 Joerg Henrichs +// Copyright (C) 2008-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/race/grand_prix_manager.hpp b/src/race/grand_prix_manager.hpp index 5f305c6b6..2afb979b6 100644 --- a/src/race/grand_prix_manager.hpp +++ b/src/race/grand_prix_manager.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2008 Joerg Henrichs +// Copyright (C) 2008-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/race/highscore_manager.cpp b/src/race/highscore_manager.cpp index ab8854694..35ed63c1c 100644 --- a/src/race/highscore_manager.cpp +++ b/src/race/highscore_manager.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/race/highscore_manager.hpp b/src/race/highscore_manager.hpp index 128277bd2..913357245 100644 --- a/src/race/highscore_manager.hpp +++ b/src/race/highscore_manager.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/race/highscores.cpp b/src/race/highscores.cpp index d23314af1..034ca8a87 100644 --- a/src/race/highscores.cpp +++ b/src/race/highscores.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/race/highscores.hpp b/src/race/highscores.hpp index 0e31b6904..b713bc7f0 100644 --- a/src/race/highscores.hpp +++ b/src/race/highscores.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/race/history.cpp b/src/race/history.cpp index b6af7a2ac..435473f44 100644 --- a/src/race/history.cpp +++ b/src/race/history.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/race/history.hpp b/src/race/history.hpp index 71d38a034..02f0570e3 100644 --- a/src/race/history.hpp +++ b/src/race/history.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/race/race_manager.cpp b/src/race/race_manager.cpp index 4f6516bb9..4ec9ef4ca 100644 --- a/src/race/race_manager.cpp +++ b/src/race/race_manager.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team +// Copyright (C) 2006-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -355,8 +355,15 @@ void RaceManager::startNew(bool from_overworld) // ========================================= if(gp != NULL) { - m_track_number = gp->getNextTrack(); - gp->loadKarts(m_kart_status); + if (m_continue_saved_gp) + { + m_track_number = gp->getNextTrack(); + gp->loadKarts(m_kart_status); + } + else + { + gp->remove(); + } } } startNextRace(); @@ -741,7 +748,8 @@ void RaceManager::rerunRace() //----------------------------------------------------------------------------- -void RaceManager::startGP(const GrandPrixData* gp, bool from_overworld) +void RaceManager::startGP(const GrandPrixData* gp, bool from_overworld, + bool continue_saved_gp) { assert(gp != NULL); @@ -749,6 +757,7 @@ void RaceManager::startGP(const GrandPrixData* gp, bool from_overworld) setGrandPrix(*gp); setCoinTarget( 0 ); // Might still be set from a previous challenge race_manager->setupPlayerKartInfo(); + m_continue_saved_gp = continue_saved_gp; setMajorMode(RaceManager::MAJOR_MODE_GRAND_PRIX); startNew(from_overworld); diff --git a/src/race/race_manager.hpp b/src/race/race_manager.hpp index 11524b323..049868971 100644 --- a/src/race/race_manager.hpp +++ b/src/race/race_manager.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team +// Copyright (C) 2006-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -180,7 +180,7 @@ public: //I18N: Game mode case MINOR_MODE_3_STRIKES: return _("3 Strikes Battle"); //I18N: Game mode - case MINOR_MODE_EASTER_EGG: return _("Easter Egg Hunt"); + case MINOR_MODE_EASTER_EGG: return _("Egg Hunt"); //I18N: Game mode case MINOR_MODE_SOCCER: return _("Soccer"); default: assert(false); return NULL; @@ -331,7 +331,7 @@ private: int m_coin_target; bool m_has_time_target; float m_time_target; - int m_goal_target; + int m_goal_target; void startNextRace(); // start a next race @@ -344,6 +344,9 @@ private: bool m_have_kart_last_position_on_overworld; Vec3 m_kart_last_position_on_overworld; + + /** Determines if saved GP should be continued or not*/ + bool m_continue_saved_gp; public: RaceManager(); @@ -391,9 +394,9 @@ public: bool hasTimeTarget() const { return m_has_time_target; } - void setMaxGoal(int maxGoal){ m_goal_target = maxGoal; } + void setMaxGoal(int maxGoal){ m_goal_target = maxGoal; } - int getMaxGoal(){ return m_goal_target; } + int getMaxGoal(){ return m_goal_target; } /** Sort karts and update the m_gp_rank KartStatus member, in preparation * for future calls to RaceManager::getKartGPRank or @@ -628,6 +631,7 @@ public: // The reason for this duplication is that we might want to know // whether to display highscores without creating a World. return m_minor_mode != MINOR_MODE_3_STRIKES && + m_minor_mode != MINOR_MODE_SOCCER && m_minor_mode != MINOR_MODE_FOLLOW_LEADER; } // modeHasHighscore @@ -673,7 +677,8 @@ public: * \brief Higher-level method to start a GP without having to care about * the exact startup sequence */ - void startGP(const GrandPrixData* gp, bool from_overworld); + void startGP(const GrandPrixData* gp, bool from_overworld, + bool continue_saved_gp); /** * \brief Higher-level method to start a GP without having to care about diff --git a/src/replay/replay_base.cpp b/src/replay/replay_base.cpp index b07b98741..692f8358e 100644 --- a/src/replay/replay_base.cpp +++ b/src/replay/replay_base.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/replay/replay_base.hpp b/src/replay/replay_base.hpp index 3151e0922..761689a13 100644 --- a/src/replay/replay_base.hpp +++ b/src/replay/replay_base.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/replay/replay_play.cpp b/src/replay/replay_play.cpp index 8f6aea1fb..ed3534023 100644 --- a/src/replay/replay_play.cpp +++ b/src/replay/replay_play.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/replay/replay_play.hpp b/src/replay/replay_play.hpp index 279041db5..681d0bffb 100644 --- a/src/replay/replay_play.hpp +++ b/src/replay/replay_play.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/replay/replay_recorder.cpp b/src/replay/replay_recorder.cpp index 8d95b1e71..c0e56af93 100644 --- a/src/replay/replay_recorder.cpp +++ b/src/replay/replay_recorder.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/replay/replay_recorder.hpp b/src/replay/replay_recorder.hpp index f53eb1adf..33ea58493 100644 --- a/src/replay/replay_recorder.hpp +++ b/src/replay/replay_recorder.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/addons_screen.cpp b/src/states_screens/addons_screen.cpp index 5bb26cc46..35f6824f5 100644 --- a/src/states_screens/addons_screen.cpp +++ b/src/states_screens/addons_screen.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Lucas Baudin, Joerg Henrichs +// Copyright (C) 2010-2013 Lucas Baudin, Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -136,9 +136,11 @@ void AddonsScreen::init() m_reloading = false; - m_sort_desc = true; + m_sort_desc = false; + m_sort_default = true; + m_sort_col = 0; - getWidget("category")->setDeactivated(); + getWidget("category")->setDeactivated(); if(UserConfigParams::logAddons()) std::cout << "[addons] Using directory <" + file_manager->getAddonsDir() @@ -205,8 +207,8 @@ void AddonsScreen::loadList() GUIEngine::SpinnerWidget* w_filter_date = getWidget("filter_date"); int date_index = w_filter_date->getValue(); - Time::TimeType date = Time::getTimeSinceEpoch(); - date = Time::addInterval(date, + StkTime::TimeType date = StkTime::getTimeSinceEpoch(); + date = StkTime::addInterval(date, -m_date_filters[date_index].year, -m_date_filters[date_index].month, -m_date_filters[date_index].day); @@ -238,7 +240,7 @@ void AddonsScreen::loadList() continue; // Filter by date. - if (date_index != 0 && Time::compareTime(date, addon.getDate()) > 0) + if (date_index != 0 && StkTime::compareTime(date, addon.getDate()) > 0) continue; // Filter by name, designer and description. @@ -267,8 +269,8 @@ void AddonsScreen::loadList() if(addon->isInstalled()) icon = addon->needsUpdate() ? m_icon_needs_update : m_icon_installed; - else - icon = m_icon_not_installed; + else + icon = m_icon_not_installed; core::stringw s; if (addon->getDesigner().size()==0) @@ -368,27 +370,43 @@ void AddonsScreen::loadList() getWidget("category")->setActivated(); if(m_type == "kart") - getWidget("category")->select("tab_kart", - PLAYER_ID_GAME_MASTER); + getWidget("category")->select("tab_kart", + PLAYER_ID_GAME_MASTER); else if(m_type == "track") - getWidget("category")->select("tab_track", - PLAYER_ID_GAME_MASTER); + getWidget("category")->select("tab_track", + PLAYER_ID_GAME_MASTER); else - getWidget("category")->select("tab_update", - PLAYER_ID_GAME_MASTER); + getWidget("category")->select("tab_update", + PLAYER_ID_GAME_MASTER); } // loadList // ---------------------------------------------------------------------------- void AddonsScreen::onColumnClicked(int column_id) { + if (m_sort_col != column_id) + { + m_sort_desc = false; + m_sort_default = false; + } + else + { + if (!m_sort_default) m_sort_desc = !m_sort_desc; + m_sort_default = !m_sort_desc && !m_sort_default; + } + + m_sort_col = column_id; + switch(column_id) { - case 0: Addon::setSortOrder(Addon::SO_NAME); break; - case 1: Addon::setSortOrder(Addon::SO_DATE); break; + case 0: + Addon::setSortOrder(m_sort_default ? Addon::SO_DEFAULT : Addon::SO_NAME); + break; + case 1: + Addon::setSortOrder(m_sort_default ? Addon::SO_DEFAULT : Addon::SO_DATE); + break; default: assert(0); break; } // switch /** \brief Toggle the sort order after column click **/ - m_sort_desc = !m_sort_desc; loadList(); } // onColumnClicked diff --git a/src/states_screens/addons_screen.hpp b/src/states_screens/addons_screen.hpp index d78a2cac8..b59ac1946 100644 --- a/src/states_screens/addons_screen.hpp +++ b/src/states_screens/addons_screen.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Lucas Baudin, Joerg Henrichs +// Copyright (C) 2010-2013 Lucas Baudin, Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -77,6 +77,10 @@ private: /** \brief To check (and set) if sort order is descending **/ bool m_sort_desc; + bool m_sort_default; + + int m_sort_col; + /** List of date filters **/ std::vector m_date_filters; diff --git a/src/states_screens/arenas_screen.cpp b/src/states_screens/arenas_screen.cpp index 51f435640..8d0cb6f2c 100644 --- a/src/states_screens/arenas_screen.cpp +++ b/src/states_screens/arenas_screen.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/arenas_screen.hpp b/src/states_screens/arenas_screen.hpp index bd64dede3..898538e3e 100644 --- a/src/states_screens/arenas_screen.hpp +++ b/src/states_screens/arenas_screen.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/credits.cpp b/src/states_screens/credits.cpp index 2504bee4e..c28b3d079 100644 --- a/src/states_screens/credits.cpp +++ b/src/states_screens/credits.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -18,6 +18,7 @@ #include "states_screens/credits.hpp" #include +#include #include "irrString.h" using irr::core::stringw; diff --git a/src/states_screens/credits.hpp b/src/states_screens/credits.hpp index 8b54aaf6c..7d4e66c57 100644 --- a/src/states_screens/credits.hpp +++ b/src/states_screens/credits.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/cutscene_gui.cpp b/src/states_screens/cutscene_gui.cpp index 5a74aaa01..05c080126 100644 --- a/src/states_screens/cutscene_gui.cpp +++ b/src/states_screens/cutscene_gui.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Marianne Gagnon +// Copyright (C) 2012-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/cutscene_gui.hpp b/src/states_screens/cutscene_gui.hpp index 7b23a16ec..64deaa0aa 100644 --- a/src/states_screens/cutscene_gui.hpp +++ b/src/states_screens/cutscene_gui.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Marianne Gagnon +// Copyright (C) 2012-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/dialogs/add_device_dialog.cpp b/src/states_screens/dialogs/add_device_dialog.cpp index 67606f3d4..1a3226545 100644 --- a/src/states_screens/dialogs/add_device_dialog.cpp +++ b/src/states_screens/dialogs/add_device_dialog.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -178,7 +178,7 @@ GUIEngine::EventPropagation AddDeviceDialog::processEvent { // Remove the previous modal dialog to avoid a warning GUIEngine::ModalDialog::dismiss(); - if(wiimote_manager->askUserToConnectWiimotes() > 0) + if(wiimote_manager->askUserToConnectWiimotes() > 0) ((OptionsScreenInput*)GUIEngine::getCurrentScreen())->rebuildDeviceList(); return GUIEngine::EVENT_BLOCK; diff --git a/src/states_screens/dialogs/add_device_dialog.hpp b/src/states_screens/dialogs/add_device_dialog.hpp index d5b67f81e..033d6cc9f 100644 --- a/src/states_screens/dialogs/add_device_dialog.hpp +++ b/src/states_screens/dialogs/add_device_dialog.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/dialogs/addons_loading.cpp b/src/states_screens/dialogs/addons_loading.cpp index 8b5f5af2d..e1cefaf61 100644 --- a/src/states_screens/dialogs/addons_loading.cpp +++ b/src/states_screens/dialogs/addons_loading.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009-2010 Marianne Gagnon, Joerg Henrichs +// Copyright (C) 2009-2013 Marianne Gagnon, Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/dialogs/addons_loading.hpp b/src/states_screens/dialogs/addons_loading.hpp index a16dd0fdb..93d03ba10 100644 --- a/src/states_screens/dialogs/addons_loading.hpp +++ b/src/states_screens/dialogs/addons_loading.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Lucas Baudin +// Copyright (C) 2010-2013 Lucas Baudin // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/dialogs/confirm_resolution_dialog.cpp b/src/states_screens/dialogs/confirm_resolution_dialog.cpp index dfc0e8f51..36f00240f 100644 --- a/src/states_screens/dialogs/confirm_resolution_dialog.cpp +++ b/src/states_screens/dialogs/confirm_resolution_dialog.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/dialogs/confirm_resolution_dialog.hpp b/src/states_screens/dialogs/confirm_resolution_dialog.hpp index 95e9bd4d1..d4a9e01e5 100644 --- a/src/states_screens/dialogs/confirm_resolution_dialog.hpp +++ b/src/states_screens/dialogs/confirm_resolution_dialog.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/dialogs/custom_video_settings.cpp b/src/states_screens/dialogs/custom_video_settings.cpp index 7c6409132..36b66ab01 100644 --- a/src/states_screens/dialogs/custom_video_settings.cpp +++ b/src/states_screens/dialogs/custom_video_settings.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -67,24 +67,39 @@ void CustomVideoSettingsialog::beforeAddingWidgets() else if (UserConfigParams::m_anisotropic == 8) value = 4; else if (UserConfigParams::m_anisotropic == 16) value = 5; else if (UserConfigParams::m_trilinear) value = 1; - filtering->addLabel( L"Bilinear" ); // 0 - filtering->addLabel( L"Trilinear" ); // 1 - filtering->addLabel( L"Anisotropic x2" ); // 2 - filtering->addLabel( L"Anisotropic x4" ); // 3 - filtering->addLabel( L"Anisotropic x8" ); // 4 - filtering->addLabel( L"Anisotropic x16" ); // 5 + filtering->addLabel( _("Bilinear") ); // 0 + filtering->addLabel( _("Trilinear") ); // 1 + filtering->addLabel( _("Anisotropic x2") ); // 2 + filtering->addLabel( _("Anisotropic x4") ); // 3 + filtering->addLabel( _("Anisotropic x8") ); // 4 + filtering->addLabel( _("Anisotropic x16") ); // 5 filtering->setValue( value ); + /* SpinnerWidget* antialias = getWidget("antialiasing"); antialias->addLabel( _("Disabled") ); // 0 antialias->addLabel( L"x2" ); // 1 antialias->addLabel( L"x4" ); // 2 antialias->addLabel( L"x8" ); // 3 antialias->setValue( UserConfigParams::m_antialiasing ); + */ - getWidget("postprocessing")->setState( UserConfigParams::m_postprocess_enabled ); - getWidget("pixelshaders")->setState( UserConfigParams::m_pixel_shaders ); + SpinnerWidget* ssao = getWidget("ssao"); + ssao->addLabel( _("Disabled") ); // 0 + ssao->addLabel( _("low") ); // 1 + ssao->addLabel( _("high") ); // 2 + ssao->setValue( UserConfigParams::m_ssao ); + + SpinnerWidget* shadows = getWidget("shadows"); + shadows->addLabel( _("Disabled") ); // 0 + shadows->addLabel( _("low") ); // 1 + shadows->addLabel( _("high") ); // 2 + shadows->setValue( UserConfigParams::m_shadows ); + + getWidget("motionblur")->setState( UserConfigParams::m_motionblur ); + getWidget("mlaa")->setState( UserConfigParams::m_mlaa ); + getWidget("pixelshaders")->setState(UserConfigParams::m_pixel_shaders); } // ----------------------------------------------------------------------------- @@ -97,14 +112,20 @@ GUIEngine::EventPropagation CustomVideoSettingsialog::processEvent(const std::st getWidget("anim_gfx")->getState(); UserConfigParams::m_weather_effects = getWidget("weather_gfx")->getState(); - UserConfigParams::m_antialiasing = - getWidget("antialiasing")->getValue(); - UserConfigParams::m_postprocess_enabled = - getWidget("postprocessing")->getState(); + //UserConfigParams::m_antialiasing = + // getWidget("antialiasing")->getValue(); + UserConfigParams::m_motionblur = + getWidget("motionblur")->getState(); UserConfigParams::m_show_steering_animations = getWidget("steering_animations")->getValue(); UserConfigParams::m_pixel_shaders = getWidget("pixelshaders")->getState(); + UserConfigParams::m_mlaa = + getWidget("mlaa")->getState(); + UserConfigParams::m_ssao = + getWidget("ssao")->getValue(); + UserConfigParams::m_shadows = + getWidget("shadows")->getValue(); switch (getWidget("filtering")->getValue()) { diff --git a/src/states_screens/dialogs/custom_video_settings.hpp b/src/states_screens/dialogs/custom_video_settings.hpp index 617c1d1b9..75175c39d 100644 --- a/src/states_screens/dialogs/custom_video_settings.hpp +++ b/src/states_screens/dialogs/custom_video_settings.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/dialogs/enter_player_name_dialog.cpp b/src/states_screens/dialogs/enter_player_name_dialog.cpp index e58ac25fa..1f234d675 100644 --- a/src/states_screens/dialogs/enter_player_name_dialog.cpp +++ b/src/states_screens/dialogs/enter_player_name_dialog.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/dialogs/enter_player_name_dialog.hpp b/src/states_screens/dialogs/enter_player_name_dialog.hpp index b7fb0ca27..deb811a0d 100644 --- a/src/states_screens/dialogs/enter_player_name_dialog.hpp +++ b/src/states_screens/dialogs/enter_player_name_dialog.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/dialogs/gp_info_dialog.cpp b/src/states_screens/dialogs/gp_info_dialog.cpp index 395bc5ee5..37c771ab2 100644 --- a/src/states_screens/dialogs/gp_info_dialog.cpp +++ b/src/states_screens/dialogs/gp_info_dialog.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -19,6 +19,7 @@ #include "audio/sfx_manager.hpp" #include "challenges/unlock_manager.hpp" +#include "config/saved_grand_prix.hpp" #include "guiengine/engine.hpp" #include "guiengine/screen.hpp" #include "guiengine/widgets/button_widget.hpp" @@ -139,11 +140,23 @@ GPInfoDialog::GPInfoDialog(const std::string& gpIdent, const float w, const floa // ---- Start button ButtonWidget* okBtn = new ButtonWidget(); + ButtonWidget* continueBtn = new ButtonWidget(); + + SavedGrandPrix* saved_gp = SavedGrandPrix::getSavedGP( StateManager::get() + ->getActivePlayerProfile(0) + ->getUniqueID(), + gpIdent, + race_manager->getDifficulty(), + race_manager->getNumberOfKarts(), + race_manager->getNumLocalPlayers()); if (gp_ok) { okBtn->m_properties[PROP_ID] = "start"; okBtn->setText(_("Start Grand Prix")); + + continueBtn->m_properties[PROP_ID] = "continue"; + continueBtn->setText(_("Continue")); } else { @@ -152,7 +165,25 @@ GPInfoDialog::GPInfoDialog(const std::string& gpIdent, const float w, const floa okBtn->setBadge(BAD_BADGE); } - okBtn->m_x = m_area.getWidth()/2 - 200; + if (saved_gp && gp_ok) + { + continueBtn->m_x = m_area.getWidth()/2 + 110; + continueBtn->m_y = y2; + continueBtn->m_w = 200; + continueBtn->m_h = m_area.getHeight() - y2 - 15; + continueBtn->setParent(m_irrlicht_window); + m_widgets.push_back(continueBtn); + continueBtn->add(); + continueBtn->getIrrlichtElement()->setTabStop(true); + continueBtn->getIrrlichtElement()->setTabGroup(false); + + okBtn->m_x = m_area.getWidth()/2 - 310; + } + else + { + okBtn->m_x = m_area.getWidth()/2 - 200; + } + okBtn->m_y = y2; okBtn->m_w = 400; okBtn->m_h = m_area.getHeight() - y2 - 15; @@ -163,7 +194,7 @@ GPInfoDialog::GPInfoDialog(const std::string& gpIdent, const float w, const floa okBtn->getIrrlichtElement()->setTabGroup(false); okBtn->setFocusForPlayer( PLAYER_ID_GAME_MASTER ); - + } // ------------------------------------------------------------------------------------------------------ @@ -189,7 +220,7 @@ void GPInfoDialog::onEnterPressedInternal() ModalDialog::dismiss(); // Disable accidentally unlocking of a challenge unlock_manager->getCurrentSlot()->setCurrentChallenge(""); - race_manager->startGP(grand_prix_manager->getGrandPrix(gp_id), false); + race_manager->startGP(grand_prix_manager->getGrandPrix(gp_id), false, false); } // ------------------------------------------------------------------------------------------------------ @@ -201,7 +232,15 @@ GUIEngine::EventPropagation GPInfoDialog::processEvent(const std::string& eventS // Save GP identifier, since dismiss will delete this object. std::string gp_id = m_gp_ident; ModalDialog::dismiss(); - race_manager->startGP(grand_prix_manager->getGrandPrix(gp_id), false); + race_manager->startGP(grand_prix_manager->getGrandPrix(gp_id), false, false); + return GUIEngine::EVENT_BLOCK; + } + if (eventSource == "continue") + { + // Save GP identifier, since dismiss will delete this object. + std::string gp_id = m_gp_ident; + ModalDialog::dismiss(); + race_manager->startGP(grand_prix_manager->getGrandPrix(gp_id), false, true); return GUIEngine::EVENT_BLOCK; } else if (eventSource == "cannot_start") diff --git a/src/states_screens/dialogs/gp_info_dialog.hpp b/src/states_screens/dialogs/gp_info_dialog.hpp index 206f696d6..b8959bf2d 100644 --- a/src/states_screens/dialogs/gp_info_dialog.hpp +++ b/src/states_screens/dialogs/gp_info_dialog.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/dialogs/message_dialog.cpp b/src/states_screens/dialogs/message_dialog.cpp index 10a798d61..4d66c4942 100644 --- a/src/states_screens/dialogs/message_dialog.cpp +++ b/src/states_screens/dialogs/message_dialog.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Marianne Gagnon +// Copyright (C) 2010-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -29,21 +29,22 @@ using namespace GUIEngine; // ------------------------------------------------------------------------------------------------------ -MessageDialog::MessageDialog(irr::core::stringw msg, MessageDialogType type, IConfirmDialogListener* listener, bool own_listener) : +MessageDialog::MessageDialog(const irr::core::stringw &msg, MessageDialogType type, + IConfirmDialogListener* listener, bool own_listener) : ModalDialog(0.6f, 0.6f) { m_msg = msg; doInit(type, listener, own_listener); -} +} // MessageDialog(stringw, type, listener, own_listener) // ------------------------------------------------------------------------------------------------------ -MessageDialog::MessageDialog(irr::core::stringw msg, bool from_queue) : +MessageDialog::MessageDialog(const irr::core::stringw &msg, bool from_queue) : ModalDialog(0.6f, 0.6f) { m_msg = msg; if(!from_queue) load(); -} +} // MessageDialog(stringw) // ------------------------------------------------------------------------------------------------------ @@ -62,7 +63,7 @@ MessageDialog::~MessageDialog() { World::getWorld()->scheduleUnpause(); } -} +} // ~MessageDialog // ------------------------------------------------------------------------------------------------------ @@ -94,6 +95,12 @@ void MessageDialog::doInit(MessageDialogType type, cancelbtn->setText(_("OK")); cancelbtn->setFocusForPlayer(PLAYER_ID_GAME_MASTER); } + else if (type == MessageDialog::MESSAGE_DIALOG_OK_CANCEL) + { + // In case of a OK_CANCEL dialog, change the text from 'Yes' to 'Ok' + ButtonWidget* yesbtn = getWidget("confirm"); + yesbtn->setText(_("OK")); + } } diff --git a/src/states_screens/dialogs/message_dialog.hpp b/src/states_screens/dialogs/message_dialog.hpp index aa8723be5..6bc952b7d 100644 --- a/src/states_screens/dialogs/message_dialog.hpp +++ b/src/states_screens/dialogs/message_dialog.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Marianne Gagnon +// Copyright (C) 2010-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -62,14 +62,16 @@ public: virtual void onDialogUpdate(float dt) {} }; - enum MessageDialogType { MESSAGE_DIALOG_OK, MESSAGE_DIALOG_CONFIRM }; + enum MessageDialogType { MESSAGE_DIALOG_OK, MESSAGE_DIALOG_CONFIRM, + MESSAGE_DIALOG_OK_CANCEL }; private: IConfirmDialogListener* m_listener; bool m_own_listener; irr::core::stringw m_msg; - void doInit(MessageDialogType type, IConfirmDialogListener* listener, bool own_listener); + void doInit(MessageDialogType type, IConfirmDialogListener* listener, + bool own_listener); public: @@ -79,14 +81,14 @@ public: * \param If set to true, 'listener' will be owned by this dialog and deleted * along with the dialog. */ - MessageDialog(irr::core::stringw msg, MessageDialogType type, IConfirmDialogListener* listener, bool delete_listener); + MessageDialog(const irr::core::stringw &msg, MessageDialogType type, + IConfirmDialogListener* listener, bool delete_listener); /** * Variant of MessageDialog where cancelling is not possible (i.e. just shows a message box with OK) * \param msg Message to display in the dialog */ - MessageDialog(irr::core::stringw msg, bool from_queue = false); - + MessageDialog(const irr::core::stringw &msg, bool from_queue = false); ~MessageDialog(); diff --git a/src/states_screens/dialogs/player_info_dialog.cpp b/src/states_screens/dialogs/player_info_dialog.cpp index 6007a7341..c28b3b7e1 100644 --- a/src/states_screens/dialogs/player_info_dialog.cpp +++ b/src/states_screens/dialogs/player_info_dialog.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/dialogs/player_info_dialog.hpp b/src/states_screens/dialogs/player_info_dialog.hpp index 59ff9a361..a4820f236 100644 --- a/src/states_screens/dialogs/player_info_dialog.hpp +++ b/src/states_screens/dialogs/player_info_dialog.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/dialogs/press_a_key_dialog.cpp b/src/states_screens/dialogs/press_a_key_dialog.cpp index 31f266805..5070067c6 100644 --- a/src/states_screens/dialogs/press_a_key_dialog.cpp +++ b/src/states_screens/dialogs/press_a_key_dialog.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/dialogs/press_a_key_dialog.hpp b/src/states_screens/dialogs/press_a_key_dialog.hpp index bb5120607..090cf929a 100644 --- a/src/states_screens/dialogs/press_a_key_dialog.hpp +++ b/src/states_screens/dialogs/press_a_key_dialog.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/dialogs/race_paused_dialog.cpp b/src/states_screens/dialogs/race_paused_dialog.cpp index 3e98e0caa..8da45da27 100644 --- a/src/states_screens/dialogs/race_paused_dialog.cpp +++ b/src/states_screens/dialogs/race_paused_dialog.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Marianne Gagnon +// Copyright (C) 2010-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/dialogs/race_paused_dialog.hpp b/src/states_screens/dialogs/race_paused_dialog.hpp index 74b2e9c62..854e1a1fe 100644 --- a/src/states_screens/dialogs/race_paused_dialog.hpp +++ b/src/states_screens/dialogs/race_paused_dialog.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/dialogs/select_challenge.cpp b/src/states_screens/dialogs/select_challenge.cpp index c8267be1b..4e396e147 100644 --- a/src/states_screens/dialogs/select_challenge.cpp +++ b/src/states_screens/dialogs/select_challenge.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Marianne Gagnon +// Copyright (C) 2012-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -17,6 +17,7 @@ #include "challenges/unlock_manager.hpp" #include "config/user_config.hpp" +#include "graphics/irr_driver.hpp" #include "guiengine/engine.hpp" #include "guiengine/widgets/icon_button_widget.hpp" #include "guiengine/widgets/label_widget.hpp" diff --git a/src/states_screens/dialogs/select_challenge.hpp b/src/states_screens/dialogs/select_challenge.hpp index 4ca8bd79e..2a39a17e1 100644 --- a/src/states_screens/dialogs/select_challenge.hpp +++ b/src/states_screens/dialogs/select_challenge.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Marianne Gagnon +// Copyright (C) 2012-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/dialogs/track_info_dialog.cpp b/src/states_screens/dialogs/track_info_dialog.cpp index 0272be680..46199a888 100644 --- a/src/states_screens/dialogs/track_info_dialog.cpp +++ b/src/states_screens/dialogs/track_info_dialog.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -120,7 +120,8 @@ TrackInfoDialog::TrackInfoDialog(const std::string& ribbonItem, const std::strin // Reverse track - const bool reverse_available = track->reverseAvailable(); + const bool reverse_available = track->reverseAvailable() && + race_manager->getMinorMode() != RaceManager::MINOR_MODE_EASTER_EGG; if (reverse_available) { m_checkbox = getWidget("reverse"); diff --git a/src/states_screens/dialogs/track_info_dialog.hpp b/src/states_screens/dialogs/track_info_dialog.hpp index dd7b768db..3367ac5c2 100644 --- a/src/states_screens/dialogs/track_info_dialog.hpp +++ b/src/states_screens/dialogs/track_info_dialog.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/dialogs/tutorial_message_dialog.cpp b/src/states_screens/dialogs/tutorial_message_dialog.cpp index 91cb26c35..3eda7e0cb 100644 --- a/src/states_screens/dialogs/tutorial_message_dialog.cpp +++ b/src/states_screens/dialogs/tutorial_message_dialog.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Marianne Gagnon +// Copyright (C) 2010-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/dialogs/tutorial_message_dialog.hpp b/src/states_screens/dialogs/tutorial_message_dialog.hpp index 180767627..cd10d0712 100644 --- a/src/states_screens/dialogs/tutorial_message_dialog.hpp +++ b/src/states_screens/dialogs/tutorial_message_dialog.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Marianne Gagnon +// Copyright (C) 2010-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/easter_egg_screen.cpp b/src/states_screens/easter_egg_screen.cpp new file mode 100644 index 000000000..b107fe5bf --- /dev/null +++ b/src/states_screens/easter_egg_screen.cpp @@ -0,0 +1,301 @@ +// SuperTuxKart - a fun racing game with go-kart +// Copyright (C) 2009-2013 Marianne Gagnon +// +// 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 "challenges/unlock_manager.hpp" +#include "graphics/irr_driver.hpp" +#include "guiengine/widget.hpp" +#include "guiengine/widgets/dynamic_ribbon_widget.hpp" +#include "guiengine/widgets/icon_button_widget.hpp" +#include "io/file_manager.hpp" +#include "states_screens/state_manager.hpp" +#include "states_screens/easter_egg_screen.hpp" +#include "states_screens/dialogs/track_info_dialog.hpp" +#include "tracks/track.hpp" +#include "tracks/track_manager.hpp" +#include "utils/translation.hpp" + +#include + +using namespace GUIEngine; +using namespace irr::core; +using namespace irr::video; + +static const char ALL_TRACK_GROUPS_ID[] = "all"; + +DEFINE_SCREEN_SINGLETON( EasterEggScreen ); + +// ----------------------------------------------------------------------------- + +EasterEggScreen::EasterEggScreen() : Screen("easter_egg.stkgui") +{ +} + +// ----------------------------------------------------------------------------- + +void EasterEggScreen::loadedFromFile() +{ +} + +// ----------------------------------------------------------------------------- + +void EasterEggScreen::eventCallback(Widget* widget, const std::string& name, const int playerID) +{ + // -- track selection screen + if (name == "tracks") + { + DynamicRibbonWidget* w2 = dynamic_cast(widget); + if (w2 != NULL) + { + const std::string selection = w2->getSelectionIDString(PLAYER_ID_GAME_MASTER); + if(UserConfigParams::logGUI()) + std::cout << "Clicked on track " << selection.c_str() + << std::endl; + + UserConfigParams::m_last_track = selection; + + if (selection == "random_track") + { + RibbonWidget* tabs = this->getWidget("trackgroups"); + assert( tabs != NULL ); + + if (m_random_track_list.empty()) return; + + std::string track = m_random_track_list.front(); + m_random_track_list.pop_front(); + m_random_track_list.push_back(track); + Track* clickedTrack = track_manager->getTrack( track ); + + + if (clickedTrack != NULL) + { + ITexture* screenshot = + irr_driver->getTexture( clickedTrack->getScreenshotFile(), + "While loading screenshot for track '%s':", + clickedTrack->getFilename() ); + + new TrackInfoDialog(selection, clickedTrack->getIdent(), + translations->fribidize(clickedTrack->getName()), + screenshot, 0.8f, 0.7f); + } + + } + else if (selection == "locked") + { + unlock_manager->playLockSound(); + } + else if (selection == RibbonWidget::NO_ITEM_ID) + { + } + else + { + Track* clickedTrack = track_manager->getTrack(selection); + if (clickedTrack != NULL) + { + ITexture* screenshot = + irr_driver->getTexture( clickedTrack->getScreenshotFile(), + "While loading screenshot for track '%s'", + clickedTrack->getFilename()); + + new TrackInfoDialog(selection, clickedTrack->getIdent(), + translations->fribidize(clickedTrack->getName()), + screenshot, 0.8f, 0.7f); + } + } + } + } + else if (name == "trackgroups") + { + RibbonWidget* tabs = this->getWidget("trackgroups"); + assert( tabs != NULL ); + UserConfigParams::m_last_used_track_group = tabs->getSelectionIDString(0); + buildTrackList(); + } + else if (name == "back") + { + StateManager::get()->escapePressed(); + } +} + +// ----------------------------------------------------------------------------- + +void EasterEggScreen::beforeAddingWidget() +{ + Screen::init(); + // Dynamically add tabs + RibbonWidget* tabs = this->getWidget("trackgroups"); + assert( tabs != NULL ); + + tabs->clearAllChildren(); + + const std::vector& groups = track_manager->getAllTrackGroups(); + const int group_amount = groups.size(); + + if (group_amount > 1) + { + //I18N: name of the tab that will show tracks from all groups + tabs->addTextChild( _("All"), ALL_TRACK_GROUPS_ID ); + } + + // Make group names being picked up by gettext +#define FOR_GETTEXT_ONLY(x) + //I18N: track group name + FOR_GETTEXT_ONLY( _("standard") ) + //I18N: track group name + FOR_GETTEXT_ONLY( _("Add-Ons") ) + + // add others after + for (int n=0; naddTextChild( _(groups[n].c_str()), groups[n] ); + } + + int num_of_arenas=0; + for (unsigned int n=0; ngetNumberOfTracks(); n++) //iterate through tracks to find how many are arenas + { + Track* temp = track_manager->getTrack(n); + if(temp->hasEasterEggs()) + num_of_arenas++; + } + + DynamicRibbonWidget* tracks_widget = this->getWidget("tracks"); + assert( tracks_widget != NULL ); + tracks_widget->setItemCountHint(num_of_arenas); //set the item hint to that number to prevent weird formatting +} + +// ----------------------------------------------------------------------------- + +void EasterEggScreen::init() +{ + DynamicRibbonWidget* tracks_widget = this->getWidget("tracks"); + assert( tracks_widget != NULL ); + + RibbonWidget* tabs = this->getWidget("trackgroups"); + assert( tabs != NULL ); + tabs->select(UserConfigParams::m_last_used_track_group, PLAYER_ID_GAME_MASTER); + + + buildTrackList(); + + // select old track for the game master (if found) + irr_driver->setTextureErrorMessage( + "While loading screenshot in track screen for last track '%s':", + UserConfigParams::m_last_track); + if (!tracks_widget->setSelection(UserConfigParams::m_last_track, + PLAYER_ID_GAME_MASTER, true)) + { + tracks_widget->setSelection(0, PLAYER_ID_GAME_MASTER, true); + } + irr_driver->unsetTextureErrorMessage(); +} + +// ----------------------------------------------------------------------------- + +void EasterEggScreen::buildTrackList() +{ + DynamicRibbonWidget* tracks_widget = this->getWidget("tracks"); + assert( tracks_widget != NULL ); + + RibbonWidget* tabs = this->getWidget("trackgroups"); + assert( tabs != NULL ); + + // Reset track list everytime (accounts for locking changes, etc.) + tracks_widget->clearItems(); + m_random_track_list.clear(); + + const std::string curr_group_name = tabs->getSelectionIDString(0); + + // Build track list + if (curr_group_name == ALL_TRACK_GROUPS_ID) + { + const int trackAmount = track_manager->getNumberOfTracks(); + + for (int n=0; ngetTrack( n ); + if(race_manager->getMinorMode()==RaceManager::MINOR_MODE_EASTER_EGG + && !curr->hasEasterEggs()) + continue; + if (curr->isArena() || curr->isSoccer()) continue; + if (curr->isInternal()) continue; + + if (unlock_manager->getCurrentSlot()->isLocked(curr->getIdent())) + { + tracks_widget->addItem( _("Locked : solve active challenges to gain access to more!"), + "locked", curr->getScreenshotFile(), LOCKED_BADGE, + IconButtonWidget::ICON_PATH_TYPE_ABSOLUTE); + } + else + { + tracks_widget->addItem(translations->fribidize(curr->getName()), curr->getIdent(), + curr->getScreenshotFile(), 0, + IconButtonWidget::ICON_PATH_TYPE_ABSOLUTE ); + m_random_track_list.push_back(curr->getIdent()); + } + } + + } + else + { + const std::vector& curr_group = track_manager->getTracksInGroup( curr_group_name ); + const int trackAmount = curr_group.size(); + + for (int n=0; ngetTrack( curr_group[n] ); + if(race_manager->getMinorMode()==RaceManager::MINOR_MODE_EASTER_EGG + && !curr->hasEasterEggs()) + continue; + if (curr->isArena()) continue; + if (curr->isSoccer()) continue; + if (curr->isInternal()) continue; + + if (unlock_manager->getCurrentSlot()->isLocked(curr->getIdent())) + { + tracks_widget->addItem( _("Locked : solve active challenges to gain access to more!"), + "locked", curr->getScreenshotFile(), LOCKED_BADGE, + IconButtonWidget::ICON_PATH_TYPE_ABSOLUTE); + } + else + { + tracks_widget->addItem(translations->fribidize(curr->getName()), curr->getIdent(), + curr->getScreenshotFile(), 0 /* no badge */, + IconButtonWidget::ICON_PATH_TYPE_ABSOLUTE ); + m_random_track_list.push_back(curr->getIdent()); + } + } + } + + tracks_widget->addItem(_("Random Track"), "random_track", "/gui/track_random.png", + 0 /* no badge */, IconButtonWidget::ICON_PATH_TYPE_RELATIVE); + + tracks_widget->updateItemDisplay(); + std::random_shuffle( m_random_track_list.begin(), m_random_track_list.end() ); +} + +// ----------------------------------------------------------------------------- + +void EasterEggScreen::setFocusOnTrack(const std::string& trackName) +{ + DynamicRibbonWidget* tracks_widget = this->getWidget("tracks"); + assert( tracks_widget != NULL ); + + // only the game master can select tracks, so it's safe to use 'PLAYER_ID_GAME_MASTER' + tracks_widget->setSelection(trackName, PLAYER_ID_GAME_MASTER, true); +} + +// ----------------------------------------------------------------------------- diff --git a/src/states_screens/easter_egg_screen.hpp b/src/states_screens/easter_egg_screen.hpp new file mode 100644 index 000000000..605fa526c --- /dev/null +++ b/src/states_screens/easter_egg_screen.hpp @@ -0,0 +1,61 @@ +// SuperTuxKart - a fun racing game with go-kart +// Copyright (C) 2009-2013 Marianne Gagnon +// +// 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_EASTER_EGG_SCREEN_HPP +#define HEADER_EASTER_EGG_SCREEN_HPP + +#include "guiengine/screen.hpp" +#include + +namespace GUIEngine { class Widget; } + +/** + * \brief screen where the user can select a track + * \ingroup states_screens + */ +class EasterEggScreen : public GUIEngine::Screen, public GUIEngine::ScreenSingleton +{ + friend class GUIEngine::ScreenSingleton; + + EasterEggScreen(); + + /** adds the tracks from the current track group into the tracks ribbon */ + void buildTrackList(); + + std::deque m_random_track_list; + +public: + + /** \brief implement callback from parent class GUIEngine::Screen */ + virtual void loadedFromFile() OVERRIDE; + + /** \brief implement callback from parent class GUIEngine::Screen */ + virtual void eventCallback(GUIEngine::Widget* widget, const std::string& name, + const int playerID) OVERRIDE; + + /** \brief implement callback from parent class GUIEngine::Screen */ + virtual void init() OVERRIDE; + + /** \brief implement callback from parent class GUIEngine::Screen */ + virtual void beforeAddingWidget() OVERRIDE; + + + void setFocusOnTrack(const std::string& trackName); + +}; + +#endif diff --git a/src/states_screens/feature_unlocked.cpp b/src/states_screens/feature_unlocked.cpp index aec1fafe5..dcb56b6ce 100644 --- a/src/states_screens/feature_unlocked.cpp +++ b/src/states_screens/feature_unlocked.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 SuperTuxKart-Team +// Copyright (C) 2010-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -300,15 +300,16 @@ void FeatureUnlockedCutScene::init() 120, 120)); const core::vector3df &sun_pos = core::vector3df( 0, 200, 100.0f ); - m_light = - irr_driver->getSceneManager()->addLightSceneNode(NULL, sun_pos, - video::SColorf(1.0f,1.0f,1.0f), - 10000.0f /* radius */); + m_light = irr_driver->addLight(sun_pos, 10000.0f, 1, 1, 1); #ifdef DEBUG m_light->setName("light"); #endif - m_light->getLightData().DiffuseColor = irr::video::SColorf(1.0f, 1.0f, 1.0f, 1.0f); - m_light->getLightData().SpecularColor = irr::video::SColorf(1.0f, 1.0f, 1.0f, 1.0f); + + if (!irr_driver->isGLSL()) + { + ((scene::ILightSceneNode *) m_light)->getLightData().DiffuseColor = video::SColorf(1.0f, 1.0f, 1.0f, 1.0f); + ((scene::ILightSceneNode *) m_light)->getLightData().SpecularColor = video::SColorf(1.0f, 1.0f, 1.0f, 1.0f); + } const int unlockedStuffCount = m_unlocked_stuff.size(); @@ -330,7 +331,7 @@ void FeatureUnlockedCutScene::init() m_unlocked_stuff[n].m_root_gift_node = kart_model->attachModel(true); kart_model->setAnimation(KartModel::AF_DEFAULT); float susp[4]={0,0,0,0}; - kart_model->update(0.0f, 0.0f, susp); + kart_model->update(0.0f, 0.0f, 0.0f, susp, 0.0f); #ifdef DEBUG m_unlocked_stuff[n].m_root_gift_node->setName("unlocked kart"); diff --git a/src/states_screens/feature_unlocked.hpp b/src/states_screens/feature_unlocked.hpp index 761dca4e6..867825442 100644 --- a/src/states_screens/feature_unlocked.hpp +++ b/src/states_screens/feature_unlocked.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 SuperTuxKart-Team +// Copyright (C) 2010-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -113,7 +113,7 @@ class FeatureUnlockedCutScene : public GUIEngine::Screen, public GUIEngine::Scre irr::scene::IAnimatedMeshSceneNode *m_chest; /** The scene node for the light. */ - irr::scene::ILightSceneNode* m_light; + irr::scene::ISceneNode* m_light; //#define USE_IRRLICHT_BUG_WORKAROUND diff --git a/src/states_screens/grand_prix_lose.cpp b/src/states_screens/grand_prix_lose.cpp index c5ba6ad41..449da86d6 100644 --- a/src/states_screens/grand_prix_lose.cpp +++ b/src/states_screens/grand_prix_lose.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 SuperTuxKart-Team +// Copyright (C) 2010-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -155,11 +155,14 @@ void GrandPrixLose::init() sceneManager->setAmbientLight(video::SColor(255, 120, 120, 120)); const core::vector3df &sun_pos = core::vector3df( 0, 200, 100.0f ); - m_light = irr_driver->getSceneManager()->addLightSceneNode(NULL, sun_pos, - video::SColorf(1.0f,1.0f,1.0f), - 300.0f /* radius */); - m_light->getLightData().DiffuseColor = irr::video::SColorf(1.0f, 1.0f, 1.0f, 1.0f); - m_light->getLightData().SpecularColor = irr::video::SColorf(1.0f, 0.0f, 0.0f, 0.0f); + m_light = irr_driver->addLight(sun_pos, 300.0f, 1, 1, 1); + + if (!irr_driver->isGLSL()) + { + scene::ILightSceneNode *lnode = (scene::ILightSceneNode *) m_light; + lnode->getLightData().DiffuseColor = irr::video::SColorf(1.0f, 1.0f, 1.0f, 1.0f); + lnode->getLightData().SpecularColor = irr::video::SColorf(1.0f, 0.0f, 0.0f, 0.0f); + } } // init // ------------------------------------------------------------------------------------- @@ -340,7 +343,7 @@ void GrandPrixLose::setKarts(std::vector ident_arg) kart_main_node->updateAbsolutePosition(); kart_main_node->setRotation(vector3df(0, 90, 0)); float susp[4]={0,0,0,0}; - kart_model->update(0.0f, 0.0f, susp); + kart_model->update(0.0f, 0.0f, 0.0f, susp, 0.0f); } else { diff --git a/src/states_screens/grand_prix_lose.hpp b/src/states_screens/grand_prix_lose.hpp index ba286aa4d..7395e5ea0 100644 --- a/src/states_screens/grand_prix_lose.hpp +++ b/src/states_screens/grand_prix_lose.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 SuperTuxKart-Team +// Copyright (C) 2010-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -53,7 +53,7 @@ class GrandPrixLose : public GUIEngine::Screen, public GUIEngine::ScreenSingleto irr::scene::ISceneNode* m_sky; irr::scene::ICameraSceneNode* m_camera; - irr::scene::ILightSceneNode* m_light; + irr::scene::ISceneNode* m_light; /** A copy of the kart model for each kart used. */ std::vector m_all_kart_models; diff --git a/src/states_screens/grand_prix_win.cpp b/src/states_screens/grand_prix_win.cpp index c309bf3d1..1aed4ba40 100644 --- a/src/states_screens/grand_prix_win.cpp +++ b/src/states_screens/grand_prix_win.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 SuperTuxKart-Team +// Copyright (C) 2010-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -210,12 +210,16 @@ void GrandPrixWin::init() sceneManager->setAmbientLight(video::SColor(255, 95, 95, 95)); const core::vector3df &sun_pos = core::vector3df( 0, 200, 100.0f ); - m_light = irr_driver->getSceneManager()->addLightSceneNode(NULL, sun_pos, - video::SColorf(0.25f,0.25f,0.25f), - 300.0f /* radius */); - m_light->getLightData().DiffuseColor = irr::video::SColorf(0.25f, 0.25f, 0.25f, 1.0f); - m_light->getLightData().AmbientColor = irr::video::SColorf(0.25f, 0.25f, 0.25f, 1.0f); - m_light->getLightData().SpecularColor = irr::video::SColorf(0.0f, 0.0f, 0.0f, 1.0f); + m_light = irr_driver->addLight(sun_pos, 300.0f, 0.25f, 0.25f, 0.25f); + + m_finish_sound = sfx_manager->quickSound("gp_end"); + if (!irr_driver->isGLSL()) + { + scene::ILightSceneNode *lnode = (scene::ILightSceneNode *) m_light; + lnode->getLightData().DiffuseColor = irr::video::SColorf(0.25f, 0.25f, 0.25f, 1.0f); + lnode->getLightData().AmbientColor = irr::video::SColorf(0.25f, 0.25f, 0.25f, 1.0f); + lnode->getLightData().SpecularColor = irr::video::SColorf(0.0f, 0.0f, 0.0f, 1.0f); + } sfx_manager->quickSound("gp_end"); } // init @@ -254,6 +258,12 @@ void GrandPrixWin::tearDown() delete m_unlocked_label; m_unlocked_label = NULL; } + + if (m_finish_sound != NULL && + m_finish_sound->getStatus() == SFXManager::SFX_PLAYING) + { + m_finish_sound->stop(); + } } // tearDown // ------------------------------------------------------------------------------------- @@ -451,7 +461,7 @@ void GrandPrixWin::setKarts(const std::string idents_arg[3]) m_kart_z[n]) ); kart_main_node->setScale( core::vector3df(0.4f, 0.4f, 0.4f) ); float susp[4]={0,0,0,0}; - kart_model->update(0.0f, 0.0f, susp); + kart_model->update(0.0f, 0.0f, 0.0f, susp, 0.0f); } else { diff --git a/src/states_screens/grand_prix_win.hpp b/src/states_screens/grand_prix_win.hpp index 85fa5afae..8a5ca7e0c 100644 --- a/src/states_screens/grand_prix_win.hpp +++ b/src/states_screens/grand_prix_win.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 SuperTuxKart-Team +// Copyright (C) 2010-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -19,6 +19,7 @@ #ifndef HEADER_GRAND_PRIX_WIN_HPP #define HEADER_GRAND_PRIX_WIN_HPP +#include "audio/sfx_base.hpp" #include "guiengine/screen.hpp" #include "karts/kart_model.hpp" @@ -53,7 +54,7 @@ class GrandPrixWin : public GUIEngine::Screen, public GUIEngine::ScreenSingleton irr::scene::ISceneNode* m_sky; irr::scene::ICameraSceneNode* m_camera; - irr::scene::ILightSceneNode* m_light; + irr::scene::ISceneNode* m_light; GUIEngine::LabelWidget* m_unlocked_label; @@ -67,6 +68,7 @@ class GrandPrixWin : public GUIEngine::Screen, public GUIEngine::ScreenSingleton float m_camera_target_x, m_camera_target_z; MusicInformation* m_music; + SFXBase* m_finish_sound; public: diff --git a/src/states_screens/help_screen_1.cpp b/src/states_screens/help_screen_1.cpp index e54da3e39..a75d43286 100644 --- a/src/states_screens/help_screen_1.cpp +++ b/src/states_screens/help_screen_1.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -58,6 +58,7 @@ void HelpScreen1::eventCallback(Widget* widget, const std::string& name, const i race_manager->setNumKarts( 1 ); race_manager->setTrack( "tutorial" ); race_manager->setDifficulty(RaceManager::DIFFICULTY_EASY); + race_manager->setReverseTrack(false); // Use keyboard 0 by default (FIXME: let player choose?) InputDevice* device = input_manager->getDeviceList()->getKeyboard(0); @@ -106,16 +107,16 @@ void HelpScreen1::init() { Screen::init(); RibbonWidget* w = this->getWidget("category"); - ButtonWidget* tutorial = getWidget("startTutorial"); + ButtonWidget* tutorial = getWidget("startTutorial"); - if (StateManager::get()->getGameState() == GUIEngine::INGAME_MENU) - { - tutorial->setDeactivated(); - } - else - { - tutorial->setActivated(); - } + if (StateManager::get()->getGameState() == GUIEngine::INGAME_MENU) + { + tutorial->setDeactivated(); + } + else + { + tutorial->setActivated(); + } if (w != NULL) w->select( "page1", PLAYER_ID_GAME_MASTER ); } //init diff --git a/src/states_screens/help_screen_1.hpp b/src/states_screens/help_screen_1.hpp index a8750bf35..6677c6001 100644 --- a/src/states_screens/help_screen_1.hpp +++ b/src/states_screens/help_screen_1.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/help_screen_2.cpp b/src/states_screens/help_screen_2.cpp index d5194a754..f3c751474 100644 --- a/src/states_screens/help_screen_2.cpp +++ b/src/states_screens/help_screen_2.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/help_screen_2.hpp b/src/states_screens/help_screen_2.hpp index b773b733e..d7a1d75ad 100644 --- a/src/states_screens/help_screen_2.hpp +++ b/src/states_screens/help_screen_2.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/help_screen_3.cpp b/src/states_screens/help_screen_3.cpp index 8e2813297..35693dd94 100644 --- a/src/states_screens/help_screen_3.cpp +++ b/src/states_screens/help_screen_3.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/help_screen_3.hpp b/src/states_screens/help_screen_3.hpp index 904fb6f38..74a5e2258 100644 --- a/src/states_screens/help_screen_3.hpp +++ b/src/states_screens/help_screen_3.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/help_screen_4.cpp b/src/states_screens/help_screen_4.cpp index fbd75b828..97ddf3809 100644 --- a/src/states_screens/help_screen_4.cpp +++ b/src/states_screens/help_screen_4.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/help_screen_4.hpp b/src/states_screens/help_screen_4.hpp index eb4941549..8142b4540 100644 --- a/src/states_screens/help_screen_4.hpp +++ b/src/states_screens/help_screen_4.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/kart_selection.cpp b/src/states_screens/kart_selection.cpp index 96b9fb194..e32d12b7b 100644 --- a/src/states_screens/kart_selection.cpp +++ b/src/states_screens/kart_selection.cpp @@ -1,6 +1,6 @@ -// // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 +// +// Copyright (C) 2006-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -315,6 +315,11 @@ PlayerKartWidget::PlayerKartWidget(KartSelectionScreen* parent, kart_model.getWheelGraphicsPosition(2) ); m_model_view->addModel( kart_model.getWheelModel(3), kart_model.getWheelGraphicsPosition(3) ); + for(size_t i=0 ; i < kart_model.getSpeedWeightedObjectsCount() ; i++) + { + const SpeedWeightedObject& obj = kart_model.getSpeedWeightedObject(i); + m_model_view->addModel(obj.m_model, obj.m_position); + } m_model_view->setRotateContinuously( 35.0f ); // ---- Kart name label diff --git a/src/states_screens/kart_selection.hpp b/src/states_screens/kart_selection.hpp index a7ed47198..267bedd3d 100644 --- a/src/states_screens/kart_selection.hpp +++ b/src/states_screens/kart_selection.hpp @@ -1,6 +1,6 @@ -// // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 +// +// Copyright (C) 2006-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/main_menu_screen.cpp b/src/states_screens/main_menu_screen.cpp index 1e934d1b0..dcdb47370 100644 --- a/src/states_screens/main_menu_screen.cpp +++ b/src/states_screens/main_menu_screen.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -309,6 +309,7 @@ void MainMenuScreen::eventCallback(Widget* widget, const std::string& name, race_manager->setNumKarts( 1 ); race_manager->setTrack( "tutorial" ); race_manager->setDifficulty(RaceManager::DIFFICULTY_EASY); + race_manager->setReverseTrack(false); // Use keyboard 0 by default (FIXME: let player choose?) InputDevice* device = input_manager->getDeviceList()->getKeyboard(0); diff --git a/src/states_screens/main_menu_screen.hpp b/src/states_screens/main_menu_screen.hpp index 696c7a6bc..5683c7923 100644 --- a/src/states_screens/main_menu_screen.hpp +++ b/src/states_screens/main_menu_screen.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/options_screen_audio.cpp b/src/states_screens/options_screen_audio.cpp index 1b267ca29..5d6de54e0 100644 --- a/src/states_screens/options_screen_audio.cpp +++ b/src/states_screens/options_screen_audio.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/options_screen_audio.hpp b/src/states_screens/options_screen_audio.hpp index 1a4f4380a..2b6468de0 100644 --- a/src/states_screens/options_screen_audio.hpp +++ b/src/states_screens/options_screen_audio.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/options_screen_input.cpp b/src/states_screens/options_screen_input.cpp index d44294465..4a4f74d69 100644 --- a/src/states_screens/options_screen_input.cpp +++ b/src/states_screens/options_screen_input.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -40,6 +40,7 @@ #include #include #include +#include using namespace GUIEngine; diff --git a/src/states_screens/options_screen_input.hpp b/src/states_screens/options_screen_input.hpp index d7dd1fb40..25e9a7e9b 100644 --- a/src/states_screens/options_screen_input.hpp +++ b/src/states_screens/options_screen_input.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/options_screen_input2.cpp b/src/states_screens/options_screen_input2.cpp index cc74b5ec7..e8e49d033 100644 --- a/src/states_screens/options_screen_input2.cpp +++ b/src/states_screens/options_screen_input2.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/options_screen_input2.hpp b/src/states_screens/options_screen_input2.hpp index bfa2f7e8a..5bf3aeab1 100644 --- a/src/states_screens/options_screen_input2.hpp +++ b/src/states_screens/options_screen_input2.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/options_screen_players.cpp b/src/states_screens/options_screen_players.cpp index 8b5044612..5f7ca3832 100644 --- a/src/states_screens/options_screen_players.cpp +++ b/src/states_screens/options_screen_players.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Marianne Gagnon +// Copyright (C) 2010-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/options_screen_players.hpp b/src/states_screens/options_screen_players.hpp index 3261bc402..381be34a2 100644 --- a/src/states_screens/options_screen_players.hpp +++ b/src/states_screens/options_screen_players.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Marianne Gagnon +// Copyright (C) 2010-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/options_screen_ui.cpp b/src/states_screens/options_screen_ui.cpp index 41ce26541..7cc0e7a14 100644 --- a/src/states_screens/options_screen_ui.cpp +++ b/src/states_screens/options_screen_ui.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -125,14 +125,6 @@ void OptionsScreenUI::init() assert( news != NULL ); news->setState( UserConfigParams::m_internet_status ==INetworkHttp::IPERM_ALLOWED ); - CheckBoxWidget* min_gui = getWidget("minimal-racegui"); - assert( min_gui != NULL ); - min_gui->setState( UserConfigParams::m_minimal_race_gui); - if (StateManager::get()->getGameState() == GUIEngine::INGAME_MENU) - min_gui->setDeactivated(); - else - min_gui->setActivated(); - // --- select the right skin in the spinner bool currSkinFound = false; @@ -236,13 +228,6 @@ void OptionsScreenUI::eventCallback(Widget* widget, const std::string& name, con // a race condition can be introduced resulting in a crash). INetworkHttp::get()->startNetworkThread(); } - else if (name=="minimal-racegui") - { - CheckBoxWidget* min_gui = getWidget("minimal-racegui"); - assert( min_gui != NULL ); - UserConfigParams::m_minimal_race_gui = - !UserConfigParams::m_minimal_race_gui; - } else if (name == "language") { ListWidget* list_widget = getWidget("language"); diff --git a/src/states_screens/options_screen_ui.hpp b/src/states_screens/options_screen_ui.hpp index d88eccc2c..91d419413 100644 --- a/src/states_screens/options_screen_ui.hpp +++ b/src/states_screens/options_screen_ui.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/options_screen_video.cpp b/src/states_screens/options_screen_video.cpp index 12331bb1d..cf38c1a4e 100644 --- a/src/states_screens/options_screen_video.cpp +++ b/src/states_screens/options_screen_video.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -45,15 +45,18 @@ using namespace GUIEngine; DEFINE_SCREEN_SINGLETON( OptionsScreenVideo ); // Look-up table for GFX levels -const bool GFX [] = {false, true, true, true, true, true, true, true}; -const int GFX_ANIM_KARTS[] = {0, 0, 1, 2, 2, 2, 2, 2}; -const bool GFX_WEATHER [] = {false, false, false, false, true, true, true, true}; -const int GFX_ANTIALIAS [] = {0, 0, 0, 0, 0, 2, 2, 3}; -const bool GFX_POSTPROCESSING[] = - {false, false, false, false, false, false, true, true}; -const bool GFX_PIXEL_SHADERS[] = - {false, false, false, false, true, true, true, true}; -const int GFX_LEVEL_AMOUNT = 8; +static const bool GFX [] = {false, true, true, true, true, true, true}; +static const int GFX_ANIM_KARTS[] = {0, 1, 2, 2, 2, 2, 2 }; +static const bool GFX_WEATHER [] = {false, false, true, true, true, true, true}; +static const bool GFX_MOTIONBLUR[] = {false, false, false, false, true, true, true}; +static const bool GFX_PIXEL_SHADERS[] = + {false, false, true, true, true, true, true}; +static const bool GFX_MLAA[] = {false, false, false, false, false, true, true}; +static const int GFX_SSAO[] = {0, 0, 0, 1, 1, 1, 2 }; +static const int GFX_SHADOWS[] = {0, 0, 0, 1, 1, 2, 2 }; + + +static const int GFX_LEVEL_AMOUNT = 7; // ---------------------------------------------------------------------------- @@ -102,11 +105,6 @@ void OptionsScreenVideo::init() assert( vsync != NULL ); vsync->setState( UserConfigParams::m_vsync ); - GUIEngine::CheckBoxWidget* fbos = - getWidget("fbos"); - assert( fbos != NULL ); - fbos->setState( UserConfigParams::m_fbo ); - // ---- video modes DynamicRibbonWidget* res = getWidget("resolutions"); @@ -314,8 +312,11 @@ void OptionsScreenVideo::updateGfxSlider() if (UserConfigParams::m_show_steering_animations == GFX_ANIM_KARTS[l]&& UserConfigParams::m_graphical_effects == GFX[l] && UserConfigParams::m_weather_effects == GFX_WEATHER[l] && - UserConfigParams::m_antialiasing == GFX_ANTIALIAS[l] && - UserConfigParams::m_postprocess_enabled == GFX_POSTPROCESSING[l] && + //UserConfigParams::m_antialiasing == GFX_ANTIALIAS[l] && + UserConfigParams::m_motionblur == GFX_MOTIONBLUR[l] && + UserConfigParams::m_mlaa == GFX_MLAA[l] && + UserConfigParams::m_ssao == GFX_SSAO[l] && + UserConfigParams::m_shadows == GFX_SHADOWS[l] && UserConfigParams::m_pixel_shaders == GFX_PIXEL_SHADERS[l]) { gfx->setValue(l+1); @@ -345,17 +346,18 @@ void OptionsScreenVideo::updateTooltip() //I18N: in the graphical options tooltip; // indicates a graphical feature is enabled - core::stringw enabled = _LTR("Enabled"); + const core::stringw enabled = _LTR("Enabled"); //I18N: in the graphical options tooltip; // indicates a graphical feature is disabled - core::stringw disabled = _LTR("Disabled"); + const core::stringw disabled = _LTR("Disabled"); //I18N: if all kart animations are enabled - core::stringw all = _LTR("All"); + const core::stringw all = _LTR("All"); //I18N: if some kart animations are enabled - core::stringw me = _LTR("Me Only"); + const core::stringw me = _LTR("Me Only"); //I18N: if no kart animations are enabled - core::stringw none = _LTR("None"); + const core::stringw none = _LTR("None"); + /* core::stringw antialias_label; switch ((int)UserConfigParams::m_antialiasing) { @@ -368,7 +370,11 @@ void OptionsScreenVideo::updateTooltip() case 3: antialias_label = L"x8"; break; } + */ + //I18N: in graphical options + tooltip = tooltip + L"\n" + _("Pixel shaders : %s", + UserConfigParams::m_pixel_shaders ? enabled : disabled); //I18N: in graphical options tooltip = _("Animated Scenery : %s", UserConfigParams::m_graphical_effects ? enabled : disabled); @@ -381,14 +387,25 @@ void OptionsScreenVideo::updateTooltip() ? all : (UserConfigParams::m_show_steering_animations == 1 ? me : none)); //I18N: in graphical options - tooltip = tooltip + L"\n" + _("Anti-aliasing (requires restart) : %s", - antialias_label); + //tooltip = tooltip + L"\n" + _("Anti-aliasing (requires restart) : %s", + // antialias_label); //I18N: in graphical options - tooltip = tooltip + L"\n" + _("Pixel shaders : %s", - UserConfigParams::m_pixel_shaders ? enabled : disabled); + tooltip = tooltip + L"\n" + _("Motion blur: %s", + UserConfigParams::m_motionblur ? enabled : disabled); //I18N: in graphical options - tooltip = tooltip + L"\n" + _("Post-processing (motion blur) : %s", - UserConfigParams::m_postprocess_enabled ? enabled : disabled); + tooltip = tooltip + L"\n" + _("Anti-aliasing : %s", + UserConfigParams::m_mlaa ? enabled : disabled); + //I18N: in graphical options + tooltip = tooltip + L"\n" + _("Ambient occlusion : %s", + UserConfigParams::m_ssao == 1 ? "low" : UserConfigParams::m_ssao == 2 ? + "high" : disabled); + //I18N: in graphical options + tooltip = tooltip + L"\n" + _("Shadows: %s", + UserConfigParams::m_shadows == 1 ? "low" : UserConfigParams::m_shadows == 2 ? + "high" : disabled); + + + gfx->setTooltip(tooltip); } // updateTooltip @@ -460,9 +477,12 @@ void OptionsScreenVideo::eventCallback(Widget* widget, const std::string& name, UserConfigParams::m_show_steering_animations = GFX_ANIM_KARTS[level-1]; UserConfigParams::m_graphical_effects = GFX[level-1]; UserConfigParams::m_weather_effects = GFX_WEATHER[level-1]; - UserConfigParams::m_antialiasing = GFX_ANTIALIAS[level-1]; - UserConfigParams::m_postprocess_enabled = GFX_POSTPROCESSING[level-1]; + //UserConfigParams::m_antialiasing = GFX_ANTIALIAS[level-1]; + UserConfigParams::m_motionblur = GFX_MOTIONBLUR[level-1]; UserConfigParams::m_pixel_shaders = GFX_PIXEL_SHADERS[level-1]; + UserConfigParams::m_mlaa = GFX_MLAA[level-1]; + UserConfigParams::m_ssao = GFX_SSAO[level-1]; + UserConfigParams::m_shadows = GFX_SHADOWS[level-1]; updateGfxSlider(); } @@ -473,13 +493,6 @@ void OptionsScreenVideo::eventCallback(Widget* widget, const std::string& name, assert( vsync != NULL ); UserConfigParams::m_vsync = vsync->getState(); } - else if (name == "fbos") - { - GUIEngine::CheckBoxWidget* fbos = - getWidget("fbos"); - assert( fbos != NULL ); - UserConfigParams::m_fbo = fbos->getState(); - } else if (name == "rememberWinpos") { CheckBoxWidget* rememberWinpos = getWidget("rememberWinpos"); diff --git a/src/states_screens/options_screen_video.hpp b/src/states_screens/options_screen_video.hpp index de2744358..da868d35a 100644 --- a/src/states_screens/options_screen_video.hpp +++ b/src/states_screens/options_screen_video.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/race_gui.cpp b/src/states_screens/race_gui.cpp index f8f89e93b..f7ea23376 100644 --- a/src/states_screens/race_gui.cpp +++ b/src/states_screens/race_gui.cpp @@ -1,7 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004-2005 Steve Baker -// Copyright (C) 2006 Joerg Henrichs, SuperTuxKart-Team, Steve Baker +// Copyright (C) 2004-2013 Steve Baker +// Copyright (C) 2006-2013 Joerg Henrichs, SuperTuxKart-Team, Steve Baker // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -64,18 +64,9 @@ RaceGUI::RaceGUI() // Marker texture has to be power-of-two for (old) OpenGL compliance m_marker_rendered_size = 2 << ((int) ceil(1.0 + log(32.0 * scaling))); m_marker_ai_size = (int)( 14.0f * scaling); - m_marker_player_size = (int)( 16.0f * scaling); - - if (UserConfigParams::m_minimal_race_gui) - { - m_map_width = (int)(160.0f * scaling); - m_map_height = (int)(160.0f * scaling); - } - else - { - m_map_width = (int)(100.0f * scaling); - m_map_height = (int)(100.0f * scaling); - } + m_marker_player_size = (int)( 16.0f * scaling); + m_map_width = (int)(100.0f * scaling); + m_map_height = (int)(100.0f * scaling); m_map_left = (int)( 10.0f * scaling); m_map_bottom = (int)( 10.0f * scaling); @@ -169,6 +160,8 @@ void RaceGUI::renderGlobal(float dt) { drawGlobalReadySetGo(); } + if(world->getPhase() == World::GOAL_PHASE) + drawGlobalGoal(); // Timer etc. are not displayed unless the game is actually started. if(!world->isRacePhase()) return; @@ -187,13 +180,8 @@ void RaceGUI::renderGlobal(float dt) drawGlobalMiniMap(); - if (!m_is_tutorial && - (UserConfigParams::m_minimal_race_gui == false || world->getIdent() == IDENT_STRIKES)) - { - drawGlobalPlayerIcons(m_map_height); - } - - if(world->getTrack()->isSoccer()) drawScores(); + if (!m_is_tutorial) drawGlobalPlayerIcons(m_map_height); + if(world->getTrack()->isSoccer()) drawScores(); } // renderGlobal //----------------------------------------------------------------------------- @@ -219,9 +207,7 @@ void RaceGUI::renderPlayerView(const Camera *camera, float dt) if(!World::getWorld()->isRacePhase()) return; drawPowerupIcons (kart, viewport, scaling); - - if (UserConfigParams::m_minimal_race_gui == false) - drawSpeedAndEnergy (kart, viewport, scaling); + drawSpeedAndEnergy (kart, viewport, scaling); if (!m_is_tutorial) drawRankLap (kart, viewport); @@ -232,59 +218,56 @@ void RaceGUI::renderPlayerView(const Camera *camera, float dt) //----------------------------------------------------------------------------- void RaceGUI::drawScores() { - SoccerWorld* soccerWorld = (SoccerWorld*)World::getWorld(); - int offsetY = 5; - int offsetX = 5; - gui::ScalableFont* font = GUIEngine::getFont(); - static video::SColor color = video::SColor(255,255,255,255); + SoccerWorld* soccerWorld = (SoccerWorld*)World::getWorld(); + int offsetY = 5; + int offsetX = 5; + gui::ScalableFont* font = GUIEngine::getFont(); + static video::SColor color = video::SColor(255,255,255,255); - //Draw kart icons above score(denoting teams) - irr::video::ITexture *red_team = irr_driver->getTexture( - file_manager->getTextureFile("soccer_ball_red.png")); - irr::video::ITexture *blue_team = irr_driver->getTexture( - file_manager->getTextureFile("soccer_ball_blue.png")); - - core::rect indicatorPos(offsetX-6, offsetY, - offsetX -6 + red_team->getSize().Width/8, - offsetY + red_team->getSize().Height/8); - core::rect sourceRect(core::position2d(0,0), - red_team->getOriginalSize()); - irr_driver->getVideoDriver()->draw2DImage(red_team,indicatorPos,sourceRect, - NULL,NULL,true); - + //Draw kart icons above score(denoting teams) + irr::video::ITexture *red_team = irr_driver->getTexture( + file_manager->getTextureFile("soccer_ball_red.png")); + irr::video::ITexture *blue_team = irr_driver->getTexture( + file_manager->getTextureFile("soccer_ball_blue.png")); + irr::video::ITexture *team_icon; - for(unsigned int i=0; igetNumKarts(); i++){ - int j = soccerWorld->getTeamLeader(i); - if(j < 0) break; + int numLeader = 1; + for(unsigned int i=0; igetNumKarts(); i++){ + int j = soccerWorld->getTeamLeader(i); + if(j < 0) break; - core::rect source(j*m_marker_rendered_size, 0, - (j+1)*m_marker_rendered_size,m_marker_rendered_size); - core::recti position(offsetX, offsetY, - offsetX + 2*m_marker_player_size, offsetY + 2*m_marker_player_size); - irr_driver->getVideoDriver()->draw2DImage(m_marker, position, source, - NULL, NULL, true); - core::stringw score = StringUtils::toWString(soccerWorld->getScore(i)); - int stringWidth = - GUIEngine::getFont()->getDimension(score.c_str()).Width; - int stringHeight = - GUIEngine::getFont()->getDimension(score.c_str()).Height; - core::recti pos(position.UpperLeftCorner.X + 5, - position.LowerRightCorner.Y + offsetY, - position.LowerRightCorner.X, - position.LowerRightCorner.Y + stringHeight); + core::rect source(j*m_marker_rendered_size, 0, + (j+1)*m_marker_rendered_size,m_marker_rendered_size); + core::recti position(offsetX, offsetY, + offsetX + 2*m_marker_player_size, offsetY + 2*m_marker_player_size); + irr_driver->getVideoDriver()->draw2DImage(m_marker, position, source, + NULL, NULL, true); + core::stringw score = StringUtils::toWString(soccerWorld->getScore(i)); + int string_height = + GUIEngine::getFont()->getDimension(score.c_str()).Height; + core::recti pos(position.UpperLeftCorner.X + 5, + position.LowerRightCorner.Y + offsetY, + position.LowerRightCorner.X, + position.LowerRightCorner.Y + string_height); - font->draw(score.c_str(),pos,color); - offsetX += position.LowerRightCorner.X; - } - offsetX = 80; - offsetY = 5; - indicatorPos = core::rect(offsetX, offsetY, - offsetX + blue_team->getSize().Width/8, - offsetY + blue_team->getSize().Height/8); - sourceRect = core::rect (core::position2d(0,0), - blue_team->getOriginalSize()); - irr_driver->getVideoDriver()->draw2DImage(blue_team,indicatorPos,sourceRect, - NULL,NULL,true); + font->draw(score.c_str(),pos,color); + + switch(numLeader) + { + case 1: team_icon = red_team; break; + case 2: team_icon = blue_team; break; + default: break; + } + core::rect indicatorPos(offsetX, offsetY, + offsetX + (int)(m_marker_player_size/1.25f), + offsetY + (int)(m_marker_player_size/1.25f)); + core::rect sourceRect(core::position2d(0,0), + team_icon->getOriginalSize()); + irr_driver->getVideoDriver()->draw2DImage(team_icon,indicatorPos,sourceRect, + NULL,NULL,true); + numLeader++; + offsetX += position.LowerRightCorner.X; + } } //----------------------------------------------------------------------------- /** Displays the racing time on the screen.s @@ -602,11 +585,11 @@ void RaceGUI::drawEnergyMeter(int x, int y, const AbstractKart *kart, } // drawEnergyMeter //----------------------------------------------------------------------------- + void RaceGUI::drawSpeedAndEnergy(const AbstractKart* kart, const core::recti &viewport, const core::vector2df &scaling) { - float minRatio = std::min(scaling.X, scaling.Y); const int SPEEDWIDTH = 128; int meter_width = (int)(SPEEDWIDTH*minRatio); @@ -722,7 +705,14 @@ void RaceGUI::drawSpeedAndEnergy(const AbstractKart* kart, pos.LowerRightCorner.X=(int)(offset.X + 0.8f*meter_width); pos.LowerRightCorner.Y=(int)(offset.X - 0.5f*meter_height); - gui::ScalableFont* font = GUIEngine::getLargeFont(); + gui::ScalableFont* font; + + if (pos.getWidth() > 55) + font = GUIEngine::getLargeFont(); + else if (pos.getWidth() > 40) + font = GUIEngine::getFont(); + else + font = GUIEngine::getSmallFont(); static video::SColor color = video::SColor(255, 255, 255, 255); char str[256]; diff --git a/src/states_screens/race_gui.hpp b/src/states_screens/race_gui.hpp index a159ded1e..12142b1eb 100644 --- a/src/states_screens/race_gui.hpp +++ b/src/states_screens/race_gui.hpp @@ -1,7 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004-2005 Steve Baker -// Copyright (C) 2006 Joerg Henrichs, SuperTuxKart-Team, Steve Baker +// Copyright (C) 2004-2013 Steve Baker +// Copyright (C) 2006-2013 Joerg Henrichs, SuperTuxKart-Team, Steve Baker // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -105,7 +105,7 @@ private: /** Display items that are shown once only (for all karts). */ void drawGlobalMiniMap (); void drawGlobalTimer (); - void drawScores(); + void drawScores(); public: diff --git a/src/states_screens/race_gui_base.cpp b/src/states_screens/race_gui_base.cpp index 5240bd9b2..846024fe7 100644 --- a/src/states_screens/race_gui_base.cpp +++ b/src/states_screens/race_gui_base.cpp @@ -1,7 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004-2005 Steve Baker -// Copyright (C) 2006 Joerg Henrichs, SuperTuxKart-Team, Steve Baker +// Copyright (C) 2004-2013 Steve Baker +// Copyright (C) 2006-2013 Joerg Henrichs, SuperTuxKart-Team, Steve Baker // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -20,21 +20,8 @@ #include "states_screens/race_gui_base.hpp" -#ifdef __APPLE__ -# include -#else -# define _WINSOCKAPI_ -# ifdef WIN32 -# include -# endif -# ifdef ANDROID -# include -# else -# include -# endif -#endif - #include "audio/music_manager.hpp" +#include "graphics/glwrap.hpp" #include "graphics/irr_driver.hpp" #include "graphics/material.hpp" #include "graphics/material_manager.hpp" @@ -69,24 +56,36 @@ RaceGUIBase::RaceGUIBase() m_string_set = _("Set!"); //I18N: as in "ready, set, go", shown at the beginning of the race m_string_go = _("Go!"); + //I18N: Shown when a goal is scored + m_string_goal = _("GOAL!"); // Make the two materials permanent (in case that they are not listed // in the textures/materials.xml file). m_music_icon = material_manager->getMaterial("notes.png", /*full path*/false, /*permanent*/true); + if(!m_music_icon->getTexture()) + Log::fatal("RaceGuiBase", "Can't find 'notes.png' texture, aborting."); + m_plunger_face = material_manager->getMaterial("plungerface.png", /*full path*/false, /*permanent*/true); + if(!m_plunger_face->getTexture()) + Log::fatal("RaceGuiBase", + "Can't find 'plungerface.png' texture, aborting."); + //read frame picture for icons in the mini map. m_icons_frame = material_manager->getMaterial("icons-frame.png", /*full_path*/false, /*permanent*/true); + if(!m_icons_frame->getTexture()) + Log::fatal("RaceGuiBase", + "Can't find 'icons-frame.png' texture, aborting."); + const std::string &guid = file_manager->getGUIDir(); m_gauge_full = irr_driver->getTexture(guid+"gauge_full.png" ); m_gauge_full_bright = irr_driver->getTexture(guid+"gauge_full_bright.png" ); m_gauge_empty = irr_driver->getTexture(guid+"gauge_empty.png"); m_gauge_goal = irr_driver->getTexture(guid+"gauge_goal.png" ); - m_dist_show_overlap = 2; m_icons_inertia = 2; @@ -287,7 +286,6 @@ void RaceGUIBase::drawAllMessages(const AbstractKart* kart, // Draw less important messages first, at the very bottom of the screen // unimportant messages are skipped in multiplayer, they take too much screen space if (race_manager->getNumLocalPlayers() < 2 && - UserConfigParams::m_minimal_race_gui == false && !m_ignore_unimportant_messages) { for (AllMessageType::const_iterator i = m_messages.begin(); @@ -675,6 +673,17 @@ void RaceGUIBase::drawGlobalMusicDescription() NULL, NULL, true); } // drawGlobalMusicDescription +//----------------------------------------------------------------------------- +void RaceGUIBase::drawGlobalGoal() +{ + static video::SColor color = video::SColor(255, 255, 255, 255); + core::rect pos(UserConfigParams::m_width>>1, + UserConfigParams::m_height>>1, + UserConfigParams::m_width>>1, + UserConfigParams::m_height>>1); + gui::IGUIFont* font = GUIEngine::getTitleFont(); + font->draw(m_string_goal.c_str(), pos, color, true, true); +} // ---------------------------------------------------------------------------- /** Draws the ready-set-go message on the screen. */ @@ -716,6 +725,8 @@ void RaceGUIBase::drawGlobalReadySetGo() if (race_manager->getCoinTarget() > 0) font->draw(_("Collect nitro!"), pos, color, true, true); + else if (race_manager->getMinorMode() == RaceManager::MINOR_MODE_FOLLOW_LEADER) + font->draw(_("Follow the leader!"), pos, color, true, true); else font->draw(m_string_go.c_str(), pos, color, true, true); } diff --git a/src/states_screens/race_gui_base.hpp b/src/states_screens/race_gui_base.hpp index 530443bcd..55bce3039 100644 --- a/src/states_screens/race_gui_base.hpp +++ b/src/states_screens/race_gui_base.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Joerg Henrichs +// Copyright (C) 2010-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -127,7 +127,7 @@ private: Material *m_music_icon; /** Translated strings 'ready', 'set', 'go'. */ - core::stringw m_string_ready, m_string_set, m_string_go; + core::stringw m_string_ready, m_string_set, m_string_go, m_string_goal; /** Translated string 'Top %d' displayed every frame. */ core::stringw m_string_top; @@ -198,7 +198,8 @@ protected: const core::recti &viewport, const core::vector2df &scaling); void drawGlobalMusicDescription(); - void drawGlobalReadySetGo (); + void drawGlobalReadySetGo(); + void drawGlobalGoal(); void drawPlungerInFace(const Camera *camera, float dt); /** Instructs the base gui to ignore unimportant messages (like * item messages). diff --git a/src/states_screens/race_gui_overworld.cpp b/src/states_screens/race_gui_overworld.cpp index 3e3a5f2ba..14f86308d 100644 --- a/src/states_screens/race_gui_overworld.cpp +++ b/src/states_screens/race_gui_overworld.cpp @@ -1,7 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004-2005 Steve Baker -// Copyright (C) 2006 Joerg Henrichs, SuperTuxKart-Team, Steve Baker +// Copyright (C) 2004-2013 Steve Baker +// Copyright (C) 2006-2013 Joerg Henrichs, SuperTuxKart-Team, Steve Baker // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/race_gui_overworld.hpp b/src/states_screens/race_gui_overworld.hpp index 039f27209..a2901b52e 100644 --- a/src/states_screens/race_gui_overworld.hpp +++ b/src/states_screens/race_gui_overworld.hpp @@ -1,7 +1,7 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004-2005 Steve Baker -// Copyright (C) 2006 Joerg Henrichs, SuperTuxKart-Team, Steve Baker +// Copyright (C) 2004-2013 Steve Baker +// Copyright (C) 2006-2013 Joerg Henrichs, SuperTuxKart-Team, Steve Baker // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/race_result_gui.cpp b/src/states_screens/race_result_gui.cpp index 5ef1b549b..dab3bc0c0 100644 --- a/src/states_screens/race_result_gui.cpp +++ b/src/states_screens/race_result_gui.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Joerg Henrichs +// Copyright (C) 2010-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -35,6 +35,7 @@ #include "modes/cutscene_world.hpp" #include "modes/demo_world.hpp" #include "modes/overworld.hpp" +#include "modes/soccer_world.hpp" #include "modes/world_with_rank.hpp" #include "race/highscores.hpp" #include "states_screens/feature_unlocked.hpp" @@ -43,6 +44,7 @@ #include "tracks/track.hpp" #include "tracks/track_manager.hpp" #include "utils/string_utils.hpp" +#include DEFINE_SCREEN_SINGLETON( RaceResultGUI ); @@ -79,6 +81,12 @@ void RaceResultGUI::tearDown() { Screen::tearDown(); m_font->setMonospaceDigits(m_was_monospace); + + if (m_finish_sound != NULL && + m_finish_sound->getStatus() == SFXManager::SFX_PLAYING) + { + m_finish_sound->stop(); + } } // tearDown //----------------------------------------------------------------------------- @@ -511,6 +519,8 @@ void RaceResultGUI::onUpdate(float dt, irr::video::IVideoDriver*) */ void RaceResultGUI::renderGlobal(float dt) { + bool isSoccerWorld = race_manager->getMinorMode() == RaceManager::MINOR_MODE_SOCCER; + m_timer += dt; assert(World::getWorld()->getPhase()==WorldStatus::RESULT_DISPLAY_PHASE); unsigned int num_karts = m_all_row_infos.size(); @@ -616,49 +626,54 @@ void RaceResultGUI::renderGlobal(float dt) // Second phase: update X and Y positions for the various animations // ================================================================= float v = 0.9f*UserConfigParams::m_width/m_time_single_scroll; - for(unsigned int i=0; im_x_pos; - float y = ri->m_y_pos; - switch(m_animation_state) + for(unsigned int i=0; i ri->m_start_at) - { // if active - ri->m_x_pos -= dt*v; - if(ri->m_x_posm_x_pos = (float)m_leftmost_column; - x = ri->m_x_pos; - } - break; - case RR_INCREASE_POINTS: - ri->m_current_displayed_points += - dt*race_manager->getPositionScore(1)/m_time_for_points; - if(ri->m_current_displayed_points>ri->m_new_overall_points) + RowInfo *ri = &(m_all_row_infos[i]); + float x = ri->m_x_pos; + float y = ri->m_y_pos; + switch(m_animation_state) { - ri->m_current_displayed_points = - (float)ri->m_new_overall_points; - } - ri->m_new_points -= - dt*race_manager->getPositionScore(1)/m_time_for_points; - if(ri->m_new_points<0) - ri->m_new_points = 0; - break; - case RR_RESORT_TABLE: - x = ri->m_x_pos - - ri->m_radius*sin(m_timer/m_time_rotation*M_PI); - y = ri->m_centre_point - + ri->m_radius*cos(m_timer/m_time_rotation*M_PI); - break; - case RR_WAIT_TILL_END: - break; - } // switch - displayOneEntry((unsigned int)x, (unsigned int)y, i, true); - } // for i + // Both states use the same scrolling: + case RR_INIT: break; // Remove compiler warning + case RR_RACE_RESULT: + case RR_OLD_GP_RESULTS: + if(m_timer > ri->m_start_at) + { // if active + ri->m_x_pos -= dt*v; + if(ri->m_x_posm_x_pos = (float)m_leftmost_column; + x = ri->m_x_pos; + } + break; + case RR_INCREASE_POINTS: + ri->m_current_displayed_points += + dt*race_manager->getPositionScore(1)/m_time_for_points; + if(ri->m_current_displayed_points>ri->m_new_overall_points) + { + ri->m_current_displayed_points = + (float)ri->m_new_overall_points; + } + ri->m_new_points -= + dt*race_manager->getPositionScore(1)/m_time_for_points; + if(ri->m_new_points<0) + ri->m_new_points = 0; + break; + case RR_RESORT_TABLE: + x = ri->m_x_pos + - ri->m_radius*sin(m_timer/m_time_rotation*M_PI); + y = ri->m_centre_point + + ri->m_radius*cos(m_timer/m_time_rotation*M_PI); + break; + case RR_WAIT_TILL_END: + break; + } // switch + displayOneEntry((unsigned int)x, (unsigned int)y, i, true); + } // for i + } + else + displaySoccerResults(); // Display highscores if (race_manager->getMajorMode() != RaceManager::MAJOR_MODE_GRAND_PRIX || @@ -760,22 +775,24 @@ void RaceResultGUI::displayOneEntry(unsigned int x, unsigned int y, core::recti source_rect(core::vector2di(0,0), ri->m_kart_icon->getSize()); core::recti dest_rect(current_x, y, - current_x+m_width_icon, y+m_width_icon); + current_x+m_width_icon, y+m_width_icon); irr_driver->getVideoDriver()->draw2DImage(ri->m_kart_icon, dest_rect, - source_rect, NULL, NULL, - true); + source_rect, NULL, NULL, + true); } - + current_x += m_width_icon + m_width_column_space; // Draw the name // ------------- + core::recti pos_name(current_x, y, - UserConfigParams::m_width, y+m_distance_between_rows); + UserConfigParams::m_width, y+m_distance_between_rows); m_font->draw(ri->m_kart_name, pos_name, color, false, false, NULL, - true /* ignoreRTL */); + true /* ignoreRTL */); current_x += m_width_kart_name + m_width_column_space; + // Draw the time except in FTL mode // -------------------------------- if(race_manager->getMinorMode()!=RaceManager::MINOR_MODE_FOLLOW_LEADER) @@ -819,9 +836,147 @@ void RaceResultGUI::displayOneEntry(unsigned int x, unsigned int y, m_font->draw(point_inc_string, dest_rect, color, false, false, NULL, true /* ignoreRTL */); } - } // displayOneEntry +//----------------------------------------------------------------------------- +void RaceResultGUI::displaySoccerResults() +{ + + //Draw win text + core::stringw resultText; + static video::SColor color = video::SColor(255, 255, 255, 255); + gui::IGUIFont* font = GUIEngine::getTitleFont(); + int currX = UserConfigParams::m_width/2; + RowInfo *ri = &(m_all_row_infos[0]); + int currY = (int)ri->m_y_pos; + SoccerWorld* soccerWorld = (SoccerWorld*)World::getWorld(); + int teamScore[2] = {soccerWorld->getScore(0), soccerWorld->getScore(1)}; + + GUIEngine::Widget *table_area = getWidget("result-table"); + int height = table_area->m_h + table_area->m_y; + + if(teamScore[0] > teamScore[1]) + { + resultText = _("Red Team Wins"); + } + else if(teamScore[1] > teamScore[0]) + { + resultText = _("Blue Team Wins"); + } + else + { + //Cannot really happen now. Only in time limited matches. + resultText = _("It's a draw"); + } + core::rect pos(currX, currY, currX, currY); + font->draw(resultText.c_str(), pos, color, true, true); + + core::dimension2du rect = m_font->getDimension(resultText.c_str()); + + //Draw team scores: + currY += rect.Height; + currX /= 2; + irr::video::ITexture* redTeamIcon = irr_driver->getTexture( + file_manager->getTextureFile("soccer_ball_red.png")); + irr::video::ITexture* blueTeamIcon = irr_driver->getTexture( + file_manager->getTextureFile("soccer_ball_blue.png")); + + core::recti sourceRect(core::vector2di(0,0), redTeamIcon->getSize()); + core::recti destRect(currX, currY, currX+redTeamIcon->getSize().Width/2, + currY+redTeamIcon->getSize().Height/2); + irr_driver->getVideoDriver()->draw2DImage(redTeamIcon, destRect,sourceRect, + NULL,NULL, true); + currX += UserConfigParams::m_width/2 - redTeamIcon->getSize().Width/2; + destRect = core::recti(currX, currY, currX+redTeamIcon->getSize().Width/2, + currY+redTeamIcon->getSize().Height/2); + irr_driver->getVideoDriver()->draw2DImage(blueTeamIcon,destRect,sourceRect, + NULL, NULL, true); + + resultText = StringUtils::toWString(teamScore[1]); + rect = m_font->getDimension(resultText.c_str()); + currX += redTeamIcon->getSize().Width/4; + currY += redTeamIcon->getSize().Height/2 + rect.Height/4; + pos = core::rect(currX, currY, currX, currY); + color = video::SColor(255,255,255,255); + font->draw(resultText.c_str(), pos, color, true, false); + + currX -= UserConfigParams::m_width/2 - redTeamIcon->getSize().Width/2; + resultText = StringUtils::toWString(teamScore[0]); + pos = core::rect(currX,currY,currX,currY); + font->draw(resultText.c_str(), pos, color, true, false); + + int centerX = UserConfigParams::m_width/2; + pos = core::rect(centerX, currY, centerX, currY); + font->draw("-", pos, color, true, false); + + //Draw goal scorers: + //The red scorers: + currY += rect.Height/2 + rect.Height/4; + font = GUIEngine::getSmallFont(); + std::vector scorers = soccerWorld->getScorers(0); + std::vector scoreTimes = soccerWorld->getScoreTimes(0); + irr::video::ITexture* scorerIcon; + + int prevY = currY; + for(unsigned int i=0; igetKart(scorers.at(i))-> + getKartProperties()->getName(); + resultText.append(" "); + resultText.append(StringUtils::timeToString(scoreTimes.at(i)).c_str()); + rect = m_font->getDimension(resultText.c_str()); + + if(height-prevY < ((short)scorers.size()+1)*(short)rect.Height) + currY += (height-prevY)/((short)scorers.size()+1); + else + currY += rect.Height; + + if(currY > height) break; + + pos = core::rect(currX,currY,currX,currY); + font->draw(resultText,pos, color, true, false); + scorerIcon = soccerWorld->getKart(scorers.at(i))-> + getKartProperties()->getIconMaterial()->getTexture(); + sourceRect = core::recti(core::vector2di(0,0), scorerIcon->getSize()); + irr::u32 offsetX = GUIEngine::getFont()->getDimension(resultText.c_str()).Width/2; + destRect = core::recti(currX-offsetX-30, currY, currX-offsetX, currY+ 30); + irr_driver->getVideoDriver()->draw2DImage(scorerIcon, destRect, sourceRect, + NULL, NULL, true); + } + + //The blue scorers: + currY = prevY; + currX += UserConfigParams::m_width/2 - redTeamIcon->getSize().Width/2; + scorers = soccerWorld->getScorers(1); + scoreTimes = soccerWorld->getScoreTimes(1); + for(unsigned int i=0; igetKart(scorers.at(i))-> + getKartProperties()->getName(); + resultText.append(" "); + resultText.append(StringUtils::timeToString(scoreTimes.at(i)).c_str()); + rect = m_font->getDimension(resultText.c_str()); + + if(height-prevY < ((short)scorers.size()+1)*(short)rect.Height) + currY += (height-prevY)/((short)scorers.size()+1); + else + currY += rect.Height; + + if(currY > height) break; + + pos = core::rect(currX,currY,currX,currY); + font->draw(resultText,pos, color, true, false); + scorerIcon = soccerWorld->getKart(scorers.at(i))-> + getKartProperties()->getIconMaterial()->getTexture(); + sourceRect = core::recti(core::vector2di(0,0), scorerIcon->getSize()); + irr::u32 offsetX = GUIEngine::getFont()->getDimension(resultText.c_str()).Width/2; + + destRect = core::recti(currX-offsetX-30, currY, currX-offsetX, currY+ 30); + irr_driver->getVideoDriver()->draw2DImage(scorerIcon, destRect, sourceRect, + NULL, NULL, true); + } +} + //----------------------------------------------------------------------------- void RaceResultGUI::clearHighscores() diff --git a/src/states_screens/race_result_gui.hpp b/src/states_screens/race_result_gui.hpp index e796a3d35..0a75fdef1 100644 --- a/src/states_screens/race_result_gui.hpp +++ b/src/states_screens/race_result_gui.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Joerg Henrichs +// Copyright (C) 2010-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -109,6 +109,8 @@ private: #endif }; // Rowinfo + /** The team icons. */ + std::vector m_all_row_infos; /** Time to wait till the next row starts to be animated. */ @@ -194,6 +196,7 @@ private: void displayGPProgress(); void cleanupGPProgress(); void displayHighScores(); + void displaySoccerResults(); public: RaceResultGUI(); diff --git a/src/states_screens/race_setup_screen.cpp b/src/states_screens/race_setup_screen.cpp index 0f2a26430..a0add043a 100644 --- a/src/states_screens/race_setup_screen.cpp +++ b/src/states_screens/race_setup_screen.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -19,9 +19,11 @@ #include "guiengine/widgets/dynamic_ribbon_widget.hpp" #include "guiengine/widgets/ribbon_widget.hpp" #include "guiengine/widgets/spinner_widget.hpp" +#include "input/input_manager.hpp" #include "io/file_manager.hpp" #include "race/race_manager.hpp" #include "states_screens/arenas_screen.hpp" +#include "states_screens/easter_egg_screen.hpp" #include "states_screens/soccer_setup_screen.hpp" #include "states_screens/state_manager.hpp" #include "states_screens/tracks_screen.hpp" @@ -120,7 +122,7 @@ void RaceSetupScreen::eventCallback(Widget* widget, const std::string& name, con race_manager->setMinorMode(RaceManager::MINOR_MODE_EASTER_EGG); UserConfigParams::m_game_mode = CONFIG_CODE_EASTER; race_manager->setNumKarts( race_manager->getNumLocalPlayers() ); // no AI karts; - StateManager::get()->pushScreen( TracksScreen::getInstance() ); + StateManager::get()->pushScreen( EasterEggScreen::getInstance() ); } else if (selectedMode == IDENT_SOCCER) { @@ -222,6 +224,7 @@ void RaceSetupScreen::onGameModeChanged() void RaceSetupScreen::init() { Screen::init(); + input_manager->setMasterPlayerOnly(true); RibbonWidget* w = getWidget("difficulty"); assert( w != NULL ); @@ -288,6 +291,7 @@ void RaceSetupScreen::init() } #ifdef ENABLE_SOCCER_MODE + if (race_manager->getNumLocalPlayers() > 1 || UserConfigParams::m_artist_debug_mode) { irr::core::stringw name5 = irr::core::stringw( RaceManager::getNameOf(RaceManager::MINOR_MODE_SOCCER)) + L"\n"; @@ -298,11 +302,12 @@ void RaceSetupScreen::init() #define ENABLE_EASTER_EGG_MODE #ifdef ENABLE_EASTER_EGG_MODE + if(race_manager->getNumLocalPlayers() == 1) { irr::core::stringw name1 = irr::core::stringw( RaceManager::getNameOf(RaceManager::MINOR_MODE_EASTER_EGG)) + L"\n"; //FIXME: avoid duplicating descriptions from the help menu! - name1 += _("Find all Easter Eggs"); + name1 += _("Explore tracks to find all hidden eggs"); w2->addItem( name1, IDENT_EASTER, RaceManager::getIconOf(RaceManager::MINOR_MODE_EASTER_EGG)); diff --git a/src/states_screens/race_setup_screen.hpp b/src/states_screens/race_setup_screen.hpp index 4b35e428e..95e61e914 100644 --- a/src/states_screens/race_setup_screen.hpp +++ b/src/states_screens/race_setup_screen.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/soccer_setup_screen.cpp b/src/states_screens/soccer_setup_screen.cpp index 8805236de..5b7f938ec 100644 --- a/src/states_screens/soccer_setup_screen.cpp +++ b/src/states_screens/soccer_setup_screen.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2013 Lionel Fuentes +// Copyright (C) 2013-2013 Lionel Fuentes // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -23,6 +23,7 @@ #include "states_screens/arenas_screen.hpp" #include "guiengine/widgets/button_widget.hpp" #include "guiengine/widgets/spinner_widget.hpp" +#include "guiengine/widgets/check_box_widget.hpp" #include "guiengine/widgets/label_widget.hpp" #include "guiengine/widgets/model_view_widget.hpp" #include "guiengine/scalable_font.hpp" @@ -56,12 +57,31 @@ void SoccerSetupScreen::eventCallback(Widget* widget, const std::string& name, c if(name == "continue") { StateManager::get()->pushScreen( ArenasScreen::getInstance() ); - race_manager->setMaxGoal(getWidget("goalamount")->getValue()); + if(getWidget("goalamount")->isActivated()) + race_manager->setMaxGoal(getWidget("goalamount")->getValue()); + else + race_manager->setTimeTarget((float)getWidget("timeamount")->getValue()*60); + + input_manager->setMasterPlayerOnly(true); } else if (name == "back") { StateManager::get()->escapePressed(); } + else if(name == "time_enabled") + { + CheckBoxWidget* timeEnabled = dynamic_cast(widget); + if(timeEnabled->getState()) + { + getWidget("goalamount")->setDeactivated(); + getWidget("timeamount")->setActivated(); + } + else + { + getWidget("timeamount")->setDeactivated(); + getWidget("goalamount")->setActivated(); + } + } } // ----------------------------------------------------------------------------- @@ -136,10 +156,18 @@ void SoccerSetupScreen::beforeAddingWidget() void SoccerSetupScreen::init() { Screen::init(); + + if (UserConfigParams::m_num_goals <= 0) + UserConfigParams::m_num_goals = 3; - // TODO: remember in config.xml the last number of goals SpinnerWidget* goalamount = getWidget("goalamount"); - goalamount->setValue(3); + goalamount->setValue(UserConfigParams::m_num_goals); + goalamount->setDeactivated(); + + SpinnerWidget* timeAmount = getWidget("timeamount"); + timeAmount->setValue(timeAmount->getMin()); + + CheckBoxWidget* timeEnabled = getWidget("time_enabled"); // Set focus on "continue" ButtonWidget* bt_continue = getWidget("continue"); @@ -147,8 +175,13 @@ void SoccerSetupScreen::init() bt_continue->setDeactivated(); // We need players to be able to choose their teams - input_manager->getDeviceList()->setAssignMode(ASSIGN); + //~ input_manager->getDeviceList()->setAssignMode(ASSIGN); input_manager->setMasterPlayerOnly(false); + + // This flag will cause that a 'fire' event will be mapped to 'select' (if + // 'fire' is not assigned to a GUI event). This is done to support the old + // way of player joining by pressing 'fire' instead of 'select'. + input_manager->getDeviceList()->mapFireToSelect(true); } // ----------------------------------------------------------------------------- @@ -156,6 +189,11 @@ void SoccerSetupScreen::tearDown() { Widget* central_div = getWidget("central_div"); + // Reset the 'map fire to select' option of the device manager + input_manager->getDeviceList()->mapFireToSelect(false); + + UserConfigParams::m_num_goals = getWidget("goalamount")->getValue(); + // Remove all ModelViewWidgets we created manually PtrVector& children = central_div->getChildren(); for(int i = children.size()-1 ; i >= 0 ; i--) @@ -175,6 +213,7 @@ GUIEngine::EventPropagation SoccerSetupScreen::filterActions( PlayerAction acti Input::InputType type, int playerId) { + ButtonWidget* bt_continue = getWidget("continue"); GUIEngine::EventPropagation result = EVENT_LET; SoccerTeam team_switch = SOCCER_TEAM_NONE; int nb_players = m_kart_view_info.size(); @@ -182,46 +221,94 @@ GUIEngine::EventPropagation SoccerSetupScreen::filterActions( PlayerAction acti switch(action) { case PA_MENU_LEFT: - team_switch = SOCCER_TEAM_RED; + if (bt_continue->isFocusedForPlayer(PLAYER_ID_GAME_MASTER) && + m_kart_view_info[playerId].confirmed == false) + { + team_switch = SOCCER_TEAM_RED; + + for(int i=0 ; i < nb_players ; i++) + { + m_kart_view_info[i].view->unsetBadge(BAD_BADGE); + } + } break; case PA_MENU_RIGHT: - team_switch = SOCCER_TEAM_BLUE; + if (bt_continue->isFocusedForPlayer(PLAYER_ID_GAME_MASTER) && + m_kart_view_info[playerId].confirmed == false) + { + team_switch = SOCCER_TEAM_BLUE; + + for(int i=0 ; i < nb_players ; i++) + { + m_kart_view_info[i].view->unsetBadge(BAD_BADGE); + } + } + break; + case PA_MENU_UP: + if (playerId != PLAYER_ID_GAME_MASTER) + result = EVENT_BLOCK; + break; + case PA_MENU_DOWN: + if (playerId != PLAYER_ID_GAME_MASTER) + result = EVENT_BLOCK; break; case PA_MENU_SELECT: { + if (!bt_continue->isFocusedForPlayer(PLAYER_ID_GAME_MASTER) || areAllKartsConfirmed()) + return result; + + if (getNumConfirmedKarts() > nb_players-2 && + (getNumKartsInTeam(SOCCER_TEAM_RED) == 0 || + getNumKartsInTeam(SOCCER_TEAM_BLUE) == 0)) + { + if (!m_kart_view_info[playerId].confirmed) + { + sfx_manager->quickSound( "anvil" ); + m_kart_view_info[playerId].view->setBadge(BAD_BADGE); + } + return EVENT_BLOCK; + } + // Confirm team selection for(int i=0 ; i < nb_players ; i++) { - if(m_kart_view_info[i].local_player_id == playerId) + if(m_kart_view_info[i].local_player_id == playerId && + m_kart_view_info[i].confirmed == false) { m_kart_view_info[i].confirmed = true; m_kart_view_info[i].view->setRotateTo( KART_CONFIRMATION_TARGET_ANGLE, KART_CONFIRMATION_ROTATION_SPEED ); - result = EVENT_BLOCK; + m_kart_view_info[i].view->setBadge(OK_BADGE); + sfx_manager->quickSound( "wee" ); break; } } + result = EVENT_BLOCK; break; } case PA_MENU_CANCEL: { + if (playerId != PLAYER_ID_GAME_MASTER) result = EVENT_BLOCK; + if (!bt_continue->isFocusedForPlayer(PLAYER_ID_GAME_MASTER)) + return result; + // Un-confirm team selection - // TODO: shouldn't trigger quitting the screen... for(int i=0 ; i < nb_players ; i++) { if(m_kart_view_info[i].local_player_id == playerId) { m_kart_view_info[i].confirmed = false; m_kart_view_info[i].view->setRotateContinuously( KART_CONTINUOUS_ROTATION_SPEED ); - result = EVENT_BLOCK; - break; + m_kart_view_info[i].view->unsetBadge(OK_BADGE); } + m_kart_view_info[i].view->unsetBadge(BAD_BADGE); } + result = EVENT_BLOCK; break; } default: break; } - + if(team_switch != SOCCER_TEAM_NONE) // A player wants to change his team? { // Find the corresponding kart view, update its team and update the layout @@ -234,17 +321,15 @@ GUIEngine::EventPropagation SoccerSetupScreen::filterActions( PlayerAction acti break; m_kart_view_info[i].team = team_switch; updateKartViewsLayout(); - result = EVENT_BLOCK; break; } } } // Update "continue" button state - ButtonWidget* bt_continue = getWidget("continue"); if(areAllKartsConfirmed()) { - bt_continue->setFocusForPlayer(PLAYER_ID_GAME_MASTER); + //~ bt_continue->setFocusForPlayer(PLAYER_ID_GAME_MASTER); bt_continue->setActivated(); for(int i=0 ; i < nb_players ; i++) @@ -272,6 +357,30 @@ bool SoccerSetupScreen::areAllKartsConfirmed() const return all_confirmed; } +int SoccerSetupScreen::getNumKartsInTeam(int team) +{ + int karts_in_team = 0; + int nb_players = m_kart_view_info.size(); + for(int i=0 ; i < nb_players ; i++) + { + if(m_kart_view_info[i].team == team) + karts_in_team++; + } + return karts_in_team; +} + +int SoccerSetupScreen::getNumConfirmedKarts() +{ + int confirmed_karts = 0; + int nb_players = m_kart_view_info.size(); + for(int i=0 ; i < nb_players ; i++) + { + if(m_kart_view_info[i].confirmed == true) + confirmed_karts++; + } + return confirmed_karts; +} + void SoccerSetupScreen::updateKartViewsLayout() { Widget* central_div = getWidget("central_div"); diff --git a/src/states_screens/soccer_setup_screen.hpp b/src/states_screens/soccer_setup_screen.hpp index 0934cd8bf..ae317f943 100644 --- a/src/states_screens/soccer_setup_screen.hpp +++ b/src/states_screens/soccer_setup_screen.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2013 Lionel Fuentes +// Copyright (C) 2013-2013 Lionel Fuentes // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -72,6 +72,8 @@ public: private: bool areAllKartsConfirmed() const; + int getNumKartsInTeam(int team); + int getNumConfirmedKarts(); void updateKartViewsLayout(); }; diff --git a/src/states_screens/state_manager.cpp b/src/states_screens/state_manager.cpp index 6fa9733f1..5d5de01dd 100644 --- a/src/states_screens/state_manager.cpp +++ b/src/states_screens/state_manager.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/state_manager.hpp b/src/states_screens/state_manager.hpp index abd1f1663..b101da7a6 100644 --- a/src/states_screens/state_manager.hpp +++ b/src/states_screens/state_manager.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -107,9 +107,9 @@ public: PlayerProfile* getProfile() { #ifdef DEBUG - assert(m_magic_number == 0xAC1EF1AE); + assert(m_magic_number == 0xAC1EF1AE); #endif - return m_player; + return m_player; } // getProfile // -------------------------------------------------------------------- @@ -117,9 +117,9 @@ public: const PlayerProfile* getConstProfile() const { #ifdef DEBUG - assert(m_magic_number == 0xAC1EF1AE); + assert(m_magic_number == 0xAC1EF1AE); #endif - return m_player; + return m_player; } // getConstProfile // -------------------------------------------------------------------- @@ -142,9 +142,9 @@ public: int getID() const { #ifdef DEBUG - assert(m_magic_number == 0xAC1EF1AE); + assert(m_magic_number == 0xAC1EF1AE); #endif - return m_id; + return m_id; } // getID // -------------------------------------------------------------------- @@ -153,9 +153,9 @@ public: InputDevice* getDevice() const { #ifdef DEBUG - assert(m_magic_number == 0xAC1EF1AE); + assert(m_magic_number == 0xAC1EF1AE); #endif - return m_device; + return m_device; } // getDevice // -------------------------------------------------------------------- @@ -166,9 +166,9 @@ public: void setKart(AbstractKart *kart) { #ifdef DEBUG - assert(m_magic_number == 0xAC1EF1AE); + assert(m_magic_number == 0xAC1EF1AE); #endif - m_kart = kart; + m_kart = kart; } // setKart // -------------------------------------------------------------------- @@ -176,7 +176,7 @@ public: AbstractKart* getKart() { #ifdef DEBUG - assert(m_magic_number == 0xAC1EF1AE); + assert(m_magic_number == 0xAC1EF1AE); #endif return m_kart; } // getKart diff --git a/src/states_screens/story_mode_lobby.cpp b/src/states_screens/story_mode_lobby.cpp index 1345d51b4..64376d370 100644 --- a/src/states_screens/story_mode_lobby.cpp +++ b/src/states_screens/story_mode_lobby.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/story_mode_lobby.hpp b/src/states_screens/story_mode_lobby.hpp index 756273137..a38b83c24 100644 --- a/src/states_screens/story_mode_lobby.hpp +++ b/src/states_screens/story_mode_lobby.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/states_screens/tracks_screen.cpp b/src/states_screens/tracks_screen.cpp index 31aa297e8..1eca14476 100644 --- a/src/states_screens/tracks_screen.cpp +++ b/src/states_screens/tracks_screen.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -85,7 +85,10 @@ void TracksScreen::eventCallback(Widget* widget, const std::string& name, const if (clickedTrack != NULL) { - ITexture* screenshot = irr_driver->getTexture( clickedTrack->getScreenshotFile().c_str() ); + ITexture* screenshot = + irr_driver->getTexture( clickedTrack->getScreenshotFile(), + "While loading screenshot for track '%s':", + clickedTrack->getFilename() ); new TrackInfoDialog(selection, clickedTrack->getIdent(), translations->fribidize(clickedTrack->getName()), @@ -105,7 +108,10 @@ void TracksScreen::eventCallback(Widget* widget, const std::string& name, const Track* clickedTrack = track_manager->getTrack(selection); if (clickedTrack != NULL) { - ITexture* screenshot = irr_driver->getTexture( clickedTrack->getScreenshotFile().c_str() ); + ITexture* screenshot = + irr_driver->getTexture( clickedTrack->getScreenshotFile(), + "While loading screenshot for track '%s'", + clickedTrack->getFilename()); new TrackInfoDialog(selection, clickedTrack->getIdent(), translations->fribidize(clickedTrack->getName()), @@ -252,14 +258,16 @@ void TracksScreen::init() buildTrackList(); - // select something for the game master - // FIXME: 'setSelection' will not scroll up to the passed track, so if given track - // is not visible with current scrolling this fails + // select old track for the game master (if found) + irr_driver->setTextureErrorMessage( + "While loading screenshot in track screen for last track '%s':", + UserConfigParams::m_last_track); if (!tracks_widget->setSelection(UserConfigParams::m_last_track, PLAYER_ID_GAME_MASTER, true)) { tracks_widget->setSelection(0, PLAYER_ID_GAME_MASTER, true); } + irr_driver->unsetTextureErrorMessage(); } // ----------------------------------------------------------------------------- diff --git a/src/states_screens/tracks_screen.hpp b/src/states_screens/tracks_screen.hpp index e3276874f..49d651a4c 100644 --- a/src/states_screens/tracks_screen.hpp +++ b/src/states_screens/tracks_screen.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Marianne Gagnon +// Copyright (C) 2009-2013 Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tinygettext/dictionary.cpp b/src/tinygettext/dictionary.cpp index 4829e974b..4873527eb 100644 --- a/src/tinygettext/dictionary.cpp +++ b/src/tinygettext/dictionary.cpp @@ -1,5 +1,5 @@ // tinygettext - A gettext replacement that works directly on .po files -// Copyright (C) 2006 Ingo Ruhnke +// Copyright (C) 2006-2013 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tinygettext/dictionary.hpp b/src/tinygettext/dictionary.hpp index f902d2821..dd492c17c 100644 --- a/src/tinygettext/dictionary.hpp +++ b/src/tinygettext/dictionary.hpp @@ -1,5 +1,5 @@ // tinygettext - A gettext replacement that works directly on .po files -// Copyright (C) 2006 Ingo Ruhnke +// Copyright (C) 2006-2013 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tinygettext/dictionary_manager.cpp b/src/tinygettext/dictionary_manager.cpp index bef88d573..8c2e13aaa 100644 --- a/src/tinygettext/dictionary_manager.cpp +++ b/src/tinygettext/dictionary_manager.cpp @@ -1,5 +1,5 @@ // tinygettext - A gettext replacement that works directly on .po files -// Copyright (C) 2006 Ingo Ruhnke +// Copyright (C) 2006-2013 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tinygettext/dictionary_manager.hpp b/src/tinygettext/dictionary_manager.hpp index bd1de629a..ecd9879ea 100644 --- a/src/tinygettext/dictionary_manager.hpp +++ b/src/tinygettext/dictionary_manager.hpp @@ -1,5 +1,5 @@ // tinygettext - A gettext replacement that works directly on .po files -// Copyright (C) 2006 Ingo Ruhnke +// Copyright (C) 2006-2013 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tinygettext/file_system.hpp b/src/tinygettext/file_system.hpp index aff3bfd8d..9881637b5 100644 --- a/src/tinygettext/file_system.hpp +++ b/src/tinygettext/file_system.hpp @@ -1,5 +1,5 @@ // tinygettext - A gettext replacement that works directly on .po files -// Copyright (C) 2009 Ingo Ruhnke +// Copyright (C) 2009-2013 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tinygettext/iconv.cpp b/src/tinygettext/iconv.cpp index 1a9c2873a..da4d5e400 100644 --- a/src/tinygettext/iconv.cpp +++ b/src/tinygettext/iconv.cpp @@ -1,5 +1,5 @@ // tinygettext - A gettext replacement that works directly on .po files -// Copyright (C) 2009 Ingo Ruhnke +// Copyright (C) 2009-2013 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tinygettext/iconv.hpp b/src/tinygettext/iconv.hpp index 2b43ef5b8..e1e43122c 100644 --- a/src/tinygettext/iconv.hpp +++ b/src/tinygettext/iconv.hpp @@ -1,5 +1,5 @@ // tinygettext - A gettext replacement that works directly on .po files -// Copyright (C) 2006 Ingo Ruhnke +// Copyright (C) 2006-2013 Ingo Ruhnke // // 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 diff --git a/src/tinygettext/language.cpp b/src/tinygettext/language.cpp index 351d40be3..daca81f31 100644 --- a/src/tinygettext/language.cpp +++ b/src/tinygettext/language.cpp @@ -1,5 +1,5 @@ // tinygettext - A gettext replacement that works directly on .po files -// Copyright (C) 2006 Ingo Ruhnke +// Copyright (C) 2006-2013 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -20,6 +20,7 @@ #include #include #include +#include namespace tinygettext { diff --git a/src/tinygettext/language.hpp b/src/tinygettext/language.hpp index 0ab2f3291..037200f59 100644 --- a/src/tinygettext/language.hpp +++ b/src/tinygettext/language.hpp @@ -1,5 +1,5 @@ // tinygettext - A gettext replacement that works directly on .po files -// Copyright (C) 2006 Ingo Ruhnke +// Copyright (C) 2006-2013 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tinygettext/log_stream.hpp b/src/tinygettext/log_stream.hpp index 2d4bb9053..333c72ae5 100644 --- a/src/tinygettext/log_stream.hpp +++ b/src/tinygettext/log_stream.hpp @@ -1,5 +1,5 @@ // tinygettext - A gettext replacement that works directly on .po files -// Copyright (C) 2009 Ingo Ruhnke +// Copyright (C) 2009-2013 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tinygettext/plural_forms.cpp b/src/tinygettext/plural_forms.cpp index 2f69b6118..58b9d7309 100644 --- a/src/tinygettext/plural_forms.cpp +++ b/src/tinygettext/plural_forms.cpp @@ -1,5 +1,5 @@ // tinygettext - A gettext replacement that works directly on .po files -// Copyright (C) 2006 Ingo Ruhnke +// Copyright (C) 2006-2013 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tinygettext/plural_forms.hpp b/src/tinygettext/plural_forms.hpp index 2c05e6a28..b51f73aa2 100644 --- a/src/tinygettext/plural_forms.hpp +++ b/src/tinygettext/plural_forms.hpp @@ -1,5 +1,5 @@ // tinygettext - A gettext replacement that works directly on .po files -// Copyright (C) 2006 Ingo Ruhnke +// Copyright (C) 2006-2013 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tinygettext/po_parser.cpp b/src/tinygettext/po_parser.cpp index fbe0293be..2a6bbb3c0 100644 --- a/src/tinygettext/po_parser.cpp +++ b/src/tinygettext/po_parser.cpp @@ -1,5 +1,5 @@ // tinygettext - A gettext replacement that works directly on .po files -// Copyright (C) 2009 Ingo Ruhnke +// Copyright (C) 2009-2013 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -382,7 +382,7 @@ POParser::parse() { std::string msgid_plural = get_string(12); std::vector msgstr_num; - bool saw_nonempty_msgstr = false; + bool saw_nonempty_msgstr = false; next: if (is_empty_line()) @@ -395,10 +395,10 @@ POParser::parse() isdigit(current_line[7]) && current_line[8] == ']') { unsigned int number = static_cast(current_line[7] - '0'); - std::string msgstr = get_string(9); + std::string msgstr = get_string(9); - if(!msgstr.empty()) - saw_nonempty_msgstr = true; + if(!msgstr.empty()) + saw_nonempty_msgstr = true; if (number >= msgstr_num.size()) msgstr_num.resize(number+1); @@ -414,38 +414,38 @@ POParser::parse() if (!is_empty_line()) error("expected 'msgstr[N]' or empty line"); - if (saw_nonempty_msgstr) - { - if (use_fuzzy || !fuzzy) + if (saw_nonempty_msgstr) + { + if (use_fuzzy || !fuzzy) { - if (!dict.get_plural_forms()) - { - warning("msgstr[N] seen, but no Plural-Forms given"); - } - else - { - if (msgstr_num.size() != dict.get_plural_forms().get_nplural()) - { - warning("msgstr[N] count doesn't match Plural-Forms.nplural"); - } - } + if (!dict.get_plural_forms()) + { + warning("msgstr[N] seen, but no Plural-Forms given"); + } + else + { + if (msgstr_num.size() != dict.get_plural_forms().get_nplural()) + { + warning("msgstr[N] count doesn't match Plural-Forms.nplural"); + } + } - if (has_msgctxt) - dict.add_translation(msgctxt, msgid, msgid_plural, msgstr_num); - else - dict.add_translation(msgid, msgid_plural, msgstr_num); - } + if (has_msgctxt) + dict.add_translation(msgctxt, msgid, msgid_plural, msgstr_num); + else + dict.add_translation(msgid, msgid_plural, msgstr_num); + } - if (0) - { - std::cout << (fuzzy?"fuzzy":"not-fuzzy") << std::endl; - std::cout << "msgid \"" << msgid << "\"" << std::endl; - std::cout << "msgid_plural \"" << msgid_plural << "\"" << std::endl; - for(std::vector::size_type i = 0; i < msgstr_num.size(); ++i) - std::cout << "msgstr[" << i << "] \"" << msgstr_num[i] /*conv.convert(msgstr_num[i])*/ << "\"" << std::endl; - std::cout << std::endl; - } - } + if (0) + { + std::cout << (fuzzy?"fuzzy":"not-fuzzy") << std::endl; + std::cout << "msgid \"" << msgid << "\"" << std::endl; + std::cout << "msgid_plural \"" << msgid_plural << "\"" << std::endl; + for(std::vector::size_type i = 0; i < msgstr_num.size(); ++i) + std::cout << "msgstr[" << i << "] \"" << msgstr_num[i] /*conv.convert(msgstr_num[i])*/ << "\"" << std::endl; + std::cout << std::endl; + } + } } else if (prefix("msgstr")) { diff --git a/src/tinygettext/po_parser.hpp b/src/tinygettext/po_parser.hpp index 02bc5b42a..c02949e12 100644 --- a/src/tinygettext/po_parser.hpp +++ b/src/tinygettext/po_parser.hpp @@ -1,5 +1,5 @@ // tinygettext - A gettext replacement that works directly on .po files -// Copyright (C) 2009 Ingo Ruhnke +// Copyright (C) 2009-2013 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tinygettext/stk_file_system.cpp b/src/tinygettext/stk_file_system.cpp index fc51042f3..26bdc8d35 100644 --- a/src/tinygettext/stk_file_system.cpp +++ b/src/tinygettext/stk_file_system.cpp @@ -1,5 +1,5 @@ // tinygettext - A gettext replacement that works directly on .po files -// Copyright (C) 2009 Ingo Ruhnke +// Copyright (C) 2009-2013 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tinygettext/stk_file_system.hpp b/src/tinygettext/stk_file_system.hpp index e120d5b69..272201c20 100644 --- a/src/tinygettext/stk_file_system.hpp +++ b/src/tinygettext/stk_file_system.hpp @@ -1,5 +1,5 @@ // tinygettext - A gettext replacement that works directly on .po files -// Copyright (C) 2009 Ingo Ruhnke +// Copyright (C) 2009-2013 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tinygettext/tgt_log.cpp b/src/tinygettext/tgt_log.cpp index 349bb37d0..3a9bc900e 100644 --- a/src/tinygettext/tgt_log.cpp +++ b/src/tinygettext/tgt_log.cpp @@ -1,5 +1,5 @@ // tinygettext - A gettext replacement that works directly on .po files -// Copyright (C) 2009 Ingo Ruhnke +// Copyright (C) 2009-2013 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tinygettext/tgt_log.hpp b/src/tinygettext/tgt_log.hpp index 4adc80fd5..393dbb748 100644 --- a/src/tinygettext/tgt_log.hpp +++ b/src/tinygettext/tgt_log.hpp @@ -1,5 +1,5 @@ // tinygettext - A gettext replacement that works directly on .po files -// Copyright (C) 2009 Ingo Ruhnke +// Copyright (C) 2009-2013 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tinygettext/tinygettext.cpp b/src/tinygettext/tinygettext.cpp index 7f5adc8ae..f0134fc24 100644 --- a/src/tinygettext/tinygettext.cpp +++ b/src/tinygettext/tinygettext.cpp @@ -1,5 +1,5 @@ // tinygettext - A gettext replacement that works directly on .po files -// Copyright (C) 2006 Ingo Ruhnke +// Copyright (C) 2006-2013 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tinygettext/tinygettext.hpp b/src/tinygettext/tinygettext.hpp index 19fd4c657..1924299db 100644 --- a/src/tinygettext/tinygettext.hpp +++ b/src/tinygettext/tinygettext.hpp @@ -1,5 +1,5 @@ // tinygettext - A gettext replacement that works directly on .po files -// Copyright (C) 2006 Ingo Ruhnke +// Copyright (C) 2006-2013 Ingo Ruhnke // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/ambient_light_sphere.cpp b/src/tracks/ambient_light_sphere.cpp index e0e2fa9cc..3b1bdf9b9 100644 --- a/src/tracks/ambient_light_sphere.cpp +++ b/src/tracks/ambient_light_sphere.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/ambient_light_sphere.hpp b/src/tracks/ambient_light_sphere.hpp index 5cc494f77..74ae319c8 100644 --- a/src/tracks/ambient_light_sphere.hpp +++ b/src/tracks/ambient_light_sphere.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/bezier_curve.cpp b/src/tracks/bezier_curve.cpp index 338c8bca1..8d45c7676 100644 --- a/src/tracks/bezier_curve.cpp +++ b/src/tracks/bezier_curve.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/bezier_curve.hpp b/src/tracks/bezier_curve.hpp index d9bce843d..125940254 100644 --- a/src/tracks/bezier_curve.hpp +++ b/src/tracks/bezier_curve.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/check_cannon.cpp b/src/tracks/check_cannon.cpp index 9a55abcbd..5f84d0615 100644 --- a/src/tracks/check_cannon.cpp +++ b/src/tracks/check_cannon.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/check_cannon.hpp b/src/tracks/check_cannon.hpp index 3c14ed2c1..9e3a62dea 100644 --- a/src/tracks/check_cannon.hpp +++ b/src/tracks/check_cannon.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -36,7 +36,7 @@ class XMLNode; class CheckCannon : public CheckLine { private: - /** The target point the kart will fly to. */ + /** The target point the kart will fly to. */ core::line3df m_target; /** Stores the cannon curve data. */ diff --git a/src/tracks/check_goal.cpp b/src/tracks/check_goal.cpp index 1213bc3c5..36b3edbcf 100644 --- a/src/tracks/check_goal.cpp +++ b/src/tracks/check_goal.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/check_goal.hpp b/src/tracks/check_goal.hpp index 577a0be49..3a4b5c012 100644 --- a/src/tracks/check_goal.hpp +++ b/src/tracks/check_goal.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/check_lap.cpp b/src/tracks/check_lap.cpp index 5d2e771be..01865b483 100644 --- a/src/tracks/check_lap.cpp +++ b/src/tracks/check_lap.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Joerg Henrichs +// Copyright (C) 2010-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/check_lap.hpp b/src/tracks/check_lap.hpp index f873928ab..0d07cb310 100644 --- a/src/tracks/check_lap.hpp +++ b/src/tracks/check_lap.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Joerg Henrichs +// Copyright (C) 2010-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/check_line.cpp b/src/tracks/check_line.cpp index c5b9b5a64..f66cdfaff 100644 --- a/src/tracks/check_line.cpp +++ b/src/tracks/check_line.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/check_line.hpp b/src/tracks/check_line.hpp index f0c14b4d8..9b95a09eb 100644 --- a/src/tracks/check_line.hpp +++ b/src/tracks/check_line.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/check_manager.cpp b/src/tracks/check_manager.cpp index 54b0b800b..f80b6be39 100644 --- a/src/tracks/check_manager.cpp +++ b/src/tracks/check_manager.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/check_manager.hpp b/src/tracks/check_manager.hpp index a861be086..70bc0f5a2 100644 --- a/src/tracks/check_manager.hpp +++ b/src/tracks/check_manager.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/check_sphere.cpp b/src/tracks/check_sphere.cpp index 68b34181c..465b67bdb 100644 --- a/src/tracks/check_sphere.cpp +++ b/src/tracks/check_sphere.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/check_sphere.hpp b/src/tracks/check_sphere.hpp index d9befa876..4d7a5fc90 100644 --- a/src/tracks/check_sphere.hpp +++ b/src/tracks/check_sphere.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/check_structure.cpp b/src/tracks/check_structure.cpp index 0c7b7c545..be36cc64a 100644 --- a/src/tracks/check_structure.cpp +++ b/src/tracks/check_structure.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -49,8 +49,8 @@ CheckStructure::CheckStructure(const XMLNode &node, unsigned int index) else if(kind=="ambient-light") m_check_type = CT_AMBIENT_SPHERE; // Cannons don't have a kind specified, so test for the name in this case - else if(node.getName()=="cannon") - m_check_type = CT_CANNON; + else if(node.getName()=="cannon") + m_check_type = CT_CANNON; else { printf("Unknown check structure '%s' - ignored.\n", kind.c_str()); diff --git a/src/tracks/check_structure.hpp b/src/tracks/check_structure.hpp index 93285d0a4..e9da8b307 100644 --- a/src/tracks/check_structure.hpp +++ b/src/tracks/check_structure.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009-2010 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -64,7 +64,7 @@ public: * enabling you to count the lap again. */ enum CheckType {CT_NEW_LAP, CT_ACTIVATE, CT_TOGGLE, CT_CANNON, - CT_GOAL, CT_AMBIENT_SPHERE}; + CT_GOAL, CT_AMBIENT_SPHERE}; protected: /** Stores the previous position of all karts. This is needed to detect diff --git a/src/tracks/graph_node.cpp b/src/tracks/graph_node.cpp index 67e8d1ef3..e43eeb988 100644 --- a/src/tracks/graph_node.cpp +++ b/src/tracks/graph_node.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/graph_node.hpp b/src/tracks/graph_node.hpp index 482602d74..43d1610f5 100644 --- a/src/tracks/graph_node.hpp +++ b/src/tracks/graph_node.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/lod_node_loader.cpp b/src/tracks/lod_node_loader.cpp index cb6f2d450..57f690150 100644 --- a/src/tracks/lod_node_loader.cpp +++ b/src/tracks/lod_node_loader.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2007 Joerg Henrichs +// Copyright (C) 2007-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/lod_node_loader.hpp b/src/tracks/lod_node_loader.hpp index 22f76127d..3da7b9eca 100644 --- a/src/tracks/lod_node_loader.hpp +++ b/src/tracks/lod_node_loader.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2007 Joerg Henrichs +// Copyright (C) 2007-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/quad.cpp b/src/tracks/quad.cpp index 2984512fe..7f281e396 100644 --- a/src/tracks/quad.cpp +++ b/src/tracks/quad.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/quad.hpp b/src/tracks/quad.hpp index 80e3bc8f1..4688ecb60 100644 --- a/src/tracks/quad.hpp +++ b/src/tracks/quad.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/quad_graph.cpp b/src/tracks/quad_graph.cpp index 4c1e0dd31..e68041a84 100644 --- a/src/tracks/quad_graph.cpp +++ b/src/tracks/quad_graph.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -24,7 +24,11 @@ #include #include "config/user_config.hpp" +#include "graphics/callbacks.hpp" #include "graphics/irr_driver.hpp" +#include "graphics/screenquad.hpp" +#include "graphics/shaders.hpp" +#include "graphics/rtts.hpp" #include "io/file_manager.hpp" #include "io/xml_node.hpp" #include "modes/world.hpp" @@ -605,7 +609,7 @@ void QuadGraph::computeDistanceFromStart(unsigned int node, float new_distance) if(current_distancegetQuadIndex(), delta); + updateDistancesForAllSuccessors(gn->getQuadIndex(), delta, 0); } return; } @@ -634,9 +638,21 @@ void QuadGraph::computeDistanceFromStart(unsigned int node, float new_distance) * distance from start. * \param indx Index of the node for which to increase the distance. * \param delta Amount by which to increase the distance. + * \param recursive_count Counts how often this function was called + * recursively in order to catch incorrect graphs that contain loops. */ -void QuadGraph::updateDistancesForAllSuccessors(unsigned int indx, float delta) +void QuadGraph::updateDistancesForAllSuccessors(unsigned int indx, float delta, + unsigned int recursive_count) { + if(recursive_count>getNumNodes()) + { + Log::error("QuadGraph", + "Quad graph contains a loop (without start node)."); + Log::fatal("QuadGraph", + "Fix graph, check for directions of all shortcuts etc."); + } + recursive_count++; + GraphNode &g=getNode(indx); g.setDistanceFromStart(g.getDistanceFromStart()+delta); for(unsigned int i=0; i g_next.getDistanceFromStart()) { - updateDistancesForAllSuccessors(g.getSuccessor(i), delta); + updateDistancesForAllSuccessors(g.getSuccessor(i), delta, + recursive_count); } } } // updateDistancesForAllSuccessors @@ -953,10 +970,12 @@ int QuadGraph::findOutOfRoadSector(const Vec3& xyz, //----------------------------------------------------------------------------- /** Takes a snapshot of the driveline quads so they can be used as minimap. */ -video::ITexture *QuadGraph::makeMiniMap(const core::dimension2du &dimension, +video::ITexture *QuadGraph::makeMiniMap(const core::dimension2du &origdimension, const std::string &name, const video::SColor &fill_color) { + const core::dimension2du dimension = origdimension * 2; + IrrDriver::RTTProvider rttProvider(dimension, name, true); video::SColor red(128, 255, 0, 0); createMesh(/*show_invisible part of the track*/ false, @@ -1034,8 +1053,28 @@ video::ITexture *QuadGraph::makeMiniMap(const core::dimension2du &dimension, { Log::error("Quad Graph", "[makeMiniMap] WARNING: RTT does not appear to work," "mini-map will not be available."); + return NULL; } + if (!irr_driver->isGLSL()) + return texture; + + GaussianBlurProvider * const gacb = (GaussianBlurProvider *) irr_driver->getCallback(ES_GAUSSIAN3H); + gacb->setResolution(UserConfigParams::m_width, UserConfigParams::m_height); + + ScreenQuad sq(irr_driver->getVideoDriver()); + sq.getMaterial().MaterialType = irr_driver->getShader(ES_GAUSSIAN3H); + sq.setTexture(texture); + + // Horizontal pass + sq.render(irr_driver->getRTT(RTT_TMP1)); + + // Vertical pass + sq.getMaterial().MaterialType = irr_driver->getShader(ES_GAUSSIAN3V); + sq.setTexture(irr_driver->getRTT(RTT_TMP1)); + + sq.render(texture); + return texture; } // makeMiniMap diff --git a/src/tracks/quad_graph.hpp b/src/tracks/quad_graph.hpp index 7c8d5d805..43eaebb5d 100644 --- a/src/tracks/quad_graph.hpp +++ b/src/tracks/quad_graph.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -123,7 +123,9 @@ public: const video::SColor &fill_color =video::SColor(127, 255, 255, 255) ); void mapPoint2MiniMap(const Vec3 &xyz, Vec3 *out) const; - void updateDistancesForAllSuccessors(unsigned int indx, float delta); + void updateDistancesForAllSuccessors(unsigned int indx, + float delta, + unsigned int count); void setupPaths(); void computeChecklineRequirements(); // ---------------------------------------------------------------------- diff --git a/src/tracks/quad_set.cpp b/src/tracks/quad_set.cpp index bcb5ac999..84c9cf92e 100644 --- a/src/tracks/quad_set.cpp +++ b/src/tracks/quad_set.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/quad_set.hpp b/src/tracks/quad_set.hpp index 3e33ea48a..b7aff164c 100644 --- a/src/tracks/quad_set.hpp +++ b/src/tracks/quad_set.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/terrain_info.cpp b/src/tracks/terrain_info.cpp index 1c40922d1..251371475 100644 --- a/src/tracks/terrain_info.cpp +++ b/src/tracks/terrain_info.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2007 Joerg Henrichs +// Copyright (C) 2007-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/terrain_info.hpp b/src/tracks/terrain_info.hpp index 670be49bf..b9f426911 100644 --- a/src/tracks/terrain_info.hpp +++ b/src/tracks/terrain_info.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2007 Joerg Henrichs +// Copyright (C) 2007-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/track.cpp b/src/tracks/track.cpp index bca42f20b..e7d1c40c0 100644 --- a/src/tracks/track.cpp +++ b/src/tracks/track.cpp @@ -1,7 +1,7 @@ -// // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004 Steve Baker -// 2009 Joerg Henrichs, Steve Baker +// +// Copyright (C) 2004-2013 Steve Baker +// Copyright (C) 2009-2013 Joerg Henrichs, Steve Baker // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -112,6 +112,14 @@ Track::Track(const std::string &filename) m_is_cutscene = false; m_camera_far = 1000.0f; m_mini_map = NULL; + m_bloom = true; + m_bloom_threshold = 0.75f; + m_clouds = false; + m_lensflare = false; + m_godrays = false; + m_displacement_speed = 1.0f; + m_caustics_speed = 1.0f; + m_shadows = true; m_sky_particles = NULL; m_sky_dx = 0.05f; m_sky_dy = 0.0f; @@ -258,6 +266,12 @@ void Track::cleanup() material_manager->popTempMaterial(); } + irr_driver->clearGlowingNodes(); + irr_driver->clearLights(); + irr_driver->clearForcedBloom(); + irr_driver->clearDisplacingNodes(); + irr_driver->clearBackgroundNodes(); + if(UserConfigParams::logMemory()) { Log::debug("track", @@ -309,9 +323,11 @@ void Track::loadTrackInfo() { // Default values m_use_fog = false; - m_fog_density = 1.0f/100.0f; + m_fog_max = 1.0f; m_fog_start = 0.0f; m_fog_end = 1000.0f; + m_fog_height_start = 0.0f; + m_fog_height_end = 100.0f; m_gravity = 9.80665f; m_smooth_normals = false; /* ARGB */ @@ -347,6 +363,14 @@ void Track::loadTrackInfo() root->get("internal", &m_internal); root->get("reverse", &m_reverse_available); root->get("push-back", &m_enable_push_back); + root->get("clouds", &m_clouds); + root->get("bloom", &m_bloom); + root->get("bloom-threshold", &m_bloom_threshold); + root->get("lens-flare", &m_lensflare); + root->get("shadows", &m_shadows); + root->get("god-rays", &m_godrays); + root->get("displacement-speed", &m_displacement_speed); + root->get("caustics-speed", &m_caustics_speed); // Make the default for auto-rescue in battle mode and soccer mode to be false if(m_is_arena || m_is_soccer) @@ -387,7 +411,22 @@ void Track::loadTrackInfo() std::string dir = StringUtils::getPath(m_filename); std::string easter_name = dir+"/easter_eggs.xml"; - m_has_easter_eggs = file_manager->fileExists(easter_name); + + XMLNode *easter = file_manager->createXMLTree(easter_name); + + if(easter) + { + for(unsigned int i=0; igetNumNodes(); i++) + { + const XMLNode *eggs = easter->getNode(i); + if(eggs->getNumNodes() > 0) + { + m_has_easter_eggs = true; + break; + } + } + delete easter; + } } // loadTrackInfo //----------------------------------------------------------------------------- @@ -499,13 +538,14 @@ void Track::loadQuadGraph(unsigned int mode_id, const bool reverse) m_minimap_x_scale = float(m_mini_map_size.Width) / float(m_mini_map->getSize().Width); m_minimap_y_scale = float(m_mini_map_size.Height) / float(m_mini_map->getSize().Height); } - else + else { m_minimap_x_scale = 0; m_minimap_y_scale = 0; } } } // loadQuadGraph + // ----------------------------------------------------------------------------- void Track::mapPoint2MiniMap(const Vec3 &xyz, Vec3 *draw_at) const { @@ -1282,17 +1322,17 @@ void Track::createWater(const XMLNode &node) if (UserConfigParams::m_graphical_effects) { - scene_node = irr_driver->addWaterNode(mesh, + scene::IMesh *welded; + scene_node = irr_driver->addWaterNode(mesh, &welded, wave_height, wave_speed, wave_length); - // 'addWaterNode' welds the mesh so keep both the original and the welded copy mesh->grab(); irr_driver->grabAllTextures(mesh); m_all_cached_meshes.push_back(mesh); - mesh = ((scene::IMeshSceneNode*)scene_node)->getMesh(); + mesh = welded; } else { @@ -1338,6 +1378,9 @@ void Track::createWater(const XMLNode &node) */ void Track::loadTrackModel(bool reverse_track, unsigned int mode_id) { + // Use m_filename to also get the path, not only the identifier + irr_driver->setTextureErrorMessage("While loading track '%s'", + m_filename ); if(!m_reverse_available) { reverse_track = false; @@ -1455,9 +1498,11 @@ void Track::loadTrackModel(bool reverse_track, unsigned int mode_id) node->get("sun-diffuse", &m_sun_diffuse_color); node->get("fog", &m_use_fog); node->get("fog-color", &m_fog_color); - node->get("fog-density", &m_fog_density); + node->get("fog-max", &m_fog_max); node->get("fog-start", &m_fog_start); node->get("fog-end", &m_fog_end); + node->get("fog-start-height", &m_fog_height_start); + node->get("fog-end-height", &m_fog_height_end); } loadMainTrack(*root); @@ -1513,9 +1558,7 @@ void Track::loadTrackModel(bool reverse_track, unsigned int mode_id) } else if(name=="checks") { - // Easter egg hunts don't have laps. - if(race_manager->getMinorMode()!=RaceManager::MINOR_MODE_EASTER_EGG) - CheckManager::get()->load(*node); + CheckManager::get()->load(*node); } else if (name=="particle-emitter") { @@ -1539,14 +1582,21 @@ void Track::loadTrackModel(bool reverse_track, unsigned int mode_id) video::SColor color; node->get("color", &color); + const video::SColorf colorf(color); float distance = 25.0f; node->get("distance", &distance); + if (irr_driver->isGLSL()) + { + irr_driver->addLight(pos, distance, colorf.r, colorf.g, colorf.b); + } else + { scene::ILightSceneNode* node = irr_driver->getSceneManager()->addLightSceneNode(NULL, pos, color, distance); node->setLightType(video::ELT_POINT); node->enableCastShadow(true); } + } else if(name=="weather") { std::string weather_particles; @@ -1634,14 +1684,14 @@ void Track::loadTrackModel(bool reverse_track, unsigned int mode_id) // It's important to execute this BEFORE the code that creates the skycube, // otherwise the skycube node could be modified to have fog enabled, which // we don't want - if (m_use_fog && !UserConfigParams::m_camera_debug) + if (m_use_fog && !UserConfigParams::m_camera_debug && !irr_driver->isGLSL()) { /* NOTE: if LINEAR type, density does not matter, if EXP or EXP2, start and end do not matter */ irr_driver->getVideoDriver()->setFog(m_fog_color, video::EFT_FOG_LINEAR, m_fog_start, m_fog_end, - m_fog_density); + 1.0f); } // Enable for for all track nodes if fog is used @@ -1696,21 +1746,30 @@ void Track::loadTrackModel(bool reverse_track, unsigned int mode_id) irr_driver->getSceneManager()->setAmbientLight(m_ambient_color); // ---- Create sun (non-ambient directional light) - m_sun = irr_driver->getSceneManager()->addLightSceneNode(NULL, - m_sun_position, - m_sun_diffuse_color); - m_sun->setLightType(video::ELT_DIRECTIONAL); + if (m_sun_position.getLengthSQ() < 0.03f) + { + m_sun_position = core::vector3df(500, 250, 250); + } + + const video::SColorf tmpf(m_sun_diffuse_color); + m_sun = irr_driver->addLight(m_sun_position, 10000.0f, tmpf.r, tmpf.g, tmpf.b, true); + + if (!irr_driver->isGLSL()) + { + scene::ILightSceneNode *sun = (scene::ILightSceneNode *) m_sun; + sun->setLightType(video::ELT_DIRECTIONAL); // The angle of the light is rather important - let the sun // point towards (0,0,0). - if(m_sun_position.getLengthSQ()==0) + if(m_sun_position.getLengthSQ() < 0.03f) // Backward compatibility: if no sun is specified, use the // old hardcoded default angle m_sun->setRotation( core::vector3df(180, 45, 45) ); else m_sun->setRotation((-m_sun_position).getHorizontalAngle()); - m_sun->getLightData().SpecularColor = m_sun_specular_color; + sun->getLightData().SpecularColor = m_sun_specular_color; + } createPhysicsModel(main_track_count); @@ -1764,6 +1823,8 @@ void Track::loadTrackModel(bool reverse_track, unsigned int mode_id) std::string dir = StringUtils::getPath(m_filename); easter_world->readData(dir+"/easter_eggs.xml"); } + + irr_driver->unsetTextureErrorMessage(); } // loadTrackModel //----------------------------------------------------------------------------- diff --git a/src/tracks/track.hpp b/src/tracks/track.hpp index 0d180f3ef..01db425f5 100644 --- a/src/tracks/track.hpp +++ b/src/tracks/track.hpp @@ -1,5 +1,7 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004 Steve Baker +// +// Copyright (C) 2004-2013 Steve Baker +// Copyright (C) 2009-2013 Joerg Henrichs, Steve Baker // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -219,7 +221,7 @@ private: #endif PtrVector m_all_emitters; - scene::ILightSceneNode *m_sun; + scene::ISceneNode *m_sun; /** Used to collect the triangles for the bullet mesh. */ TriangleMesh* m_track_mesh; /** Used to collect the triangles which do not have a physical @@ -348,9 +350,11 @@ private: /** True if this track supports using smoothed normals. */ bool m_smooth_normals; - float m_fog_density; + float m_fog_max; float m_fog_start; float m_fog_end; + float m_fog_height_start; + float m_fog_height_end; core::vector3df m_sun_position; /** The current ambient color for each kart. */ video::SColor m_ambient_color; @@ -365,6 +369,18 @@ private: float m_minimap_x_scale; float m_minimap_y_scale; + bool m_clouds; + + bool m_bloom; + float m_bloom_threshold; + + bool m_lensflare; + bool m_godrays; + bool m_shadows; + + float m_displacement_speed; + float m_caustics_speed; + /** List of all bezier curves in the track - for e.g. camera, ... */ std::vector m_all_curves; @@ -532,8 +548,16 @@ public: // ------------------------------------------------------------------------ float getFogEnd() const { return m_fog_end; } // ------------------------------------------------------------------------ + float getFogStartHeight() const { return m_fog_height_start; } + // ------------------------------------------------------------------------ + float getFogEndHeight() const { return m_fog_height_end; } + // ------------------------------------------------------------------------ + float getFogMax() const { return m_fog_max; } + // ------------------------------------------------------------------------ video::SColor getFogColor() const { return m_fog_color; } // ------------------------------------------------------------------------ + video::SColor getSunColor() const { return m_sun_diffuse_color; } + // ------------------------------------------------------------------------ /** Whether this is an "internal" track. If so it won't be offered * in the track selection screen. */ bool isInternal() const { return m_internal; } @@ -555,6 +579,17 @@ public: const std::vector& getSubtitles() const { return m_subtitles; } + bool hasClouds() const { return m_clouds; } + + bool getBloom() const { return m_bloom; } + float getBloomThreshold() const { return m_bloom_threshold; } + + bool hasLensFlare() const { return m_lensflare; } + bool hasGodRays() const { return m_godrays; } + bool hasShadows() const { return m_shadows; } + + float getDisplacementSpeed() const { return m_displacement_speed; } + float getCausticsSpeed() const { return m_caustics_speed; } }; // class Track #endif diff --git a/src/tracks/track_manager.cpp b/src/tracks/track_manager.cpp index db6cafdf6..e8863cc46 100644 --- a/src/tracks/track_manager.cpp +++ b/src/tracks/track_manager.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team +// Copyright (C) 2006-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/track_manager.hpp b/src/tracks/track_manager.hpp index 7b7cd59e0..3faf53921 100644 --- a/src/tracks/track_manager.hpp +++ b/src/tracks/track_manager.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 SuperTuxKart-Team +// Copyright (C) 2006-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/track_object.cpp b/src/tracks/track_object.cpp index dd49b482c..9d21e413f 100644 --- a/src/tracks/track_object.cpp +++ b/src/tracks/track_object.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2013 Joerg Henrichs, Marianne Gagnon +// Copyright (C) 2013-2013 Joerg Henrichs, Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -19,12 +19,14 @@ #include "tracks/track_object.hpp" #include "animations/three_d_animation.hpp" +#include "graphics/irr_driver.hpp" #include "io/file_manager.hpp" #include "io/xml_node.hpp" #include "input/device_manager.hpp" #include "items/item_manager.hpp" #include "physics/physical_object.hpp" #include "race/race_manager.hpp" +#include "utils/helpers.hpp" /** A track object: any additional object on the track. This object implements @@ -132,24 +134,59 @@ void TrackObject::init(const XMLNode &xml_node, LODNode* lod_node) } else { + scene::ISceneNode *glownode = NULL; + if (lod_node != NULL) { m_type = "lod"; m_presentation = new TrackObjectPresentationLOD(xml_node, lod_node); + + glownode = lod_node->getAllNodes()[0]; } else { m_type = "mesh"; m_presentation = new TrackObjectPresentationMesh(xml_node, m_enabled); + glownode = ((TrackObjectPresentationMesh *) m_presentation)->getNode(); } - if (m_interaction != "ghost" && m_interaction != "none") + std::string render_pass; + xml_node.get("renderpass", &render_pass); + + if (m_interaction != "ghost" && m_interaction != "none" && render_pass != "skybox") { m_rigid_body = PhysicalObject::fromXML(type == "movable", xml_node, this); } + + video::SColor glow; + if (xml_node.get("glow", &glow) && glownode) + { + float r, g, b; + r = glow.getRed() / 255.0f; + g = glow.getGreen() / 255.0f; + b = glow.getBlue() / 255.0f; + + irr_driver->addGlowingNode(glownode, r, g, b); + } + + bool forcedbloom = false; + if (xml_node.get("forcedbloom", &forcedbloom) && forcedbloom && glownode) + { + float power = 1; + xml_node.get("bloompower", &power); + power = clampf(power, 0.5f, 10); + + irr_driver->addForcedBloomNode(glownode, power); + } + + bool displacing = false; + if (xml_node.get("displacing", &displacing) && displacing && glownode) + { + irr_driver->addDisplacingNode(glownode); + } } diff --git a/src/tracks/track_object.hpp b/src/tracks/track_object.hpp index e53cf53de..fceba17bf 100644 --- a/src/tracks/track_object.hpp +++ b/src/tracks/track_object.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/track_object_manager.cpp b/src/tracks/track_object_manager.cpp index 5558e2de3..fa8ccf3e3 100644 --- a/src/tracks/track_object_manager.cpp +++ b/src/tracks/track_object_manager.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/track_object_manager.hpp b/src/tracks/track_object_manager.hpp index 04fb5c30f..eba7b9300 100644 --- a/src/tracks/track_object_manager.hpp +++ b/src/tracks/track_object_manager.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2009 Joerg Henrichs +// Copyright (C) 2009-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/track_object_presentation.cpp b/src/tracks/track_object_presentation.cpp index c041005e8..d5f20d0f6 100644 --- a/src/tracks/track_object_presentation.cpp +++ b/src/tracks/track_object_presentation.cpp @@ -1,6 +1,6 @@ -// // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2013 Joerg Henrichs, Marianne Gagnon +// +// Copyright (C) 2013-2013 Joerg Henrichs, Marianne Gagnon // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -20,6 +20,7 @@ #include "audio/sfx_base.hpp" #include "audio/sfx_buffer.hpp" +#include "graphics/irr_driver.hpp" #include "graphics/material_manager.hpp" #include "graphics/particle_emitter.hpp" #include "graphics/particle_kind_manager.hpp" @@ -149,6 +150,15 @@ TrackObjectPresentationMesh::TrackObjectPresentationMesh(const XMLNode& xml_node std::string model_name; xml_node.get("model", &model_name ); + m_is_in_skybox = false; + std::string render_pass; + xml_node.get("renderpass", &render_pass); + + if(render_pass == "skybox") + { + m_is_in_skybox = true; + } + std::string full_path = World::getWorld()->getTrack()->getTrackFile(model_name); @@ -224,7 +234,19 @@ void TrackObjectPresentationMesh::init(const XMLNode* xml_node, bool enabled) m_mesh->grab(); irr_driver->grabAllTextures(m_mesh); - if (animated) + if (m_is_in_skybox) + { + // Tell the driver that this mesh is a part of the background + scene::IMeshSceneNode * const node = + irr_driver->getSceneManager()->addMeshSceneNode(m_mesh); + node->grab(); + node->setParent(NULL); + + irr_driver->addBackgroundNode(node); + + m_node = node; + } + else if (animated) { scene::IAnimatedMeshSceneNode *node = irr_driver->addAnimatedMesh((scene::IAnimatedMesh*)m_mesh); @@ -575,7 +597,7 @@ TrackObjectPresentationActionTrigger::TrackObjectPresentationActionTrigger(const xml_node.get("action", &m_action); m_action_active = true; - + if (m_action.size() == 0) { fprintf(stderr, "[TrackObject] WARNING: action-trigger has no action defined\n"); @@ -587,7 +609,7 @@ TrackObjectPresentationActionTrigger::TrackObjectPresentationActionTrigger(const void TrackObjectPresentationActionTrigger::onTriggerItemApproached(Item* who) { if (!m_action_active) return; - + if (m_action == "garage") { new RacePausedDialog(0.8f, 0.6f); diff --git a/src/tracks/track_object_presentation.hpp b/src/tracks/track_object_presentation.hpp index 6083a2f0f..7894748cc 100644 --- a/src/tracks/track_object_presentation.hpp +++ b/src/tracks/track_object_presentation.hpp @@ -1,3 +1,22 @@ +// SuperTuxKart - a fun racing game with go-kart +// +// Copyright (C) 2013-2013 Joerg Henrichs, Marianne Gagnon +// +// 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_TRACK_OBJECT_PRESENTATION_HPP #define HEADER_TRACK_OBJECT_PRESENTATION_HPP @@ -146,6 +165,9 @@ private: /** True if it is a looped animation. */ bool m_is_looped; + /** True if the object is in the skybox */ + bool m_is_in_skybox; + /** Start frame of the animation to be played. */ unsigned int m_frame_start; @@ -262,7 +284,7 @@ public: virtual ~TrackObjectPresentationActionTrigger() {} virtual void onTriggerItemApproached(Item* who) OVERRIDE; - + virtual void reset() OVERRIDE { m_action_active = true; } }; diff --git a/src/tracks/track_sector.cpp b/src/tracks/track_sector.cpp index e7bc0ecd5..82d7cf09e 100644 --- a/src/tracks/track_sector.cpp +++ b/src/tracks/track_sector.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Joerg Henrichs +// Copyright (C) 2011-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/tracks/track_sector.hpp b/src/tracks/track_sector.hpp index d67833bfa..57a0e7c1a 100644 --- a/src/tracks/track_sector.hpp +++ b/src/tracks/track_sector.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Joerg Henrichs +// Copyright (C) 2011-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/utils/aligned_array.hpp b/src/utils/aligned_array.hpp index f1afffc96..3f90608b8 100644 --- a/src/utils/aligned_array.hpp +++ b/src/utils/aligned_array.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Joerg Henrichs +// Copyright (C) 2011-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/utils/constants.cpp b/src/utils/constants.cpp index a7940f4fd..8198c673d 100644 --- a/src/utils/constants.cpp +++ b/src/utils/constants.cpp @@ -1,6 +1,7 @@ -// // SuperTuxKart - a fun racing game with go-kart // +// Copyright (C) 2012-2013 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 diff --git a/src/utils/constants.hpp b/src/utils/constants.hpp index b6ff8f4da..7089f62c9 100644 --- a/src/utils/constants.hpp +++ b/src/utils/constants.hpp @@ -1,6 +1,7 @@ -// // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004 Steve Baker +// +// Copyright (C) 2004-2013 Steve Baker +// Copyright (C) 2012-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/utils/crash_reporting.cpp b/src/utils/crash_reporting.cpp new file mode 100644 index 000000000..811f39d09 --- /dev/null +++ b/src/utils/crash_reporting.cpp @@ -0,0 +1,330 @@ +// SuperTuxKart - a fun racing game with go-kart +// +// Copyright (C) 2013 Lionel Fuentes +// +// 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 "crash_reporting.hpp" +#include "log.hpp" +#include + +#ifdef WIN32 + // --------------------- Windows version ----------------- + #include + #include + #include + #include + #include + + typedef BOOL (__stdcall *tSymCleanup)( + _In_ HANDLE hProcess + ); + typedef PVOID (__stdcall *tSymFunctionTableAccess64)( + _In_ HANDLE hProcess, + _In_ DWORD64 AddrBase + ); + typedef BOOL (__stdcall *tSymGetLineFromAddr64)( + _In_ HANDLE hProcess, + _In_ DWORD64 qwAddr, + _Out_ PDWORD pdwDisplacement, + _Out_ PIMAGEHLP_LINE64 Line64 + ); + typedef DWORD64 (__stdcall *tSymGetModuleBase64)( + _In_ HANDLE hProcess, + _In_ DWORD64 qwAddr + ); + typedef BOOL (__stdcall *tSymGetSymFromAddr64)( + _In_ HANDLE hProcess, + _In_ DWORD64 qwAddr, + _Out_opt_ PDWORD64 pdwDisplacement, + _Inout_ PIMAGEHLP_SYMBOL64 Symbol + ); + typedef BOOL (__stdcall *tSymInitialize)( + _In_ HANDLE hProcess, + _In_opt_ PCSTR UserSearchPath, + _In_ BOOL fInvadeProcess + ); + typedef DWORD (__stdcall *tSymSetOptions)( + _In_ DWORD SymOptions + ); + typedef BOOL (__stdcall *tStackWalk64)( + _In_ DWORD MachineType, + _In_ HANDLE hProcess, + _In_ HANDLE hThread, + _Inout_ LPSTACKFRAME64 StackFrame, + _Inout_ PVOID ContextRecord, + _In_opt_ PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine, + _In_opt_ PFUNCTION_TABLE_ACCESS_ROUTINE64 FunctionTableAccessRoutine, + _In_opt_ PGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine, + _In_opt_ PTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress + ); + typedef DWORD (__stdcall *tUnDecorateSymbolName)( + _In_ PCSTR name, + _Out_writes_(maxStringLength) PSTR outputString, + _In_ DWORD maxStringLength, + _In_ DWORD flags + ); + + namespace CrashReporting + { + void getCallStackWithContext(std::string& callstack, PCONTEXT pContext); + + void winCrashHandler(PCONTEXT pContext=NULL) + { + std::string callstack; + if(pContext) + getCallStackWithContext(callstack, pContext); + else + getCallStack(callstack); + + std::string msg = "SuperTuxKart crashed!\n" + "Please hit Ctrl+C to copy to clipboard and signal the problem\n" + "to the developers on our forum: http://forum.freegamedev.net/viewforum.php?f=16\n" + "\n" + "Call stack:\n"; + msg += callstack; + MessageBoxA(NULL, msg.c_str(), "SuperTuxKart crashed :/", MB_OK); + } + + LONG WINAPI sehHandler(_In_ struct _EXCEPTION_POINTERS *ExceptionInfo) + { + winCrashHandler(ExceptionInfo->ContextRecord); + return EXCEPTION_EXECUTE_HANDLER; + } + + void pureCallHandler() + { + winCrashHandler(); + } + + int newHandler( size_t ) + { + winCrashHandler(); + return 0; + } + + void invalidParameterHandler(const wchar_t *, const wchar_t *, const wchar_t *, unsigned int, uintptr_t) + { + winCrashHandler(); + } + + void signalHandler(int code) + { + winCrashHandler(); + } + + void installHandlers() + { + // ----- Per-process handlers ----- + SetUnhandledExceptionFilter(sehHandler); // Top-level SEH handler + _set_purecall_handler(pureCallHandler); // Pure virtual function calls handler + + // Catch new operator memory allocation exceptions + _set_new_mode(1); // Force malloc() to call new handler too + _set_new_handler(newHandler); + + _set_invalid_parameter_handler(invalidParameterHandler); // Catch invalid parameter exceptions. + //_set_security_error_handler(securityHandler); // Catch buffer overrun exceptions + + signal(SIGABRT, signalHandler); + signal(SIGINT, signalHandler); + signal(SIGTERM, signalHandler); + + // ----- Per-thread handlers ----- + // TODO + } + + void getCallStackWithContext(std::string& callstack, PCONTEXT pContext) + { + HINSTANCE hImageHlpDll = LoadLibraryA("imagehlp.dll"); + if(!hImageHlpDll) + { + Log::warn("CrashReporting", "Failed to load DLL imagehlp.dll"); + callstack = "Crash reporting failed to load DLL imagehlp.dll"; + return; + } + + // Retrieve the DLL functions +#define GET_FUNC_PTR(FuncName) \ + t##FuncName _##FuncName = (t##FuncName)GetProcAddress(hImageHlpDll, #FuncName); \ + if(!_##FuncName) { \ + Log::warn("CrashReporting", "Failed to import symbol " #FuncName " from imagehlp.dll"); \ + FreeLibrary(hImageHlpDll); \ + return; \ + } + + GET_FUNC_PTR(SymCleanup ) + GET_FUNC_PTR(SymFunctionTableAccess64 ) + GET_FUNC_PTR(SymGetLineFromAddr64 ) + GET_FUNC_PTR(SymGetModuleBase64 ) + GET_FUNC_PTR(SymGetSymFromAddr64 ) + GET_FUNC_PTR(SymInitialize ) + GET_FUNC_PTR(SymSetOptions ) + GET_FUNC_PTR(StackWalk64 ) + GET_FUNC_PTR(UnDecorateSymbolName ) + +#undef GET_FUNC_PTR + + const HANDLE hProcess = GetCurrentProcess(); + const HANDLE hThread = GetCurrentThread(); + + // Initialize the symbol hander for the process + { + // Get the file path of the executable + char filepath[512]; + GetModuleFileNameA(NULL, filepath, sizeof(filepath)); + if(!filepath) + { + Log::warn("CrashReporting", "GetModuleFileNameA failed"); + FreeLibrary(hImageHlpDll); + return; + } + + // Only keep the directory + char* last_separator = strchr(filepath, '/'); + if(!last_separator) last_separator = strchr(filepath, '\\'); + if(last_separator) + last_separator[0] = '\0'; + + // Finally initialize the symbol handler. + BOOL bOk = _SymInitialize(hProcess, filepath ? filepath : NULL, TRUE); + if(!bOk) + { + Log::warn("CrashReporting", "SymInitialize() failed"); + FreeLibrary(hImageHlpDll); + return; + } + + _SymSetOptions(SYMOPT_LOAD_LINES); + } + + // Get the stack trace + { + // Initialize the IMAGEHLP_SYMBOL64 structure + const size_t MaxNameLength = 256; + IMAGEHLP_SYMBOL64* sym = (IMAGEHLP_SYMBOL64*)alloca(sizeof(IMAGEHLP_SYMBOL64) + MaxNameLength); + sym->SizeOfStruct = sizeof(IMAGEHLP_SYMBOL64); + sym->MaxNameLength = MaxNameLength; + + // Initialize the STACKFRAME structure so that it + // corresponds to the current function call + STACKFRAME64 stackframe; + memset(&stackframe, 0, sizeof(stackframe)); + stackframe.AddrPC.Offset = pContext->Eip; + stackframe.AddrPC.Mode = AddrModeFlat; + stackframe.AddrStack.Offset = pContext->Esp; + stackframe.AddrStack.Mode = AddrModeFlat; + stackframe.AddrFrame.Offset = pContext->Ebp; + stackframe.AddrFrame.Mode = AddrModeFlat; + + const DWORD machine_type = IMAGE_FILE_MACHINE_I386; + + // Walk the stack + const int max_nb_calls = 32; + for(int i=0 ; i < max_nb_calls ; i++) + { + const BOOL stackframe_ok = _StackWalk64( machine_type, + hProcess, + hThread, + &stackframe, + pContext, + NULL, + _SymFunctionTableAccess64, + _SymGetModuleBase64, + NULL); + if(stackframe_ok) + { + // Decode the symbol and add it to the call stack + DWORD64 sym_displacement; + if(_SymGetSymFromAddr64( hProcess, + stackframe.AddrPC.Offset, + &sym_displacement, + sym)) + { + IMAGEHLP_LINE64 line64; + DWORD dwDisplacement = (DWORD)sym_displacement; + if(_SymGetLineFromAddr64(hProcess, stackframe.AddrPC.Offset, &dwDisplacement, &line64)) + { + callstack += "\n "; + + // Directory + filename -> filename only + const char* filename = line64.FileName; + const char* ptr = line64.FileName; + while(*ptr) + { + if(*ptr == '\\' || *ptr == '/') + filename = ptr+1; + ptr++; + } + callstack += filename; + callstack += ":"; + callstack += sym->Name; + + char str[128]; + _itoa(line64.LineNumber, str, 10); + callstack += ":"; + callstack += str; + } + else + { + callstack += "\n "; + callstack += sym->Name; + } + } + else + callstack += "\n "; + } + else + break; // done + } + } + + FreeLibrary(hImageHlpDll); + } + + + void getCallStack(std::string& callstack) + { + // Get the current CONTEXT + // NB: this code is ONLY VALID FOR X86 (32 bit)! + CONTEXT ctx; + memset(&ctx, '\0', sizeof(ctx)); + ctx.ContextFlags = CONTEXT_FULL; + __asm call x + __asm x: pop eax // get eip (can't directly use mov) + __asm mov ctx.Eip, eax + __asm mov ctx.Ebp, ebp + __asm mov ctx.Esp, esp + + getCallStackWithContext(callstack, &ctx); + } + } // end namespace CrashReporting + +#else + // --------------------- Unix version ----------------------- + namespace CrashReporting + { + void installHandlers() + { + // TODO! + } + + void getCallStack(std::string& callstack) + { + // TODO! + } + } // end namespace CrashReporting + +#endif diff --git a/src/utils/crash_reporting.hpp b/src/utils/crash_reporting.hpp new file mode 100644 index 000000000..9302861b8 --- /dev/null +++ b/src/utils/crash_reporting.hpp @@ -0,0 +1,31 @@ +// SuperTuxKart - a fun racing game with go-kart +// +// Copyright (C) 2013 Lionel Fuentes +// +// 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_CRASH_REPORTING_HPP +#define HEADER_CRASH_REPORTING_HPP + +#include + +namespace CrashReporting +{ + void installHandlers(); + void getCallStack(std::string& callstack); +} + + +#endif // HEADER_CRASH_REPORTING_HPP diff --git a/src/utils/helpers.cpp b/src/utils/helpers.cpp new file mode 100644 index 000000000..ed105b023 --- /dev/null +++ b/src/utils/helpers.cpp @@ -0,0 +1,220 @@ +// +// SuperTuxKart - a fun racing game with go-kart +// Copyright (C) 2013 Lauri Kasanen +// +// 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 "graphics/irr_driver.hpp" +#include "utils/helpers.hpp" + +#include +#include + +float clampf(float in, float low, float high) { + return in > high ? high : in < low ? low : in; +} + +float smootherstep(float e0, float e1, float x) { + x = clampf((x - e0)/(e1 - e0), 0, 1); + + return x*x*x*(x*(x*6 - 15) + 10); +} + +void savetex(ITexture *tex, const char *name) { + + using namespace core; + using namespace video; + + IVideoDriver * const drv = irr_driver->getVideoDriver(); + + IImage * const tmp = drv->createImage(tex, position2di(0,0), tex->getSize()); + + if (!name) + { + stringc namec = tex->getName().getPath(); + namec += ".png"; + drv->writeImageToFile(tmp, namec.c_str()); + } + else + { + drv->writeImageToFile(tmp, name); + } + + tmp->drop(); +} + +float mix(float x, float y, float a) { + return x * (1 - a) + y * a; +} + +unsigned ispow(const unsigned in) { + + if (in < 2) return 0; + + return !(in & (in - 1)); +} + +unsigned npow(unsigned in) { + + if (ispow(in)) return in; + + in |= in >> 1; + in |= in >> 2; + in |= in >> 4; + in |= in >> 8; + in |= in >> 16; + + return in + 1; +} + +// Simple 8-bit hash +u8 shash8(const u8 * const data, const u16 size) { + + u32 out = data[0], i; + + for (i = 1; i < size; i++) { + out += data[i] * ((i + 1) ^ data[i - 1]); + } + + out %= 307; // prime + out %= 256; // eight bits + + return out; +} + + +/* + +Copyright (C) 2011 by Ashima Arts (Simplex noise) +Copyright (C) 2011 by Lauri Kasanen (cpu port) + + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ + +static inline float mod289(float x) { +// return x - floorf(x * (1.0 / 289.0)) * 289.0; + return fmodf(x, 289); +} + +static inline float permute(float x) { + return mod289(((x*34.0f)+1.0f)*x); +} + +// Vectorized 2d simplex noise. +float noise2d(float v1, float v2) { + + const float C[] = { + 0.211324865405187, + 0.366025403784439, + -0.577350269189626, + 0.024390243902439 }; + + // First corner + float i[2]; + i[0] = floorf(v1 + v1*C[1] + v2*C[1]); + i[1] = floorf(v2 + v1*C[1] + v2*C[1]); + + float x0[2]; + x0[0] = v1 - i[0] + i[0]*C[0] + i[1]*C[0]; + x0[1] = v2 - i[1] + i[0]*C[0] + i[1]*C[0]; + + // Other corners + float i1[2]; + if (x0[0] > x0[1]) { + i1[0] = 1; + i1[1] = 0; + } else { + i1[0] = 0; + i1[1] = 1; + } + + float x12[4]; + x12[0] = x0[0] + C[0] - i1[0]; + x12[1] = x0[1] + C[0] - i1[1]; + x12[2] = x0[0] + C[2]; + x12[3] = x0[1] + C[2]; + + // Permutations + i[0] = mod289(i[0]); + i[1] = mod289(i[1]); + + float p[3]; + p[0] = permute(permute(i[1]) + i[0]); + p[1] = permute(permute(i[1] + i1[1]) + i[0] + i1[0]); + p[2] = permute(permute(i[1] + 1) + i[0] + 1); + + float m[3]; + m[0] = std::max(0.5 - x0[0]*x0[0] - x0[1]*x0[1], 0); + m[1] = std::max(0.5 - x12[0]*x12[0] - x12[1]*x12[1], 0); + m[2] = std::max(0.5 - x12[2]*x12[2] - x12[3]*x12[3], 0); + + m[0] = m[0] * m[0] * m[0] * m[0]; + m[1] = m[1] * m[1] * m[1] * m[1]; + m[2] = m[2] * m[2] * m[2] * m[2]; + + // Gradients + float tmp; + + float x[3]; + x[0] = 2 * modff(p[0] * C[3], &tmp) - 1; + x[1] = 2 * modff(p[1] * C[3], &tmp) - 1; + x[2] = 2 * modff(p[2] * C[3], &tmp) - 1; + + float h[3]; + h[0] = fabsf(x[0]) - 0.5f; + h[1] = fabsf(x[1]) - 0.5f; + h[2] = fabsf(x[2]) - 0.5f; + + float ox[3]; + ox[0] = floorf(x[0] + 0.5f); + ox[1] = floorf(x[1] + 0.5f); + ox[2] = floorf(x[2] + 0.5f); + + float a0[3]; + a0[0] = x[0] - ox[0]; + a0[1] = x[1] - ox[1]; + a0[2] = x[2] - ox[2]; + + // Normalize + m[0] *= 1.79284291400159f - 0.85373472095314f * (a0[0]*a0[0] + h[0]*h[0]); + m[1] *= 1.79284291400159f - 0.85373472095314f * (a0[1]*a0[1] + h[1]*h[1]); + m[2] *= 1.79284291400159f - 0.85373472095314f * (a0[2]*a0[2] + h[2]*h[2]); + + // Compute final value + float g[3]; + g[0] = a0[0] * x0[0] + h[0] * x0[1]; + g[1] = a0[1] * x12[0] + h[1] * x12[1]; + g[2] = a0[2] * x12[2] + h[2] * x12[3]; + + return 130 * (m[0] * g[0] + m[1] * g[1] + m[2] * g[2]); +} diff --git a/src/utils/helpers.hpp b/src/utils/helpers.hpp new file mode 100644 index 000000000..c13028666 --- /dev/null +++ b/src/utils/helpers.hpp @@ -0,0 +1,40 @@ +// +// SuperTuxKart - a fun racing game with go-kart +// Copyright (C) 2013 Lauri Kasanen +// +// 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 HELPERS_H +#define HELPERS_H + +#include + +using irr::video::ITexture; + +float smootherstep(float, float, float); +float clampf(float, float, float); + +float mix(float x, float y, float a); + +unsigned ispow(const unsigned in); +unsigned npow(unsigned in); + +void savetex(ITexture *tex, const char *name = NULL); + +float noise2d(float v1, float v2 = 0); + +u8 shash8(const u8 * const data, const u16 size); + +#endif diff --git a/src/utils/interpolation_array.hpp b/src/utils/interpolation_array.hpp index b018fc855..19d168427 100644 --- a/src/utils/interpolation_array.hpp +++ b/src/utils/interpolation_array.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2012 Joerg Henrichs +// Copyright (C) 2012-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/utils/leak_check.cpp b/src/utils/leak_check.cpp index d4611c1ce..ef9519ddd 100644 --- a/src/utils/leak_check.cpp +++ b/src/utils/leak_check.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011-2012 Marianne Gagnon, Joerg Henrichs +// Copyright (C) 2011-2013 Marianne Gagnon, 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 diff --git a/src/utils/leak_check.hpp b/src/utils/leak_check.hpp index b72d0ee3a..aa1318c03 100644 --- a/src/utils/leak_check.hpp +++ b/src/utils/leak_check.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011-2012 Marianne Gagnon, Joerg Henrichs +// Copyright (C) 2011-2013 Marianne Gagnon, 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 diff --git a/src/utils/log.cpp b/src/utils/log.cpp index b73c8aa68..98e58a8e3 100644 --- a/src/utils/log.cpp +++ b/src/utils/log.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2013 Joerg Henrichs +// Copyright (C) 2013-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -67,9 +67,9 @@ void Log::setTerminalColor(LogLevel level) #else enum TermAttr { - TERM_RESET = 0, // "normal" mode + TERM_RESET = 0, // "normal" mode TERM_BRIGHT = 1,// more luminosity for the foreground - TERM_DIM = 2, // less luminosity for the foreground + TERM_DIM = 2, // less luminosity for the foreground }; enum TermColor @@ -165,7 +165,7 @@ void Log::printMessage(int level, const char *component, const char *format, } // If we don't have a console file, write to stdout and hope for the best - if(!m_file_stdout || + if(!m_file_stdout || level >= LL_WARN || UserConfigParams::m_log_errors_to_console) // log to console & file { VALIST out; diff --git a/src/utils/log.hpp b/src/utils/log.hpp index 46627cec2..20125ce98 100644 --- a/src/utils/log.hpp +++ b/src/utils/log.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2013 Joerg Henrichs +// Copyright (C) 2013-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/utils/no_copy.hpp b/src/utils/no_copy.hpp index eb60eccaf..3011698eb 100644 --- a/src/utils/no_copy.hpp +++ b/src/utils/no_copy.hpp @@ -1,20 +1,21 @@ -/* -Copyright (C) 2003 Matthias Braun +// SuperTuxKart - a fun racing game with go-kart +// +// Copyright (C) 2003 Matthias-2013 Braun +// +// 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 -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 __NOCOPY_H__ #define __NOCOPY_H__ diff --git a/src/utils/profiler.cpp b/src/utils/profiler.cpp index 3b053ea96..0d5a10e28 100644 --- a/src/utils/profiler.cpp +++ b/src/utils/profiler.cpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004 SuperTuxKart-Team +// Copyright (C) 2004-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -64,7 +64,7 @@ Profiler profiler; //----------------------------------------------------------------------------- Profiler::Profiler() { - m_thread_infos.resize(1); // TODO: monothread now, should support multithreading + m_thread_infos.resize(1); // TODO: monothread now, should support multithreading m_write_id = 0; m_time_last_sync = _getTimeMilliseconds(); m_time_between_sync = 0.0; @@ -101,7 +101,7 @@ void Profiler::popCpuMarker() if(m_freeze_state == FROZEN || m_freeze_state == WAITING_FOR_UNFREEZE) return; - ThreadInfo& ti = getThreadInfo(); + ThreadInfo& ti = getThreadInfo(); assert(ti.markers_stack[m_write_id].size() > 0); MarkerStack& markers_stack = ti.markers_stack[m_write_id]; @@ -195,7 +195,7 @@ void Profiler::draw() int read_id = !m_write_id; // Compute some values for drawing (unit: pixels, but we keep floats for reducing errors accumulation) - core::dimension2d screen_size = driver->getScreenSize(); + core::dimension2d screen_size = driver->getScreenSize(); const double profiler_width = (1.0 - 2.0*MARGIN_X) * screen_size.Width; const double x_offset = MARGIN_X*screen_size.Width; const double y_offset = (MARGIN_Y + LINE_HEIGHT)*screen_size.Height; @@ -220,12 +220,12 @@ void Profiler::draw() MarkerList::const_iterator it_end = markers.end(); for(MarkerList::const_iterator it = markers.begin() ; it != it_end ; it++) { - const Marker& m = *it; + const Marker& m = *it; assert(m.end >= 0.0); - core::rect pos((s32)( x_offset + factor*m.start ), - (s32)( y_offset + i*line_height ), - (s32)( x_offset + factor*m.end ), - (s32)( y_offset + (i+1)*line_height )); + core::rect pos((s32)( x_offset + factor*m.start ), + (s32)( y_offset + i*line_height ), + (s32)( x_offset + factor*m.end ), + (s32)( y_offset + (i+1)*line_height )); // Reduce vertically the size of the markers according to their layer pos.UpperLeftCorner.Y += m.layer; diff --git a/src/utils/profiler.hpp b/src/utils/profiler.hpp index 3434f170b..738e2e633 100644 --- a/src/utils/profiler.hpp +++ b/src/utils/profiler.hpp @@ -1,5 +1,5 @@ // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004 SuperTuxKart-Team +// Copyright (C) 2004-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -77,8 +77,8 @@ private: } }; - typedef std::list MarkerList; - typedef std::stack MarkerStack; + typedef std::list MarkerList; + typedef std::stack MarkerStack; struct ThreadInfo { @@ -86,7 +86,7 @@ private: MarkerStack markers_stack[2]; }; - typedef std::vector ThreadInfoList; + typedef std::vector ThreadInfoList; ThreadInfoList m_thread_infos; int m_write_id; diff --git a/src/utils/ptr_vector.hpp b/src/utils/ptr_vector.hpp index 34ccbda32..64a5ed089 100644 --- a/src/utils/ptr_vector.hpp +++ b/src/utils/ptr_vector.hpp @@ -1,18 +1,21 @@ -/* - 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. +// SuperTuxKart - a fun racing game with go-kart +// +// Copyright (C) 2009-2013 Marianne Gagnon +// +// 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. - 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 diff --git a/src/utils/random_generator.cpp b/src/utils/random_generator.cpp index 7ff3ff72a..0105e700b 100644 --- a/src/utils/random_generator.cpp +++ b/src/utils/random_generator.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2008 Joerg Henrichs +// Copyright (C) 2008-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/utils/random_generator.hpp b/src/utils/random_generator.hpp index e5f3c0123..c4ccd52d7 100644 --- a/src/utils/random_generator.hpp +++ b/src/utils/random_generator.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2008 Joerg Henrichs +// Copyright (C) 2008-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -21,6 +21,7 @@ #include #include +#include /** A random number generator. Each objects that needs a random number uses its own number random generator. They are all seeded with number provided diff --git a/src/utils/string_utils.cpp b/src/utils/string_utils.cpp index b0f86de22..f1bc44cc6 100644 --- a/src/utils/string_utils.cpp +++ b/src/utils/string_utils.cpp @@ -1,7 +1,8 @@ -// // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004 Steve Baker , -// Ingo Ruhnke +// +// Copyright (C) 2004-2013 Steve Baker , +// Copyright (C) 2004-2013 Ingo Ruhnke +// Copyright (C) 2006-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -672,54 +673,56 @@ namespace StringUtils // ------------------------------------------------------------------------ /** Converts a version string (in the form of 'X.Y.Za-rcU' into an - * integer number. - * \param s The version string to convert. - */ + * integer number. + * \param s The version string to convert. + */ int versionToInt(const std::string &version_string) { - // Special case: SVN - if(version_string=="SVN" || version_string=="svn") - // SVN version will be version 99.99.99i-rcJ - return 1000000*99 - + 10000*99 - + 100*99 - + 10* 9 - + 9; + // Special case: SVN + if(version_string=="SVN" || version_string=="svn") + { + // SVN version will be version 99.99.99i-rcJ + return 1000000*99 + + 10000*99 + + 100*99 + + 10* 9 + + 9; + } - std::string s=version_string; - // To guarantee that a release gets a higher version number than - // a release candidate, we assign a 'release_candidate' number - // of 9 to versions which are not a RC. We assert that any RC - // is less than 9 to guarantee the ordering. - int release_candidate=9; - if(s.length()>4 && sscanf(s.substr(s.length()-4, 4).c_str(), "-rc%d", - &release_candidate)==1) - { - s = s.substr(0, s.length()-4); - // Otherwise a RC can get a higher version number than - // the corresponding release! If this should ever get - // triggered, multiply all scaling factors above and - // below by 10, to get two digits for RC numbers. - assert(release_candidate<9); - } - int very_minor=0; - if(s.length()>0 && s[s.size()-1]>='a' && s[s.size()-1]<='z') - { - very_minor = s[s.size()-1]-'a'+1; - s = s.substr(0, s.size()-1); - } - std::vector l = StringUtils::split(s, '.'); - while(l.size()<3) - l.push_back("0"); - int version = 1000000*atoi(l[0].c_str()) - + 10000*atoi(l[1].c_str()) - + 100*atoi(l[2].c_str()) - + 10*very_minor - + release_candidate; + std::string s=version_string; + // To guarantee that a release gets a higher version number than + // a release candidate, we assign a 'release_candidate' number + // of 9 to versions which are not a RC. We assert that any RC + // is less than 9 to guarantee the ordering. + int release_candidate=9; + if(s.length()>4 && sscanf(s.substr(s.length()-4, 4).c_str(), "-rc%d", + &release_candidate)==1) + { + s = s.substr(0, s.length()-4); + // Otherwise a RC can get a higher version number than + // the corresponding release! If this should ever get + // triggered, multiply all scaling factors above and + // below by 10, to get two digits for RC numbers. + assert(release_candidate<9); + } + int very_minor=0; + if(s.length()>0 && s[s.size()-1]>='a' && s[s.size()-1]<='z') + { + very_minor = s[s.size()-1]-'a'+1; + s = s.substr(0, s.size()-1); + } + std::vector l = StringUtils::split(s, '.'); + while(l.size()<3) + l.push_back("0"); + int version = 1000000*atoi(l[0].c_str()) + + 10000*atoi(l[1].c_str()) + + 100*atoi(l[2].c_str()) + + 10*very_minor + + release_candidate; - if(version<=0) - printf("Invalid version string '%s'.\n", s.c_str()); - return version; + if(version<=0) + printf("Invalid version string '%s'.\n", s.c_str()); + return version; } // versionToInt const char* boolstr(bool b) diff --git a/src/utils/string_utils.hpp b/src/utils/string_utils.hpp index 1b02bc88c..7b3063663 100644 --- a/src/utils/string_utils.hpp +++ b/src/utils/string_utils.hpp @@ -1,7 +1,8 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004 Steve Baker , -// Ingo Ruhnke +// Copyright (C) 2004-2013 Steve Baker , +// Copyright (C) 2004-2013 Ingo Ruhnke +// Copyright (C) 2006-2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/utils/synchronised.hpp b/src/utils/synchronised.hpp index 5fe1f2a4b..0794e76ca 100644 --- a/src/utils/synchronised.hpp +++ b/src/utils/synchronised.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2010 Joerg Henrichs +// Copyright (C) 2010-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/utils/time.cpp b/src/utils/time.cpp new file mode 100644 index 000000000..68a0e24b2 --- /dev/null +++ b/src/utils/time.cpp @@ -0,0 +1,48 @@ +// +// SuperTuxKart - a fun racing game with go-kart +// Copyright (C) 2013 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 "utils/time.hpp" + +#include "graphics/irr_driver.hpp" + +#include + +/** Returns a time based on an arbitrary 'epoch' (e.g. could be start + * time of the application, 1.1.1970, ...). + * The value is a double precision floating point value in seconds. + */ +double StkTime::getRealTime(long startAt) +{ + return irr_driver->getRealTime()/1000.0; +} // getTimeSinceEpoch + +// ---------------------------------------------------------------------------- +/** Returns the current date. + * \param day Day (1 - 31). + * \param month (1-12). + * \param year (4 digits). + */ +void StkTime::getDate(int *day, int *month, int *year) +{ + std::time_t t = std::time(0); // get time now + std::tm * now = std::localtime(&t); + + if(day) *day = now->tm_mday; + if(month) *month = now->tm_mon + 1; + if(year) *year = now->tm_year + 1900; +} // getDate diff --git a/src/utils/time.hpp b/src/utils/time.hpp index 30b87a731..fc324b0e4 100644 --- a/src/utils/time.hpp +++ b/src/utils/time.hpp @@ -1,6 +1,6 @@ -// // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2004 Steve Baker +// +// Copyright (C) 2013 SuperTuxKart-Team // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -31,14 +31,17 @@ #endif #include -#include "graphics/irr_driver.hpp" +#include -class Time +class StkTime { public: typedef time_t TimeType; - /** Converts the time in this object to a human readable string. */ + static double getRealTime(long startAt=0); + static void getDate(int *day=NULL, int *month=NULL, int *year=NULL); + + /** Converts the time in this object to a human readable string. */ static std::string toString(const TimeType &tt) { const struct tm *t = gmtime(&tt); @@ -78,16 +81,6 @@ public: #endif }; // getTimeSinceEpoch - // ------------------------------------------------------------------------ - /** Returns a time based on an arbitrary 'epoch' (e.g. could be start - * time of the application, 1.1.1970, ...). - * The value is a double precision floating point value in seconds. - */ - static double getRealTime(long startAt=0) - { - return irr_driver->getDevice()->getTimer()->getRealTime()/1000.0; - }; // getTimeSinceEpoch - // ------------------------------------------------------------------------ /** * \brief Compare two different times. @@ -115,8 +108,9 @@ public: t.tm_mon += month; t.tm_mday += day; return mktime(&t); - } + } // addInterval + // ------------------------------------------------------------------------ class ScopeProfiler { float m_time; @@ -132,7 +126,7 @@ public: float f2 = (float)getRealTime(); printf("} // took %f s\n", (f2 - m_time)); } - }; + }; // class ScopeProfiler }; // namespace time #endif diff --git a/src/utils/translation.cpp b/src/utils/translation.cpp index 02b92aef6..47b6d7471 100644 --- a/src/utils/translation.cpp +++ b/src/utils/translation.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006, 2007, 2008 Joerg Henrichs +// Copyright (C) 2006,-2013 2007, 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 diff --git a/src/utils/translation.hpp b/src/utils/translation.hpp index eace82029..c7fc7d58b 100644 --- a/src/utils/translation.hpp +++ b/src/utils/translation.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2006 Joerg Henrichs +// Copyright (C) 2006-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/utils/vec3.cpp b/src/utils/vec3.cpp index caab87088..6595119ba 100644 --- a/src/utils/vec3.cpp +++ b/src/utils/vec3.cpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2008 Joerg Henrichs +// Copyright (C) 2008-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/utils/vec3.hpp b/src/utils/vec3.hpp index 211ca5458..77d894369 100644 --- a/src/utils/vec3.hpp +++ b/src/utils/vec3.hpp @@ -1,6 +1,6 @@ // // SuperTuxKart - a fun racing game with go-kart -// Copyright (C) 2011 Joerg Henrichs +// Copyright (C) 2011-2013 Joerg Henrichs // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License diff --git a/src/utils/vs.hpp b/src/utils/vs.hpp new file mode 100644 index 000000000..68045956b --- /dev/null +++ b/src/utils/vs.hpp @@ -0,0 +1,12 @@ +// Visual studio workarounds in one place + +#if defined(_MSC_VER) +# include +# include +# include + +# define isnan _isnan +//# define round(x) (floor(x + 0.5f)) +# define roundf(x) (floor(x + 0.5f)) +#endif + diff --git a/src/windows_installer/logo_slim.bmp b/src/windows_installer/logo_slim.bmp new file mode 100644 index 000000000..99f734ceb Binary files /dev/null and b/src/windows_installer/logo_slim.bmp differ diff --git a/src/windows_installer/stk_installer.bmp b/src/windows_installer/stk_installer.bmp new file mode 100644 index 000000000..2d5dfcc93 Binary files /dev/null and b/src/windows_installer/stk_installer.bmp differ diff --git a/src/windows_installer/supertuxkart.nsi b/src/windows_installer/supertuxkart.nsi index b3ec37cd2..d3c3196d4 100644 --- a/src/windows_installer/supertuxkart.nsi +++ b/src/windows_installer/supertuxkart.nsi @@ -17,14 +17,16 @@ ;-------------------------------- ;Include Modern UI - !include "MUI.nsh" + !include "MUI2.nsh" ;-------------------------------- ;General ;Name and file - Name "SuperTuxKart for Windows" - OutFile "supertuxkart-win.exe" + Name "SuperTuxKart" + OutFile "supertuxkart.exe" + + RequestExecutionLevel admin ;Default installation folder InstallDir "$PROGRAMFILES\SuperTuxKart" @@ -38,6 +40,11 @@ ;Set the icon !define MUI_ICON "SuperTuxKart\install.ico" !define MUI_UNICON "SuperTuxKart\uninstall.ico" + !define MUI_HEADERIMAGE + !define MUI_WELCOMEFINISHPAGE_BITMAP "stk_installer.bmp" + !define MUI_HEADERIMAGE_BITMAP "logo_slim.bmp" + ;!define MUI_TEXT_INSTALLING_SUBTITLE "Please vote for SuperTuxKart to become SourceForge's Project of the month at vote.supertuxkart.net" + ;!define MUI_TEXT_FINISH_INFO_TEXT "Please vote for SuperTuxKart to become $\"Project of the Month$\" at vote.supertuxkart.net" ;Sets the compressor to /SOLID lzma which when I tested was the best SetCompressor /SOLID lzma @@ -60,14 +67,14 @@ Function validate_dir IfFileExists $INSTDIR\data\*.* 0 return IfFileExists $INSTDIR\Uninstall.exe 0 dont_uninstall - MessageBox MB_YESNO "You can't install SuperTuxKart 0.8 in an existing directory. Do you wish to run the uninstaller in $INSTDIR?" IDNO dont_uninstall + MessageBox MB_YESNO "You can't install SuperTuxKart 0.8.1-rc1 in an existing directory. Do you wish to run the uninstaller in $INSTDIR?" IDNO dont_uninstall ; -?=$INSTDIR makes sure that this installer waits for the uninstaller ; to finish. The uninstaller (and directory) are not removed, but the ; uninstaller will be overwritten by our installer anyway. ExecWait '"$INSTDIR\Uninstall.exe" _?=$INSTDIR' goto return dont_uninstall: - MessageBox MB_OK "You can't install SuperTuxKart 0.8 in an existing directory. Please select a new directory." + MessageBox MB_OK "You can't install SuperTuxKart 0.8.1-rc1 in an existing directory. Please select a new directory." abort return: FunctionEnd @@ -88,6 +95,8 @@ FunctionEnd !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER !insertmacro MUI_PAGE_INSTFILES + ;!define MUI_FINISHPAGE_LINK "Please vote for SuperTuxkart here" + ;!define MUI_FINISHPAGE_LINK_LOCATION "http://vote.supertuxkart.net" !insertmacro MUI_PAGE_FINISH @@ -103,6 +112,7 @@ FunctionEnd !insertmacro MUI_LANGUAGE "English" ;-------------------------------- + ;Installer Sections Section "Main Section" SecMain @@ -155,8 +165,9 @@ Section "Uninstall"redist Delete "$INSTDIR\Uninstall.exe" RMDir "$INSTDIR" + SetShellVarContext all - ;Remove start menuy items + ;Remove start menu items !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk"