From 75be364148cef40116de223b0ccbc4f92720b317 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Fri, 19 Jun 2020 00:26:07 -0400 Subject: [PATCH] CDamageableTriggerExtra: Make use of std::array Stronger typing. --- .../ScriptExtra/CDamageableTriggerExtra.cpp | 59 ++++++++++--------- .../ScriptExtra/CDamageableTriggerExtra.h | 9 +-- 2 files changed, 35 insertions(+), 33 deletions(-) diff --git a/src/Core/ScriptExtra/CDamageableTriggerExtra.cpp b/src/Core/ScriptExtra/CDamageableTriggerExtra.cpp index 72443e7c..f5e49a3f 100644 --- a/src/Core/ScriptExtra/CDamageableTriggerExtra.cpp +++ b/src/Core/ScriptExtra/CDamageableTriggerExtra.cpp @@ -6,11 +6,7 @@ CDamageableTriggerExtra::CDamageableTriggerExtra(CScriptObject *pInstance, CScene *pScene, CScriptNode *pParent) : CScriptExtra(pInstance, pScene, pParent) - , mpMat(nullptr) { - for (uint32 iTex = 0; iTex < 3; iTex++) - mpTextures[iTex] = nullptr; - SetInheritance(true, false, false); CreateMaterial(); @@ -18,17 +14,20 @@ CDamageableTriggerExtra::CDamageableTriggerExtra(CScriptObject *pInstance, CScen // Fetch render side mRenderSide = TEnumRef(pInstance->PropertyData(), pProperties->ChildByIndex(5)); - if (mRenderSide.IsValid()) PropertyModified(mRenderSide.Property()); + if (mRenderSide.IsValid()) + PropertyModified(mRenderSide.Property()); // Fetch scale mPlaneSize = CVectorRef(pInstance->PropertyData(), pProperties->ChildByIndex(2)); - if (mPlaneSize.IsValid()) PropertyModified(mPlaneSize.Property()); + if (mPlaneSize.IsValid()) + PropertyModified(mPlaneSize.Property()); // Fetch textures for (uint32 TextureIdx = 0; TextureIdx < 3; TextureIdx++) { mTextureAssets[TextureIdx] = CAssetRef(pInstance->PropertyData(), pProperties->ChildByIndex(6 + TextureIdx)); - if (mTextureAssets[TextureIdx].IsValid()) PropertyModified(mTextureAssets[TextureIdx].Property()); + if (mTextureAssets[TextureIdx].IsValid()) + PropertyModified(mTextureAssets[TextureIdx].Property()); } } @@ -47,7 +46,7 @@ void CDamageableTriggerExtra::CreateMaterial() mpMat->SetBlendMode(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); mpMat->SetLightingEnabled(true); mpMat->SetOptions(EMaterialOption::Transparent); - mpMat->SetKonst(CColor((float) 1.f, 1.f, 1.f, 0.2f), 0); + mpMat->SetKonst(CColor(1.f, 1.f, 1.f, 0.2f), 0); mpMat->SetNumPasses(3); CMaterialPass *pPassA = mpMat->Pass(0); @@ -79,14 +78,14 @@ void CDamageableTriggerExtra::CreateMaterial() void CDamageableTriggerExtra::UpdatePlaneTransform() { - CVector3f Extent = mPlaneSize.Get() / 2.f; + const CVector3f Extent = mPlaneSize.Get() / 2.f; switch (mRenderSide) { case ERenderSide::North: case ERenderSide::South: { - float Scalar = (mRenderSide == ERenderSide::North ? 1.f : -1.f); + const float Scalar = (mRenderSide == ERenderSide::North ? 1.f : -1.f); mPosition = CVector3f(0.f, Extent.Y * Scalar, 0.f); mRotation = CQuaternion::FromEuler(CVector3f(90.f * Scalar, 0.f, 0.f)); @@ -98,7 +97,7 @@ void CDamageableTriggerExtra::UpdatePlaneTransform() case ERenderSide::West: case ERenderSide::East: { - float Scalar = (mRenderSide == ERenderSide::West ? 1.f : -1.f); + const float Scalar = (mRenderSide == ERenderSide::West ? 1.f : -1.f); mPosition = CVector3f(-Extent.X * Scalar, 0.f, 0.f); mRotation = CQuaternion::FromEuler(CVector3f(0.f, 90.f * Scalar, 0.f)); @@ -110,8 +109,8 @@ void CDamageableTriggerExtra::UpdatePlaneTransform() case ERenderSide::Up: case ERenderSide::Down: { - float Scalar = (mRenderSide == ERenderSide::Up ? 1.f : -1.f); - float RotAngle = (mRenderSide == ERenderSide::Up ? 180.f : 0.f); + const float Scalar = (mRenderSide == ERenderSide::Up ? 1.f : -1.f); + const float RotAngle = (mRenderSide == ERenderSide::Up ? 180.f : 0.f); mPosition = CVector3f(0.f, 0.f, Extent.Z * Scalar); mRotation = CQuaternion::FromEuler(CVector3f(0.f, RotAngle, 0.f)); @@ -133,17 +132,17 @@ void CDamageableTriggerExtra::UpdatePlaneTransform() CDamageableTriggerExtra::ERenderSide CDamageableTriggerExtra::RenderSideForDirection(const CVector3f& rkDir) { // Get the index of the largest XYZ component - CVector3f AbsDir(Math::Abs(rkDir.X), Math::Abs(rkDir.Y), Math::Abs(rkDir.Z)); + const CVector3f AbsDir(Math::Abs(rkDir.X), Math::Abs(rkDir.Y), Math::Abs(rkDir.Z)); uint32 Max = (AbsDir.X > AbsDir.Y ? 0 : 1); Max = (AbsDir[Max] > AbsDir.Z ? Max : 2); // Check whether the direction is positive or negative. If the absolute value of the component matches the input one, then it's positive. - bool Positive = (rkDir[Max] == AbsDir[Max]); + const bool Positive = (rkDir[Max] == AbsDir[Max]); // Return corresponding side for direction - if (Max == 0) return (Positive ? ERenderSide::East : ERenderSide::West); - else if (Max == 1) return (Positive ? ERenderSide::North : ERenderSide::South); - else if (Max == 2) return (Positive ? ERenderSide::Up : ERenderSide::Down); + if (Max == 0) return (Positive ? ERenderSide::East : ERenderSide::West); + if (Max == 1) return (Positive ? ERenderSide::North : ERenderSide::South); + if (Max == 2) return (Positive ? ERenderSide::Up : ERenderSide::Down); return ERenderSide::NoRender; } @@ -152,7 +151,7 @@ CDamageableTriggerExtra::ERenderSide CDamageableTriggerExtra::TransformRenderSid { // DamageableTrigger has a convenience feature implemented that changes the // render side when the area's been rotated, so we need to replicate it here. - CQuaternion AreaRotation = mpScriptNode->Instance()->Area()->Transform().ExtractRotation(); + const CQuaternion AreaRotation = mpScriptNode->Instance()->Area()->Transform().ExtractRotation(); switch (Side) { @@ -184,7 +183,6 @@ void CDamageableTriggerExtra::PropertyModified(IProperty* pProperty) { UpdatePlaneTransform(); } - else { for (uint32 TextureIdx = 0; TextureIdx < 3; TextureIdx++) @@ -232,10 +230,10 @@ void CDamageableTriggerExtra::Draw(FRenderOptions Options, int /*ComponentIndex* mpMat->SetCurrent(Options); // Note: The plane the game renders this onto is 5x4.5, which is why we divide the tex coords by this value - CVector2f TexUL(0.f, mCoordScale.Y / 4.5f); - CVector2f TexUR(mCoordScale.X / 5.f, mCoordScale.Y / 4.5f); - CVector2f TexBR(mCoordScale.X / 5.f, 0.f); - CVector2f TexBL(0.f, 0.f); + const CVector2f TexUL(0.f, mCoordScale.Y / 4.5f); + const CVector2f TexUR(mCoordScale.X / 5.f, mCoordScale.Y / 4.5f); + const CVector2f TexBR(mCoordScale.X / 5.f, 0.f); + const CVector2f TexBL(0.f, 0.f); CDrawUtil::DrawSquare(TexUL, TexUR, TexBR, TexBL); } @@ -251,12 +249,15 @@ void CDamageableTriggerExtra::DrawSelection() void CDamageableTriggerExtra::RayAABoxIntersectTest(CRayCollisionTester& rTester, const SViewInfo& rkViewInfo) { - if (mRenderSide == ERenderSide::NoRender) return; - if (rkViewInfo.GameMode && !mpInstance->IsActive()) return; + if (mRenderSide == ERenderSide::NoRender) + return; + + if (rkViewInfo.GameMode && !mpInstance->IsActive()) + return; const CRay& rkRay = rTester.Ray(); - if (rkViewInfo.pRenderer->RenderOptions() & ERenderOption::EnableBackfaceCull) + if ((rkViewInfo.pRenderer->RenderOptions() & ERenderOption::EnableBackfaceCull) != 0) { // We're guaranteed to be axis-aligned, so we can take advantage of that // to perform a very simple backface check. @@ -276,7 +277,7 @@ void CDamageableTriggerExtra::RayAABoxIntersectTest(CRayCollisionTester& rTester if (Result.first) { - rTester.AddNode(this, -1, Result.second); + rTester.AddNode(this, UINT32_MAX, Result.second); mCachedRayDistance = Result.second; } } @@ -285,5 +286,5 @@ SRayIntersection CDamageableTriggerExtra::RayNodeIntersectTest(const CRay& rkRay { // The bounding box and all other tests already passed in RayAABoxIntersectTest, so we // already know that we have a positive. - return SRayIntersection(true, mCachedRayDistance, rkRay.PointOnRay(mCachedRayDistance), mpParent, -1); + return SRayIntersection(true, mCachedRayDistance, rkRay.PointOnRay(mCachedRayDistance), mpParent, UINT32_MAX); } diff --git a/src/Core/ScriptExtra/CDamageableTriggerExtra.h b/src/Core/ScriptExtra/CDamageableTriggerExtra.h index 35516f6e..7dbb581b 100644 --- a/src/Core/ScriptExtra/CDamageableTriggerExtra.h +++ b/src/Core/ScriptExtra/CDamageableTriggerExtra.h @@ -2,6 +2,7 @@ #define CDAMAGEABLETRIGGEREXTRA_H #include "CScriptExtra.h" +#include class CDamageableTriggerExtra : public CScriptExtra { @@ -21,13 +22,13 @@ public: private: CVectorRef mPlaneSize; TEnumRef mRenderSide; - CAssetRef mTextureAssets[3]; + std::array mTextureAssets; - CMaterial* mpMat; - CTexture* mpTextures[3]; + CMaterial* mpMat = nullptr; + std::array mpTextures{}; CVector2f mCoordScale; - float mCachedRayDistance; + float mCachedRayDistance = 0.0f; public: explicit CDamageableTriggerExtra(CScriptObject *pInstance, CScene *pScene, CScriptNode *pParent = nullptr);