correcting the ai kart bug due to the former networking removal
git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/networking@13088 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
parent
6b35cbb8fd
commit
ed6e4ebfb4
@ -33,7 +33,6 @@
|
|||||||
#include "karts/kart_properties.hpp"
|
#include "karts/kart_properties.hpp"
|
||||||
#include "modes/three_strikes_battle.hpp"
|
#include "modes/three_strikes_battle.hpp"
|
||||||
#include "modes/world.hpp"
|
#include "modes/world.hpp"
|
||||||
#include "network/network_manager.hpp"
|
|
||||||
#include "utils/constants.hpp"
|
#include "utils/constants.hpp"
|
||||||
|
|
||||||
/** Initialises the attachment each kart has.
|
/** Initialises the attachment each kart has.
|
||||||
@ -257,17 +256,6 @@ void Attachment::hitBanana(Item *item, int new_attachment)
|
|||||||
new_attachment = m_random.get(3);
|
new_attachment = m_random.get(3);
|
||||||
} // switch
|
} // switch
|
||||||
|
|
||||||
// Save the information about the attachment in the race state
|
|
||||||
// so that the clients can be updated.
|
|
||||||
if(NetworkManager::getInstance()->isPlayingOnline()) // if we're online
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
race_state->itemCollected(m_kart->getWorldKartId(),
|
|
||||||
item->getItemId(),
|
|
||||||
new_attachment);*/
|
|
||||||
//NETWORK_UPDATE_PLZ
|
|
||||||
}
|
|
||||||
|
|
||||||
if (add_a_new_item)
|
if (add_a_new_item)
|
||||||
{
|
{
|
||||||
switch (new_attachment)
|
switch (new_attachment)
|
||||||
|
@ -409,21 +409,6 @@ bool Flyable::updateAndDelete(float dt)
|
|||||||
return false;
|
return false;
|
||||||
} // updateAndDelete
|
} // updateAndDelete
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
/** Updates the position of a projectile based on information received frmo the
|
|
||||||
* server.
|
|
||||||
*/
|
|
||||||
void Flyable::updateFromServer(const FlyableInfo &f, float dt)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
setXYZ(f.m_xyz);
|
|
||||||
setRotation(f.m_rotation);
|
|
||||||
*/
|
|
||||||
// Update the graphical position
|
|
||||||
Moveable::update(dt);
|
|
||||||
|
|
||||||
} // updateFromServer
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
/** Returns true if the item hit the kart who shot it (to avoid that an item
|
/** Returns true if the item hit the kart who shot it (to avoid that an item
|
||||||
* that's too close to the shoter hits the shoter).
|
* that's too close to the shoter hits the shoter).
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
// along with this program; if not, write to the Free Software
|
// along with this program; if not, write to the Free Software
|
||||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
//NETWORK_UPDATE_PLZ
|
|
||||||
#ifndef HEADER_FLYABLE_HPP
|
#ifndef HEADER_FLYABLE_HPP
|
||||||
#define HEADER_FLYABLE_HPP
|
#define HEADER_FLYABLE_HPP
|
||||||
|
|
||||||
@ -35,7 +34,6 @@ using namespace irr;
|
|||||||
#include "tracks/terrain_info.hpp"
|
#include "tracks/terrain_info.hpp"
|
||||||
|
|
||||||
class AbstractKart;
|
class AbstractKart;
|
||||||
class FlyableInfo;
|
|
||||||
class HitEffect;
|
class HitEffect;
|
||||||
class PhysicalObject;
|
class PhysicalObject;
|
||||||
class XMLNode;
|
class XMLNode;
|
||||||
@ -170,7 +168,6 @@ public:
|
|||||||
virtual bool updateAndDelete(float);
|
virtual bool updateAndDelete(float);
|
||||||
virtual const core::stringw getHitString(const AbstractKart *kart) const = 0;
|
virtual const core::stringw getHitString(const AbstractKart *kart) const = 0;
|
||||||
virtual HitEffect* getHitEffect() const;
|
virtual HitEffect* getHitEffect() const;
|
||||||
void updateFromServer(const FlyableInfo &f, float dt);
|
|
||||||
bool isOwnerImmunity(const AbstractKart *kart_hit) const;
|
bool isOwnerImmunity(const AbstractKart *kart_hit) const;
|
||||||
virtual bool hit(AbstractKart* kart, PhysicalObject* obj=NULL);
|
virtual bool hit(AbstractKart* kart, PhysicalObject* obj=NULL);
|
||||||
void explode(AbstractKart* kart, PhysicalObject* obj=NULL,
|
void explode(AbstractKart* kart, PhysicalObject* obj=NULL,
|
||||||
|
@ -29,7 +29,6 @@
|
|||||||
#include "io/file_manager.hpp"
|
#include "io/file_manager.hpp"
|
||||||
#include "karts/abstract_kart.hpp"
|
#include "karts/abstract_kart.hpp"
|
||||||
#include "modes/linear_world.hpp"
|
#include "modes/linear_world.hpp"
|
||||||
#include "network/network_manager.hpp"
|
|
||||||
#include "tracks/quad_graph.hpp"
|
#include "tracks/quad_graph.hpp"
|
||||||
#include "tracks/track.hpp"
|
#include "tracks/track.hpp"
|
||||||
#include "utils/string_utils.hpp"
|
#include "utils/string_utils.hpp"
|
||||||
@ -289,9 +288,6 @@ void ItemManager::collectedItem(Item *item, AbstractKart *kart, int add_info)
|
|||||||
*/
|
*/
|
||||||
void ItemManager::checkItemHit(AbstractKart* kart)
|
void ItemManager::checkItemHit(AbstractKart* kart)
|
||||||
{
|
{
|
||||||
// Only do this on the server
|
|
||||||
if(NetworkManager::getInstance()->isServer()) return;
|
|
||||||
|
|
||||||
// We could use m_items_in_quads to to check for item hits: take the quad
|
// We could use m_items_in_quads to to check for item hits: take the quad
|
||||||
// of the graph node of the kart, and only check items in that quad. But
|
// of the graph node of the kart, and only check items in that quad. But
|
||||||
// then we also need to check for any adjacent quads (since an item just
|
// then we also need to check for any adjacent quads (since an item just
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
// along with this program; if not, write to the Free Software
|
// along with this program; if not, write to the Free Software
|
||||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
//NETWORK_UPDATE_PLZ
|
|
||||||
#include "items/powerup.hpp"
|
#include "items/powerup.hpp"
|
||||||
|
|
||||||
#include "audio/sfx_base.hpp"
|
#include "audio/sfx_base.hpp"
|
||||||
|
@ -16,8 +16,6 @@
|
|||||||
// along with this program; if not, write to the Free Software
|
// along with this program; if not, write to the Free Software
|
||||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
//NETWORK_UPDATE_PLZ
|
|
||||||
|
|
||||||
#include "items/projectile_manager.hpp"
|
#include "items/projectile_manager.hpp"
|
||||||
|
|
||||||
#include "graphics/explosion.hpp"
|
#include "graphics/explosion.hpp"
|
||||||
@ -28,7 +26,6 @@
|
|||||||
#include "items/powerup_manager.hpp"
|
#include "items/powerup_manager.hpp"
|
||||||
#include "items/powerup.hpp"
|
#include "items/powerup.hpp"
|
||||||
#include "items/rubber_ball.hpp"
|
#include "items/rubber_ball.hpp"
|
||||||
#include "network/network_manager.hpp"
|
|
||||||
|
|
||||||
ProjectileManager *projectile_manager=0;
|
ProjectileManager *projectile_manager=0;
|
||||||
|
|
||||||
@ -67,15 +64,7 @@ void ProjectileManager::cleanup()
|
|||||||
/** General projectile update call. */
|
/** General projectile update call. */
|
||||||
void ProjectileManager::update(float dt)
|
void ProjectileManager::update(float dt)
|
||||||
{
|
{
|
||||||
|
updateServer(dt);
|
||||||
if(NetworkManager::getInstance()->isClient())
|
|
||||||
{
|
|
||||||
updateClient(dt);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
updateServer(dt);
|
|
||||||
}
|
|
||||||
|
|
||||||
HitEffects::iterator he = m_active_hit_effects.begin();
|
HitEffects::iterator he = m_active_hit_effects.begin();
|
||||||
while(he!=m_active_hit_effects.end())
|
while(he!=m_active_hit_effects.end())
|
||||||
@ -102,25 +91,10 @@ void ProjectileManager::update(float dt)
|
|||||||
/** Updates all rockets on the server (or no networking). */
|
/** Updates all rockets on the server (or no networking). */
|
||||||
void ProjectileManager::updateServer(float dt)
|
void ProjectileManager::updateServer(float dt)
|
||||||
{
|
{
|
||||||
// First update all projectiles on the track
|
|
||||||
|
|
||||||
if(NetworkManager::getInstance()->isPlayingOnline()) //network_manager->getMode()!=NetworkManager::NW_NONE)
|
|
||||||
{
|
|
||||||
//race_state->setNumFlyables(m_active_projectiles.size());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Projectiles::iterator p = m_active_projectiles.begin();
|
Projectiles::iterator p = m_active_projectiles.begin();
|
||||||
while(p!=m_active_projectiles.end())
|
while(p!=m_active_projectiles.end())
|
||||||
{
|
{
|
||||||
bool can_be_deleted = (*p)->updateAndDelete(dt);
|
bool can_be_deleted = (*p)->updateAndDelete(dt);
|
||||||
if(NetworkManager::getInstance()->isPlayingOnline()) //network_manager->getMode()!=NetworkManager::NW_NONE)
|
|
||||||
{
|
|
||||||
/*race_state->setFlyableInfo(p-m_active_projectiles.begin(),
|
|
||||||
FlyableInfo((*p)->getXYZ(),
|
|
||||||
(*p)->getRotation(),
|
|
||||||
can_be_deleted) );*/
|
|
||||||
}
|
|
||||||
if(can_be_deleted)
|
if(can_be_deleted)
|
||||||
{
|
{
|
||||||
HitEffect *he = (*p)->getHitEffect();
|
HitEffect *he = (*p)->getHitEffect();
|
||||||
@ -137,31 +111,6 @@ void ProjectileManager::updateServer(float dt)
|
|||||||
|
|
||||||
} // updateServer
|
} // updateServer
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
/** Updates all rockets and hit effects on the client.
|
|
||||||
* updateClient takes the information in race_state and updates all rockets
|
|
||||||
* (i.e. position, hit effects etc) */
|
|
||||||
void ProjectileManager::updateClient(float dt)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
unsigned int num_projectiles = race_state->getNumFlyables();
|
|
||||||
if(num_projectiles != m_active_projectiles.size())
|
|
||||||
fprintf(stderr, "Warning: num_projectiles %d active %d\n",
|
|
||||||
num_projectiles, (int)m_active_projectiles.size());
|
|
||||||
|
|
||||||
unsigned int indx=0;
|
|
||||||
for(Projectiles::iterator i = m_active_projectiles.begin();
|
|
||||||
i != m_active_projectiles.end(); ++i, ++indx)
|
|
||||||
{
|
|
||||||
const FlyableInfo &f = race_state->getFlyable(indx);
|
|
||||||
(*i)->updateFromServer(f, dt);
|
|
||||||
if(f.m_exploded)
|
|
||||||
{
|
|
||||||
(*i)->hit(NULL);
|
|
||||||
}
|
|
||||||
} // for i in m_active_projectiles
|
|
||||||
*/
|
|
||||||
} // updateClient
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
Flyable *ProjectileManager::newProjectile(AbstractKart *kart, Track* track,
|
Flyable *ProjectileManager::newProjectile(AbstractKart *kart, Track* track,
|
||||||
PowerupManager::PowerupType type)
|
PowerupManager::PowerupType type)
|
||||||
|
@ -53,7 +53,6 @@ private:
|
|||||||
* being shown or have a sfx playing. */
|
* being shown or have a sfx playing. */
|
||||||
HitEffects m_active_hit_effects;
|
HitEffects m_active_hit_effects;
|
||||||
|
|
||||||
void updateClient(float dt);
|
|
||||||
void updateServer(float dt);
|
void updateServer(float dt);
|
||||||
public:
|
public:
|
||||||
ProjectileManager() {}
|
ProjectileManager() {}
|
||||||
|
@ -43,7 +43,6 @@
|
|||||||
#include "karts/max_speed.hpp"
|
#include "karts/max_speed.hpp"
|
||||||
#include "karts/rescue_animation.hpp"
|
#include "karts/rescue_animation.hpp"
|
||||||
#include "modes/linear_world.hpp"
|
#include "modes/linear_world.hpp"
|
||||||
#include "network/network_manager.hpp"
|
|
||||||
#include "race/race_manager.hpp"
|
#include "race/race_manager.hpp"
|
||||||
#include "states_screens/race_result_gui.hpp"
|
#include "states_screens/race_result_gui.hpp"
|
||||||
#include "tracks/quad_graph.hpp"
|
#include "tracks/quad_graph.hpp"
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
#ifndef HEADER_KART_CONTROL_HPP
|
#ifndef HEADER_KART_CONTROL_HPP
|
||||||
#define HEADER_KART_CONTROL_HPP
|
#define HEADER_KART_CONTROL_HPP
|
||||||
|
|
||||||
//NETWORK_UPDATE_PLZ
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \ingroup controller
|
* \ingroup controller
|
||||||
|
@ -54,7 +54,6 @@
|
|||||||
#include "items/powerup.hpp"
|
#include "items/powerup.hpp"
|
||||||
#include "modes/linear_world.hpp"
|
#include "modes/linear_world.hpp"
|
||||||
#include "modes/profile_world.hpp"
|
#include "modes/profile_world.hpp"
|
||||||
#include "network/network_manager.hpp"
|
|
||||||
#include "race/race_manager.hpp"
|
#include "race/race_manager.hpp"
|
||||||
#include "tracks/quad_graph.hpp"
|
#include "tracks/quad_graph.hpp"
|
||||||
#include "tracks/track.hpp"
|
#include "tracks/track.hpp"
|
||||||
@ -297,13 +296,6 @@ void SkiddingAI::update(float dt)
|
|||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// The client does not do any AI computations.
|
|
||||||
if(NetworkManager::getInstance()->isClient())
|
|
||||||
{
|
|
||||||
AIBaseController::update(dt);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the kart needs to be rescued, do it now (and nothing else)
|
// If the kart needs to be rescued, do it now (and nothing else)
|
||||||
if(isStuck() && !m_kart->getKartAnimation())
|
if(isStuck() && !m_kart->getKartAnimation())
|
||||||
{
|
{
|
||||||
|
@ -57,7 +57,6 @@
|
|||||||
#include "karts/max_speed.hpp"
|
#include "karts/max_speed.hpp"
|
||||||
#include "karts/skidding.hpp"
|
#include "karts/skidding.hpp"
|
||||||
#include "modes/linear_world.hpp"
|
#include "modes/linear_world.hpp"
|
||||||
#include "network/network_manager.hpp"
|
|
||||||
#include "physics/btKart.hpp"
|
#include "physics/btKart.hpp"
|
||||||
#include "physics/btKartRaycast.hpp"
|
#include "physics/btKartRaycast.hpp"
|
||||||
#include "physics/btUprightConstraint.hpp"
|
#include "physics/btUprightConstraint.hpp"
|
||||||
@ -80,8 +79,6 @@
|
|||||||
# include <math.h>
|
# include <math.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//NETWORK_UPDATE_PLZ
|
|
||||||
|
|
||||||
/** The kart constructor.
|
/** The kart constructor.
|
||||||
* \param ident The identifier for the kart model to use.
|
* \param ident The identifier for the kart model to use.
|
||||||
* \param position The position (or rank) for this kart (between 1 and
|
* \param position The position (or rank) for this kart (between 1 and
|
||||||
@ -875,15 +872,6 @@ void Kart::collectedItem(Item *item, int add_info)
|
|||||||
default : break;
|
default : break;
|
||||||
} // switch TYPE
|
} // switch TYPE
|
||||||
|
|
||||||
// Attachments and powerups are stored in the corresponding
|
|
||||||
// functions (hit{Red,Green}Item), so only coins need to be
|
|
||||||
// stored here.
|
|
||||||
/*if(NetworkManager::getInstance()->isServer() &&
|
|
||||||
(type==Item::ITEM_NITRO_BIG || type==Item::ITEM_NITRO_SMALL) )
|
|
||||||
{
|
|
||||||
race_state->itemCollected(getWorldKartId(), item->getItemId());
|
|
||||||
}*/
|
|
||||||
|
|
||||||
if ( m_collected_energy > m_kart_properties->getNitroMax())
|
if ( m_collected_energy > m_kart_properties->getNitroMax())
|
||||||
m_collected_energy = m_kart_properties->getNitroMax();
|
m_collected_energy = m_kart_properties->getNitroMax();
|
||||||
m_controller->collectedItem(*item, add_info, old_energy);
|
m_controller->collectedItem(*item, add_info, old_energy);
|
||||||
@ -1015,14 +1003,6 @@ void Kart::update(float dt)
|
|||||||
|
|
||||||
m_slipstream->update(dt);
|
m_slipstream->update(dt);
|
||||||
|
|
||||||
// Store the actual kart controls at the start of update in the server
|
|
||||||
// state. This makes it easier to reset some fields when they are not used
|
|
||||||
// anymore (e.g. controls.fire).
|
|
||||||
if(NetworkManager::getInstance()->isServer())
|
|
||||||
{
|
|
||||||
//race_state->storeKartControls(*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!m_flying)
|
if (!m_flying)
|
||||||
{
|
{
|
||||||
// When really on air, free fly, when near ground, try to glide / adjust for landing
|
// When really on air, free fly, when near ground, try to glide / adjust for landing
|
||||||
|
@ -1476,7 +1476,7 @@ int main(int argc, char *argv[] )
|
|||||||
{
|
{
|
||||||
// This will setup the race manager etc.
|
// This will setup the race manager etc.
|
||||||
history->Load();
|
history->Load();
|
||||||
// network_manager->setupPlayerKartInfo();
|
race_manager->setupPlayerKartInfo();
|
||||||
race_manager->startNew(false);
|
race_manager->startNew(false);
|
||||||
main_loop->run();
|
main_loop->run();
|
||||||
// well, actually run() will never return, since
|
// well, actually run() will never return, since
|
||||||
@ -1494,7 +1494,7 @@ int main(int argc, char *argv[] )
|
|||||||
// Quickstart (-N)
|
// Quickstart (-N)
|
||||||
// ===============
|
// ===============
|
||||||
// all defaults are set in InitTuxkart()
|
// all defaults are set in InitTuxkart()
|
||||||
// network_manager->setupPlayerKartInfo();
|
race_manager->setupPlayerKartInfo();
|
||||||
race_manager->startNew(false);
|
race_manager->startNew(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1504,7 +1504,7 @@ int main(int argc, char *argv[] )
|
|||||||
// =========
|
// =========
|
||||||
race_manager->setMajorMode (RaceManager::MAJOR_MODE_SINGLE);
|
race_manager->setMajorMode (RaceManager::MAJOR_MODE_SINGLE);
|
||||||
race_manager->setDifficulty(RaceManager::DIFFICULTY_HARD);
|
race_manager->setDifficulty(RaceManager::DIFFICULTY_HARD);
|
||||||
// network_manager->setupPlayerKartInfo();
|
race_manager->setupPlayerKartInfo();
|
||||||
race_manager->startNew(false);
|
race_manager->startNew(false);
|
||||||
}
|
}
|
||||||
main_loop->run();
|
main_loop->run();
|
||||||
|
@ -29,7 +29,6 @@
|
|||||||
#include "input/wiimote_manager.hpp"
|
#include "input/wiimote_manager.hpp"
|
||||||
#include "modes/profile_world.hpp"
|
#include "modes/profile_world.hpp"
|
||||||
#include "modes/world.hpp"
|
#include "modes/world.hpp"
|
||||||
#include "network/network_manager.hpp"
|
|
||||||
#include "race/race_manager.hpp"
|
#include "race/race_manager.hpp"
|
||||||
#include "states_screens/state_manager.hpp"
|
#include "states_screens/state_manager.hpp"
|
||||||
#include "utils/profiler.hpp"
|
#include "utils/profiler.hpp"
|
||||||
@ -94,21 +93,8 @@ float MainLoop::getLimitedDt()
|
|||||||
*/
|
*/
|
||||||
void MainLoop::updateRace(float dt)
|
void MainLoop::updateRace(float dt)
|
||||||
{
|
{
|
||||||
// Server: Send the current position and previous controls to all clients
|
|
||||||
// Client: send current controls to server
|
|
||||||
// But don't do this if the race is in finish phase (otherwise
|
|
||||||
// messages can be mixed up in the race manager)
|
|
||||||
/*if(!World::getWorld()->isFinishPhase())
|
|
||||||
network_manager->sendUpdates();*/
|
|
||||||
if(ProfileWorld::isProfileMode()) dt=1.0f/60.0f;
|
if(ProfileWorld::isProfileMode()) dt=1.0f/60.0f;
|
||||||
|
|
||||||
// Again, only receive updates if the race isn't over - once the
|
|
||||||
// race results are displayed (i.e. game is in finish phase)
|
|
||||||
// messages must be handled by the normal update of the network
|
|
||||||
// manager
|
|
||||||
/*if(!World::getWorld()->isFinishPhase())
|
|
||||||
network_manager->receiveUpdates();*/
|
|
||||||
|
|
||||||
World::getWorld()->updateWorld(dt);
|
World::getWorld()->updateWorld(dt);
|
||||||
} // updateRace
|
} // updateRace
|
||||||
|
|
||||||
@ -127,13 +113,8 @@ void MainLoop::run()
|
|||||||
m_prev_time = m_curr_time;
|
m_prev_time = m_curr_time;
|
||||||
float dt = getLimitedDt();
|
float dt = getLimitedDt();
|
||||||
|
|
||||||
// network_manager->update(dt);
|
|
||||||
|
|
||||||
if (World::getWorld()) // race is active if world exists
|
if (World::getWorld()) // race is active if world exists
|
||||||
{
|
{
|
||||||
// Busy wait if race_manager is active (i.e. creating of world is done)
|
|
||||||
// till all clients have reached this state.
|
|
||||||
//if (network_manager->getState()==NetworkManager::NS_READY_SET_GO_BARRIER) continue;
|
|
||||||
updateRace(dt);
|
updateRace(dt);
|
||||||
} // if race is active
|
} // if race is active
|
||||||
|
|
||||||
|
@ -21,7 +21,6 @@
|
|||||||
#include "guiengine/modaldialog.hpp"
|
#include "guiengine/modaldialog.hpp"
|
||||||
#include "input/device_manager.hpp"
|
#include "input/device_manager.hpp"
|
||||||
#include "input/input_manager.hpp"
|
#include "input/input_manager.hpp"
|
||||||
#include "network/network_manager.hpp"
|
|
||||||
#include "race/race_manager.hpp"
|
#include "race/race_manager.hpp"
|
||||||
#include "tracks/track.hpp"
|
#include "tracks/track.hpp"
|
||||||
#include "tracks/track_manager.hpp"
|
#include "tracks/track_manager.hpp"
|
||||||
@ -149,7 +148,7 @@ bool DemoWorld::updateIdleTimeAndStartDemo(float dt)
|
|||||||
m_do_demo = true;
|
m_do_demo = true;
|
||||||
race_manager->setNumKarts(m_num_karts);
|
race_manager->setNumKarts(m_num_karts);
|
||||||
race_manager->setLocalKartInfo(0, "tux");
|
race_manager->setLocalKartInfo(0, "tux");
|
||||||
// network_manager->setupPlayerKartInfo();
|
race_manager->setupPlayerKartInfo();
|
||||||
race_manager->startSingleRace(m_demo_tracks[0], m_num_laps, false);
|
race_manager->startSingleRace(m_demo_tracks[0], m_num_laps, false);
|
||||||
m_demo_tracks.push_back(m_demo_tracks[0]);
|
m_demo_tracks.push_back(m_demo_tracks[0]);
|
||||||
m_demo_tracks.erase(m_demo_tracks.begin());
|
m_demo_tracks.erase(m_demo_tracks.begin());
|
||||||
|
@ -25,7 +25,6 @@
|
|||||||
#include "karts/abstract_kart.hpp"
|
#include "karts/abstract_kart.hpp"
|
||||||
#include "karts/controller/controller.hpp"
|
#include "karts/controller/controller.hpp"
|
||||||
#include "karts/kart_properties.hpp"
|
#include "karts/kart_properties.hpp"
|
||||||
#include "network/network_manager.hpp"
|
|
||||||
#include "physics/physics.hpp"
|
#include "physics/physics.hpp"
|
||||||
#include "race/history.hpp"
|
#include "race/history.hpp"
|
||||||
#include "states_screens/race_gui_base.hpp"
|
#include "states_screens/race_gui_base.hpp"
|
||||||
@ -319,13 +318,7 @@ void LinearWorld::newLap(unsigned int kart_index)
|
|||||||
// Race finished
|
// Race finished
|
||||||
if(kart_info.m_race_lap >= race_manager->getNumLaps() && raceHasLaps())
|
if(kart_info.m_race_lap >= race_manager->getNumLaps() && raceHasLaps())
|
||||||
{
|
{
|
||||||
// A client does not detect race finished by itself, it will
|
kart->finishedRace(getTime());
|
||||||
// receive a message from the server. So a client does not do
|
|
||||||
// anything here.
|
|
||||||
/*if(network_manager->getMode()!=NetworkManager::NW_CLIENT)
|
|
||||||
{
|
|
||||||
kart->finishedRace(getTime());
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
float time_per_lap;
|
float time_per_lap;
|
||||||
if (kart_info.m_race_lap == 1) // just completed first lap
|
if (kart_info.m_race_lap == 1) // just completed first lap
|
||||||
|
@ -27,7 +27,6 @@
|
|||||||
#include "karts/rescue_animation.hpp"
|
#include "karts/rescue_animation.hpp"
|
||||||
#include "modes/overworld.hpp"
|
#include "modes/overworld.hpp"
|
||||||
#include "physics/physics.hpp"
|
#include "physics/physics.hpp"
|
||||||
#include "network/network_manager.hpp"
|
|
||||||
#include "states_screens/dialogs/select_challenge.hpp"
|
#include "states_screens/dialogs/select_challenge.hpp"
|
||||||
#include "states_screens/kart_selection.hpp"
|
#include "states_screens/kart_selection.hpp"
|
||||||
#include "states_screens/race_gui_overworld.hpp"
|
#include "states_screens/race_gui_overworld.hpp"
|
||||||
@ -83,7 +82,7 @@ void OverWorld::enterOverWorld()
|
|||||||
->setSinglePlayer( StateManager::get()->getActivePlayer(0) );
|
->setSinglePlayer( StateManager::get()->getActivePlayer(0) );
|
||||||
|
|
||||||
StateManager::get()->enterGameState();
|
StateManager::get()->enterGameState();
|
||||||
// network_manager->setupPlayerKartInfo();
|
race_manager->setupPlayerKartInfo();
|
||||||
race_manager->startNew(false);
|
race_manager->startNew(false);
|
||||||
if(race_manager->haveKartLastPositionOnOverworld()){
|
if(race_manager->haveKartLastPositionOnOverworld()){
|
||||||
OverWorld *ow = (OverWorld*)World::getWorld();
|
OverWorld *ow = (OverWorld*)World::getWorld();
|
||||||
|
@ -117,7 +117,6 @@ World::World() : WorldStatus(), m_clear_color(255,100,101,140)
|
|||||||
*/
|
*/
|
||||||
void World::init()
|
void World::init()
|
||||||
{
|
{
|
||||||
// race_state = new RaceState();
|
|
||||||
m_faster_music_active = false;
|
m_faster_music_active = false;
|
||||||
m_fastest_kart = 0;
|
m_fastest_kart = 0;
|
||||||
m_eliminated_karts = 0;
|
m_eliminated_karts = 0;
|
||||||
@ -173,8 +172,6 @@ void World::init()
|
|||||||
if(ReplayPlay::get())
|
if(ReplayPlay::get())
|
||||||
ReplayPlay::get()->Load();
|
ReplayPlay::get()->Load();
|
||||||
|
|
||||||
// network_manager->worldLoaded();
|
|
||||||
|
|
||||||
powerup_manager->updateWeightsForRace(num_karts);
|
powerup_manager->updateWeightsForRace(num_karts);
|
||||||
} // init
|
} // init
|
||||||
|
|
||||||
@ -359,7 +356,6 @@ World::~World()
|
|||||||
// gui and this must be deleted.
|
// gui and this must be deleted.
|
||||||
delete m_race_gui;
|
delete m_race_gui;
|
||||||
}
|
}
|
||||||
// delete race_state;
|
|
||||||
|
|
||||||
for ( unsigned int i = 0 ; i < m_karts.size() ; i++ )
|
for ( unsigned int i = 0 ; i < m_karts.size() ; i++ )
|
||||||
delete m_karts[i];
|
delete m_karts[i];
|
||||||
@ -747,7 +743,7 @@ void World::updateWorld(float dt)
|
|||||||
->setSinglePlayer( StateManager::get()->getActivePlayer(0) );
|
->setSinglePlayer( StateManager::get()->getActivePlayer(0) );
|
||||||
|
|
||||||
StateManager::get()->enterGameState();
|
StateManager::get()->enterGameState();
|
||||||
// network_manager->setupPlayerKartInfo();
|
race_manager->setupPlayerKartInfo();
|
||||||
race_manager->startNew(false);
|
race_manager->startNew(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -800,11 +796,8 @@ void World::update(float dt)
|
|||||||
if(ReplayPlay::get()) ReplayPlay::get()->update(dt);
|
if(ReplayPlay::get()) ReplayPlay::get()->update(dt);
|
||||||
if(history->replayHistory()) dt=history->getNextDelta();
|
if(history->replayHistory()) dt=history->getNextDelta();
|
||||||
WorldStatus::update(dt);
|
WorldStatus::update(dt);
|
||||||
// Clear race state so that new information can be stored
|
|
||||||
// race_state->clear();
|
|
||||||
|
|
||||||
// if(network_manager->getMode()!=NetworkManager::NW_CLIENT &&
|
if (!history->dontDoPhysics())
|
||||||
// !history->dontDoPhysics())
|
|
||||||
{
|
{
|
||||||
m_physics->update(dt);
|
m_physics->update(dt);
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,6 @@
|
|||||||
#include "karts/abstract_kart.hpp"
|
#include "karts/abstract_kart.hpp"
|
||||||
#include "modes/world.hpp"
|
#include "modes/world.hpp"
|
||||||
#include "tracks/track.hpp"
|
#include "tracks/track.hpp"
|
||||||
#include "network/network_manager.hpp"
|
|
||||||
|
|
||||||
#include <irrlicht.h>
|
#include <irrlicht.h>
|
||||||
|
|
||||||
@ -112,8 +111,6 @@ void WorldStatus::enterRaceOverState()
|
|||||||
*/
|
*/
|
||||||
void WorldStatus::terminateRace()
|
void WorldStatus::terminateRace()
|
||||||
{
|
{
|
||||||
// if(network_manager->getMode()==NetworkManager::NW_SERVER)
|
|
||||||
// network_manager->sendRaceResults();
|
|
||||||
} // terminateRace
|
} // terminateRace
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
@ -23,7 +23,6 @@
|
|||||||
#include "karts/kart_properties.hpp"
|
#include "karts/kart_properties.hpp"
|
||||||
#include "karts/rescue_animation.hpp"
|
#include "karts/rescue_animation.hpp"
|
||||||
#include "items/flyable.hpp"
|
#include "items/flyable.hpp"
|
||||||
#include "items/item.hpp"
|
|
||||||
#include "modes/world.hpp"
|
#include "modes/world.hpp"
|
||||||
#include "graphics/stars.hpp"
|
#include "graphics/stars.hpp"
|
||||||
#include "karts/explosion_animation.hpp"
|
#include "karts/explosion_animation.hpp"
|
||||||
@ -159,8 +158,6 @@ void Physics::update(float dt)
|
|||||||
{
|
{
|
||||||
AbstractKart *a=p->getUserPointer(0)->getPointerKart();
|
AbstractKart *a=p->getUserPointer(0)->getPointerKart();
|
||||||
AbstractKart *b=p->getUserPointer(1)->getPointerKart();
|
AbstractKart *b=p->getUserPointer(1)->getPointerKart();
|
||||||
// race_state->addCollision(a->getWorldKartId(),
|
|
||||||
// b->getWorldKartId());
|
|
||||||
KartKartCollision(p->getUserPointer(0)->getPointerKart(),
|
KartKartCollision(p->getUserPointer(0)->getPointerKart(),
|
||||||
p->getContactPointCS(0),
|
p->getContactPointCS(0),
|
||||||
p->getUserPointer(1)->getPointerKart(),
|
p->getUserPointer(1)->getPointerKart(),
|
||||||
@ -446,7 +443,6 @@ btScalar Physics::solveGroup(btCollisionObject** bodies, int numBodies,
|
|||||||
else if(upB->is(UserPointer::UP_KART))
|
else if(upB->is(UserPointer::UP_KART))
|
||||||
{
|
{
|
||||||
AbstractKart *kart=upB->getPointerKart();
|
AbstractKart *kart=upB->getPointerKart();
|
||||||
// race_state->addCollision(kart->getWorldKartId());
|
|
||||||
int n = contact_manifold->getContactPoint(0).m_index0;
|
int n = contact_manifold->getContactPoint(0).m_index0;
|
||||||
const Material *m
|
const Material *m
|
||||||
= n>=0 ? upA->getPointerTriangleMesh()->getMaterial(n)
|
= n>=0 ? upA->getPointerTriangleMesh()->getMaterial(n)
|
||||||
@ -466,7 +462,6 @@ btScalar Physics::solveGroup(btCollisionObject** bodies, int numBodies,
|
|||||||
if(upB->is(UserPointer::UP_TRACK))
|
if(upB->is(UserPointer::UP_TRACK))
|
||||||
{
|
{
|
||||||
AbstractKart *kart = upA->getPointerKart();
|
AbstractKart *kart = upA->getPointerKart();
|
||||||
// race_state->addCollision(kart->getWorldKartId());
|
|
||||||
int n = contact_manifold->getContactPoint(0).m_index1;
|
int n = contact_manifold->getContactPoint(0).m_index1;
|
||||||
const Material *m
|
const Material *m
|
||||||
= n>=0 ? upB->getPointerTriangleMesh()->getMaterial(n)
|
= n>=0 ? upB->getPointerTriangleMesh()->getMaterial(n)
|
||||||
|
@ -42,7 +42,6 @@
|
|||||||
#include "modes/world.hpp"
|
#include "modes/world.hpp"
|
||||||
#include "modes/three_strikes_battle.hpp"
|
#include "modes/three_strikes_battle.hpp"
|
||||||
#include "modes/soccer_world.hpp"
|
#include "modes/soccer_world.hpp"
|
||||||
#include "network/network_manager.hpp"
|
|
||||||
#include "states_screens/grand_prix_lose.hpp"
|
#include "states_screens/grand_prix_lose.hpp"
|
||||||
#include "states_screens/grand_prix_win.hpp"
|
#include "states_screens/grand_prix_win.hpp"
|
||||||
#include "states_screens/kart_selection.hpp"
|
#include "states_screens/kart_selection.hpp"
|
||||||
@ -143,9 +142,9 @@ void RaceManager::setLocalKartInfo(unsigned int player_id,
|
|||||||
assert(0<=player_id && player_id <m_local_player_karts.size());
|
assert(0<=player_id && player_id <m_local_player_karts.size());
|
||||||
assert(kart_properties_manager->getKart(kart) != NULL);
|
assert(kart_properties_manager->getKart(kart) != NULL);
|
||||||
|
|
||||||
/* m_local_player_karts[player_id] = RemoteKartInfo(player_id, kart,
|
m_local_player_karts[player_id] = RemoteKartInfo(player_id, kart,
|
||||||
StateManager::get()->getActivePlayerProfile(player_id)->getName(),
|
StateManager::get()->getActivePlayerProfile(player_id)->getName(),
|
||||||
network_manager->getMyHostId());*/
|
0);
|
||||||
} // setLocalKartInfo
|
} // setLocalKartInfo
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@ -293,7 +292,7 @@ void RaceManager::startNew(bool from_overworld)
|
|||||||
// Create the kart status data structure to keep track of scores, times, ...
|
// Create the kart status data structure to keep track of scores, times, ...
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
m_kart_status.clear();
|
m_kart_status.clear();
|
||||||
printf("%u %lu %lu\n", (unsigned int)m_num_karts, m_ai_kart_list.size(), m_player_karts.size());
|
Log::verbose("RaceManager", "Nb of karts=%u, ai:%lu players:%lu\n", (unsigned int)m_num_karts, m_ai_kart_list.size(), m_player_karts.size());
|
||||||
|
|
||||||
assert((unsigned int)m_num_karts == m_ai_kart_list.size()+m_player_karts.size());
|
assert((unsigned int)m_num_karts == m_ai_kart_list.size()+m_player_karts.size());
|
||||||
// First add the AI karts (randomly chosen)
|
// First add the AI karts (randomly chosen)
|
||||||
@ -321,8 +320,7 @@ void RaceManager::startNew(bool from_overworld)
|
|||||||
// -------------------------------------------------
|
// -------------------------------------------------
|
||||||
for(int i=m_player_karts.size()-1; i>=0; i--)
|
for(int i=m_player_karts.size()-1; i>=0; i--)
|
||||||
{
|
{
|
||||||
KartType kt= KT_PLAYER; //(m_player_karts[i].getHostId()==network_manager->getMyHostId())
|
KartType kt= KT_PLAYER;
|
||||||
//? KT_PLAYER : KT_NETWORK_PLAYER;
|
|
||||||
m_kart_status.push_back(KartStatus(m_player_karts[i].getKartName(), i,
|
m_kart_status.push_back(KartStatus(m_player_karts[i].getKartName(), i,
|
||||||
m_player_karts[i].getLocalPlayerId(),
|
m_player_karts[i].getLocalPlayerId(),
|
||||||
m_player_karts[i].getGlobalPlayerId(),
|
m_player_karts[i].getGlobalPlayerId(),
|
||||||
@ -509,21 +507,10 @@ void RaceManager::next()
|
|||||||
}
|
}
|
||||||
user_config->saveConfig();
|
user_config->saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
// if(network_manager->getMode()==NetworkManager::NW_SERVER)
|
|
||||||
// network_manager->beginReadySetGoBarrier();
|
|
||||||
// else
|
|
||||||
// network_manager->setState(NetworkManager::NS_WAIT_FOR_RACE_DATA);
|
|
||||||
startNextRace();
|
startNextRace();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Back to main menu. Change the state of the state of the
|
|
||||||
// network manager.
|
|
||||||
// if(network_manager->getMode()==NetworkManager::NW_SERVER)
|
|
||||||
// network_manager->setState(NetworkManager::NS_MAIN_MENU);
|
|
||||||
// else
|
|
||||||
// network_manager->setState(NetworkManager::NS_WAIT_FOR_AVAILABLE_CHARACTERS);
|
|
||||||
exitRace();
|
exitRace();
|
||||||
}
|
}
|
||||||
} // next
|
} // next
|
||||||
@ -753,7 +740,7 @@ void RaceManager::startGP(const GrandPrixData* gp, bool from_overworld)
|
|||||||
StateManager::get()->enterGameState();
|
StateManager::get()->enterGameState();
|
||||||
setGrandPrix(*gp);
|
setGrandPrix(*gp);
|
||||||
setCoinTarget( 0 ); // Might still be set from a previous challenge
|
setCoinTarget( 0 ); // Might still be set from a previous challenge
|
||||||
// network_manager->setupPlayerKartInfo();
|
race_manager->setupPlayerKartInfo();
|
||||||
|
|
||||||
setMajorMode(RaceManager::MAJOR_MODE_GRAND_PRIX);
|
setMajorMode(RaceManager::MAJOR_MODE_GRAND_PRIX);
|
||||||
startNew(from_overworld);
|
startNew(from_overworld);
|
||||||
@ -778,9 +765,36 @@ void RaceManager::startSingleRace(const std::string &track_ident,
|
|||||||
setMajorMode(RaceManager::MAJOR_MODE_SINGLE);
|
setMajorMode(RaceManager::MAJOR_MODE_SINGLE);
|
||||||
|
|
||||||
setCoinTarget( 0 ); // Might still be set from a previous challenge
|
setCoinTarget( 0 ); // Might still be set from a previous challenge
|
||||||
// network_manager->setupPlayerKartInfo();
|
race_manager->setupPlayerKartInfo();
|
||||||
|
|
||||||
startNew(from_overworld);
|
startNew(from_overworld);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
/** Receive and store the information from sendKartsInformation()
|
||||||
|
*/
|
||||||
|
void RaceManager::setupPlayerKartInfo()
|
||||||
|
{
|
||||||
|
std::vector<RemoteKartInfo> m_kart_info;
|
||||||
|
|
||||||
|
// Get the local kart info
|
||||||
|
for(unsigned int i=0; i<getNumLocalPlayers(); i++)
|
||||||
|
m_kart_info.push_back(getLocalKartInfo(i));
|
||||||
|
|
||||||
|
// Now sort by (hostid, playerid)
|
||||||
|
std::sort(m_kart_info.begin(), m_kart_info.end());
|
||||||
|
|
||||||
|
// Set the player kart information
|
||||||
|
setNumPlayers(m_kart_info.size());
|
||||||
|
|
||||||
|
// Set the global player ID for each player
|
||||||
|
for(unsigned int i=0; i<m_kart_info.size(); i++)
|
||||||
|
{
|
||||||
|
m_kart_info[i].setGlobalPlayerId(i);
|
||||||
|
setPlayerKart(i, m_kart_info[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
computeRandomKartList();
|
||||||
|
} // setupPlayerKartInfo
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
@ -674,6 +674,9 @@ public:
|
|||||||
*/
|
*/
|
||||||
void startSingleRace(const std::string &track_ident, const int num_laps,
|
void startSingleRace(const std::string &track_ident, const int num_laps,
|
||||||
bool from_overworld);
|
bool from_overworld);
|
||||||
|
/** Receive and store the information from sendKartsInformation()
|
||||||
|
*/
|
||||||
|
void setupPlayerKartInfo();
|
||||||
|
|
||||||
bool raceWasStartedFromOverworld() const
|
bool raceWasStartedFromOverworld() const
|
||||||
{
|
{
|
||||||
|
@ -228,7 +228,7 @@ GUIEngine::EventPropagation SelectChallengeDialog::processEvent(const std::strin
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Sets up kart info, including random list of kart for AI
|
// Sets up kart info, including random list of kart for AI
|
||||||
// network_manager->setupPlayerKartInfo();
|
race_manager->setupPlayerKartInfo();
|
||||||
race_manager->startNew(true);
|
race_manager->startNew(true);
|
||||||
|
|
||||||
irr_driver->hidePointer();
|
irr_driver->hidePointer();
|
||||||
|
@ -28,7 +28,6 @@
|
|||||||
#include "io/file_manager.hpp"
|
#include "io/file_manager.hpp"
|
||||||
#include "karts/kart_properties.hpp"
|
#include "karts/kart_properties.hpp"
|
||||||
#include "karts/kart_properties_manager.hpp"
|
#include "karts/kart_properties_manager.hpp"
|
||||||
#include "network/network_manager.hpp"
|
|
||||||
#include "race/highscores.hpp"
|
#include "race/highscores.hpp"
|
||||||
#include "race/highscore_manager.hpp"
|
#include "race/highscore_manager.hpp"
|
||||||
#include "race/race_manager.hpp"
|
#include "race/race_manager.hpp"
|
||||||
|
@ -24,7 +24,6 @@
|
|||||||
#include "input/device_manager.hpp"
|
#include "input/device_manager.hpp"
|
||||||
#include "input/input_manager.hpp"
|
#include "input/input_manager.hpp"
|
||||||
#include "karts/kart_properties_manager.hpp"
|
#include "karts/kart_properties_manager.hpp"
|
||||||
#include "network/network_manager.hpp"
|
|
||||||
#include "race/race_manager.hpp"
|
#include "race/race_manager.hpp"
|
||||||
#include "states_screens/help_screen_2.hpp"
|
#include "states_screens/help_screen_2.hpp"
|
||||||
#include "states_screens/help_screen_3.hpp"
|
#include "states_screens/help_screen_3.hpp"
|
||||||
@ -82,7 +81,7 @@ void HelpScreen1::eventCallback(Widget* widget, const std::string& name, const i
|
|||||||
->setSinglePlayer( StateManager::get()->getActivePlayer(0) );
|
->setSinglePlayer( StateManager::get()->getActivePlayer(0) );
|
||||||
|
|
||||||
StateManager::get()->enterGameState();
|
StateManager::get()->enterGameState();
|
||||||
// network_manager->setupPlayerKartInfo();
|
race_manager->setupPlayerKartInfo();
|
||||||
race_manager->startNew(false);
|
race_manager->startNew(false);
|
||||||
}
|
}
|
||||||
else if (name == "category")
|
else if (name == "category")
|
||||||
|
@ -37,7 +37,6 @@
|
|||||||
#include "modes/cutscene_world.hpp"
|
#include "modes/cutscene_world.hpp"
|
||||||
#include "modes/overworld.hpp"
|
#include "modes/overworld.hpp"
|
||||||
#include "modes/demo_world.hpp"
|
#include "modes/demo_world.hpp"
|
||||||
#include "network/network_manager.hpp"
|
|
||||||
#include "states_screens/online_screen.hpp"
|
#include "states_screens/online_screen.hpp"
|
||||||
#include "states_screens/addons_screen.hpp"
|
#include "states_screens/addons_screen.hpp"
|
||||||
#include "states_screens/credits.hpp"
|
#include "states_screens/credits.hpp"
|
||||||
@ -332,7 +331,7 @@ void MainMenuScreen::eventCallback(Widget* widget, const std::string& name,
|
|||||||
->setSinglePlayer( StateManager::get()->getActivePlayer(0) );
|
->setSinglePlayer( StateManager::get()->getActivePlayer(0) );
|
||||||
|
|
||||||
StateManager::get()->enterGameState();
|
StateManager::get()->enterGameState();
|
||||||
// network_manager->setupPlayerKartInfo();
|
race_manager->setupPlayerKartInfo();
|
||||||
race_manager->startNew(false);
|
race_manager->startNew(false);
|
||||||
}
|
}
|
||||||
else if (selection == "story")
|
else if (selection == "story")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user