Prevent a static initialization order fiasco

revert-6246b479
Evil Eye 2 years ago
parent 627bfa1155
commit 3a888ef543

@ -18,7 +18,9 @@ namespace MWMechanics
template <>
struct Weapon<ESM::Weapon::None>
{
inline static const ESM::WeaponType sValue{ /* short group */ "",
inline static const ESM::WeaponType& getValue()
{
static const ESM::WeaponType value{ /* short group */ "",
/* long group */ "",
/* sound ID */ "",
/* attach bone */ "",
@ -27,12 +29,16 @@ namespace MWMechanics
/* weapon class*/ ESM::WeaponType::Melee,
/* ammo type */ ESM::Weapon::None,
/* flags */ 0 };
return value;
}
};
template <>
struct Weapon<ESM::Weapon::PickProbe>
{
inline static const ESM::WeaponType sValue{ /* short group */ "1h",
inline static const ESM::WeaponType& getValue()
{
static const ESM::WeaponType value{ /* short group */ "1h",
/* long group */ "pickprobe",
/* sound ID */ "",
/* attach bone */ "",
@ -41,12 +47,16 @@ namespace MWMechanics
/* weapon class*/ ESM::WeaponType::Melee,
/* ammo type */ ESM::Weapon::None,
/* flags */ 0 };
return value;
}
};
template <>
struct Weapon<ESM::Weapon::Spell>
{
inline static const ESM::WeaponType sValue{ /* short group */ "spell",
inline static const ESM::WeaponType& getValue()
{
static const ESM::WeaponType value{ /* short group */ "spell",
/* long group */ "spellcast",
/* sound ID */ "",
/* attach bone */ "",
@ -55,12 +65,16 @@ namespace MWMechanics
/* weapon class*/ ESM::WeaponType::Melee,
/* ammo type */ ESM::Weapon::None,
/* flags */ ESM::WeaponType::TwoHanded };
return value;
}
};
template <>
struct Weapon<ESM::Weapon::HandToHand>
{
inline static const ESM::WeaponType sValue{ /* short group */ "hh",
inline static const ESM::WeaponType& getValue()
{
static const ESM::WeaponType value{ /* short group */ "hh",
/* long group */ "handtohand",
/* sound ID */ "",
/* attach bone */ "",
@ -69,12 +83,16 @@ namespace MWMechanics
/* weapon class*/ ESM::WeaponType::Melee,
/* ammo type */ ESM::Weapon::None,
/* flags */ ESM::WeaponType::TwoHanded };
return value;
}
};
template <>
struct Weapon<ESM::Weapon::ShortBladeOneHand>
{
inline static const ESM::WeaponType sValue{ /* short group */ "1s",
inline static const ESM::WeaponType& getValue()
{
static const ESM::WeaponType value{ /* short group */ "1s",
/* long group */ "shortbladeonehand",
/* sound ID */ "Item Weapon Shortblade",
/* attach bone */ "Weapon Bone",
@ -83,12 +101,16 @@ namespace MWMechanics
/* weapon class*/ ESM::WeaponType::Melee,
/* ammo type */ ESM::Weapon::None,
/* flags */ ESM::WeaponType::HasHealth };
return value;
}
};
template <>
struct Weapon<ESM::Weapon::LongBladeOneHand>
{
inline static const ESM::WeaponType sValue{ /* short group */ "1h",
inline static const ESM::WeaponType& getValue()
{
static const ESM::WeaponType value{ /* short group */ "1h",
/* long group */ "weapononehand",
/* sound ID */ "Item Weapon Longblade",
/* attach bone */ "Weapon Bone",
@ -97,12 +119,16 @@ namespace MWMechanics
/* weapon class*/ ESM::WeaponType::Melee,
/* ammo type */ ESM::Weapon::None,
/* flags */ ESM::WeaponType::HasHealth };
return value;
}
};
template <>
struct Weapon<ESM::Weapon::BluntOneHand>
{
inline static const ESM::WeaponType sValue{ /* short group */ "1b",
inline static const ESM::WeaponType& getValue()
{
static const ESM::WeaponType value{ /* short group */ "1b",
/* long group */ "bluntonehand",
/* sound ID */ "Item Weapon Blunt",
/* attach bone */ "Weapon Bone",
@ -111,12 +137,16 @@ namespace MWMechanics
/* weapon class*/ ESM::WeaponType::Melee,
/* ammo type */ ESM::Weapon::None,
/* flags */ ESM::WeaponType::HasHealth };
return value;
}
};
template <>
struct Weapon<ESM::Weapon::AxeOneHand>
{
inline static const ESM::WeaponType sValue{ /* short group */ "1b",
inline static const ESM::WeaponType& getValue()
{
static const ESM::WeaponType value{ /* short group */ "1b",
/* long group */ "bluntonehand",
/* sound ID */ "Item Weapon Blunt",
/* attach bone */ "Weapon Bone",
@ -125,12 +155,16 @@ namespace MWMechanics
/* weapon class*/ ESM::WeaponType::Melee,
/* ammo type */ ESM::Weapon::None,
/* flags */ ESM::WeaponType::HasHealth };
return value;
}
};
template <>
struct Weapon<ESM::Weapon::LongBladeTwoHand>
{
inline static const ESM::WeaponType sValue{ /* short group */ "2c",
inline static const ESM::WeaponType& getValue()
{
static const ESM::WeaponType value{ /* short group */ "2c",
/* long group */ "weapontwohand",
/* sound ID */ "Item Weapon Longblade",
/* attach bone */ "Weapon Bone",
@ -139,12 +173,16 @@ namespace MWMechanics
/* weapon class*/ ESM::WeaponType::Melee,
/* ammo type */ ESM::Weapon::None,
/* flags */ ESM::WeaponType::HasHealth | ESM::WeaponType::TwoHanded };
return value;
}
};
template <>
struct Weapon<ESM::Weapon::AxeTwoHand>
{
inline static const ESM::WeaponType sValue{ /* short group */ "2b",
inline static const ESM::WeaponType& getValue()
{
static const ESM::WeaponType value{ /* short group */ "2b",
/* long group */ "blunttwohand",
/* sound ID */ "Item Weapon Blunt",
/* attach bone */ "Weapon Bone",
@ -153,12 +191,16 @@ namespace MWMechanics
/* weapon class*/ ESM::WeaponType::Melee,
/* ammo type */ ESM::Weapon::None,
/* flags */ ESM::WeaponType::HasHealth | ESM::WeaponType::TwoHanded };
return value;
}
};
template <>
struct Weapon<ESM::Weapon::BluntTwoClose>
{
inline static const ESM::WeaponType sValue{ /* short group */ "2b",
inline static const ESM::WeaponType& getValue()
{
static const ESM::WeaponType value{ /* short group */ "2b",
/* long group */ "blunttwohand",
/* sound ID */ "Item Weapon Blunt",
/* attach bone */ "Weapon Bone",
@ -167,12 +209,16 @@ namespace MWMechanics
/* weapon class*/ ESM::WeaponType::Melee,
/* ammo type */ ESM::Weapon::None,
/* flags */ ESM::WeaponType::HasHealth | ESM::WeaponType::TwoHanded };
return value;
}
};
template <>
struct Weapon<ESM::Weapon::BluntTwoWide>
{
inline static const ESM::WeaponType sValue{ /* short group */ "2w",
inline static const ESM::WeaponType& getValue()
{
static const ESM::WeaponType value{ /* short group */ "2w",
/* long group */ "weapontwowide",
/* sound ID */ "Item Weapon Blunt",
/* attach bone */ "Weapon Bone",
@ -181,12 +227,16 @@ namespace MWMechanics
/* weapon class*/ ESM::WeaponType::Melee,
/* ammo type */ ESM::Weapon::None,
/* flags */ ESM::WeaponType::HasHealth | ESM::WeaponType::TwoHanded };
return value;
}
};
template <>
struct Weapon<ESM::Weapon::SpearTwoWide>
{
inline static const ESM::WeaponType sValue{ /* short group */ "2w",
inline static const ESM::WeaponType& getValue()
{
static const ESM::WeaponType value{ /* short group */ "2w",
/* long group */ "weapontwowide",
/* sound ID */ "Item Weapon Spear",
/* attach bone */ "Weapon Bone",
@ -195,12 +245,16 @@ namespace MWMechanics
/* weapon class*/ ESM::WeaponType::Melee,
/* ammo type */ ESM::Weapon::None,
/* flags */ ESM::WeaponType::HasHealth | ESM::WeaponType::TwoHanded };
return value;
}
};
template <>
struct Weapon<ESM::Weapon::MarksmanBow>
{
inline static const ESM::WeaponType sValue{ /* short group */ "bow",
inline static const ESM::WeaponType& getValue()
{
static const ESM::WeaponType value{ /* short group */ "bow",
/* long group */ "bowandarrow",
/* sound ID */ "Item Weapon Bow",
/* attach bone */ "Weapon Bone Left",
@ -209,12 +263,16 @@ namespace MWMechanics
/* weapon class*/ ESM::WeaponType::Ranged,
/* ammo type */ ESM::Weapon::Arrow,
/* flags */ ESM::WeaponType::HasHealth | ESM::WeaponType::TwoHanded };
return value;
}
};
template <>
struct Weapon<ESM::Weapon::MarksmanCrossbow>
{
inline static const ESM::WeaponType sValue{ /* short group */ "crossbow",
inline static const ESM::WeaponType& getValue()
{
static const ESM::WeaponType value{ /* short group */ "crossbow",
/* long group */ "crossbow",
/* sound ID */ "Item Weapon Crossbow",
/* attach bone */ "Weapon Bone",
@ -223,12 +281,16 @@ namespace MWMechanics
/* weapon class*/ ESM::WeaponType::Ranged,
/* ammo type */ ESM::Weapon::Bolt,
/* flags */ ESM::WeaponType::HasHealth | ESM::WeaponType::TwoHanded };
return value;
}
};
template <>
struct Weapon<ESM::Weapon::MarksmanThrown>
{
inline static const ESM::WeaponType sValue{ /* short group */ "1t",
inline static const ESM::WeaponType& getValue()
{
static const ESM::WeaponType value{ /* short group */ "1t",
/* long group */ "throwweapon",
/* sound ID */ "Item Weapon Blunt",
/* attach bone */ "Weapon Bone",
@ -237,12 +299,16 @@ namespace MWMechanics
/* weapon class*/ ESM::WeaponType::Thrown,
/* ammo type */ ESM::Weapon::None,
/* flags */ 0 };
return value;
}
};
template <>
struct Weapon<ESM::Weapon::Arrow>
{
inline static const ESM::WeaponType sValue{ /* short group */ "",
inline static const ESM::WeaponType& getValue()
{
static const ESM::WeaponType value{ /* short group */ "",
/* long group */ "",
/* sound ID */ "Item Ammo",
/* attach bone */ "Bip01 Arrow",
@ -251,12 +317,16 @@ namespace MWMechanics
/* weapon class*/ ESM::WeaponType::Ammo,
/* ammo type */ ESM::Weapon::None,
/* flags */ 0 };
return value;
}
};
template <>
struct Weapon<ESM::Weapon::Bolt>
{
inline static const ESM::WeaponType sValue{ /* short group */ "",
inline static const ESM::WeaponType& getValue()
{
static const ESM::WeaponType value{ /* short group */ "",
/* long group */ "",
/* sound ID */ "Item Ammo",
/* attach bone */ "ArrowBone",
@ -265,6 +335,8 @@ namespace MWMechanics
/* weapon class*/ ESM::WeaponType::Ammo,
/* ammo type */ ESM::Weapon::None,
/* flags */ 0 };
return value;
}
};
MWWorld::ContainerStoreIterator getActiveWeapon(const MWWorld::Ptr& actor, int* weaptype)
@ -305,43 +377,43 @@ namespace MWMechanics
switch (static_cast<ESM::Weapon::Type>(weaponType))
{
case ESM::Weapon::PickProbe:
return &Weapon<ESM::Weapon::PickProbe>::sValue;
return &Weapon<ESM::Weapon::PickProbe>::getValue();
case ESM::Weapon::HandToHand:
return &Weapon<ESM::Weapon::HandToHand>::sValue;
return &Weapon<ESM::Weapon::HandToHand>::getValue();
case ESM::Weapon::Spell:
return &Weapon<ESM::Weapon::Spell>::sValue;
return &Weapon<ESM::Weapon::Spell>::getValue();
case ESM::Weapon::None:
return &Weapon<ESM::Weapon::None>::sValue;
return &Weapon<ESM::Weapon::None>::getValue();
case ESM::Weapon::ShortBladeOneHand:
return &Weapon<ESM::Weapon::ShortBladeOneHand>::sValue;
return &Weapon<ESM::Weapon::ShortBladeOneHand>::getValue();
case ESM::Weapon::LongBladeOneHand:
return &Weapon<ESM::Weapon::LongBladeOneHand>::sValue;
return &Weapon<ESM::Weapon::LongBladeOneHand>::getValue();
case ESM::Weapon::LongBladeTwoHand:
return &Weapon<ESM::Weapon::LongBladeTwoHand>::sValue;
return &Weapon<ESM::Weapon::LongBladeTwoHand>::getValue();
case ESM::Weapon::BluntOneHand:
return &Weapon<ESM::Weapon::BluntOneHand>::sValue;
return &Weapon<ESM::Weapon::BluntOneHand>::getValue();
case ESM::Weapon::BluntTwoClose:
return &Weapon<ESM::Weapon::BluntTwoClose>::sValue;
return &Weapon<ESM::Weapon::BluntTwoClose>::getValue();
case ESM::Weapon::BluntTwoWide:
return &Weapon<ESM::Weapon::BluntTwoWide>::sValue;
return &Weapon<ESM::Weapon::BluntTwoWide>::getValue();
case ESM::Weapon::SpearTwoWide:
return &Weapon<ESM::Weapon::SpearTwoWide>::sValue;
return &Weapon<ESM::Weapon::SpearTwoWide>::getValue();
case ESM::Weapon::AxeOneHand:
return &Weapon<ESM::Weapon::AxeOneHand>::sValue;
return &Weapon<ESM::Weapon::AxeOneHand>::getValue();
case ESM::Weapon::AxeTwoHand:
return &Weapon<ESM::Weapon::AxeTwoHand>::sValue;
return &Weapon<ESM::Weapon::AxeTwoHand>::getValue();
case ESM::Weapon::MarksmanBow:
return &Weapon<ESM::Weapon::MarksmanBow>::sValue;
return &Weapon<ESM::Weapon::MarksmanBow>::getValue();
case ESM::Weapon::MarksmanCrossbow:
return &Weapon<ESM::Weapon::MarksmanCrossbow>::sValue;
return &Weapon<ESM::Weapon::MarksmanCrossbow>::getValue();
case ESM::Weapon::MarksmanThrown:
return &Weapon<ESM::Weapon::MarksmanThrown>::sValue;
return &Weapon<ESM::Weapon::MarksmanThrown>::getValue();
case ESM::Weapon::Arrow:
return &Weapon<ESM::Weapon::Arrow>::sValue;
return &Weapon<ESM::Weapon::Arrow>::getValue();
case ESM::Weapon::Bolt:
return &Weapon<ESM::Weapon::Bolt>::sValue;
return &Weapon<ESM::Weapon::Bolt>::getValue();
}
return &Weapon<ESM::Weapon::ShortBladeOneHand>::sValue;
return &Weapon<ESM::Weapon::ShortBladeOneHand>::getValue();
}
}

Loading…
Cancel
Save