diff --git a/engine/inc/C4Game.h b/engine/inc/C4Game.h index 5aace529d..21c0fb559 100644 --- a/engine/inc/C4Game.h +++ b/engine/inc/C4Game.h @@ -109,7 +109,6 @@ class C4Game C4ComponentHost GameText; C4GameScriptHost Script; C4LangStringTable MainSysLangStringTable, ScenarioLangStringTable, ScenarioSysLangStringTable; - C4ParticleSystem Particles; C4PlayerList Players; StdStrBuf PlayerNames; C4GameControl Control; diff --git a/engine/inc/C4Particles.h b/engine/inc/C4Particles.h index ff34ee1c6..9405ca5fd 100644 --- a/engine/inc/C4Particles.h +++ b/engine/inc/C4Particles.h @@ -26,7 +26,7 @@ // thus, more complex partivle behaviour should be solved via // objects // note: this particle system will always assume the owning def -// object to be a static class named Game.Particles! +// object to be a static class named ::Particles! #ifndef INC_C4Particles #define INC_C4Particles @@ -50,7 +50,7 @@ typedef C4ParticleProc C4ParticleExecProc; // particle execution proc - returns typedef C4ParticleProc C4ParticleCollisionProc; // particle collision proc - returns whether particle died typedef void (*C4ParticleDrawProc)(C4Particle *, C4TargetFacet &, C4Object *); // particle drawing code -#define ParticleSystem Game.Particles +#define ParticleSystem ::Particles // core for particle defs class C4ParticleDefCore @@ -224,6 +224,8 @@ class C4ParticleSystem friend class C4ParticleChunk; }; +extern C4ParticleSystem Particles; + // default particle execution/drawing functions bool fxStdInit(C4Particle *pPrt, C4Object *pTarget); bool fxStdExec(C4Particle *pPrt, C4Object *pTarget); diff --git a/engine/src/C4Effect.cpp b/engine/src/C4Effect.cpp index d7cda114b..4cd3234ad 100644 --- a/engine/src/C4Effect.cpp +++ b/engine/src/C4Effect.cpp @@ -644,7 +644,7 @@ int32_t FnFxFireTimer(C4AulContext *ctx, C4Object *pObj, int32_t iNumber, int32_ pObj->ExecFire(iNumber, iCausedByPlr); // special effects only if loaded - if (!Game.Particles.IsFireParticleLoaded()) return C4Fx_OK; + if (!::Particles.IsFireParticleLoaded()) return C4Fx_OK; // get effect: May be NULL after object fire execution, in which case the fire has been extinguished if (!pObj->GetOnFire()) return C4Fx_Execute_Kill; @@ -720,12 +720,12 @@ int32_t FnFxFireTimer(C4AulContext *ctx, C4Object *pObj, int32_t iNumber, int32_ if (iName.getData(), "Blast")) - Game.Particles.Cast(Game.Particles.pFSpark, level/5+1, (float) tx, (float) ty, level, level/2+1.0f, 0x00ef0000, level+1.0f, 0xffff1010); + ::Particles.Cast(::Particles.pFSpark, level/5+1, (float) tx, (float) ty, level, level/2+1.0f, 0x00ef0000, level+1.0f, 0xffff1010); } else if (pBlast = Game.CreateObjectConstruction(idEffect ? idEffect : C4Id("FXB1"),pByObj,iCausedBy,tx,ty+level,FullCon*level/20)) diff --git a/engine/src/C4Object.cpp b/engine/src/C4Object.cpp index 2ab82bd12..9b700f6fb 100644 --- a/engine/src/C4Object.cpp +++ b/engine/src/C4Object.cpp @@ -2358,7 +2358,7 @@ void C4Object::Draw(C4TargetFacet &cgo, int32_t iByPlayer, DrawMode eDrawMode) } // Fire facet - always draw, even if particles are drawn as well - if (OnFire /*&& !Game.Particles.IsFireParticleLoaded()*/) if (eDrawMode!=ODM_BaseOnly) + if (OnFire /*&& !::Particles.IsFireParticleLoaded()*/) if (eDrawMode!=ODM_BaseOnly) { C4Facet fgo; // Straight: Full Shape.Rect on fire diff --git a/engine/src/C4Particles.cpp b/engine/src/C4Particles.cpp index 621328a14..c30e122dd 100644 --- a/engine/src/C4Particles.cpp +++ b/engine/src/C4Particles.cpp @@ -265,7 +265,7 @@ void C4ParticleList::Exec(C4Object *pObj) { // sorry, life is over for you :P --pPrt->pDef->Count; - pPrt->MoveList(*this, Game.Particles.FreeParticles); + pPrt->MoveList(*this, ::Particles.FreeParticles); } } // done @@ -289,7 +289,7 @@ void C4ParticleList::Clear() pPrtNext=pPrt->pNext; // sorry, life is over for you :P --pPrt->pDef->Count; - pPrt->MoveList(*this, Game.Particles.FreeParticles); + pPrt->MoveList(*this, ::Particles.FreeParticles); } } @@ -307,7 +307,7 @@ int32_t C4ParticleList::Remove(C4ParticleDef *pOfDef) { // sorry, life is over for you :P --pPrt->pDef->Count; - pPrt->MoveList(*this, Game.Particles.FreeParticles); + pPrt->MoveList(*this, ::Particles.FreeParticles); } } // done @@ -446,7 +446,7 @@ C4Particle *C4ParticleSystem::Create(C4ParticleDef *pOfDef, // count particle ++pOfDef->Count; // more to desired list - pPrt->MoveList(Game.Particles.FreeParticles, *pPxList); + pPrt->MoveList(::Particles.FreeParticles, *pPxList); // return newly created particle return pPrt; } @@ -840,3 +840,5 @@ C4ParticleDrawProcRec C4ParticleDrawProcMap[] = { { "Smoke", fxSmokeDraw }, { "Std", fxStdDraw }, { "", 0 } }; + +C4ParticleSystem Particles; diff --git a/engine/src/C4Script.cpp b/engine/src/C4Script.cpp index c00028ad8..f49892dc5 100644 --- a/engine/src/C4Script.cpp +++ b/engine/src/C4Script.cpp @@ -5137,10 +5137,10 @@ static bool FnCreateParticle(C4AulContext *cthr, C4String *szName, long iX, long iY+=cthr->Obj->GetY(); } // get particle - C4ParticleDef *pDef=Game.Particles.GetDef(FnStringPar(szName)); + C4ParticleDef *pDef=::Particles.GetDef(FnStringPar(szName)); if (!pDef) return FALSE; // create - Game.Particles.Create(pDef, (float) iX, (float) iY, (float) iXDir/10.0f, (float) iYDir/10.0f, (float) a/10.0f, b, pObj ? (fBack ? &pObj->BackParticles : &pObj->FrontParticles) : NULL, pObj); + ::Particles.Create(pDef, (float) iX, (float) iY, (float) iXDir/10.0f, (float) iYDir/10.0f, (float) a/10.0f, b, pObj ? (fBack ? &pObj->BackParticles : &pObj->FrontParticles) : NULL, pObj); // success, even if not created return TRUE; } @@ -5156,10 +5156,10 @@ static bool FnCastAParticles(C4AulContext *cthr, C4String *szName, long iAmount, iY+=cthr->Obj->GetY(); } // get particle - C4ParticleDef *pDef=Game.Particles.GetDef(FnStringPar(szName)); + C4ParticleDef *pDef=::Particles.GetDef(FnStringPar(szName)); if (!pDef) return FALSE; // cast - Game.Particles.Cast(pDef, iAmount, (float) iX, (float) iY, iLevel, (float) a0/10.0f, b0, (float) a1/10.0f, b1, pObj ? (fBack ? &pObj->BackParticles : &pObj->FrontParticles) : NULL, pObj); + ::Particles.Cast(pDef, iAmount, (float) iX, (float) iY, iLevel, (float) a0/10.0f, b0, (float) a1/10.0f, b1, pObj ? (fBack ? &pObj->BackParticles : &pObj->FrontParticles) : NULL, pObj); // success, even if not created return TRUE; } @@ -5180,11 +5180,11 @@ static bool FnPushParticles(C4AulContext *cthr, C4String *szName, long iAX, long C4ParticleDef *pDef=NULL; if (szName) { - pDef=Game.Particles.GetDef(FnStringPar(szName)); + pDef=::Particles.GetDef(FnStringPar(szName)); if (!pDef) return FALSE; } // push them - Game.Particles.Push(pDef, (float) iAX/10.0f, (float)iAY/10.0f); + ::Particles.Push(pDef, (float) iAX/10.0f, (float)iAY/10.0f); // success return TRUE; } @@ -5195,7 +5195,7 @@ static bool FnClearParticles(C4AulContext *cthr, C4String *szName, C4Object *pOb C4ParticleDef *pDef=NULL; if (szName) { - pDef=Game.Particles.GetDef(FnStringPar(szName)); + pDef=::Particles.GetDef(FnStringPar(szName)); if (!pDef) return FALSE; } // delete them @@ -5205,7 +5205,7 @@ static bool FnClearParticles(C4AulContext *cthr, C4String *szName, C4Object *pOb pObj->BackParticles.Remove(pDef); } else - Game.Particles.GlobalParticles.Remove(pDef); + ::Particles.GlobalParticles.Remove(pDef); // success return TRUE; } diff --git a/engine/src/C4Viewport.cpp b/engine/src/C4Viewport.cpp index 03a83fcb5..8b81c106b 100644 --- a/engine/src/C4Viewport.cpp +++ b/engine/src/C4Viewport.cpp @@ -1086,7 +1086,7 @@ void C4Viewport::Draw(C4TargetFacet &cgo, bool fDrawOverlay) // draw global particles C4ST_STARTNEW(PartStat, "C4Viewport::Draw: Particles") - Game.Particles.GlobalParticles.Draw(cgo,NULL); + ::Particles.GlobalParticles.Draw(cgo,NULL); C4ST_STOP(PartStat) // draw foreground objects