Turn projectile manager into a singleton get for 2 processes
This commit is contained in:
@@ -958,7 +958,7 @@ void IrrDriver::applyResolutionSettings(bool recreate_device)
|
||||
track_manager->removeAllCachedData();
|
||||
delete attachment_manager;
|
||||
attachment_manager = NULL;
|
||||
projectile_manager->removeTextures();
|
||||
ProjectileManager::get()->removeTextures();
|
||||
ItemManager::removeTextures();
|
||||
kart_properties_manager->unloadAllKarts();
|
||||
delete powerup_manager;
|
||||
@@ -1052,7 +1052,7 @@ void IrrDriver::applyResolutionSettings(bool recreate_device)
|
||||
|
||||
powerup_manager->loadPowerupsModels();
|
||||
ItemManager::loadDefaultItemMeshes();
|
||||
projectile_manager->loadData();
|
||||
ProjectileManager::get()->loadData();
|
||||
Referee::init();
|
||||
GUIEngine::addLoadingIcon(
|
||||
irr_driver->getTexture(file_manager->getAsset(FileManager::GUI_ICON,"gift.png")) );
|
||||
|
||||
@@ -311,7 +311,7 @@ void Attachment::hitBanana(ItemState *item_state)
|
||||
"explosion_bomb.xml");
|
||||
if (m_kart->getController()->isLocalPlayerController())
|
||||
he->setLocalPlayerKartHit();
|
||||
projectile_manager->addHitEffect(he);
|
||||
ProjectileManager::get()->addHitEffect(he);
|
||||
}
|
||||
if (m_kart->getKartAnimation() == NULL)
|
||||
ExplosionAnimation::create(m_kart);
|
||||
@@ -520,7 +520,7 @@ void Attachment::update(int ticks)
|
||||
"explosion_bomb.xml");
|
||||
if (m_kart->getController()->isLocalPlayerController())
|
||||
he->setLocalPlayerKartHit();
|
||||
projectile_manager->addHitEffect(he);
|
||||
ProjectileManager::get()->addHitEffect(he);
|
||||
}
|
||||
if (m_kart->getKartAnimation() == NULL)
|
||||
ExplosionAnimation::create(m_kart);
|
||||
|
||||
@@ -761,7 +761,7 @@ void Flyable::computeError()
|
||||
"doesn't exist on server, remove it.",
|
||||
typeid(*this).name(), StringUtils::wideToUtf8(
|
||||
m_owner->getController()->getName()).c_str(), m_created_ticks);
|
||||
projectile_manager->removeByUID(uid);
|
||||
ProjectileManager::get()->removeByUID(uid);
|
||||
}
|
||||
} // computeError
|
||||
|
||||
|
||||
@@ -298,7 +298,7 @@ void Powerup::use()
|
||||
Powerup::adjustSound();
|
||||
m_sound_use->play();
|
||||
}
|
||||
projectile_manager->newProjectile(m_kart, m_type);
|
||||
ProjectileManager::get()->newProjectile(m_kart, m_type);
|
||||
break ;
|
||||
|
||||
case PowerupManager::POWERUP_SWATTER:
|
||||
|
||||
@@ -32,12 +32,42 @@
|
||||
#include "network/network_config.hpp"
|
||||
#include "network/network_string.hpp"
|
||||
#include "network/rewind_manager.hpp"
|
||||
#include "utils/stk_process.hpp"
|
||||
#include "utils/string_utils.hpp"
|
||||
|
||||
#include <typeinfo>
|
||||
|
||||
ProjectileManager *projectile_manager=0;
|
||||
//=============================================================================================
|
||||
ProjectileManager* g_projectile_manager[PT_COUNT];
|
||||
//---------------------------------------------------------------------------------------------
|
||||
ProjectileManager* ProjectileManager::get()
|
||||
{
|
||||
ProcessType type = STKProcess::getType();
|
||||
return g_projectile_manager[type];
|
||||
} // get
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
void ProjectileManager::create()
|
||||
{
|
||||
ProcessType type = STKProcess::getType();
|
||||
g_projectile_manager[type] = new ProjectileManager();
|
||||
} // create
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
void ProjectileManager::destroy()
|
||||
{
|
||||
ProcessType type = STKProcess::getType();
|
||||
delete g_projectile_manager[type];
|
||||
g_projectile_manager[type] = NULL;
|
||||
} // destroy
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
void ProjectileManager::clear()
|
||||
{
|
||||
memset(g_projectile_manager, 0, sizeof(g_projectile_manager));
|
||||
} // clear
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
void ProjectileManager::loadData()
|
||||
{
|
||||
} // loadData
|
||||
|
||||
@@ -59,6 +59,15 @@ private:
|
||||
PowerupManager::PowerupType type);
|
||||
void updateServer(int ticks);
|
||||
public:
|
||||
// ----------------------------------------------------------------------------------------
|
||||
static ProjectileManager* get();
|
||||
// ----------------------------------------------------------------------------------------
|
||||
static void create();
|
||||
// ----------------------------------------------------------------------------------------
|
||||
static void destroy();
|
||||
// ----------------------------------------------------------------------------------------
|
||||
static void clear();
|
||||
// ----------------------------------------------------------------------------------------
|
||||
ProjectileManager() {}
|
||||
~ProjectileManager() {}
|
||||
void loadData ();
|
||||
@@ -91,8 +100,6 @@ public:
|
||||
{ m_active_projectiles.erase(uid); }
|
||||
};
|
||||
|
||||
extern ProjectileManager *projectile_manager;
|
||||
|
||||
#endif
|
||||
|
||||
/* EOF */
|
||||
|
||||
@@ -432,7 +432,7 @@ void Swatter::squashThingsAround()
|
||||
HitEffect *he = new Explosion(m_kart->getXYZ(), "explosion", "explosion.xml");
|
||||
if(m_kart->getController()->isLocalPlayerController())
|
||||
he->setLocalPlayerKartHit();
|
||||
projectile_manager->addHitEffect(he);
|
||||
ProjectileManager::get()->addHitEffect(he);
|
||||
} // if kart has bomb attached
|
||||
|
||||
// TODO: squash items
|
||||
|
||||
@@ -460,7 +460,7 @@ void ArenaAI::useItems(const float dt)
|
||||
// has a swatter attachment. If so, use bubblegum
|
||||
// as shield
|
||||
if ( (!m_kart->isShielded() &&
|
||||
projectile_manager->projectileIsClose(m_kart,
|
||||
ProjectileManager::get()->projectileIsClose(m_kart,
|
||||
m_ai_properties->m_shield_incoming_radius) ) ||
|
||||
(dist_to_kart < 15.0f &&
|
||||
(m_closest_kart->getAttachment()->
|
||||
|
||||
@@ -1298,13 +1298,13 @@ void SkiddingAI::handleBubblegum(int item_skill,
|
||||
float shield_radius = m_ai_properties->m_shield_incoming_radius;
|
||||
|
||||
int projectile_types[4]; //[3] basket, [2] cakes, [1] plunger, [0] bowling
|
||||
projectile_types[0] = projectile_manager->getNearbyProjectileCount(m_kart, shield_radius, PowerupManager::POWERUP_BOWLING);
|
||||
projectile_types[1] = projectile_manager->getNearbyProjectileCount(m_kart, shield_radius, PowerupManager::POWERUP_PLUNGER);
|
||||
projectile_types[2] = projectile_manager->getNearbyProjectileCount(m_kart, shield_radius, PowerupManager::POWERUP_CAKE);
|
||||
projectile_types[3] = projectile_manager->getNearbyProjectileCount(m_kart, shield_radius, PowerupManager::POWERUP_RUBBERBALL);
|
||||
projectile_types[0] = ProjectileManager::get()->getNearbyProjectileCount(m_kart, shield_radius, PowerupManager::POWERUP_BOWLING);
|
||||
projectile_types[1] = ProjectileManager::get()->getNearbyProjectileCount(m_kart, shield_radius, PowerupManager::POWERUP_PLUNGER);
|
||||
projectile_types[2] = ProjectileManager::get()->getNearbyProjectileCount(m_kart, shield_radius, PowerupManager::POWERUP_CAKE);
|
||||
projectile_types[3] = ProjectileManager::get()->getNearbyProjectileCount(m_kart, shield_radius, PowerupManager::POWERUP_RUBBERBALL);
|
||||
|
||||
bool projectile_is_close = false;
|
||||
projectile_is_close = projectile_manager->projectileIsClose(m_kart, shield_radius);
|
||||
projectile_is_close = ProjectileManager::get()->projectileIsClose(m_kart, shield_radius);
|
||||
|
||||
Attachment::AttachmentType type = m_kart->getAttachment()->getType();
|
||||
|
||||
|
||||
@@ -1204,7 +1204,7 @@ void SkiddingAI::handleItems(const float dt)
|
||||
// Check if a flyable (cake, ...) is close. If so, use bubblegum
|
||||
// as shield
|
||||
if( !m_kart->isShielded() &&
|
||||
projectile_manager->projectileIsClose(m_kart,
|
||||
ProjectileManager::get()->projectileIsClose(m_kart,
|
||||
m_ai_properties->m_shield_incoming_radius) )
|
||||
{
|
||||
m_controls->setFire(true);
|
||||
|
||||
@@ -1776,7 +1776,7 @@ void Kart::update(int ticks)
|
||||
{
|
||||
HitEffect *effect = new Explosion(getXYZ(), "jump",
|
||||
"jump_explosion.xml");
|
||||
projectile_manager->addHitEffect(effect);
|
||||
ProjectileManager::get()->addHitEffect(effect);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1738,6 +1738,7 @@ void clearGlobalVariables()
|
||||
NetworkConfig::clear();
|
||||
STKHost::clear();
|
||||
RaceManager::clear();
|
||||
ProjectileManager::clear();
|
||||
music_manager = NULL;
|
||||
irr_driver = NULL;
|
||||
#ifdef ENABLE_WIIUSE
|
||||
@@ -1826,7 +1827,7 @@ void initRest()
|
||||
material_manager = new MaterialManager ();
|
||||
track_manager = new TrackManager ();
|
||||
kart_properties_manager = new KartPropertiesManager();
|
||||
projectile_manager = new ProjectileManager ();
|
||||
ProjectileManager::create();
|
||||
powerup_manager = new PowerupManager ();
|
||||
attachment_manager = new AttachmentManager ();
|
||||
highscore_manager = new HighscoreManager ();
|
||||
@@ -2114,7 +2115,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
GUIEngine::addLoadingIcon( irr_driver->getTexture(FileManager::GUI_ICON,
|
||||
"gui_lock.png" ) );
|
||||
projectile_manager->loadData();
|
||||
ProjectileManager::get()->loadData();
|
||||
|
||||
// Both item_manager and powerup_manager load models and therefore
|
||||
// textures from the model directory. To avoid reading the
|
||||
@@ -2466,7 +2467,7 @@ static void cleanSuperTuxKart()
|
||||
if(attachment_manager) delete attachment_manager;
|
||||
ItemManager::removeTextures();
|
||||
if(powerup_manager) delete powerup_manager;
|
||||
if(projectile_manager) delete projectile_manager;
|
||||
ProjectileManager::destroy();
|
||||
if(kart_properties_manager) delete kart_properties_manager;
|
||||
if(track_manager) delete track_manager;
|
||||
if(material_manager) delete material_manager;
|
||||
|
||||
@@ -380,7 +380,7 @@ void World::reset(bool restart)
|
||||
|
||||
// Remove all (if any) previous game flyables before reset karts, so no
|
||||
// explosion animation will be created
|
||||
projectile_manager->cleanup();
|
||||
ProjectileManager::get()->cleanup();
|
||||
resetAllKarts();
|
||||
// Note: track reset must be called after all karts exist, since check
|
||||
// objects need to allocate data structures depending on the number
|
||||
@@ -586,7 +586,7 @@ World::~World()
|
||||
|
||||
irr_driver->onUnloadWorld();
|
||||
|
||||
projectile_manager->cleanup();
|
||||
ProjectileManager::get()->cleanup();
|
||||
|
||||
// In case that a race is aborted (e.g. track not found) track is 0.
|
||||
if(Track::getCurrentTrack())
|
||||
@@ -1085,7 +1085,7 @@ void World::updateGraphics(float dt)
|
||||
if (script_engine)
|
||||
script_engine->update(dt);
|
||||
|
||||
projectile_manager->updateGraphics(dt);
|
||||
ProjectileManager::get()->updateGraphics(dt);
|
||||
Track::getCurrentTrack()->updateGraphics(dt);
|
||||
} // updateGraphics
|
||||
|
||||
@@ -1142,7 +1142,7 @@ void World::update(int ticks)
|
||||
if(RaceManager::get()->isRecordingRace()) ReplayRecorder::get()->update(ticks);
|
||||
|
||||
PROFILER_PUSH_CPU_MARKER("World::update (projectiles)", 0xa0, 0x7F, 0x00);
|
||||
projectile_manager->update(ticks);
|
||||
ProjectileManager::get()->update(ticks);
|
||||
PROFILER_POP_CPU_MARKER();
|
||||
|
||||
PROFILER_PUSH_CPU_MARKER("World::update (physics)", 0xa0, 0x7F, 0x00);
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#include "network/child_loop.hpp"
|
||||
#include "config/user_config.hpp"
|
||||
#include "guiengine/engine.hpp"
|
||||
#include "items/projectile_manager.hpp"
|
||||
#include "network/network_config.hpp"
|
||||
#include "network/protocol_manager.hpp"
|
||||
#include "network/protocols/server_lobby.hpp"
|
||||
@@ -78,6 +79,7 @@ void ChildLoop::run()
|
||||
|
||||
GUIEngine::disableGraphics();
|
||||
RaceManager::create();
|
||||
ProjectileManager::create();
|
||||
NetworkConfig::get()->setIsServer(true);
|
||||
if (m_cl_config->m_lan_server)
|
||||
NetworkConfig::get()->setIsLAN();
|
||||
@@ -138,6 +140,7 @@ void ChildLoop::run()
|
||||
}
|
||||
|
||||
RaceManager::destroy();
|
||||
ProjectileManager::destroy();
|
||||
NetworkConfig::destroy();
|
||||
StateManager::deallocate();
|
||||
} // run
|
||||
|
||||
@@ -89,7 +89,7 @@ void RewindInfoState::restore()
|
||||
{
|
||||
// For now we only need to get missing rewinder from
|
||||
// projectile_manager
|
||||
r = projectile_manager->addRewinderFromNetworkState(name);
|
||||
r = ProjectileManager::get()->addRewinderFromNetworkState(name);
|
||||
}
|
||||
if (!r)
|
||||
{
|
||||
|
||||
@@ -38,7 +38,7 @@ namespace Scripting
|
||||
return;
|
||||
Vec3 *explosion_loc = (Vec3*)gen->GetArgAddress(0);
|
||||
HitEffect *he = new Explosion(*explosion_loc, "explosion", "explosion_bomb.xml");
|
||||
projectile_manager->addHitEffect(he);
|
||||
ProjectileManager::get()->addHitEffect(he);
|
||||
}
|
||||
void registerScriptFunctions(asIScriptEngine *engine)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user