diff --git a/apps/opencs/editor.cpp b/apps/opencs/editor.cpp index 450b434e66..6699ccaaf5 100644 --- a/apps/opencs/editor.cpp +++ b/apps/opencs/editor.cpp @@ -7,6 +7,7 @@ #include #include +#include #include #include "model/doc/document.hpp" @@ -355,6 +356,8 @@ int CS::Editor::run() if (mLocal.empty()) return 1; + Misc::Rng::init(); + mStartup.show(); QApplication::setQuitOnLastWindowClosed (true); diff --git a/apps/openmw/mwrender/animation.cpp b/apps/openmw/mwrender/animation.cpp index 6e2c76d1d8..f165b6bd3d 100644 --- a/apps/openmw/mwrender/animation.cpp +++ b/apps/openmw/mwrender/animation.cpp @@ -190,12 +190,6 @@ namespace { } - RemoveFinishedCallbackVisitor(int effectId) - : RemoveVisitor() - , mHasMagicEffects(false) - { - } - virtual void apply(osg::Node &node) { traverse(node); @@ -228,9 +222,6 @@ namespace virtual void apply(osg::Geometry&) { } - - private: - int mEffectId; }; class RemoveCallbackVisitor : public RemoveVisitor diff --git a/components/nifosg/particle.cpp b/components/nifosg/particle.cpp index f5c055a15a..c1f6a2819b 100644 --- a/components/nifosg/particle.cpp +++ b/components/nifosg/particle.cpp @@ -6,6 +6,7 @@ #include #include +#include #include #include #include @@ -81,17 +82,17 @@ ParticleShooter::ParticleShooter(const ParticleShooter ©, const osg::CopyOp void ParticleShooter::shoot(osgParticle::Particle *particle) const { - float hdir = mHorizontalDir + mHorizontalAngle * (2.f * (std::rand() / static_cast(RAND_MAX)) - 1.f); - float vdir = mVerticalDir + mVerticalAngle * (2.f * (std::rand() / static_cast(RAND_MAX)) - 1.f); + float hdir = mHorizontalDir + mHorizontalAngle * (2.f * Misc::Rng::rollClosedProbability() - 1.f); + float vdir = mVerticalDir + mVerticalAngle * (2.f * Misc::Rng::rollClosedProbability() - 1.f); osg::Vec3f dir = (osg::Quat(vdir, osg::Vec3f(0,1,0)) * osg::Quat(hdir, osg::Vec3f(0,0,1))) * osg::Vec3f(0,0,1); - float vel = mMinSpeed + (mMaxSpeed - mMinSpeed) * std::rand() / static_cast(RAND_MAX); + float vel = mMinSpeed + (mMaxSpeed - mMinSpeed) * Misc::Rng::rollClosedProbability(); particle->setVelocity(dir * vel); // Not supposed to set this here, but there doesn't seem to be a better way of doing it - particle->setLifeTime(mLifetime + mLifetimeRandom * std::rand() / static_cast(RAND_MAX)); + particle->setLifeTime(mLifetime + mLifetimeRandom * Misc::Rng::rollClosedProbability()); } GrowFadeAffector::GrowFadeAffector(float growTime, float fadeTime) @@ -277,7 +278,8 @@ void Emitter::emitParticles(double dt) if (!mTargets.empty()) { - int randomRecIndex = mTargets[(std::rand() / (static_cast(RAND_MAX)+1.0)) * mTargets.size()]; + int randomIndex = Misc::Rng::rollClosedProbability() * (mTargets.size() - 1); + int randomRecIndex = mTargets[randomIndex]; // we could use a map here for faster lookup FindGroupByRecIndex visitor(randomRecIndex); diff --git a/extern/oics/tinyxml.cpp b/extern/oics/tinyxml.cpp index f1cdc81925..b61df85c87 100644 --- a/extern/oics/tinyxml.cpp +++ b/extern/oics/tinyxml.cpp @@ -1046,58 +1046,35 @@ bool TiXmlDocument::LoadFile( FILE* file, TiXmlEncoding encoding ) return false; } - const char* lastPos = buf; - const char* p = buf; + const char* p = buf; // the read head + char* q = buf; // the write head + const char CR = 0x0d; + const char LF = 0x0a; buf[length] = 0; while( *p ) { assert( p < (buf+length) ); - if ( *p == 0xa ) { - // Newline character. No special rules for this. Append all the characters - // since the last string, and include the newline. - data.append( lastPos, (p-lastPos+1) ); // append, include the newline - ++p; // move past the newline - lastPos = p; // and point to the new buffer (may be 0) - assert( p <= (buf+length) ); - } - else if ( *p == 0xd ) { - // Carriage return. Append what we have so far, then - // handle moving forward in the buffer. - if ( (p-lastPos) > 0 ) { - data.append( lastPos, p-lastPos ); // do not add the CR - } - data += (char)0xa; // a proper newline + assert( q <= (buf+length) ); + assert( q <= p ); - if ( *(p+1) == 0xa ) { - // Carriage return - new line sequence - p += 2; - lastPos = p; - assert( p <= (buf+length) ); - } - else { - // it was followed by something else...that is presumably characters again. - ++p; - lastPos = p; - assert( p <= (buf+length) ); + if ( *p == CR ) { + *q++ = LF; + p++; + if ( *p == LF ) { // check for CR+LF (and skip LF) + p++; } } else { - ++p; + *q++ = *p++; } } - // Handle any left over characters. - if ( p-lastPos ) { - data.append( lastPos, p-lastPos ); - } + assert( q <= (buf+length) ); + *q = 0; + + Parse( buf, 0, encoding ); + delete [] buf; - buf = 0; - - Parse( data.c_str(), 0, encoding ); - - if ( Error() ) - return false; - else - return true; + return !Error(); }