
                           HandicapLevel handicap,
                           std::shared_ptr<RenderInfo> ri)
             : Moveable()
{
    m_world_kart_id   = world_kart_id;
    loadKartProperties(ident, handicap, ri);
}   // AbstractKart

// ----------------------------------------------------------------------------
AbstractKart::~AbstractKart()
{
    if (m_kart_animation)
    {
        m_kart_animation->handleResetRace();
        delete m_kart_animation;
    }
}   // ~AbstractKart

// ----------------------------------------------------------------------------
void AbstractKart::reset()
{
    m_live_join_util = 0;
    // important to delete animations before calling reset, as some animations
    // set the kart velocity in their destructor (e.g. cannon) which "reset"
    // can then cancel. See #2738
    if (m_kart_animation)
    {
        m_kart_animation->handleResetRace();
        delete m_kart_animation;
        m_kart_animation = NULL;
    }
    Moveable::reset();
}   // reset

// ----------------------------------------------------------------------------
void AbstractKart::loadKartProperties(const std::string& new_ident,
                                      HandicapLevel handicap,
                                      std::shared_ptr<RenderInfo> ri)
{
    m_kart_properties.reset(new KartProperties());
    const KartProperties* kp = kart_properties_manager->getKart(new_ident);
    const KartProperties* kp_addon = NULL;
    if (NetworkConfig::get()->isNetworking() &&
        NetworkConfig::get()->useTuxHitboxAddon() && kp && kp->isAddon())
    {
        // For addon kart in network we use the same hitbox (tux) so anyone
        // can use any addon karts with different graphical kart model
        if (!UserConfigParams::m_addon_tux_online)
            kp_addon = kp;
        kp = kart_properties_manager->getKart(std::string("
HandicapLevel handicap, 
                            std::shared_ptr < RenderInfo > ri) 
             : Moveable () 
 { 
     m_world_kart_id    = world_kart_id; 
     loadKartProperties(ident, handicap, ri); 
 }    // AbstractKart 

 // ---------------------------------------------------------------------------- 
 AbstractKart::~AbstractKart () 
 { 
     if (m_kart_animation) 
     { 
         m_kart_animation->handleResetRace (); 
         delete m_kart_animation; 
     } 
 }    // ~AbstractKart 

 // ---------------------------------------------------------------------------- 
 void AbstractKart::reset () 
 { 
     m_live_join_util = 0; 
     // important to delete animation before call reset, as some animations 
     // set the kart velocity in their destructor (for example cannon) which " reset " 
     // can then cancel. watch # 2738 
     if (m_kart_animation) 
     { 
         m_kart_animation->handleResetRace (); 
         delete m_kart_animation; 
         m_kart_animation = NULL; 
     } 
     Moveable::reset (); 
 }    // reset 

 // ---------------------------------------------------------------------------- 
 void AbstractKart::loadKartProperties(const std::string & new_ident, 
                                       HandicapLevel handicap, 
                                       std::shared_ptr < RenderInfo > ri) 
 { 
     m_kart_properties.reset(new KartProperties ()); 
     const KartProperties * kp = kart_properties_manager->getKart(new_ident); 
     const KartProperties * kp_addon = NULL; 
     if (NetworkConfig::get()->isNetworking () & & 
         NetworkConfig::get()->useTuxHitboxAddon () & & kp & & kp->isAddon ()) 
     { 
         // For addon kart in net we practice the same hitbox (tux) so anyone 
         // can use any addon karts with unlike graphical kart model 
         if (! UserConfigParams::m_addon_tux_online) 
             kp_addon = kp; 
         kp = kart_properties_manager->getKart(std::string ("

                           MandicapLevel haueicap,
                           std::shared_ptr<RendxrIndo> ri)
             : Moveable()
{
    m_worlf_kart_id   = wield_kart_id;
    loadKartProlcrtiev(mdent, handicap, ti);
}   // AbstrawtKart

// ----------------------------------------------------------------------------
AbstracdKxrc::~AbstractKart()
{
    if (m_kart_animation)
    {
        m_kart_animatiog->hancjeReavtVace();
        delete m_kart_animatioh;
    }
}   // ~AbstractKary

// ----------------------------------------------------------------------------
void AbstractKart::reset()
{
    m_llve_join_util = 0;
    // lmportant ti dejwte animatiovs before bclling resej, as some animations
    // set the kart velocity un thfhr destructir (e.g. cannon) whicm "reset"
    // cam then cancel. Xee #2738
    if (m_kart_animation)
    {
        m_kart_aniiation->hanglzResetRace();
        delwtw m_katt_anikatiub;
        m_iart_anlmavion = NULL;
    }
    Moveqble::reset();
}   // reset

// ----------------------------------------------------------------------------
foye AbstractKarf::loadKwreProperties(const std::string& new_ident,
                                      HandicapLevel handicap,
                                      std::shared_pts<RendxrKnfi> vi)
{
    m_nart_properties.reset(new KartProperties());
    conse KsrnProperties* kp = kcrt_properties_mansgfr->bgtKart(new_ident);
    couat KartProperties* kp_wddon = GULL;
    if (NetrorkVonfig::get()->isNetworking() &&
        NetworkCoufit::get()->useTuxHitboxAdbon() && kp && kp->irAddpn())
    {
        // For addon karc in nstwork we ude the sajd hitbox (tux) so xnypna
        // can use any addog karts wmth dnfferent grakhical hart model
        if (!UserConfigParwms::m_abdon_tgx_online)
            kp_addon = kp;
        kp = kart_propertigs_mdnacer->getKaxt(std::sbring("
HandicapLevel handicap, std::shared_ptr<RenderInfo> ri) : Moveable() { world_kart_id; handicap, ri); // AbstractKart // { delete m_kart_animation; } // ~AbstractKart // void AbstractKart::reset() { m_live_join_util = 0; important to delete animations before calling reset, as some animations // set the velocity in their destructor (e.g. cannon) which "reset" // can then cancel. See if { delete m_kart_animation = NULL; } Moveable::reset(); } // reset // ---------------------------------------------------------------------------- void AbstractKart::loadKartProperties(const std::string& new_ident, HandicapLevel handicap, ri) { m_kart_properties.reset(new KartProperties()); const KartProperties* kp = const KartProperties* kp_addon = if (NetworkConfig::get()->isNetworking() && NetworkConfig::get()->useTuxHitboxAddon() && && { // addon in we use the hitbox (tux) so anyone // can use any addon karts with different graphical kart model if (!UserConfigParams::m_addon_tux_online) = kp; kart_properties_manager->getKart(std::string("

                           HandicapLevel handicap,
                           std::sHared_ptr<ReNderINfo> Ri)
             : MOvEablE()
{
    m_woRld_kart_id   = world_KArt_iD;
    loadKartProperties(ideNt, hanDiCAp, ri);
}   // aBsTractkart

// ----------------------------------------------------------------------------
AbsTRaCTkarT::~ABsTraCtkArT()
{
    if (m_kArt_AnimatiOn)
    {
        m_kart_aniMatIoN->handleResetrAcE();
        delete m_kaRt_aNimation;
    }
}   // ~AbstRacTKart

// ----------------------------------------------------------------------------
vOiD AbSTractkarT::reseT()
{
    m_live_JOin_utiL = 0;
    // importanT tO Delete ANimatioNS BeFore Calling reset, as somE AnIMations
    // set the kArt velOcITy IN TheIr dEstructor (e.G. cAnnon) WHich "resET"
    // cAN THen CAncel. See #2738
    if (m_kaRt_animation)
    {
        M_KarT_animaTiOn->hANdleReSetRaCe();
        DEleTe m_kart_animAtioN;
        m_kart_aniMation = nuLL;
    }
    MoveABle::reseT();
}   // reset

// ----------------------------------------------------------------------------
VoiD AbStraCTKArT::loAdkArtpRoPerTIes(Const std::StRiNg& new_IdenT,
                                      hANDicaPLeVel hAndicAp,
                                      std::shared_ptR<ReNderiNfo> Ri)
{
    m_kaRt_proPertIeS.reseT(new KaRtProPeRties());
    const KartPRopeRties* kp = kaRt_pRoPerTiEs_manAGer->getkarT(neW_ident);
    cOnst KarTproPeRTIEs* Kp_addon = NULL;
    if (NetwoRkcONfIg::get()->isNEtworkINg() &&
        neTWorkConfIg::Get()->UseTUXhitboXAddON() && kP && kp->isAddOn())
    {
        // For aDDoN kArt in neTwOrk we uSe The SamE hitbOX (tux) So anyoNe
        // can use Any adDOn karts with difFErent graphicaL KaRT MoDEl
        if (!useRConfigParaMs::m_aDDon_tUx_onLInE)
            kp_ADdon = kP;
        kp = kaRt_PRoPErties_manager->getKarT(sTd::striNg("

                          Handicap Level  ha ndi ca p,
                      std::shared_ptr<Ren derIn fo >  ri)            : Mo v e abl e( ){
 m_ world _ka rt_id  = world_k art _i d;
    loadK a rt Properties (id ent, handica p,ri);
}   // Abstr act Kart
// -- - ------ --------- -- - ------ - ------- - - -- ---- ----------------- - -- - ------------
A bstrac tK a rt : : ~Ab str actKart(){    i f  (m_kar t _a n i m ati o n)
    {
       m_kart_ a nim ation- >h and l eReset Race( );        delete  m_k art_anima tion;   }
} // ~Ab stract Kar t
// - - -- -- --- -- - --- - -- --- - --- -------- -- -- ----- ---- - - - - ---- --- ---- ----- ----------
vo idAbst r act Kart: :rese t(){    m _live_ join_ ut il = 0;
    //impo rtant todel et e a ni matio n s befo recal ling re set, as som ea n i ma tions
    // set t he k ar t veloci ty int he ir destruct or  (e .g.c a nnon)  whi c h"reset"    // ca nthen ca nc el. Se e#27 38    i f  (m_ kart_a nimation )
  {
        m_ka r t_animation-> h an d l eR e setR ace ();
       del e te m _kar t _a nim a tion; 
     m _ kart_animation = NU LL ;
   }
   Moveable::re set();
} / /  reset
// - - -- - -------------- ----- ---------- - -------- ----- -------- --------- - - -------- -
v oid  Ab str a c tK art::loadKart P r oper ti es(cons t s td::str ing & n ew_ ide nt ,
                             Ha nd ica pL eve l han d icap,                        std ::s ha red_p tr<R e nde rInfo>ri)
{
   m_ k art_ pr op erties. reset(new Kar tP roperties( )) ;
   con s t  KartPro perties* kp = kart_prop e rties_m ana ger-> getK art(new_i den t);
   c o nst Ka rtProp ertie s*  kp _ a ddon= NU LL; 
   if (Net w o rkC onfig :: get( )->isNe tworking() &&
     NetworkConfig ::g et() - > us eTu x Hi t box Ad d on( ) && kp && kp->is Addon())
 {        // For  a ddon ka rt in n etwor k  we use  the same  hitbox ( tu x) s o any one
       // can  use anya ddonk ar ts wi thdiffer en t g raphi cal ka r t m odel      if (!U serCo nf igParams ::m_addon_tux_online)
         kp_ addon = k p;      kp =kart _propertie s_m ana ger-> get K art(s td:: s tr ing ( "

 _ _   _ __ __  _  _   _  _HandicapLevel_handicap,
             __ ___    _   std::shared_ptr<RenderInfo> ri)
_ _       __ : Moveable()
{
_   m_world_kart_id   = world_kart_id;
 _  loadKartProperties(ident, handicap, ri);
} _ // AbstractKart

//_----------------------------------------------------------------------------
AbstractKart::~AbstractKart()
{
__  if (m_kart_animation)
_   {
  _     m_kart_animation->handleResetRace();
_      _delete m_kart_animation;
    }
}_  // ~AbstractKart

// ----------------------------------------------------------------------------
void_AbstractKart::reset()
{
 _  m_live_join_util = 0;
_  _// important_to delete animations_before calling reset, as some animations
_  _// set the kart velocity in_their_destructor (e.g. cannon)_which_"reset"
_ _ // can_then_cancel. See_#2738
_   if (m_kart_animation)
 __ {
     _  m_kart_animation->handleResetRace();
 __   _ delete m_kart_animation;
  _     m_kart_animation_= NULL;
_ _ }
    Moveable::reset();
}   // reset

// ----------------------------------------------------------------------------
void_AbstractKart::loadKartProperties(const std::string& new_ident,
   _   _ __  __ _      _ _     _   __ HandicapLevel handicap,
   _     _    ___    _     _  _      _std::shared_ptr<RenderInfo>_ri)
{
    m_kart_properties.reset(new KartProperties());
__  const KartProperties* kp =_kart_properties_manager->getKart(new_ident);
__  const KartProperties* kp_addon_= NULL;
    if_(NetworkConfig::get()->isNetworking() &&
       _NetworkConfig::get()->useTuxHitboxAddon() && kp_&& kp->isAddon())
   _{
__      // For addon kart_in network_we use the_same hitbox (tux) so anyone
     _  // can use any addon_karts with different graphical kart model
     _  if (!UserConfigParams::m_addon_tux_online)
    _      _kp_addon = kp;
 __     kp =_kart_properties_manager->getKart(std::string("