41 size(std::min(dsize, static_cast<int>(MAX_DUSTS))),
44 parent_snode = sm->getRootSceneNode()->createChildSceneNode(fmt::format(
"DustPools/{}", dname));
46 for (
int i = 0; i <
size; i++)
49 sprintf(dename,
"Dust %s %i", dname, i);
51 pss[i] = sm->createParticleSystem(dename, dname);
54 sns[i]->attachObject(
pss[i]);
55 pss[i]->setCastShadows(
false);
57 if (
pss[i]->getNumEmitters() > 0)
59 pss[i]->getEmitter(0)->setEnabled(
false);
72 for (
int i = 0; i <
size; i++)
74 sns[i]->removeAndDestroyAllChildren();
75 sm->destroySceneNode(
sns[i]);
80 sm->destroyParticleSystem(
pss[i]);
90 for (
int i = 0; i <
size; i++)
92 pss[i]->setVisible(s);
137 if (vel.length() < 0.1)
200 ParticleEmitter* emit =
pss[i]->getEmitter(0);
202 Real vel = ndir.length();
209 emit->setEnabled(
true);
213 emit->setDirection(ndir);
214 emit->setParticleVelocity(vel);
224 emit->setTimeToLive(vel * 0.05 / 0.1);
239 col.a = sqrt(vel) * 0.1;
244 emit->setTimeToLive(vel * 0.025 / 0.1);
252 emit->setParticleVelocity(vel / 2.0);
254 col.a =
rates[i] * 0.03;
259 emit->setTimeToLive(
rates[i] * 0.03 / 0.1);
263 emit->setEmissionRate(
rates[i]);
268 ndir.y = -ndir.y / 2.0;
270 emit->setDirection(ndir);
272 col.a = sqrt(vel) * 0.04;
277 emit->setTimeToLive(vel * 0.025 / 0.1);
289 emit->setTimeToLive(vel * 0.04 / 0.1);
292 emit->setColour(col);
296 pss[i]->getEmitter(0)->setEnabled(
false);
Central state/object manager and communications hub.
#define ROR_ASSERT(_EXPR)
Game state manager and message-queue provider.
Ogre::SceneNode * sns[MAX_DUSTS]
void Discard(Ogre::SceneManager *sm)
void allocRipple(Ogre::Vector3 pos, Ogre::Vector3 vel)
Ogre::Vector3 positions[MAX_DUSTS]
Ogre::Vector3 velocities[MAX_DUSTS]
Velocity in wall time, ignoring the time scale.
void allocVapour(Ogre::Vector3 pos, Ogre::Vector3 vel, float time)
Ogre::ParticleSystem * pss[MAX_DUSTS]
Ogre::SceneNode * parent_snode
Ogre::ColourValue colours[MAX_DUSTS]
void allocSmoke(Ogre::Vector3 pos, Ogre::Vector3 vel)
DustPool(Ogre::SceneManager *sm, const char *dname, int dsize)
void allocSparks(Ogre::Vector3 pos, Ogre::Vector3 vel)
void allocClump(Ogre::Vector3 pos, Ogre::Vector3 vel, Ogre::ColourValue col=Ogre::ColourValue(0.83, 0.71, 0.64, 1.0))
void allocSplash(Ogre::Vector3 pos, Ogre::Vector3 vel)
static const int MAX_DUSTS
void malloc(Ogre::Vector3 pos, Ogre::Vector3 vel, Ogre::ColourValue col=Ogre::ColourValue(0.83, 0.71, 0.64, 1.0))
void allocDrip(Ogre::Vector3 pos, Ogre::Vector3 vel, float time)
const TerrainPtr & GetTerrain()
void AdjustParticleSystemTimeFactor(Ogre::ParticleSystem *psys)
float GetStaticWaterHeight()
Returns static water level configured in 'terrn2'.
GameContext * GetGameContext()