From 68ed8487b591379a95ad9fa2d12f239657ecbbd7 Mon Sep 17 00:00:00 2001 From: elsid Date: Sun, 14 Jun 2020 17:43:30 +0200 Subject: [PATCH] Use lambda instead of bool to make sure GMST initialized once This is less expensive than having 2 static variables and thread-safe. --- apps/openmw/mwclass/creature.cpp | 12 +++++++----- apps/openmw/mwclass/npc.cpp | 10 +++++----- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/apps/openmw/mwclass/creature.cpp b/apps/openmw/mwclass/creature.cpp index c20a005724..130b1967ae 100644 --- a/apps/openmw/mwclass/creature.cpp +++ b/apps/openmw/mwclass/creature.cpp @@ -82,12 +82,13 @@ namespace MWClass const Creature::GMST& Creature::getGmst() { - static GMST gmst; - static bool inited = false; - if (!inited) + static const GMST gmst = [] { + GMST gmst; + const MWBase::World *world = MWBase::Environment::get().getWorld(); const MWWorld::Store &store = world->getStore().get(); + gmst.fMinWalkSpeedCreature = store.find("fMinWalkSpeedCreature"); gmst.fMaxWalkSpeedCreature = store.find("fMaxWalkSpeedCreature"); gmst.fEncumberedMoveEffect = store.find("fEncumberedMoveEffect"); @@ -101,8 +102,9 @@ namespace MWClass gmst.fKnockDownMult = store.find("fKnockDownMult"); gmst.iKnockDownOddsMult = store.find("iKnockDownOddsMult"); gmst.iKnockDownOddsBase = store.find("iKnockDownOddsBase"); - inited = true; - } + + return gmst; + } (); return gmst; } diff --git a/apps/openmw/mwclass/npc.cpp b/apps/openmw/mwclass/npc.cpp index 59280a0f02..462e9442fd 100644 --- a/apps/openmw/mwclass/npc.cpp +++ b/apps/openmw/mwclass/npc.cpp @@ -266,10 +266,10 @@ namespace MWClass const Npc::GMST& Npc::getGmst() { - static GMST gmst; - static bool inited = false; - if(!inited) + static const GMST gmst = [] { + GMST gmst; + const MWBase::World *world = MWBase::Environment::get().getWorld(); const MWWorld::Store &store = world->getStore().get(); @@ -294,8 +294,8 @@ namespace MWClass gmst.iKnockDownOddsBase = store.find("iKnockDownOddsBase"); gmst.fCombatArmorMinMult = store.find("fCombatArmorMinMult"); - inited = true; - } + return gmst; + } (); return gmst; }