Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
7c2039c37a |
20
ChangeLog
20
ChangeLog
@@ -1,23 +1,3 @@
|
|||||||
SuperTuxKart 0.6.2 (July 2009)
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
* Bugfix: game could crash in rare circumstances.
|
|
||||||
* Bugfix: Restarting a GP (with the in-race menu ESC) would
|
|
||||||
not subtract already allocated points.
|
|
||||||
* Bugfix: A race could be finished with an invalid shortcut.
|
|
||||||
* Bugfix: Playing a challenge after a splitscreen game would
|
|
||||||
play the challenge in split screen.
|
|
||||||
* Bugfix: Items explode over void.
|
|
||||||
* Bugfix: Grass in castle arena slowed down the kart.
|
|
||||||
* Bugfix: GP result showed kart identifier instead of name.
|
|
||||||
* Improvement: there is now 1 1 sec. wait period for the race
|
|
||||||
result screen, avoiding the problem that someone
|
|
||||||
presses space/enter at the end of a race, immediately
|
|
||||||
quitting the menu before it can be read.
|
|
||||||
|
|
||||||
SuperTuxKart 0.6.1a (February 2009)
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
* Bugfix: battle mode would not display track groups.
|
|
||||||
|
|
||||||
SuperTuxKart 0.6.1 (February 2009)
|
SuperTuxKart 0.6.1 (February 2009)
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
* Added new kart ("Puffy"), new battle map ("Cave"), and new music
|
* Added new kart ("Puffy"), new battle map ("Cave"), and new music
|
||||||
|
13
NEWS
13
NEWS
@@ -1,16 +1,3 @@
|
|||||||
SuperTuxkart 0.6.2 (July 2009)
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
* Bugfix: battle mode would not display track groups.
|
|
||||||
|
|
||||||
SuperTuxkart 0.6.1 (Feburary 2009)
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
* Added new kart ("Puffy"), new battle map ("Cave"), and new music
|
|
||||||
for Snow Mountain.
|
|
||||||
* Added slow-down for karts driving backwards.
|
|
||||||
* Somewhat reduced 'shaking' of AI driven karts.
|
|
||||||
* Fixed several bugs, including incorrect rescues, and track
|
|
||||||
and kart selection issues.
|
|
||||||
|
|
||||||
SuperTuxKart 0.5 (May 2008)
|
SuperTuxKart 0.5 (May 2008)
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
* Six new tracks and one improved track: Fort Magma, SnowTux Peak, Amazonian Journey, City,
|
* Six new tracks and one improved track: Fort Magma, SnowTux Peak, Amazonian Journey, City,
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
dnl Process this file with autogen.sh to produce a configure script.
|
dnl Process this file with autogen.sh to produce a configure script.
|
||||||
|
|
||||||
AC_INIT(supertuxkart, 0.6.2)
|
AC_INIT(supertuxkart, 0.6.1)
|
||||||
AC_CONFIG_SRCDIR([src/main.cpp])
|
AC_CONFIG_SRCDIR([src/main.cpp])
|
||||||
|
|
||||||
AC_PREREQ(2.61)
|
AC_PREREQ(2.61)
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
Super TuxKart - 0.6.2
|
Super TuxKart - 0.6.1
|
||||||
=====================
|
=====================
|
||||||
Visit us at http://supertuxkart.sourceforge.net
|
Visit us at http://supertuxkart.sourceforge.net
|
||||||
|
|
||||||
|
@@ -48,7 +48,7 @@ void GLDebugDrawer::draw3dText(const btVector3& location,const char* textString)
|
|||||||
|
|
||||||
void GLDebugDrawer::reportErrorWarning(const char* warningString)
|
void GLDebugDrawer::reportErrorWarning(const char* warningString)
|
||||||
{
|
{
|
||||||
printf("%s", warningString);
|
printf(warningString);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLDebugDrawer::drawContactPoint(const btVector3& pointOnB,const btVector3& normalOnB,btScalar distance,int lifeTime,const btVector3& color)
|
void GLDebugDrawer::drawContactPoint(const btVector3& pointOnB,const btVector3& normalOnB,btScalar distance,int lifeTime,const btVector3& color)
|
||||||
|
@@ -219,7 +219,6 @@ void ChallengeData::setRace() const
|
|||||||
race_manager->setNumLaps(m_num_laps);
|
race_manager->setNumLaps(m_num_laps);
|
||||||
race_manager->setNumKarts(m_num_karts);
|
race_manager->setNumKarts(m_num_karts);
|
||||||
race_manager->setNumPlayers(1);
|
race_manager->setNumPlayers(1);
|
||||||
race_manager->setNumLocalPlayers(1);
|
|
||||||
race_manager->setCoinTarget(m_energy);
|
race_manager->setCoinTarget(m_energy);
|
||||||
}
|
}
|
||||||
else // GP
|
else // GP
|
||||||
@@ -230,7 +229,6 @@ void ChallengeData::setRace() const
|
|||||||
race_manager->setDifficulty(m_difficulty);
|
race_manager->setDifficulty(m_difficulty);
|
||||||
race_manager->setNumKarts(m_num_karts);
|
race_manager->setNumKarts(m_num_karts);
|
||||||
race_manager->setNumPlayers(1);
|
race_manager->setNumPlayers(1);
|
||||||
race_manager->setNumLocalPlayers(1);
|
|
||||||
//race_manager->setGrandPrix();
|
//race_manager->setGrandPrix();
|
||||||
}
|
}
|
||||||
} // setRace
|
} // setRace
|
||||||
|
@@ -52,7 +52,7 @@ GrandPrixData::GrandPrixData(const std::string filename)
|
|||||||
catch(std::exception& err)
|
catch(std::exception& err)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Error while reading grandprix file '%s'\n", filename.c_str());
|
fprintf(stderr, "Error while reading grandprix file '%s'\n", filename.c_str());
|
||||||
fprintf(stderr, "%s", err.what());
|
fprintf(stderr, err.what());
|
||||||
fprintf(stderr, "\n");
|
fprintf(stderr, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -80,11 +80,8 @@ GrandPrixEnd::GrandPrixEnd()
|
|||||||
}
|
}
|
||||||
|
|
||||||
static char output[MAX_MESSAGE_LENGTH];
|
static char output[MAX_MESSAGE_LENGTH];
|
||||||
const std::string kart_id = race_manager->getKartName(winner_kart_id);
|
snprintf(output, sizeof(output),
|
||||||
const KartProperties* winning_kart = kart_properties_manager->getKart(kart_id);
|
_("The winner is %s!"),race_manager->getKartName(winner_kart_id).c_str()); // FIXME - uses inner-name and not user name
|
||||||
|
|
||||||
snprintf(output, sizeof(output),
|
|
||||||
_("The winner is %s!"),winning_kart->getName().c_str());
|
|
||||||
widget_manager->addWgt( WTOK_TITLE, 60, 10);
|
widget_manager->addWgt( WTOK_TITLE, 60, 10);
|
||||||
widget_manager->showWgtRect(WTOK_TITLE);
|
widget_manager->showWgtRect(WTOK_TITLE);
|
||||||
widget_manager->showWgtText(WTOK_TITLE);
|
widget_manager->showWgtText(WTOK_TITLE);
|
||||||
|
@@ -91,7 +91,7 @@ void RaceMenu::select()
|
|||||||
case WTOK_RESTART_RACE:
|
case WTOK_RESTART_RACE:
|
||||||
menu_manager->popMenu();
|
menu_manager->popMenu();
|
||||||
if(user_config->m_fullscreen) SDL_ShowCursor(SDL_DISABLE);
|
if(user_config->m_fullscreen) SDL_ShowCursor(SDL_DISABLE);
|
||||||
race_manager->rerunRace();
|
RaceManager::getWorld()->restartRace();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WTOK_OPTIONS:
|
case WTOK_OPTIONS:
|
||||||
|
@@ -31,18 +31,8 @@
|
|||||||
#include "network/network_manager.hpp"
|
#include "network/network_manager.hpp"
|
||||||
#include "utils/translation.hpp"
|
#include "utils/translation.hpp"
|
||||||
|
|
||||||
/** It can happen (e.g. if a player has skidding assigned to space or enter)
|
|
||||||
* that a selection key is still pressed when this menu is shown (e.g. follow
|
|
||||||
* the leader race which doesn't have a end-race-camera). To avoid that this
|
|
||||||
* menu is left as soon as it is entered (since back to main menu is selected
|
|
||||||
* as default), WAITING_TIME seconds have to pass before a selection is
|
|
||||||
* accepted. Admittedly a somehwat ugly work around.
|
|
||||||
*/
|
|
||||||
#define WAITING_TIME 1
|
|
||||||
|
|
||||||
RaceResultsGUI::RaceResultsGUI()
|
RaceResultsGUI::RaceResultsGUI()
|
||||||
{
|
{
|
||||||
m_waiting_time = WAITING_TIME;
|
|
||||||
m_first_time = true;
|
m_first_time = true;
|
||||||
m_selected_widget = WTOK_NONE;
|
m_selected_widget = WTOK_NONE;
|
||||||
|
|
||||||
@@ -227,10 +217,6 @@ RaceResultsGUI::~RaceResultsGUI()
|
|||||||
*/
|
*/
|
||||||
void RaceResultsGUI::select()
|
void RaceResultsGUI::select()
|
||||||
{
|
{
|
||||||
// Ignore a selection if the menu is still in 'waiting' mode. This helps
|
|
||||||
// in case that someone presses space or enter while a FTL race finishes
|
|
||||||
// --> this menu isn't immediately canceled.
|
|
||||||
if(m_waiting_time>=0) return;
|
|
||||||
// Push the unlocked-feature menu in for now
|
// Push the unlocked-feature menu in for now
|
||||||
if(unlock_manager->getUnlockedFeatures().size()>0)
|
if(unlock_manager->getUnlockedFeatures().size()>0)
|
||||||
{
|
{
|
||||||
@@ -242,6 +228,7 @@ void RaceResultsGUI::select()
|
|||||||
// The selected token is saved here, which triggers a change of the text
|
// The selected token is saved here, which triggers a change of the text
|
||||||
// in update().
|
// in update().
|
||||||
m_selected_widget = (WidgetTokens)widget_manager->getSelectedWgt();
|
m_selected_widget = (WidgetTokens)widget_manager->getSelectedWgt();
|
||||||
|
|
||||||
// Clients send the ack to the server
|
// Clients send the ack to the server
|
||||||
if(network_manager->getMode()==NetworkManager::NW_CLIENT)
|
if(network_manager->getMode()==NetworkManager::NW_CLIENT)
|
||||||
network_manager->sendRaceResultAck();
|
network_manager->sendRaceResultAck();
|
||||||
@@ -286,7 +273,6 @@ void RaceResultsGUI::setSelectedWidget(int token)
|
|||||||
*/
|
*/
|
||||||
void RaceResultsGUI::update(float dt)
|
void RaceResultsGUI::update(float dt)
|
||||||
{
|
{
|
||||||
m_waiting_time -= dt;
|
|
||||||
BaseGUI::update(dt);
|
BaseGUI::update(dt);
|
||||||
// If an item is selected (for the first time), change the text
|
// If an item is selected (for the first time), change the text
|
||||||
// so that the user has feedback about his selection.
|
// so that the user has feedback about his selection.
|
||||||
|
@@ -51,8 +51,6 @@ private:
|
|||||||
WidgetTokens m_selected_widget;
|
WidgetTokens m_selected_widget;
|
||||||
Widget *displayRaceResults();
|
Widget *displayRaceResults();
|
||||||
Widget *displayKartList(Widget *w_prev, int *order, float horizontal);
|
Widget *displayKartList(Widget *w_prev, int *order, float horizontal);
|
||||||
/** Waiting time before this menu can be left. */
|
|
||||||
float m_waiting_time;
|
|
||||||
public:
|
public:
|
||||||
RaceResultsGUI();
|
RaceResultsGUI();
|
||||||
~RaceResultsGUI();
|
~RaceResultsGUI();
|
||||||
|
@@ -166,16 +166,17 @@ void TrackSel::updateScrollPosition()
|
|||||||
void TrackSel::switchGroup()
|
void TrackSel::switchGroup()
|
||||||
{
|
{
|
||||||
m_index_avail_tracks.clear();
|
m_index_avail_tracks.clear();
|
||||||
bool is_battle_mode = RaceManager::isBattleMode(race_manager->getMinorMode());
|
bool group_available =
|
||||||
bool group_available = is_battle_mode
|
(RaceManager::isBattleMode( race_manager->getMinorMode() )
|
||||||
? track_manager->getArenasInGroup(user_config->m_track_group).size()>0
|
? track_manager->getArenasInGroup(user_config->m_track_group)
|
||||||
: track_manager->getTracksInGroup(user_config->m_track_group).size()>0;
|
: track_manager->getTracksInGroup(user_config->m_track_group)).size()>0;
|
||||||
if(!group_available)
|
if(!group_available)
|
||||||
user_config->m_track_group = "standard";
|
user_config->m_track_group = "standard";
|
||||||
|
|
||||||
const std::vector<int> &tracks = is_battle_mode
|
const std::vector<int> &tracks =
|
||||||
? track_manager->getArenasInGroup(user_config->m_track_group)
|
RaceManager::isBattleMode( race_manager->getMinorMode() ) ?
|
||||||
: track_manager->getTracksInGroup(user_config->m_track_group);
|
track_manager->getArenasInGroup(user_config->m_track_group) :
|
||||||
|
track_manager->getTracksInGroup(user_config->m_track_group);
|
||||||
|
|
||||||
for(unsigned int i=0; i<tracks.size(); i++)
|
for(unsigned int i=0; i<tracks.size(); i++)
|
||||||
{
|
{
|
||||||
@@ -196,9 +197,7 @@ void TrackSel::switchGroup()
|
|||||||
|
|
||||||
// Check if there are any tracks available in this group - i.e. not only locked
|
// Check if there are any tracks available in this group - i.e. not only locked
|
||||||
// tracks, and not only non-arena if arena mode (and vice versa).
|
// tracks, and not only non-arena if arena mode (and vice versa).
|
||||||
const std::vector<int> &tracks_in_group = is_battle_mode
|
const std::vector<int> &tracks_in_group = track_manager->getTracksInGroup(groups[i]);
|
||||||
? track_manager->getArenasInGroup(groups[i])
|
|
||||||
: track_manager->getTracksInGroup(groups[i]);
|
|
||||||
bool ignore_group=true;
|
bool ignore_group=true;
|
||||||
for(unsigned int j=0; j<tracks_in_group.size(); j++)
|
for(unsigned int j=0; j<tracks_in_group.size(); j++)
|
||||||
{
|
{
|
||||||
@@ -206,7 +205,8 @@ void TrackSel::switchGroup()
|
|||||||
// Locked tracks are not available
|
// Locked tracks are not available
|
||||||
if(unlock_manager->isLocked(track->getIdent())) continue;
|
if(unlock_manager->isLocked(track->getIdent())) continue;
|
||||||
// Tracks of a different type are not available
|
// Tracks of a different type are not available
|
||||||
ignore_group = is_battle_mode != track->isArena();
|
ignore_group = RaceManager::isBattleMode(race_manager->getMinorMode()) !=
|
||||||
|
track->isArena();
|
||||||
if(!ignore_group) break;
|
if(!ignore_group) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -150,7 +150,7 @@ void HighscoreManager::Load()
|
|||||||
{
|
{
|
||||||
fprintf(stderr, "Error while parsing highscore file '%s':\n",
|
fprintf(stderr, "Error while parsing highscore file '%s':\n",
|
||||||
m_filename.c_str());
|
m_filename.c_str());
|
||||||
fprintf(stderr, "%s", err.what());
|
fprintf(stderr, err.what());
|
||||||
fprintf(stderr, "\n");
|
fprintf(stderr, "\n");
|
||||||
fprintf(stderr, "No old highscores will be available.\n");
|
fprintf(stderr, "No old highscores will be available.\n");
|
||||||
}
|
}
|
||||||
@@ -188,7 +188,8 @@ void HighscoreManager::Save()
|
|||||||
{
|
{
|
||||||
printf("Problems saving highscores in '%s'\n",
|
printf("Problems saving highscores in '%s'\n",
|
||||||
m_filename.c_str());
|
m_filename.c_str());
|
||||||
puts(e.what());
|
printf(e.what());
|
||||||
|
printf("\n");
|
||||||
m_can_write=false;
|
m_can_write=false;
|
||||||
}
|
}
|
||||||
} // Save
|
} // Save
|
||||||
|
@@ -15,20 +15,46 @@ Global
|
|||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
BulletDebug|Win32 = BulletDebug|Win32
|
BulletDebug|Win32 = BulletDebug|Win32
|
||||||
BulletRelease|Win32 = BulletRelease|Win32
|
BulletRelease|Win32 = BulletRelease|Win32
|
||||||
|
Debug|Win32 = Debug|Win32
|
||||||
|
Release|Win32 = Release|Win32
|
||||||
|
ReplayDebug|Win32 = ReplayDebug|Win32
|
||||||
|
ReplayRelease|Win32 = ReplayRelease|Win32
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{B1BC2764-1A43-4800-A654-788B0D05EDA2}.BulletDebug|Win32.ActiveCfg = BulletDebug|Win32
|
{B1BC2764-1A43-4800-A654-788B0D05EDA2}.BulletDebug|Win32.ActiveCfg = BulletDebug|Win32
|
||||||
{B1BC2764-1A43-4800-A654-788B0D05EDA2}.BulletDebug|Win32.Build.0 = BulletDebug|Win32
|
{B1BC2764-1A43-4800-A654-788B0D05EDA2}.BulletDebug|Win32.Build.0 = BulletDebug|Win32
|
||||||
{B1BC2764-1A43-4800-A654-788B0D05EDA2}.BulletRelease|Win32.ActiveCfg = BulletRelease|Win32
|
{B1BC2764-1A43-4800-A654-788B0D05EDA2}.BulletRelease|Win32.ActiveCfg = BulletRelease|Win32
|
||||||
{B1BC2764-1A43-4800-A654-788B0D05EDA2}.BulletRelease|Win32.Build.0 = BulletRelease|Win32
|
{B1BC2764-1A43-4800-A654-788B0D05EDA2}.BulletRelease|Win32.Build.0 = BulletRelease|Win32
|
||||||
|
{B1BC2764-1A43-4800-A654-788B0D05EDA2}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{B1BC2764-1A43-4800-A654-788B0D05EDA2}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{B1BC2764-1A43-4800-A654-788B0D05EDA2}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{B1BC2764-1A43-4800-A654-788B0D05EDA2}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{B1BC2764-1A43-4800-A654-788B0D05EDA2}.ReplayDebug|Win32.ActiveCfg = ReplayDebug|Win32
|
||||||
|
{B1BC2764-1A43-4800-A654-788B0D05EDA2}.ReplayDebug|Win32.Build.0 = ReplayDebug|Win32
|
||||||
|
{B1BC2764-1A43-4800-A654-788B0D05EDA2}.ReplayRelease|Win32.ActiveCfg = ReplayRelease|Win32
|
||||||
|
{B1BC2764-1A43-4800-A654-788B0D05EDA2}.ReplayRelease|Win32.Build.0 = ReplayRelease|Win32
|
||||||
{54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.BulletDebug|Win32.ActiveCfg = Debug|Win32
|
{54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.BulletDebug|Win32.ActiveCfg = Debug|Win32
|
||||||
{54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.BulletDebug|Win32.Build.0 = Debug|Win32
|
{54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.BulletDebug|Win32.Build.0 = Debug|Win32
|
||||||
{54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.BulletRelease|Win32.ActiveCfg = Release|Win32
|
{54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.BulletRelease|Win32.ActiveCfg = Release|Win32
|
||||||
{54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.BulletRelease|Win32.Build.0 = Release|Win32
|
{54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.BulletRelease|Win32.Build.0 = Release|Win32
|
||||||
|
{54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.ReplayDebug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{54AA44B9-B07B-49DA-8B1A-05BBFE8AD5D4}.ReplayRelease|Win32.ActiveCfg = Release|Win32
|
||||||
{B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.BulletDebug|Win32.ActiveCfg = Release|Win32
|
{B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.BulletDebug|Win32.ActiveCfg = Release|Win32
|
||||||
{B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.BulletDebug|Win32.Build.0 = Release|Win32
|
{B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.BulletDebug|Win32.Build.0 = Release|Win32
|
||||||
{B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.BulletRelease|Win32.ActiveCfg = Release|Win32
|
{B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.BulletRelease|Win32.ActiveCfg = Release|Win32
|
||||||
{B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.BulletRelease|Win32.Build.0 = Release|Win32
|
{B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.BulletRelease|Win32.Build.0 = 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}.ReplayDebug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.ReplayDebug|Win32.Build.0 = Debug|Win32
|
||||||
|
{B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.ReplayRelease|Win32.ActiveCfg = Release|Win32
|
||||||
|
{B0E92B97-089A-4D5B-BF17-77F1BC5DAEEF}.ReplayRelease|Win32.Build.0 = Release|Win32
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
@@ -517,7 +517,7 @@
|
|||||||
Optimization="0"
|
Optimization="0"
|
||||||
WholeProgramOptimization="false"
|
WholeProgramOptimization="false"
|
||||||
AdditionalIncludeDirectories="../../../src;../../../src/bullet/src;"$(STK_INCLUDE)";../../../src/enet/include"
|
AdditionalIncludeDirectories="../../../src;../../../src/bullet/src;"$(STK_INCLUDE)";../../../src/enet/include"
|
||||||
PreprocessorDefinitions="BT_NO_PROFILE;HAVE_OPENAL;HAVE_OGGVORBIS;_DEBUG;_CONSOLE;WIN32;NOMINMAX;VERSION=\"0.6.2\";_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;DEBUG;PACKAGE=\"supertuxkart\";HAVE_GETTEXT;ENABLE_NLS;HAVE_GLUT"
|
PreprocessorDefinitions="BT_NO_PROFILE;HAVE_OPENAL;HAVE_OGGVORBIS;_DEBUG;_CONSOLE;WIN32;NOMINMAX;VERSION=\"0.6.1\";_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;DEBUG;PACKAGE=\"supertuxkart\";HAVE_GETTEXT;ENABLE_NLS;HAVE_GLUT"
|
||||||
GeneratePreprocessedFile="0"
|
GeneratePreprocessedFile="0"
|
||||||
MinimalRebuild="true"
|
MinimalRebuild="true"
|
||||||
BasicRuntimeChecks="3"
|
BasicRuntimeChecks="3"
|
||||||
@@ -605,7 +605,7 @@
|
|||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
WholeProgramOptimization="true"
|
WholeProgramOptimization="true"
|
||||||
AdditionalIncludeDirectories="../../../src;../../../src/bullet/src;"$(STK_INCLUDE)";../../../src/enet/include"
|
AdditionalIncludeDirectories="../../../src;../../../src/bullet/src;"$(STK_INCLUDE)";../../../src/enet/include"
|
||||||
PreprocessorDefinitions="HAVE_OPENAL;HAVE_OGGVORBIS;NDEBUG;_CONSOLE;WIN32;NOMINMAX;VERSION=\"0.6.2\";_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;BT_NO_PROFILE;PACKAGE=\"supertuxkart\";HAVE_GETTEXT;ENABLE_NLS;HAVE_GLUT"
|
PreprocessorDefinitions="HAVE_OPENAL;HAVE_OGGVORBIS;NDEBUG;_CONSOLE;WIN32;NOMINMAX;VERSION=\"0.6.1\";_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;BT_NO_PROFILE;PACKAGE=\"supertuxkart\";HAVE_GETTEXT;ENABLE_NLS;HAVE_GLUT"
|
||||||
RuntimeLibrary="2"
|
RuntimeLibrary="2"
|
||||||
UsePrecompiledHeader="0"
|
UsePrecompiledHeader="0"
|
||||||
WarningLevel="3"
|
WarningLevel="3"
|
||||||
|
@@ -197,14 +197,7 @@ void Flyable::update (float dt)
|
|||||||
|
|
||||||
Vec3 pos=getBody()->getWorldTransform().getOrigin();
|
Vec3 pos=getBody()->getWorldTransform().getOrigin();
|
||||||
TerrainInfo::update(pos);
|
TerrainInfo::update(pos);
|
||||||
// Check if the flyable is out of the track boundary.
|
if(getHoT()==Track::NOHIT)
|
||||||
// If so, let it explode. Note: height is not tested,
|
|
||||||
// so that things can fly as high as they want to.
|
|
||||||
Vec3 min, max;
|
|
||||||
RaceManager::getTrack()->getAABB(&min, &max);
|
|
||||||
Vec3 xyz=getXYZ();
|
|
||||||
if( xyz[0]<min[0] || xyz[1]<min[1] || xyz[2]<min[2] ||
|
|
||||||
xyz[0]>max[0] || xyz[1]>max[1] )
|
|
||||||
{
|
{
|
||||||
hit(NULL); // flyable out of track boundary
|
hit(NULL); // flyable out of track boundary
|
||||||
return;
|
return;
|
||||||
|
@@ -51,7 +51,7 @@ RubberBand::RubberBand(Plunger *plunger, const Kart &kart)
|
|||||||
vertices->add(0, 0, 0); vertices->add(0, 0, 0);
|
vertices->add(0, 0, 0); vertices->add(0, 0, 0);
|
||||||
vertices->add(0, 0, 0); vertices->add(0, 0, 0);
|
vertices->add(0, 0, 0); vertices->add(0, 0, 0);
|
||||||
m_attached_state = RB_TO_PLUNGER;
|
m_attached_state = RB_TO_PLUNGER;
|
||||||
updatePosition();
|
update(0);
|
||||||
|
|
||||||
sgVec3 norm;
|
sgVec3 norm;
|
||||||
sgSetVec3(norm, 1/sqrt(2.0f), 0, 1/sqrt(2.0f));
|
sgSetVec3(norm, 1/sqrt(2.0f), 0, 1/sqrt(2.0f));
|
||||||
@@ -79,42 +79,6 @@ void RubberBand::removeFromScene()
|
|||||||
scene->remove(this);
|
scene->remove(this);
|
||||||
} // removeFromScene
|
} // removeFromScene
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
/** Updates the position of the rubber band. It especially sets the
|
|
||||||
* end position of the rubber band, i.e. the side attached to the plunger,
|
|
||||||
* track, or kart hit.
|
|
||||||
*/
|
|
||||||
void RubberBand::updatePosition()
|
|
||||||
{
|
|
||||||
const Vec3 &k = m_owner.getXYZ();
|
|
||||||
|
|
||||||
// Get the position to which the band is attached
|
|
||||||
// ----------------------------------------------
|
|
||||||
switch(m_attached_state)
|
|
||||||
{
|
|
||||||
case RB_TO_KART: m_end_position = m_hit_kart->getXYZ(); break;
|
|
||||||
case RB_TO_TRACK: m_end_position = m_hit_position; break;
|
|
||||||
case RB_TO_PLUNGER: m_end_position = m_plunger->getXYZ();
|
|
||||||
checkForHit(k, m_end_position); break;
|
|
||||||
} // switch(m_attached_state);
|
|
||||||
|
|
||||||
// Update the rubber band positions
|
|
||||||
// --------------------------------
|
|
||||||
// Todo: make height dependent on length (i.e. rubber band gets
|
|
||||||
// thinner). And call explosion if the band is too long.
|
|
||||||
const float hh=.1f; // half height of the band
|
|
||||||
const Vec3 &p=m_end_position; // for shorter typing
|
|
||||||
float *f = vertices->get(0);
|
|
||||||
f[0] = p.getX()-hh; f[1] = p.getY(); f[2] = p.getZ()-hh;
|
|
||||||
f = vertices->get(1);
|
|
||||||
f[0] = p.getX()+hh; f[1] = p.getY(); f[2] = p.getZ()+hh;
|
|
||||||
f = vertices->get(2);
|
|
||||||
f[0] = k.getX()+hh; f[1] = k.getY(); f[2] = k.getZ()+hh;
|
|
||||||
f = vertices->get(3);
|
|
||||||
f[0] = k.getX()-hh; f[1] = k.getY(); f[2] = k.getZ()-hh;
|
|
||||||
dirtyBSphere();
|
|
||||||
} // updatePosition
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
/** Updates the rubber band. It takes the new position of the kart and the
|
/** Updates the rubber band. It takes the new position of the kart and the
|
||||||
* plunger, and sets the quad representing the rubber band appropriately.
|
* plunger, and sets the quad representing the rubber band appropriately.
|
||||||
@@ -133,12 +97,38 @@ void RubberBand::update(float dt)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
updatePosition();
|
Vec3 p;
|
||||||
const Vec3 &k = m_owner.getXYZ();
|
const Vec3 &k = m_owner.getXYZ();
|
||||||
|
|
||||||
|
// Get the position to which the band is attached
|
||||||
|
// ----------------------------------------------
|
||||||
|
switch(m_attached_state)
|
||||||
|
{
|
||||||
|
case RB_TO_KART: p = m_hit_kart->getXYZ(); break;
|
||||||
|
case RB_TO_TRACK: p = m_hit_position; break;
|
||||||
|
case RB_TO_PLUNGER: p = m_plunger->getXYZ();
|
||||||
|
checkForHit(k, p); break;
|
||||||
|
} // switch(m_attached_state);
|
||||||
|
|
||||||
|
// Draw the rubber band
|
||||||
|
// --------------------
|
||||||
|
// Todo: make height dependent on length (i.e. rubber band gets
|
||||||
|
// thinner). And call explosion if the band is too long.
|
||||||
|
const float hh=.1f; // half height of the band
|
||||||
|
|
||||||
|
float *f = vertices->get(0);
|
||||||
|
f[0] = p.getX()-hh; f[1] = p.getY(); f[2] = p.getZ()-hh;
|
||||||
|
f = vertices->get(1);
|
||||||
|
f[0] = p.getX()+hh; f[1] = p.getY(); f[2] = p.getZ()+hh;
|
||||||
|
f = vertices->get(2);
|
||||||
|
f[0] = k.getX()+hh; f[1] = k.getY(); f[2] = k.getZ()+hh;
|
||||||
|
f = vertices->get(3);
|
||||||
|
f[0] = k.getX()-hh; f[1] = k.getY(); f[2] = k.getZ()-hh;
|
||||||
|
dirtyBSphere();
|
||||||
|
|
||||||
// Check for rubber band snapping
|
// Check for rubber band snapping
|
||||||
// ------------------------------
|
// ------------------------------
|
||||||
float l = (m_end_position-k).length2();
|
float l = (p-k).length2();
|
||||||
float max_len = m_owner.getKartProperties()->getRubberBandMaxLength();
|
float max_len = m_owner.getKartProperties()->getRubberBandMaxLength();
|
||||||
if(l>max_len*max_len)
|
if(l>max_len*max_len)
|
||||||
{
|
{
|
||||||
@@ -153,7 +143,7 @@ void RubberBand::update(float dt)
|
|||||||
if(m_attached_state!=RB_TO_PLUNGER)
|
if(m_attached_state!=RB_TO_PLUNGER)
|
||||||
{
|
{
|
||||||
float force = m_owner.getKartProperties()->getRubberBandForce();
|
float force = m_owner.getKartProperties()->getRubberBandForce();
|
||||||
Vec3 diff = m_end_position-k;
|
Vec3 diff = p-k;
|
||||||
|
|
||||||
// detach rubber band if kart gets very close to hit point
|
// detach rubber band if kart gets very close to hit point
|
||||||
if(m_attached_state==RB_TO_TRACK && diff.length2() < 10*10)
|
if(m_attached_state==RB_TO_TRACK && diff.length2() < 10*10)
|
||||||
|
@@ -50,12 +50,7 @@ private:
|
|||||||
/** State for rubber band. */
|
/** State for rubber band. */
|
||||||
ssgSimpleState *m_state;
|
ssgSimpleState *m_state;
|
||||||
|
|
||||||
/** Stores the end of the rubber band (i.e. the side attached to the
|
|
||||||
* plunger. */
|
|
||||||
Vec3 m_end_position;
|
|
||||||
|
|
||||||
void checkForHit(const Vec3 &k, const Vec3 &p);
|
void checkForHit(const Vec3 &k, const Vec3 &p);
|
||||||
void updatePosition();
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
RubberBand(Plunger *plunger, const Kart &kart);
|
RubberBand(Plunger *plunger, const Kart &kart);
|
||||||
|
@@ -117,7 +117,8 @@ void KartProperties::load(const std::string &filename, const std::string &node,
|
|||||||
{
|
{
|
||||||
fprintf(stderr, "Error while parsing KartProperties '%s':\n",
|
fprintf(stderr, "Error while parsing KartProperties '%s':\n",
|
||||||
filename.c_str());
|
filename.c_str());
|
||||||
fprintf(stderr, "%s\n", err.what());
|
fprintf(stderr, err.what());
|
||||||
|
fprintf(stderr, "\n");
|
||||||
}
|
}
|
||||||
delete root;
|
delete root;
|
||||||
|
|
||||||
|
@@ -622,7 +622,7 @@ int main(int argc, char *argv[] )
|
|||||||
} // try
|
} // try
|
||||||
catch (std::exception &e)
|
catch (std::exception &e)
|
||||||
{
|
{
|
||||||
fprintf(stderr,"%s",e.what());
|
fprintf(stderr,e.what());
|
||||||
fprintf(stderr,"\nAborting SuperTuxKart\n");
|
fprintf(stderr,"\nAborting SuperTuxKart\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -187,9 +187,8 @@ void LinearWorld::update(float delta)
|
|||||||
|
|
||||||
// Lap counting, based on the new position, but only if the kart
|
// Lap counting, based on the new position, but only if the kart
|
||||||
// hasn't finished the race (otherwise it would be counted more than
|
// hasn't finished the race (otherwise it would be counted more than
|
||||||
// once for the number of finished karts), and not if the kart is
|
// once for the number of finished karts).
|
||||||
// being rescued (which can happen as a result of a shortcut)
|
if(!kart->hasFinishedRace())
|
||||||
if(!kart->hasFinishedRace() && !kart->isRescue())
|
|
||||||
doLapCounting(kart_info, kart);
|
doLapCounting(kart_info, kart);
|
||||||
} // for n
|
} // for n
|
||||||
|
|
||||||
|
@@ -257,17 +257,6 @@ void RaceManager::startNextRace()
|
|||||||
else if(m_minor_mode==MINOR_MODE_3_STRIKES) new ThreeStrikesBattle();
|
else if(m_minor_mode==MINOR_MODE_3_STRIKES) new ThreeStrikesBattle();
|
||||||
else{ fprintf(stderr,"Could not create given race mode\n"); assert(0); }
|
else{ fprintf(stderr,"Could not create given race mode\n"); assert(0); }
|
||||||
|
|
||||||
// Save the current score and set last time to zero. This is necessary
|
|
||||||
// if someone presses esc after finishing a gp, and selects restart:
|
|
||||||
// The race is rerun, and the points and scores get reset ... but if
|
|
||||||
// a kart hasn't finished the race at this stage, last_score and time
|
|
||||||
// would be undefined.
|
|
||||||
for(int i=0; i<m_num_karts; i++)
|
|
||||||
{
|
|
||||||
m_kart_status[i].m_last_score = m_kart_status[i].m_score;
|
|
||||||
m_kart_status[i].m_last_time = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_active_race = true;
|
m_active_race = true;
|
||||||
} // startNextRace
|
} // startNextRace
|
||||||
|
|
||||||
|
@@ -58,7 +58,7 @@ void STKConfig::load(const std::string &filename)
|
|||||||
{
|
{
|
||||||
fprintf(stderr, "Error while parsing KartProperties '%s':\n",
|
fprintf(stderr, "Error while parsing KartProperties '%s':\n",
|
||||||
filename.c_str());
|
filename.c_str());
|
||||||
fprintf(stderr, "%s", err.what());
|
fprintf(stderr, err.what());
|
||||||
fprintf(stderr, "\n");
|
fprintf(stderr, "\n");
|
||||||
}
|
}
|
||||||
delete root;
|
delete root;
|
||||||
|
@@ -1413,8 +1413,9 @@ void Track::loadTrackModel()
|
|||||||
file_manager->popTextureSearchPath();
|
file_manager->popTextureSearchPath();
|
||||||
file_manager->popModelSearchPath ();
|
file_manager->popModelSearchPath ();
|
||||||
|
|
||||||
SSGHelp::MinMax(m_model, &m_aabb_min, &m_aabb_max);
|
Vec3 min, max;
|
||||||
RaceManager::getWorld()->getPhysics()->init(m_aabb_min, m_aabb_max);
|
SSGHelp::MinMax(m_model, &min, &max);
|
||||||
|
RaceManager::getWorld()->getPhysics()->init(min, max);
|
||||||
createPhysicsModel();
|
createPhysicsModel();
|
||||||
} // loadTrack
|
} // loadTrack
|
||||||
|
|
||||||
|
@@ -60,8 +60,6 @@ private:
|
|||||||
Vec3 m_camera_final_hpr;
|
Vec3 m_camera_final_hpr;
|
||||||
bool m_is_arena;
|
bool m_is_arena;
|
||||||
int m_version;
|
int m_version;
|
||||||
Vec3 m_aabb_min;
|
|
||||||
Vec3 m_aabb_max;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
enum RoadSide{ RS_DONT_KNOW = -1, RS_LEFT = 0, RS_RIGHT = 1 };
|
enum RoadSide{ RS_DONT_KNOW = -1, RS_LEFT = 0, RS_RIGHT = 1 };
|
||||||
@@ -197,7 +195,6 @@ public:
|
|||||||
y_offset+(v[1]-m_driveline_min[1])*m_scale_y);
|
y_offset+(v[1]-m_driveline_min[1])*m_scale_y);
|
||||||
}
|
}
|
||||||
|
|
||||||
void getAABB(Vec3 *min, Vec3 *max) const {*min=m_aabb_min; *max=m_aabb_max; }
|
|
||||||
private:
|
private:
|
||||||
void loadTrack (std::string filename);
|
void loadTrack (std::string filename);
|
||||||
void itemCommand (sgVec3 *xyz, int item_type, int bNeedHeight);
|
void itemCommand (sgVec3 *xyz, int item_type, int bNeedHeight);
|
||||||
|
@@ -514,7 +514,7 @@ void UserConfig::loadConfig(const std::string& filename)
|
|||||||
catch(std::exception& e)
|
catch(std::exception& e)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Error while parsing config '%s':\n", filename.c_str());
|
fprintf(stderr, "Error while parsing config '%s':\n", filename.c_str());
|
||||||
fprintf(stderr, "%s", e.what());
|
fprintf(stderr, e.what());
|
||||||
fprintf(stderr, "\n");
|
fprintf(stderr, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -786,7 +786,7 @@ void UserConfig::saveConfig(const std::string& filename)
|
|||||||
catch(std::exception& e)
|
catch(std::exception& e)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Couldn't write config: ");
|
fprintf(stderr, "Couldn't write config: ");
|
||||||
fprintf(stderr, "%s",e.what());
|
fprintf(stderr, e.what());
|
||||||
fprintf(stderr, "\n");
|
fprintf(stderr, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user