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:
Benau
2015-12-20 16:28:01 +08:00
parent 7031e1bf8c
commit 4e5197e7c1
3 changed files with 27 additions and 15 deletions

View File

@@ -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

View File

@@ -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);

View File

@@ -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(); }