38 if (!
sConfig.cosmic.BeltEnabled) {
59 uint32 beltID = itemRef->itemID();
60 m_belts.insert(std::pair<uint32, InventoryItemRef>(beltID, itemRef));
61 m_active.insert(std::pair<uint32, bool>(beltID,
false));
62 m_spawned.insert(std::pair<uint32, bool>(beltID,
false));
89 if (!
Load(bubbleID)) {
90 std::unordered_multimap<float, uint16> roidTypes;
99 std::map<uint32, bool>::iterator itr =
m_spawned.find(beltID);
108 std::map<uint32, bool>::iterator itr =
m_active.find(beltID);
117 std::map<uint32, bool>::iterator itr =
m_active.find(beltID);
119 itr->second = active;
121 m_active.insert(std::pair<uint32, bool>(beltID, active));
132 std::unordered_multimap<float, uint16> roidTypes;
140 std::vector<AsteroidData> entities;
148 for (
auto entity : entities) {
150 if (itemRef.
get() ==
nullptr) {
151 _log(COSMIC_MGR__WARNING,
"BeltMgr::Load() - Unable to spawn item #%u:'%s' of type %u.", entity.itemID, entity.itemName.c_str(), entity.typeID);
155 itemRef->SetAttribute(
AttrRadius, itemRef->type().radius() * entity.radius);
157 itemRef->SetAttribute(
AttrVolume, itemRef->type().volume());
158 itemRef->SetAttribute(
AttrMass, itemRef->type().mass() * entity.quantity);
161 if (pASE ==
nullptr) {
162 _log(COSMIC_MGR__WARNING,
"BeltMgr::Load() - Unable to spawn itemID %u - %s (type %u).", entity.itemID, entity.itemName.c_str(), entity.typeID);
165 _log(COSMIC_MGR__TRACE,
"BeltMgr::Load() - Loaded asteroid %u, type %u for %s(%u)", entity.itemID, entity.typeID,
m_system->
GetName(),
m_systemID );
167 m_asteroids.emplace(std::pair<uint32, AsteroidSE*>(beltID, pASE));
168 pASE->
SetMgr(
this, beltID);
170 std::map<uint32, bool>::iterator itr =
m_spawned.find(beltID);
172 m_spawned.insert(std::pair<uint32, bool>(beltID,
true));
179 m_active.insert(std::pair<uint32, bool>(beltID,
true));
194 std::vector<AsteroidData> roids;
204 entry.
itemID = cur.second->GetID();
205 entry.
itemName = cur.second->GetName();
206 entry.
typeID = cur.second->GetSelf()->typeID();
209 entry.
radius = cur.second->GetRadius();
211 entry.
position = cur.second->GetPosition();
212 roids.push_back(entry);
217 _log(COSMIC_MGR__TRACE,
"BeltMgr::Save - Saving %u Asteroids for %s(%u) took %.3fus. Skipped %u temp anomaly asteroids.", \
224 for (
auto itr = range.first; itr != range.second; ++itr)
225 list.push_back(itr->second);
272 std::unordered_multimap<float, uint16> roidDist;
276 }
else if (anomaly) {
277 roidDist = roidTypes;
283 double radius = 8000;
284 radius *=
sConfig.cosmic.roidRadiusMultiplier;
285 double roidradius = 0, theta = 0, randRadius = 0, elevation = 0;
287 pcs += roidDist.size();
288 radius += (radius * secValue);
289 radius += (pcs * 1000 / 4);
290 elevation = (radius / 4);
294 if (secRating > 0.7) {
296 }
else if (secRating > 0.4) {
298 }
else if (secRating > 0.0) {
300 }
else if (secRating > -0.4) {
307 radius += (radius * secValue);
308 radius += (pcs * 1000 / 4);
309 elevation = (radius / 4);
312 double degreeSeparation = (180 / pcs);
316 for (
uint8 i = 1; i < pcs; ++i) {
318 if (secRating > -0.2) {
323 radius += roidradius;
324 elevation = (radius + (roidradius / 2) / 2);
331 mposition.x = (radius + roidradius / 5) * cos(theta);
332 mposition.z = (radius + roidradius / 5) * sin(theta);
333 }
else if (type == 0) {
337 mposition.x = (randRadius + roidradius + radius) * cos(theta);
338 mposition.z = (randRadius + roidradius + radius) * sin(theta);
344 std::map<uint32, bool>::iterator itr =
m_spawned.find(beltID);
346 m_spawned.insert(std::pair<uint32, bool>(beltID,
true));
353 m_active.insert(std::pair<uint32, bool>(beltID,
false));
358 _log(COSMIC_MGR__TRACE,
"BeltMgr::SpawnBelt - Belt spawned with %u roids of %s in %s %u for %s(%u)", \
363 std::unordered_multimap<float, uint16>::const_iterator cur = roids.begin();
365 for(; cur != roids.end(); ++cur ) {
366 chance += cur->first;
367 _log(COSMIC_MGR__DEBUG,
"BeltMgr::GetAsteroidType - checking %u with chance %.3f(%.3f)", cur->second, chance, p);
377 _log(COSMIC_MGR__WARNING,
"BeltMgr::SpawnAsteroid - typeID is 0");
381 _log(COSMIC_MGR__WARNING,
"BeltMgr::SpawnAsteroid - radius is NaN");
385 _log(COSMIC_MGR__WARNING,
"BeltMgr::SpawnAsteroid - radius < 0");
391 quantity = radius * 2;
393 radius *=
sConfig.cosmic.roidRadiusMultiplier;
395 quantity = ((25000 * log(radius)) - 112404.8);
412 if (iRef.
get() ==
nullptr)
419 m_asteroids.emplace(std::pair<uint32, AsteroidSE*>(beltID, pASE));
420 pASE->
SetMgr(
this, beltID);
429 for (
auto itr = range.first; itr != range.second; ++itr) {
430 if (itr->second == pASE) {
451 if (secStatus < 0.0) {
452 roidDist.insert(std::pair<float,uint32>(0.2, 16265));
453 roidDist.insert(std::pair<float,uint32>(0.16, 16266));
454 roidDist.insert(std::pair<float,uint32>(0.16, 16267));
455 roidDist.insert(std::pair<float,uint32>(0.16, 17976));
456 roidDist.insert(std::pair<float,uint32>(0.16, 16268));
457 roidDist.insert(std::pair<float,uint32>(0.16, 16269));
458 }
else if (secStatus < 0.1) {
459 roidDist.insert(std::pair<float,uint32>(0.70, 16265));
460 roidDist.insert(std::pair<float,uint32>(0.20, 16266));
461 roidDist.insert(std::pair<float,uint32>(0.10, 16267));
462 }
else if (secStatus < 0.4) {
463 roidDist.insert(std::pair<float,uint32>(0.75, 16265));
464 roidDist.insert(std::pair<float,uint32>(0.25, 16266));
466 roidDist.insert(std::pair<float,uint32>(1.0, 16265));
470 if (secStatus < 0.0) {
471 roidDist.insert(std::pair<float,uint32>(0.2, 16263));
472 roidDist.insert(std::pair<float,uint32>(0.16, 16266));
473 roidDist.insert(std::pair<float,uint32>(0.16, 16267));
474 roidDist.insert(std::pair<float,uint32>(0.16, 17977));
475 roidDist.insert(std::pair<float,uint32>(0.16, 16268));
476 roidDist.insert(std::pair<float,uint32>(0.16, 16269));
477 }
else if (secStatus < 0.1) {
478 roidDist.insert(std::pair<float,uint32>(0.70, 16263));
479 roidDist.insert(std::pair<float,uint32>(0.20, 16266));
480 roidDist.insert(std::pair<float,uint32>(0.10, 16267));
481 }
else if (secStatus < 0.4) {
482 roidDist.insert(std::pair<float,uint32>(0.75, 16263));
483 roidDist.insert(std::pair<float,uint32>(0.25, 16266));
485 roidDist.insert(std::pair<float,uint32>(1.0, 16263));
489 if (secStatus < 0.0) {
490 roidDist.insert(std::pair<float,uint32>(0.2, 16262));
491 roidDist.insert(std::pair<float,uint32>(0.16, 16266));
492 roidDist.insert(std::pair<float,uint32>(0.16, 16267));
493 roidDist.insert(std::pair<float,uint32>(0.16, 17978));
494 roidDist.insert(std::pair<float,uint32>(0.16, 16268));
495 roidDist.insert(std::pair<float,uint32>(0.16, 16269));
496 }
else if (secStatus < 0.1) {
497 roidDist.insert(std::pair<float,uint32>(0.70, 16262));
498 roidDist.insert(std::pair<float,uint32>(0.20, 16266));
499 roidDist.insert(std::pair<float,uint32>(0.10, 16267));
500 }
else if (secStatus < 0.4) {
501 roidDist.insert(std::pair<float,uint32>(0.75, 16262));
502 roidDist.insert(std::pair<float,uint32>(0.25, 16266));
504 roidDist.insert(std::pair<float,uint32>(1.0, 16262));
508 if (secStatus < 0.0) {
509 roidDist.insert(std::pair<float,uint32>(0.3, 16264));
510 roidDist.insert(std::pair<float,uint32>(0.17, 16266));
511 roidDist.insert(std::pair<float,uint32>(0.17, 17975));
512 roidDist.insert(std::pair<float,uint32>(0.17, 16268));
513 roidDist.insert(std::pair<float,uint32>(0.17, 16269));
514 }
else if (secStatus < 0.4) {
515 roidDist.insert(std::pair<float,uint32>(0.75, 16264));
516 roidDist.insert(std::pair<float,uint32>(0.25, 16266));
518 roidDist.insert(std::pair<float,uint32>(1.0, 16264));
522 if (secStatus < 0.0) {
523 roidDist.insert(std::pair<float,uint32>(0.4, 16266));
524 roidDist.insert(std::pair<float,uint32>(0.2, 16267));
525 roidDist.insert(std::pair<float,uint32>(0.2, 16268));
526 roidDist.insert(std::pair<float,uint32>(0.2, 16269));
527 }
else if (secStatus < 0.1) {
528 roidDist.insert(std::pair<float,uint32>(0.75, 16266));
529 roidDist.insert(std::pair<float,uint32>(0.25, 16267));
530 }
else if (secStatus < 0.4) {
531 roidDist.insert(std::pair<float,uint32>(1.0, 16266));
#define sConfig
A macro for easier access to the singleton.
std::map< uint32, bool > m_active
SystemEntity * GetSE(uint32 entityID) const
void AddEntity(SystemEntity *pSE, bool addSignal=true)
bool Load(uint16 bubbleID)
#define _log(type, fmt,...)
void Init(uint32 regionID)
#define IsCelestialID(itemID)
SystemBubble * SysBubble()
void SetMgr(BeltMgr *beltMgr, uint32 beltID)
double MakeRandomFloat(double low, double high)
Generates random real from interval [low; high].
void GetList(uint32 beltID, std::vector< AsteroidSE * > &list)
bool Create(CosmicSignature &sig, std::unordered_multimap< float, uint16 > &roidTypes)
const float GetSystemSecurityRating()
bool IsActive(uint16 bubbleID)
std::map< uint32, InventoryItemRef > m_belts
void SafeDelete(T *&p)
Deletes and nullifies a pointer.
std::unordered_multimap< uint32, AsteroidSE * > m_asteroids
bool IsSpawned(uint16 bubbleID)
InventoryItemRef GetSelf()
double Deg2Rad(double deg)
BeltMgr(SystemManager *mgr, PyServiceMgr &svc)
static const GPoint NULL_ORIGIN(0, 0, 0)
void RemoveEntity(SystemEntity *pSE)
void SetBelt(InventoryItemRef itemRef)
bool Check(bool reset=true)
void SpawnBelt(uint16 bubbleID, std::unordered_multimap< float, uint16 > &roidTypes, int type=0, bool anomaly=false)
static AsteroidItemRef SpawnTemp(ItemData &idata, AsteroidData &adata)
PyServiceMgr * GetServiceMgr()
void RemoveAsteroid(uint32 asteroidID)
void ClearBelt(uint16 bubbleID)
void RemoveAsteroid(uint32 beltID, AsteroidSE *pASE)
void SetActive(uint16 bubbleID, bool active=true)
void SaveSystemRoids(uint32 systemID, std::vector< AsteroidData > &roids)
#define IsTempItem(itemID)
const char * GetName() const
int64 MakeRandomInt(int64 low, int64 high)
Generates random integer from interval [low; high].
void SpawnAsteroid(uint32 beltID, uint32 typeID, double radius, const GPoint &position, bool ice=false)
std::map< uint32, bool > m_spawned
void RegisterBelt(InventoryItemRef itemRef)
bool LoadSystemRoids(uint32 systemID, uint32 &beltID, std::vector< AsteroidData > &into)
uint32 GetAsteroidType(double p, const std::unordered_multimap< float, uint16 > &roids)
void GetIceDist(uint8 quarter, float secStatus, std::unordered_multimap< float, uint16 > &roidDist)
const char * GetSystemSecurityClass()
Reference-counting-based smart pointer.
void CheckSpawn(uint16 bubbleID)
void Start(uint32 setTimerTime=0, bool changeResetTimer=true)