General: Resolve several -Wextra-semi warnings

Remove redundant semicolons and also amends some macros to require
semicolon termination.
This commit is contained in:
Lioncash 2020-08-23 15:03:33 -04:00
parent 08a8dd7eeb
commit 4dc553e72a
38 changed files with 123 additions and 111 deletions

View File

@ -281,7 +281,7 @@ public:
TUniqueId GetIdForScript(TEditorId) const;
std::pair<std::multimap<TEditorId, TUniqueId>::const_iterator, std::multimap<TEditorId, TUniqueId>::const_iterator>
GetIdListForScript(TEditorId) const;
std::multimap<TEditorId, TUniqueId>::const_iterator GetIdListEnd() const { return x890_scriptIdMap.cend(); };
std::multimap<TEditorId, TUniqueId>::const_iterator GetIdListEnd() const { return x890_scriptIdMap.cend(); }
void LoadScriptObjects(TAreaId, CInputStream& in, std::vector<TEditorId>& idsOut);
void InitializeScriptObjects(const std::vector<TEditorId>& objIds);
std::pair<TEditorId, TUniqueId> LoadScriptObject(TAreaId, EScriptObjectType, u32, CInputStream& in);

View File

@ -466,91 +466,103 @@ static bool planeBoxOverlap(const zeus::CVector3f& normal, float d, const zeus::
/*======================== X-tests ========================*/
#define AXISTEST_X01(a, b, fa, fb) \
p0 = a * v0.y() - b * v0.z(); \
p2 = a * v2.y() - b * v2.z(); \
if (p0 < p2) { \
min = p0; \
max = p2; \
} else { \
min = p2; \
max = p0; \
} \
rad = fa * boxhalfsize.y() + fb * boxhalfsize.z(); \
if (min > rad || max < -rad) \
return false;
do { \
p0 = a * v0.y() - b * v0.z(); \
p2 = a * v2.y() - b * v2.z(); \
if (p0 < p2) { \
min = p0; \
max = p2; \
} else { \
min = p2; \
max = p0; \
} \
rad = fa * boxhalfsize.y() + fb * boxhalfsize.z(); \
if (min > rad || max < -rad) \
return false; \
} while (false)
#define AXISTEST_X2(a, b, fa, fb) \
p0 = a * v0.y() - b * v0.z(); \
p1 = a * v1.y() - b * v1.z(); \
if (p0 < p1) { \
min = p0; \
max = p1; \
} else { \
min = p1; \
max = p0; \
} \
rad = fa * boxhalfsize.y() + fb * boxhalfsize.z(); \
if (min > rad || max < -rad) \
return false;
do { \
p0 = a * v0.y() - b * v0.z(); \
p1 = a * v1.y() - b * v1.z(); \
if (p0 < p1) { \
min = p0; \
max = p1; \
} else { \
min = p1; \
max = p0; \
} \
rad = fa * boxhalfsize.y() + fb * boxhalfsize.z(); \
if (min > rad || max < -rad) \
return false; \
} while (false)
/*======================== Y-tests ========================*/
#define AXISTEST_Y02(a, b, fa, fb) \
p0 = -a * v0.x() + b * v0.z(); \
p2 = -a * v2.x() + b * v2.z(); \
if (p0 < p2) { \
min = p0; \
max = p2; \
} else { \
min = p2; \
max = p0; \
} \
rad = fa * boxhalfsize.x() + fb * boxhalfsize.z(); \
if (min > rad || max < -rad) \
return false;
do { \
p0 = -a * v0.x() + b * v0.z(); \
p2 = -a * v2.x() + b * v2.z(); \
if (p0 < p2) { \
min = p0; \
max = p2; \
} else { \
min = p2; \
max = p0; \
} \
rad = fa * boxhalfsize.x() + fb * boxhalfsize.z(); \
if (min > rad || max < -rad) \
return false; \
} while (false)
#define AXISTEST_Y1(a, b, fa, fb) \
p0 = -a * v0.x() + b * v0.z(); \
p1 = -a * v1.x() + b * v1.z(); \
if (p0 < p1) { \
min = p0; \
max = p1; \
} else { \
min = p1; \
max = p0; \
} \
rad = fa * boxhalfsize.x() + fb * boxhalfsize.z(); \
if (min > rad || max < -rad) \
return false;
do { \
p0 = -a * v0.x() + b * v0.z(); \
p1 = -a * v1.x() + b * v1.z(); \
if (p0 < p1) { \
min = p0; \
max = p1; \
} else { \
min = p1; \
max = p0; \
} \
rad = fa * boxhalfsize.x() + fb * boxhalfsize.z(); \
if (min > rad || max < -rad) \
return false; \
} while (false)
/*======================== Z-tests ========================*/
#define AXISTEST_Z12(a, b, fa, fb) \
p1 = a * v1.x() - b * v1.y(); \
p2 = a * v2.x() - b * v2.y(); \
if (p2 < p1) { \
min = p2; \
max = p1; \
} else { \
min = p1; \
max = p2; \
} \
rad = fa * boxhalfsize.x() + fb * boxhalfsize.y(); \
if (min > rad || max < -rad) \
return false;
do { \
p1 = a * v1.x() - b * v1.y(); \
p2 = a * v2.x() - b * v2.y(); \
if (p2 < p1) { \
min = p2; \
max = p1; \
} else { \
min = p1; \
max = p2; \
} \
rad = fa * boxhalfsize.x() + fb * boxhalfsize.y(); \
if (min > rad || max < -rad) \
return false; \
} while (false)
#define AXISTEST_Z0(a, b, fa, fb) \
p0 = a * v0.x() - b * v0.y(); \
p1 = a * v1.x() - b * v1.y(); \
if (p0 < p1) { \
min = p0; \
max = p1; \
} else { \
min = p1; \
max = p0; \
} \
rad = fa * boxhalfsize.x() + fb * boxhalfsize.y(); \
if (min > rad || max < -rad) \
return false;
do { \
p0 = a * v0.x() - b * v0.y(); \
p1 = a * v1.x() - b * v1.y(); \
if (p0 < p1) { \
min = p0; \
max = p1; \
} else { \
min = p1; \
max = p0; \
} \
rad = fa * boxhalfsize.x() + fb * boxhalfsize.y(); \
if (min > rad || max < -rad) \
return false; \
} while (false)
bool TriBoxOverlap(const zeus::CVector3f& boxcenter, const zeus::CVector3f& boxhalfsize,
const zeus::CVector3f& trivert0, const zeus::CVector3f& trivert1, const zeus::CVector3f& trivert2) {

View File

@ -32,7 +32,7 @@ class CAtomicAlpha : public CPatterned {
rstl::reserved_vector<SBomb, skBombCount> x6dc_bombLocators;
public:
DEFINE_PATTERNED(AtomicAlpha)
DEFINE_PATTERNED(AtomicAlpha);
CAtomicAlpha(TUniqueId, std::string_view, const CEntityInfo&, const zeus::CTransform&, CModelData&&,
const CActorParameters&, const CPatternedInfo&, CAssetId, const CDamageInfo&, float, float, float,

View File

@ -46,7 +46,7 @@ class CAtomicBeta final : public CPatterned {
void DestroyEmitter(CSfxHandle&);
public:
DEFINE_PATTERNED(AtomicBeta)
DEFINE_PATTERNED(AtomicBeta);
CAtomicBeta(TUniqueId, std::string_view, const CEntityInfo&, const zeus::CTransform&, CModelData&&,
const CActorParameters&, const CPatternedInfo&, CAssetId, CAssetId, const CDamageInfo&, CAssetId, float,
float, float, const CDamageVulnerability&, float, float, float, s16, s16, s16, float);

View File

@ -177,7 +177,7 @@ private:
void UpdateAttack(CStateManager& mgr, float dt);
public:
DEFINE_PATTERNED(Babygoth)
DEFINE_PATTERNED(Babygoth);
CBabygoth(TUniqueId, std::string_view, const CEntityInfo&, const zeus::CTransform&, CModelData&&,
const CPatternedInfo&, const CActorParameters&, const CBabygothData&);

View File

@ -50,7 +50,7 @@ private:
s32 FindFurthestRetreatPoint(CStateManager& mgr) const;
public:
DEFINE_PATTERNED(Beetle)
DEFINE_PATTERNED(Beetle);
CBeetle(TUniqueId uid, std::string_view name, const CEntityInfo& info, const zeus::CTransform& xf, CModelData&& mData,
const CPatternedInfo& pInfo, CPatterned::EFlavorType flavor, CBeetle::EEntranceType entranceType,
const CDamageInfo& touchDamage, const CDamageVulnerability& platingVuln,

View File

@ -45,7 +45,7 @@ class CBloodFlower : public CPatterned {
const CDamageInfo&, TUniqueId);
public:
DEFINE_PATTERNED(BloodFlower)
DEFINE_PATTERNED(BloodFlower);
CBloodFlower(TUniqueId, std::string_view, const CEntityInfo&, const zeus::CTransform&, CModelData&&,
const CPatternedInfo&, CAssetId, CAssetId, const CActorParameters&, CAssetId, const CDamageInfo&,

View File

@ -45,7 +45,7 @@ public:
, x30_elementGenId4(elementGenId4)
, x34_numBounces(numBounces)
, x38_bounceSfx(bounceSfxId)
, x3a_explodeSfx(explodeSfxId){};
, x3a_explodeSfx(explodeSfxId) {}
[[nodiscard]] const SGrenadeVelocityInfo& GetUnkStruct() const { return x0_velocityInfo; }
[[nodiscard]] const CDamageInfo& GetDamageInfo() const { return x8_damageInfo; }

View File

@ -23,7 +23,7 @@ class CBurrower : public CPatterned {
bool x6ac_24_doFacePlayer : 1 = false;
bool x6ac_25_inAir : 1 = false;
public:
DEFINE_PATTERNED(Burrower)
DEFINE_PATTERNED(Burrower);
CBurrower(TUniqueId, std::string_view, const CEntityInfo&, const zeus::CTransform&, CModelData&&,
const CPatternedInfo&, const CActorParameters&, CAssetId, CAssetId, CAssetId, const CDamageInfo&, CAssetId,
u32, CAssetId);

View File

@ -98,7 +98,7 @@ private:
void FindBestAnchor(CStateManager& mgr);
public:
DEFINE_PATTERNED(ChozoGhost)
DEFINE_PATTERNED(ChozoGhost);
CChozoGhost(TUniqueId, std::string_view, const CEntityInfo&, const zeus::CTransform&, CModelData&&,
const CActorParameters&, const CPatternedInfo&, float, float, float, float, CAssetId, const CDamageInfo&,

View File

@ -146,7 +146,7 @@ private:
bool x989_24_onPath : 1 = false;
public:
DEFINE_PATTERNED(ElitePirate)
DEFINE_PATTERNED(ElitePirate);
CElitePirate(TUniqueId uid, std::string_view name, const CEntityInfo& info, const zeus::CTransform& xf,
CModelData&& mData, const CPatternedInfo& pInfo, const CActorParameters& actParms,

View File

@ -29,7 +29,7 @@ class CEnergyBall : public CPatterned {
void sub8029f4a8(CStateManager& mgr);
public:
DEFINE_PATTERNED(EnergyBall)
DEFINE_PATTERNED(EnergyBall);
CEnergyBall(TUniqueId uid, std::string_view name, const CEntityInfo& info, const zeus::CTransform& xf,
CModelData&& mData, const CActorParameters& actParms, const CPatternedInfo& pInfo, s32 w1, float f1,
const CDamageInfo& dInfo1, float f2, const CAssetId& a1, s16 sfxId1, const CAssetId& a2,

View File

@ -39,7 +39,7 @@ class CEyeball : public CPatterned {
void ResetBeamState(CStateManager&);
public:
DEFINE_PATTERNED(EyeBall)
DEFINE_PATTERNED(EyeBall);
CEyeball(TUniqueId uid, std::string_view name, CPatterned::EFlavorType flavor, const CEntityInfo& info,
const zeus::CTransform& xf, CModelData&& mData, const CPatternedInfo& pInfo, float attackDelay,

View File

@ -37,7 +37,7 @@ class CFireFlea : public CPatterned {
bool CheckNearWater(const CStateManager&, const zeus::CVector3f& dir) const;
public:
DEFINE_PATTERNED(FireFlea)
DEFINE_PATTERNED(FireFlea);
CFireFlea(TUniqueId, std::string_view, const CEntityInfo&, const zeus::CTransform&, CModelData&&,
const CActorParameters&, const CPatternedInfo&, float);

View File

@ -24,7 +24,7 @@ private:
void SetHeardShot(bool heardShot) { x580_25_heardShot = heardShot; }
public:
DEFINE_PATTERNED(FlickerBat)
DEFINE_PATTERNED(FlickerBat);
CFlickerBat(TUniqueId, std::string_view name, EFlavorType, const CEntityInfo&, const zeus::CTransform&, CModelData&&,
const CPatternedInfo&, EColliderType, bool, const CActorParameters&, bool);

View File

@ -17,7 +17,7 @@ enum class EFlyingPirateType : u32 {
class CFlyingPirate : public CPatterned {
public:
DEFINE_PATTERNED(FlyingPirate)
DEFINE_PATTERNED(FlyingPirate);
private:
class CFlyingPirateData {

View File

@ -55,7 +55,7 @@ public:
, x3c_grenadeModelId(grenadeModelId)
, x40_shootParticleGenDescId(shootParticleGenDescId)
, x44_shootSfxId(shootSfxId)
, x48_grenadeTrajectoryInfo(grenadeTrajectoryInfo){};
, x48_grenadeTrajectoryInfo(grenadeTrajectoryInfo) {}
[[nodiscard]] const SBouncyGrenadeData& GetGrenadeData() const { return x0_grenadeData; }
[[nodiscard]] CAssetId GetGrenadeModelId() const { return x3c_grenadeModelId; }

View File

@ -31,7 +31,7 @@ class CJellyZap : public CPatterned {
bool sub801d8190() const { return x568_ != 1; }
public:
DEFINE_PATTERNED(JellyZap)
DEFINE_PATTERNED(JellyZap);
CJellyZap(TUniqueId, std::string_view, const CEntityInfo&, const zeus::CTransform&, CModelData&&, const CDamageInfo&,
bool, float, float, float, float, float, float, float, float, float, float, float, float,

View File

@ -59,7 +59,7 @@ private:
TUniqueId FindSuitableTarget(CStateManager& mgr, EScriptObjectState state, EScriptObjectMessage msg);
public:
DEFINE_PATTERNED(Magdolite)
DEFINE_PATTERNED(Magdolite);
CMagdolite(TUniqueId uid, std::string_view name, const CEntityInfo& info, const zeus::CTransform& xf,
CModelData&& mData, const CPatternedInfo& pInfo, const CActorParameters& actParms, float f1, float f2,
@ -69,7 +69,7 @@ public:
void AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStateManager& mgr) override;
void Think(float dt, CStateManager& mgr) override;
void Touch(CActor& actor, CStateManager& mgr) override{};
void Touch(CActor& actor, CStateManager& mgr) override {}
const CDamageVulnerability* GetDamageVulnerability() const override {
return x400_25_alive ? CAi::GetDamageVulnerability() : &CDamageVulnerability::ImmuneVulnerabilty();
}

View File

@ -26,7 +26,7 @@ class CMetaree : public CPatterned {
u32 x5cc_;
public:
DEFINE_PATTERNED(Metaree)
DEFINE_PATTERNED(Metaree);
CMetaree(TUniqueId, std::string_view, EFlavorType, const CEntityInfo&, const zeus::CTransform&, CModelData&&,
const CPatternedInfo&, const CDamageInfo&, float, const zeus::CVector3f&, float, EBodyType, float, float,
const CActorParameters&);

View File

@ -104,7 +104,7 @@ private:
bool x9c0_24_isEnergyDrainVulnerable : 1 = false;
public:
DEFINE_PATTERNED(Metroid)
DEFINE_PATTERNED(Metroid);
CMetroid(TUniqueId uid, std::string_view name, EFlavorType flavor, const CEntityInfo& info,
const zeus::CTransform& xf, CModelData&& mData, const CPatternedInfo& pInfo, const CActorParameters& aParms,
const CMetroidData& metroidData, TUniqueId);

View File

@ -92,7 +92,7 @@ class CMetroidBeta : public CPatterned {
void AddToTeam(CStateManager& mgr);
public:
DEFINE_PATTERNED(MetroidBeta)
DEFINE_PATTERNED(MetroidBeta);
CMetroidBeta(TUniqueId uid, std::string_view name, const CEntityInfo& info, const zeus::CTransform& xf,
CModelData&& mData, const CPatternedInfo& pInfo, const CActorParameters& aParms,
const CMetroidBetaData& metroidData);

View File

@ -96,7 +96,7 @@ struct SPrimeExoRoomParameters {
class CMetroidPrimeExo : public CPatterned {
public:
DEFINE_PATTERNED(MetroidPrimeExo)
DEFINE_PATTERNED(MetroidPrimeExo);
CMetroidPrimeExo(TUniqueId uid, std::string_view name, const CEntityInfo& info, const zeus::CTransform& xf,
CModelData&& mData, const CPatternedInfo& pInfo, const CActorParameters& aParms, u32 pw1,
const CCameraShakeData& shakeData1, const CCameraShakeData& shakeData2,

View File

@ -52,7 +52,7 @@ class CNewIntroBoss : public CPatterned {
void StopRumble(CStateManager&);
public:
DEFINE_PATTERNED(NewIntroBoss)
DEFINE_PATTERNED(NewIntroBoss);
CNewIntroBoss(TUniqueId uid, std::string_view name, const CEntityInfo& info, const zeus::CTransform& xf,
CModelData&& mData, const CPatternedInfo& pInfo, const CActorParameters& actParms, float minTurnAngle,
CAssetId projectile, const CDamageInfo& dInfo, CAssetId beamContactFxId, CAssetId beamPulseFxId,

View File

@ -97,7 +97,7 @@ class CParasite : public CWallWalker {
void UpdateJumpVelocity();
public:
DEFINE_PATTERNED(Parasite)
DEFINE_PATTERNED(Parasite);
CParasite(TUniqueId uid, std::string_view name, EFlavorType flavor, const CEntityInfo& info,
const zeus::CTransform& xf, CModelData&& mData, const CPatternedInfo& pInfo, EBodyType bodyType,
float maxTelegraphReactDist, float advanceWpRadius, float f3, float alignAngVel, float f5,

View File

@ -37,7 +37,7 @@ class CPuddleSpore : public CPatterned {
void UpdateBoundingState(const zeus::CAABox&, CStateManager&, float);
public:
DEFINE_PATTERNED(PuddleSpore)
DEFINE_PATTERNED(PuddleSpore);
CPuddleSpore(TUniqueId, std::string_view, EFlavorType, const CEntityInfo&, const zeus::CTransform&, CModelData&&,
const CPatternedInfo&, EColliderType, CAssetId, float, float, float, float, float,

View File

@ -38,7 +38,7 @@ class CPuddleToadGamma final : public CPatterned {
void SetPlayerPosition(CStateManager&, const zeus::CVector3f&);
public:
DEFINE_PATTERNED(PuddleToad)
DEFINE_PATTERNED(PuddleToad);
CPuddleToadGamma(TUniqueId uid, std::string_view name, EFlavorType flavor, const CEntityInfo& info,
const zeus::CTransform& xf, CModelData&& mData, const CPatternedInfo& pInfo,

View File

@ -27,7 +27,7 @@ class CPuffer : public CPatterned {
void sub8025bfa4(CStateManager&);
public:
DEFINE_PATTERNED(Puffer)
DEFINE_PATTERNED(Puffer);
CPuffer(TUniqueId, std::string_view, const CEntityInfo&, const zeus::CTransform&, CModelData&&,
const CActorParameters&, const CPatternedInfo&, float, CAssetId, const CDamageInfo&, CAssetId, float, bool,

View File

@ -200,7 +200,7 @@ class CRidley : public CPatterned {
}
public:
DEFINE_PATTERNED(Ridley)
DEFINE_PATTERNED(Ridley);
CRidley(TUniqueId, std::string_view, const CEntityInfo&, const zeus::CTransform&, CModelData&&, const CPatternedInfo&,
const CActorParameters&, CInputStream&, u32);

View File

@ -19,7 +19,7 @@ class CRipper : public CPatterned {
void RemovePlatform(CStateManager&);
public:
DEFINE_PATTERNED(Ripper)
DEFINE_PATTERNED(Ripper);
CRipper(TUniqueId uid, std::string_view name, EFlavorType type, const CEntityInfo& info, const zeus::CTransform& xf,
CModelData&& mData, const CPatternedInfo& pInfo, const CActorParameters& actParms,
const CGrappleParameters& grappleParms);

View File

@ -23,7 +23,7 @@ class CSeedling : public CWallWalker {
void LaunchNeedles(CStateManager&);
public:
DEFINE_PATTERNED(Seedling)
DEFINE_PATTERNED(Seedling);
CSeedling(TUniqueId, std::string_view, const CEntityInfo&, const zeus::CTransform&, CModelData&&,
const CPatternedInfo&, const CActorParameters&, CAssetId, CAssetId, const CDamageInfo&, const CDamageInfo&,
float, float, float, float);

View File

@ -40,7 +40,7 @@ class CSpacePirate : public CPatterned {
friend class CPirateRagDoll;
public:
DEFINE_PATTERNED(SpacePirate)
DEFINE_PATTERNED(SpacePirate);
private:
class CSpacePirateData {
friend class CSpacePirate;

View File

@ -29,7 +29,7 @@ class CSpankWeed : public CPatterned {
float GetPlayerDistance(CStateManager&) const;
public:
DEFINE_PATTERNED(SpankWeed)
DEFINE_PATTERNED(SpankWeed);
CSpankWeed(TUniqueId, std::string_view, const CEntityInfo&, const zeus::CTransform&, CModelData&&,
const CActorParameters&, const CPatternedInfo&, float, float, float, float);

View File

@ -135,7 +135,7 @@ class CThardus : public CPatterned {
void sub801dbf34(float dt, CStateManager& mgr);
bool sub801dc2c8() const { return (x610_destroyableRocks.size() - 1) == x648_currentRock; }
void _DoSuckState(CStateManager& mgr) { x330_stateMachineState.SetState(mgr, *this, GetStateMachine(), "Suck"sv); }
void sub801de9f8(CStateManager& mgr){};
void sub801de9f8(CStateManager& mgr) {}
void sub801dd608(CStateManager& mgr);
void sub801dcfa4(CStateManager& mgr);
void sub80deadc(CStateManager& mgr) {
@ -166,7 +166,7 @@ class CThardus : public CPatterned {
std::optional<CTexturedQuadFilter> m_flareFilter;
public:
DEFINE_PATTERNED(Thardus)
DEFINE_PATTERNED(Thardus);
CThardus(TUniqueId uid, std::string_view name, const CEntityInfo& info, const zeus::CTransform& xf,
CModelData&& mData, const CActorParameters& actParms, const CPatternedInfo& pInfo,
std::vector<CStaticRes> mData1, std::vector<CStaticRes> mData2, CAssetId particle1, CAssetId particle2,

View File

@ -14,7 +14,7 @@ class CThardusRockProjectile : public CPatterned {
u32 x590_ = 0;
public:
DEFINE_PATTERNED(ThardusRockProjectile)
DEFINE_PATTERNED(ThardusRockProjectile);
CThardusRockProjectile(TUniqueId uid, std::string_view name, const CEntityInfo& info, const zeus::CTransform& xf,
CModelData&& modelData, const CActorParameters& aParms, const CPatternedInfo& patternedInfo,
std::vector<std::unique_ptr<CModelData>>&& mDataVec, CAssetId, float);

View File

@ -36,7 +36,7 @@ class CTryclops : public CPatterned {
void AttractBomb(CStateManager& mgr, float);
public:
DEFINE_PATTERNED(Tryclops)
DEFINE_PATTERNED(Tryclops);
CTryclops(TUniqueId uid, std::string_view name, const CEntityInfo& info, const zeus::CTransform& xf,
CModelData&& mData, const CPatternedInfo& pInfo, const CActorParameters& actParms, float f1, float f2,
float f3, float launchSpeed);

View File

@ -68,7 +68,7 @@ class CWarWasp : public CPatterned {
zeus::CVector3f CalcShuffleDest(const CStateManager& mgr) const;
public:
DEFINE_PATTERNED(WarWasp)
DEFINE_PATTERNED(WarWasp);
CWarWasp(TUniqueId uid, std::string_view name, const CEntityInfo& info, const zeus::CTransform& xf,
CModelData&& mData, const CPatternedInfo& pInfo, CPatterned::EFlavorType flavor, CPatterned::EColliderType,
const CDamageInfo& dInfo1, const CActorParameters&, CAssetId projectileWeapon,

View File

@ -19,7 +19,7 @@
#include <zeus/CVector3f.hpp>
#ifndef DEFINE_PATTERNED
#define DEFINE_PATTERNED(type) static constexpr ECharacter CharacterType = ECharacter::type;
#define DEFINE_PATTERNED(type) static constexpr ECharacter CharacterType = ECharacter::type
#endif
namespace urde {