Added a special type of tracks for soccer arenas

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/christmas@12300 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
funto66
2012-12-22 22:33:15 +00:00
parent 301ba4fb21
commit e16c03edf2
9 changed files with 50 additions and 16 deletions

View File

@@ -822,10 +822,9 @@ int handleCmdLine(int argc, char **argv)
exit(1);
}
if (t->isArena())
{
race_manager->setMinorMode(
RaceManager::MINOR_MODE_3_STRIKES);
}
race_manager->setMinorMode(RaceManager::MINOR_MODE_3_STRIKES);
else if(t->isSoccer())
race_manager->setMinorMode(RaceManager::MINOR_MODE_SOCCER);
}
/*
else

View File

@@ -116,7 +116,7 @@ bool DemoWorld::updateIdleTimeAndStartDemo(float dt)
// Remove arena tracks and internal tracks like the overworld
// (outside the if statement above in case that
// a user requests one of those ;) )
while((!track || track->isArena() || track->isInternal())
while((!track || track->isArena() || track->isSoccer() || track->isInternal())
&& m_demo_tracks.size() > 0)
{
if(!track)

View File

@@ -57,6 +57,7 @@ void LinearWorld::init()
WorldWithRank::init();
assert(!m_track->isArena());
assert(!m_track->isSoccer());
m_last_lap_sfx_played = false;
m_last_lap_sfx_playing = false;

View File

@@ -42,7 +42,7 @@ const char* ALL_ARENA_GROUPS_ID = "all";
// -----------------------------------------------------------------------------
ArenasScreen::ArenasScreen() : Screen("arenas.stkgui")
ArenasScreen::ArenasScreen() : Screen("arenas.stkgui"), m_used_for_soccer(false)
{
}
@@ -90,8 +90,15 @@ void ArenasScreen::beforeAddingWidget()
for (unsigned int n=0; n<track_manager->getNumberOfTracks(); n++) //iterate through tracks to find how many are arenas
{
Track* temp = track_manager->getTrack(n);
if (temp->isArena()){
num_of_arenas++;
if (m_used_for_soccer)
{
if(temp->isSoccer())
num_of_arenas++;
}
else
{
if(temp->isArena())
num_of_arenas++;
}
}
@@ -213,7 +220,14 @@ void ArenasScreen::buildTrackList()
for (int n=0; n<trackAmount; n++)
{
Track* curr = track_manager->getTrack(n);
if (!curr->isArena()) continue;
if (m_used_for_soccer)
{
if(!curr->isSoccer()) continue;
}
else
{
if(!curr->isArena()) continue;
}
if (unlock_manager->getCurrentSlot()->isLocked(curr->getIdent()))
{
@@ -236,7 +250,14 @@ void ArenasScreen::buildTrackList()
for (int n=0; n<trackAmount; n++)
{
Track* curr = track_manager->getTrack(currArenas[n]);
if (!curr->isArena()) continue;
if (m_used_for_soccer)
{
if(!curr->isSoccer()) continue;
}
else
{
if(!curr->isArena()) continue;
}
if (unlock_manager->getCurrentSlot()->isLocked(curr->getIdent()))
{

View File

@@ -31,6 +31,8 @@ class ArenasScreen : public GUIEngine::Screen, public GUIEngine::ScreenSingleton
{
friend class GUIEngine::ScreenSingleton<ArenasScreen>;
bool m_used_for_soccer; // List soccer arenas instead of battle arenas
ArenasScreen();
void buildTrackList();
@@ -50,6 +52,8 @@ public:
const int playerID) OVERRIDE;
void setFocusOnTrack(const std::string& trackName);
void setUsedForSoccer(bool used_for_soccer) { m_used_for_soccer=used_for_soccer; }
};
#endif

View File

@@ -260,7 +260,7 @@ void RaceGUI::drawGlobalMiniMap()
{
World *world = World::getWorld();
// arenas currently don't have a map.
if(world->getTrack()->isArena()) return;
if(world->getTrack()->isArena() || world->getTrack()->isSoccer()) return;
const video::ITexture *mini_map = world->getTrack()->getMiniMap();

View File

@@ -126,6 +126,7 @@ void RaceSetupScreen::eventCallback(Widget* widget, const std::string& name, con
race_manager->setMinorMode(RaceManager::MINOR_MODE_3_STRIKES);
UserConfigParams::m_game_mode = CONFIG_CODE_3STRIKES;
race_manager->setNumKarts( race_manager->getNumLocalPlayers() ); // no AI karts;
ArenasScreen::getInstance()->setUsedForSoccer(false);
StateManager::get()->pushScreen( ArenasScreen::getInstance() );
}
else if (selectedMode == IDENT_SOCCER)
@@ -133,6 +134,7 @@ void RaceSetupScreen::eventCallback(Widget* widget, const std::string& name, con
race_manager->setMinorMode(RaceManager::MINOR_MODE_SOCCER);
UserConfigParams::m_game_mode = CONFIG_CODE_SOCCER;
race_manager->setNumKarts( race_manager->getNumLocalPlayers() ); // no AI karts;
ArenasScreen::getInstance()->setUsedForSoccer(true);
StateManager::get()->pushScreen( ArenasScreen::getInstance() );
}
else if (selectedMode == "locked")

View File

@@ -92,6 +92,7 @@ Track::Track(const std::string &filename)
m_enable_push_back = true;
m_reverse_available = false;
m_is_arena = false;
m_is_soccer = false;
m_is_cutscene = false;
m_camera_far = 1000.0f;
m_mini_map = NULL;
@@ -311,6 +312,7 @@ void Track::loadTrackInfo()
getMusicInformation(filenames, m_music);
root->get("screenshot", &m_screenshot);
root->get("gravity", &m_gravity);
root->get("soccer", &m_is_soccer);
root->get("arena", &m_is_arena);
root->get("cutscene", &m_is_cutscene);
root->get("groups", &m_groups);
@@ -318,13 +320,14 @@ void Track::loadTrackInfo()
root->get("reverse", &m_reverse_available);
root->get("push-back", &m_enable_push_back);
// Make the default for auto-rescue in battle mode to be false
if(m_is_arena)
// Make the default for auto-rescue in battle mode and soccer mode to be false
if(m_is_arena || m_is_soccer)
m_enable_auto_rescue = false;
root->get("auto-rescue", & m_enable_auto_rescue);
root->get("smooth-normals", &m_smooth_normals);
// Reverse is meaningless in arena
m_reverse_available = !m_is_arena && m_reverse_available;
if(m_is_arena || m_is_soccer)
m_reverse_available = false;
for(unsigned int i=0; i<root->getNumNodes(); i++)
@@ -1317,7 +1320,7 @@ void Track::loadTrackModel(World* parent, bool reverse_track,
// the race gui was created. The race gui is needed since it stores
// the information about the size of the texture to render the mini
// map to.
if (!m_is_arena && !m_is_cutscene) loadQuadGraph(mode_id, reverse_track);
if (!m_is_arena && !m_is_soccer && !m_is_cutscene) loadQuadGraph(mode_id, reverse_track);
ItemManager::create();
@@ -1336,7 +1339,7 @@ void Track::loadTrackModel(World* parent, bool reverse_track,
default_start->get("upwards-distance", &upwards_distance );
default_start->get("karts-per-row", &karts_per_row );
}
if(!m_is_arena && !m_is_cutscene)
if(!m_is_arena && !m_is_soccer && !m_is_cutscene)
{
m_start_transforms.resize(race_manager->getNumberOfKarts());
QuadGraph::get()->setDefaultStartPositions(&m_start_transforms,

View File

@@ -227,6 +227,8 @@ private:
Vec3 m_aabb_max;
/** True if this track is an arena. */
bool m_is_arena;
/** True if this track is a soccer arena. */
bool m_is_soccer;
bool m_is_cutscene;
@@ -404,6 +406,8 @@ public:
// ------------------------------------------------------------------------
bool isArena () const { return m_is_arena; }
// ------------------------------------------------------------------------
bool isSoccer () const { return m_is_soccer; }
// ------------------------------------------------------------------------
void loadTrackModel (World* parent,
bool reverse_track = false,
unsigned int mode_id=0);