Different max number of AIs per arena
Now I make large arena like stadium to have max 8 player-slots, should be very fun to play Remember update stk-assets to test!
This commit is contained in:
@@ -143,9 +143,12 @@ void TrackInfoScreen::init()
|
||||
|
||||
// Number of AIs
|
||||
// -------------
|
||||
const int max_arena_players = m_track->getMaxArenaPlayers();
|
||||
const int local_players = race_manager->getNumLocalPlayers();
|
||||
const bool has_AI =
|
||||
(race_manager->getMinorMode() == RaceManager::MINOR_MODE_3_STRIKES ?
|
||||
m_track->hasNavMesh() : race_manager->hasAI());
|
||||
m_track->hasNavMesh() && (max_arena_players - local_players) > 0 :
|
||||
race_manager->hasAI());
|
||||
m_ai_kart_spinner->setVisible(has_AI);
|
||||
getWidget<LabelWidget>("ai-text")->setVisible(has_AI);
|
||||
if (has_AI)
|
||||
@@ -154,25 +157,25 @@ void TrackInfoScreen::init()
|
||||
|
||||
// Avoid negative numbers (which can happen if e.g. the number of karts
|
||||
// in a previous race was lower than the number of players now.
|
||||
int num_ai = UserConfigParams::m_num_karts - race_manager->getNumLocalPlayers();
|
||||
int num_ai = UserConfigParams::m_num_karts - local_players;
|
||||
if (num_ai < 0) num_ai = 0;
|
||||
m_ai_kart_spinner->setValue(num_ai);
|
||||
race_manager->setNumKarts(num_ai + race_manager->getNumLocalPlayers());
|
||||
// Currently battle arena only has 4 starting position
|
||||
race_manager->setNumKarts(num_ai + local_players);
|
||||
// Set the max karts supported based on the battle arena selected
|
||||
if(race_manager->getMinorMode()==RaceManager::MINOR_MODE_3_STRIKES)
|
||||
{
|
||||
m_ai_kart_spinner->setMax(4 - race_manager->getNumLocalPlayers());
|
||||
m_ai_kart_spinner->setMax(max_arena_players - local_players);
|
||||
}
|
||||
else
|
||||
m_ai_kart_spinner->setMax(stk_config->m_max_karts - race_manager->getNumLocalPlayers());
|
||||
m_ai_kart_spinner->setMax(stk_config->m_max_karts - local_players);
|
||||
// A ftl reace needs at least three karts to make any sense
|
||||
if(race_manager->getMinorMode()==RaceManager::MINOR_MODE_FOLLOW_LEADER)
|
||||
{
|
||||
m_ai_kart_spinner->setMin(3-race_manager->getNumLocalPlayers());
|
||||
m_ai_kart_spinner->setMin(3 - local_players);
|
||||
}
|
||||
// Make sure in battle mode at least 1 ai for single player
|
||||
else if(race_manager->getMinorMode()==RaceManager::MINOR_MODE_3_STRIKES &&
|
||||
race_manager->getNumLocalPlayers() == 1 &&
|
||||
local_players == 1 &&
|
||||
!UserConfigParams::m_artist_debug_mode)
|
||||
m_ai_kart_spinner->setMin(1);
|
||||
else
|
||||
@@ -180,7 +183,7 @@ void TrackInfoScreen::init()
|
||||
|
||||
} // has_AI
|
||||
else
|
||||
race_manager->setNumKarts(race_manager->getNumLocalPlayers());
|
||||
race_manager->setNumKarts(local_players);
|
||||
|
||||
// Reverse track
|
||||
// -------------
|
||||
@@ -296,20 +299,21 @@ void TrackInfoScreen::onEnterPressedInternal()
|
||||
race_manager->setReverseTrack(reverse_track);
|
||||
|
||||
// Avoid invaild Ai karts number during switching game modes
|
||||
const int max_arena_players = m_track->getMaxArenaPlayers();
|
||||
const int local_players = race_manager->getNumLocalPlayers();
|
||||
const bool has_AI =
|
||||
(race_manager->getMinorMode() == RaceManager::MINOR_MODE_3_STRIKES ?
|
||||
m_track->hasNavMesh() : race_manager->hasAI());
|
||||
m_track->hasNavMesh() && (max_arena_players - local_players) > 0 :
|
||||
race_manager->hasAI());
|
||||
|
||||
int num_ai = 0;
|
||||
if (has_AI)
|
||||
num_ai = m_ai_kart_spinner->getValue();
|
||||
|
||||
if (UserConfigParams::m_num_karts != (signed)(race_manager
|
||||
->getNumLocalPlayers() + num_ai))
|
||||
if (UserConfigParams::m_num_karts != (local_players + num_ai))
|
||||
{
|
||||
race_manager->setNumKarts(race_manager->getNumLocalPlayers() + num_ai);
|
||||
UserConfigParams::m_num_karts = race_manager->getNumLocalPlayers() +
|
||||
num_ai;
|
||||
race_manager->setNumKarts(local_players + num_ai);
|
||||
UserConfigParams::m_num_karts = local_players + num_ai;
|
||||
}
|
||||
|
||||
// Disable accidentally unlocking of a challenge
|
||||
|
||||
@@ -115,6 +115,7 @@ Track::Track(const std::string &filename)
|
||||
m_enable_push_back = true;
|
||||
m_reverse_available = false;
|
||||
m_is_arena = false;
|
||||
m_max_arena_players = 0;
|
||||
m_has_easter_eggs = false;
|
||||
m_has_navmesh = false;
|
||||
m_is_soccer = false;
|
||||
@@ -510,6 +511,7 @@ void Track::loadTrackInfo()
|
||||
root->get("gravity", &m_gravity);
|
||||
root->get("soccer", &m_is_soccer);
|
||||
root->get("arena", &m_is_arena);
|
||||
root->get("max-arena-players", &m_max_arena_players);
|
||||
root->get("cutscene", &m_is_cutscene);
|
||||
root->get("groups", &m_groups);
|
||||
root->get("internal", &m_internal);
|
||||
|
||||
@@ -204,6 +204,8 @@ private:
|
||||
Vec3 m_aabb_max;
|
||||
/** True if this track is an arena. */
|
||||
bool m_is_arena;
|
||||
/** Max players supported by an arena. */
|
||||
unsigned int m_max_arena_players;
|
||||
/** True if this track has easter eggs. */
|
||||
bool m_has_easter_eggs;
|
||||
/** True if this track has navmesh. */
|
||||
@@ -544,6 +546,10 @@ public:
|
||||
/** Returns the graphical effect mesh for this track. */
|
||||
const TriangleMesh& getGFXEffectMesh() const {return *m_gfx_effect_mesh;}
|
||||
// ------------------------------------------------------------------------
|
||||
/** Get the max players supported for this track, for arena only. */
|
||||
unsigned int getMaxArenaPlayers() const
|
||||
{ return m_max_arena_players; }
|
||||
// ------------------------------------------------------------------------
|
||||
/** Get the number of start positions defined in the scene file. */
|
||||
unsigned int getNumberOfStartPositions() const
|
||||
{ return (unsigned int)m_start_transforms.size(); }
|
||||
|
||||
Reference in New Issue
Block a user