mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-12-12 22:56:13 +00:00
Cleanup & refactoring
This commit is contained in:
@@ -40,40 +40,40 @@ CDamageableTriggerExtra::~CDamageableTriggerExtra()
|
||||
void CDamageableTriggerExtra::CreateMaterial()
|
||||
{
|
||||
ASSERT(!mpMat);
|
||||
mpMat = new CMaterial(mGame, ePosition | eNormal | eTex0);
|
||||
mpMat = new CMaterial(mGame, EVertexAttribute::Position | EVertexAttribute::Normal | EVertexAttribute::Tex0);
|
||||
|
||||
// Most values/TEV setup were found from the executable + from graphics debuggers
|
||||
// Animation parameters are estimates from eyeballing the values ingame
|
||||
mpMat->SetBlendMode(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
mpMat->SetLightingEnabled(true);
|
||||
mpMat->SetOptions(CMaterial::eTransparent);
|
||||
mpMat->SetOptions(EMaterialOption::Transparent);
|
||||
mpMat->SetKonst(CColor((float) 1.f, 1.f, 1.f, 0.2f), 0);
|
||||
mpMat->SetNumPasses(3);
|
||||
|
||||
CMaterialPass *pPassA = mpMat->Pass(0);
|
||||
pPassA->SetKColorSel(eKonst0_RGB);
|
||||
pPassA->SetKColorSel(kKonst0_RGB);
|
||||
pPassA->SetTexCoordSource(4);
|
||||
pPassA->SetTexture(mpTextures[0]);
|
||||
pPassA->SetColorInputs(eZeroRGB, eTextureRGB, eKonstRGB, eZeroRGB);
|
||||
pPassA->SetAnimMode(eUVScroll);
|
||||
pPassA->SetColorInputs(kZeroRGB, kTextureRGB, kKonstRGB, kZeroRGB);
|
||||
pPassA->SetAnimMode(EUVAnimMode::UVScroll);
|
||||
pPassA->SetAnimParam(3, -0.48f);
|
||||
|
||||
CMaterialPass *pPassB = mpMat->Pass(1);
|
||||
pPassB->SetTexCoordSource(4);
|
||||
pPassB->SetTexture(mpTextures[1]);
|
||||
pPassB->SetColorInputs(eZeroRGB, eTextureRGB, ePrevRGB, eZeroRGB);
|
||||
pPassB->SetAnimMode(eUVScroll);
|
||||
pPassB->SetColorInputs(kZeroRGB, kTextureRGB, kPrevRGB, kZeroRGB);
|
||||
pPassB->SetAnimMode(EUVAnimMode::UVScroll);
|
||||
pPassB->SetAnimParam(2, 0.25f);
|
||||
pPassB->SetAnimParam(3, -0.3f);
|
||||
|
||||
CMaterialPass *pPassC = mpMat->Pass(2);
|
||||
pPassC->SetTexCoordSource(4);
|
||||
pPassC->SetTexture(mpTextures[2]);
|
||||
pPassC->SetRasSel(eRasColor0A0);
|
||||
pPassC->SetKAlphaSel(eKonst0_A);
|
||||
pPassC->SetColorInputs(eZeroRGB, eTextureRGB, eOneRGB, ePrevRGB);
|
||||
pPassC->SetAlphaInputs(eZeroAlpha, eZeroAlpha, eZeroAlpha, eKonstAlpha);
|
||||
pPassC->SetAnimMode(eUVScroll);
|
||||
pPassC->SetRasSel(kRasColor0A0);
|
||||
pPassC->SetKAlphaSel(kKonst0_A);
|
||||
pPassC->SetColorInputs(kZeroRGB, kTextureRGB, kOneRGB, kPrevRGB);
|
||||
pPassC->SetAlphaInputs(kZeroAlpha, kZeroAlpha, kZeroAlpha, kKonstAlpha);
|
||||
pPassC->SetAnimMode(EUVAnimMode::UVScroll);
|
||||
pPassC->SetAnimParam(3, -0.16f);
|
||||
}
|
||||
|
||||
@@ -83,10 +83,10 @@ void CDamageableTriggerExtra::UpdatePlaneTransform()
|
||||
|
||||
switch (mRenderSide)
|
||||
{
|
||||
case eNorth:
|
||||
case eSouth:
|
||||
case ERenderSide::North:
|
||||
case ERenderSide::South:
|
||||
{
|
||||
float Scalar = (mRenderSide == eNorth ? 1.f : -1.f);
|
||||
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));
|
||||
@@ -95,10 +95,10 @@ void CDamageableTriggerExtra::UpdatePlaneTransform()
|
||||
break;
|
||||
}
|
||||
|
||||
case eWest:
|
||||
case eEast:
|
||||
case ERenderSide::West:
|
||||
case ERenderSide::East:
|
||||
{
|
||||
float Scalar = (mRenderSide == eWest ? 1.f : -1.f);
|
||||
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));
|
||||
@@ -107,11 +107,11 @@ void CDamageableTriggerExtra::UpdatePlaneTransform()
|
||||
break;
|
||||
}
|
||||
|
||||
case eUp:
|
||||
case eDown:
|
||||
case ERenderSide::Up:
|
||||
case ERenderSide::Down:
|
||||
{
|
||||
float Scalar = (mRenderSide == eUp ? 1.f : -1.f);
|
||||
float RotAngle = (mRenderSide == eUp ? 180.f : 0.f);
|
||||
float Scalar = (mRenderSide == ERenderSide::Up ? 1.f : -1.f);
|
||||
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));
|
||||
@@ -122,7 +122,7 @@ void CDamageableTriggerExtra::UpdatePlaneTransform()
|
||||
|
||||
}
|
||||
|
||||
if (mRenderSide == eNoRender)
|
||||
if (mRenderSide == ERenderSide::NoRender)
|
||||
mLocalAABox = CAABox::skZero;
|
||||
else
|
||||
mLocalAABox = CAABox(CVector3f(-1.f, -1.f, 0.f), CVector3f(1.f, 1.f, 0.f));
|
||||
@@ -141,11 +141,11 @@ CDamageableTriggerExtra::ERenderSide CDamageableTriggerExtra::RenderSideForDirec
|
||||
bool Positive = (rkDir[Max] == AbsDir[Max]);
|
||||
|
||||
// Return corresponding side for direction
|
||||
if (Max == 0) return (Positive ? eEast : eWest);
|
||||
else if (Max == 1) return (Positive ? eNorth : eSouth);
|
||||
else if (Max == 2) return (Positive ? eUp : eDown);
|
||||
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);
|
||||
|
||||
return eNoRender;
|
||||
return ERenderSide::NoRender;
|
||||
}
|
||||
|
||||
CDamageableTriggerExtra::ERenderSide CDamageableTriggerExtra::TransformRenderSide(ERenderSide Side)
|
||||
@@ -156,20 +156,20 @@ CDamageableTriggerExtra::ERenderSide CDamageableTriggerExtra::TransformRenderSid
|
||||
|
||||
switch (Side)
|
||||
{
|
||||
case eNorth:
|
||||
case ERenderSide::North:
|
||||
return RenderSideForDirection(AreaRotation.YAxis());
|
||||
case eSouth:
|
||||
case ERenderSide::South:
|
||||
return RenderSideForDirection(-AreaRotation.YAxis());
|
||||
case eWest:
|
||||
case ERenderSide::West:
|
||||
return RenderSideForDirection(-AreaRotation.XAxis());
|
||||
case eEast:
|
||||
case ERenderSide::East:
|
||||
return RenderSideForDirection(AreaRotation.XAxis());
|
||||
case eUp:
|
||||
case ERenderSide::Up:
|
||||
return RenderSideForDirection(AreaRotation.ZAxis());
|
||||
case eDown:
|
||||
case ERenderSide::Down:
|
||||
return RenderSideForDirection(-AreaRotation.ZAxis());
|
||||
default:
|
||||
return eNoRender;
|
||||
return ERenderSide::NoRender;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -193,7 +193,7 @@ void CDamageableTriggerExtra::PropertyModified(IProperty* pProperty)
|
||||
{
|
||||
mpTextures[TextureIdx] = gpResourceStore->LoadResource<CTexture>( mTextureAssets[TextureIdx].Get() );
|
||||
|
||||
if (mpTextures[TextureIdx] && mpTextures[TextureIdx]->Type() != eTexture)
|
||||
if (mpTextures[TextureIdx] && mpTextures[TextureIdx]->Type() != EResourceType::Texture)
|
||||
mpTextures[TextureIdx] = nullptr;
|
||||
|
||||
mpMat->Pass(TextureIdx)->SetTexture(mpTextures[TextureIdx]);
|
||||
@@ -205,7 +205,7 @@ void CDamageableTriggerExtra::PropertyModified(IProperty* pProperty)
|
||||
|
||||
bool CDamageableTriggerExtra::ShouldDrawNormalAssets()
|
||||
{
|
||||
return (mRenderSide == eNoRender);
|
||||
return (mRenderSide == ERenderSide::NoRender);
|
||||
}
|
||||
|
||||
void CDamageableTriggerExtra::AddToRenderer(CRenderer *pRenderer, const SViewInfo& rkViewInfo)
|
||||
@@ -213,15 +213,15 @@ void CDamageableTriggerExtra::AddToRenderer(CRenderer *pRenderer, const SViewInf
|
||||
if (rkViewInfo.GameMode && !mpInstance->IsActive())
|
||||
return;
|
||||
|
||||
if (!rkViewInfo.GameMode && ((rkViewInfo.ShowFlags & eShowObjectGeometry) == 0))
|
||||
if (!rkViewInfo.GameMode && ((rkViewInfo.ShowFlags & EShowFlag::ObjectGeometry) == 0))
|
||||
return;
|
||||
|
||||
if (mRenderSide != eNoRender)
|
||||
if (mRenderSide != ERenderSide::NoRender)
|
||||
{
|
||||
if (rkViewInfo.ViewFrustum.BoxInFrustum(AABox()))
|
||||
pRenderer->AddMesh(this, -1, AABox(), true, eDrawMesh);
|
||||
pRenderer->AddMesh(this, -1, AABox(), true, ERenderCommand::DrawMesh);
|
||||
if (mpParent->IsSelected() && !rkViewInfo.GameMode)
|
||||
pRenderer->AddMesh(this, -1, AABox(), false, eDrawSelection);
|
||||
pRenderer->AddMesh(this, -1, AABox(), false, ERenderCommand::DrawSelection);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -251,23 +251,23 @@ void CDamageableTriggerExtra::DrawSelection()
|
||||
|
||||
void CDamageableTriggerExtra::RayAABoxIntersectTest(CRayCollisionTester& rTester, const SViewInfo& rkViewInfo)
|
||||
{
|
||||
if (mRenderSide == eNoRender) return;
|
||||
if (mRenderSide == ERenderSide::NoRender) return;
|
||||
if (rkViewInfo.GameMode && !mpInstance->IsActive()) return;
|
||||
|
||||
const CRay& rkRay = rTester.Ray();
|
||||
|
||||
if (rkViewInfo.pRenderer->RenderOptions() & eEnableBackfaceCull)
|
||||
if (rkViewInfo.pRenderer->RenderOptions() & ERenderOption::EnableBackfaceCull)
|
||||
{
|
||||
// We're guaranteed to be axis-aligned, so we can take advantage of that
|
||||
// to perform a very simple backface check.
|
||||
switch (mRenderSide)
|
||||
{
|
||||
case eNorth: if (rkRay.Origin().Y > AbsolutePosition().Y) return; break;
|
||||
case eSouth: if (rkRay.Origin().Y < AbsolutePosition().Y) return; break;
|
||||
case eWest: if (rkRay.Origin().X < AbsolutePosition().X) return; break;
|
||||
case eEast: if (rkRay.Origin().X > AbsolutePosition().X) return; break;
|
||||
case eUp: if (rkRay.Origin().Z > AbsolutePosition().Z) return; break;
|
||||
case eDown: if (rkRay.Origin().Z < AbsolutePosition().Z) return; break;
|
||||
case ERenderSide::North: if (rkRay.Origin().Y > AbsolutePosition().Y) return; break;
|
||||
case ERenderSide::South: if (rkRay.Origin().Y < AbsolutePosition().Y) return; break;
|
||||
case ERenderSide::West: if (rkRay.Origin().X < AbsolutePosition().X) return; break;
|
||||
case ERenderSide::East: if (rkRay.Origin().X > AbsolutePosition().X) return; break;
|
||||
case ERenderSide::Up: if (rkRay.Origin().Z > AbsolutePosition().Z) return; break;
|
||||
case ERenderSide::Down: if (rkRay.Origin().Z < AbsolutePosition().Z) return; break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -6,15 +6,15 @@
|
||||
class CDamageableTriggerExtra : public CScriptExtra
|
||||
{
|
||||
// Render fluid planes for doors in MP1
|
||||
enum ERenderSide
|
||||
enum class ERenderSide
|
||||
{
|
||||
eNoRender = 0x0,
|
||||
eNorth = 0x1,
|
||||
eSouth = 0x2,
|
||||
eWest = 0x4,
|
||||
eEast = 0x8,
|
||||
eUp = 0x10,
|
||||
eDown = 0x20
|
||||
NoRender = 0x0,
|
||||
North = 0x1,
|
||||
South = 0x2,
|
||||
West = 0x4,
|
||||
East = 0x8,
|
||||
Up = 0x10,
|
||||
Down = 0x20
|
||||
};
|
||||
|
||||
CVectorRef mPlaneSize;
|
||||
|
||||
@@ -57,14 +57,14 @@ void CDoorExtra::AddToRenderer(CRenderer *pRenderer, const SViewInfo& rkViewInfo
|
||||
{
|
||||
if (!mpShieldModel) return;
|
||||
if (rkViewInfo.GameMode && !mpInstance->IsActive()) return;
|
||||
if (!rkViewInfo.GameMode && ((rkViewInfo.ShowFlags & eShowObjectGeometry) == 0)) return;
|
||||
if (!rkViewInfo.GameMode && ((rkViewInfo.ShowFlags & EShowFlag::ObjectGeometry) == 0)) return;
|
||||
|
||||
if (mpParent->IsVisible() && rkViewInfo.ViewFrustum.BoxInFrustum(AABox()))
|
||||
{
|
||||
AddModelToRenderer(pRenderer, mpShieldModel, 0);
|
||||
|
||||
if (mpParent->IsSelected() && !rkViewInfo.GameMode)
|
||||
pRenderer->AddMesh(this, -1, AABox(), false, eDrawSelection);
|
||||
pRenderer->AddMesh(this, -1, AABox(), false, ERenderCommand::DrawSelection);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,7 +88,7 @@ void CDoorExtra::DrawSelection()
|
||||
{
|
||||
LoadModelMatrix();
|
||||
glBlendFunc(GL_ONE, GL_ZERO);
|
||||
mpShieldModel->DrawWireframe(eNoRenderOptions, mpParent->WireframeColor());
|
||||
mpShieldModel->DrawWireframe(ERenderOption::None, mpParent->WireframeColor());
|
||||
}
|
||||
|
||||
void CDoorExtra::RayAABoxIntersectTest(CRayCollisionTester& rTester, const SViewInfo& rkViewInfo)
|
||||
@@ -112,7 +112,7 @@ SRayIntersection CDoorExtra::RayNodeIntersectTest(const CRay& rkRay, uint32 Asse
|
||||
Out.ComponentIndex = AssetID;
|
||||
|
||||
CRay TransformedRay = rkRay.Transformed(Transform().Inverse());
|
||||
std::pair<bool,float> Result = mpShieldModel->GetSurface(AssetID)->IntersectsRay(TransformedRay, ((Options & eEnableBackfaceCull) == 0));
|
||||
std::pair<bool,float> Result = mpShieldModel->GetSurface(AssetID)->IntersectsRay(TransformedRay, ((Options & ERenderOption::EnableBackfaceCull) == 0));
|
||||
|
||||
if (Result.first)
|
||||
{
|
||||
|
||||
@@ -27,12 +27,12 @@ CRadiusSphereExtra::CRadiusSphereExtra(CScriptObject* pInstance, CScene* pScene,
|
||||
|
||||
void CRadiusSphereExtra::AddToRenderer(CRenderer* pRenderer, const SViewInfo& rkViewInfo)
|
||||
{
|
||||
if (!rkViewInfo.GameMode && (rkViewInfo.ShowFlags & eShowObjectGeometry) && mRadius.IsValid() && mpParent->IsVisible() && mpParent->IsSelected())
|
||||
if (!rkViewInfo.GameMode && (rkViewInfo.ShowFlags & EShowFlag::ObjectGeometry) && mRadius.IsValid() && mpParent->IsVisible() && mpParent->IsSelected())
|
||||
{
|
||||
CAABox BoundingBox = Bounds();
|
||||
|
||||
if (rkViewInfo.ViewFrustum.BoxInFrustum(BoundingBox))
|
||||
pRenderer->AddMesh(this, -1, BoundingBox, false, eDrawMesh);
|
||||
pRenderer->AddMesh(this, -1, BoundingBox, false, ERenderCommand::DrawMesh);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,12 +51,12 @@ CColor CRadiusSphereExtra::Color() const
|
||||
{
|
||||
// Repulsor
|
||||
case 0x63:
|
||||
case 0x5245504C:
|
||||
case FOURCC('REPL'):
|
||||
return CColor::skGreen;
|
||||
|
||||
// RadialDamage
|
||||
case 0x68:
|
||||
case 0x52414444:
|
||||
case FOURCC('RADD'):
|
||||
return CColor::skRed;
|
||||
|
||||
default:
|
||||
|
||||
@@ -5,12 +5,17 @@
|
||||
#include "Core/Scene/CScriptNode.h"
|
||||
#include <Common/Macros.h>
|
||||
|
||||
/* CScriptExtra is a class that allows for additional coded behavior on any given
|
||||
/**
|
||||
* CScriptExtra is a class that allows for additional coded behavior on any given
|
||||
* script object type. Subclass IScriptExtra, add the new class to CScriptExtra.cpp,
|
||||
* and reimplement whatever functions are needed to create the desired behavior. Note
|
||||
* that in addition to the functions here you can also reimplement IRenderable functions
|
||||
* (to render additional geometry) and CSceneNode functions (primarily for raycast
|
||||
* intersections).
|
||||
*
|
||||
* @todo I think I'd kinda rather CScriptExtra just inherited CScriptObject instead of
|
||||
* being a separate node type on top of it. I remember there were reasons I didn't do it
|
||||
* that way to begin with but I can't remember what they were off the top of my head.
|
||||
*/
|
||||
|
||||
class CScriptExtra : public CSceneNode
|
||||
@@ -34,7 +39,7 @@ public:
|
||||
inline EGame Game() const { return mGame; }
|
||||
|
||||
// Default implementations for CSceneNode
|
||||
virtual ENodeType NodeType() { return eScriptExtraNode; }
|
||||
virtual ENodeType NodeType() { return ENodeType::ScriptExtra; }
|
||||
virtual void RayAABoxIntersectTest(CRayCollisionTester& /*rTester*/, const SViewInfo& /*rkViewInfo*/) {}
|
||||
virtual SRayIntersection RayNodeIntersectTest(const CRay& /*rkRay*/, uint32 /*AssetID*/, const SViewInfo& /*rkViewInfo*/)
|
||||
{
|
||||
|
||||
@@ -46,9 +46,9 @@ void CSplinePathExtra::AddWaypoints()
|
||||
|
||||
std::set<CWaypointExtra*> CheckedWaypoints;
|
||||
|
||||
for (uint32 LinkIdx = 0; LinkIdx < mpInstance->NumLinks(eOutgoing); LinkIdx++)
|
||||
for (uint32 LinkIdx = 0; LinkIdx < mpInstance->NumLinks(ELinkType::Outgoing); LinkIdx++)
|
||||
{
|
||||
CLink* pLink = mpInstance->Link(eOutgoing, LinkIdx);
|
||||
CLink* pLink = mpInstance->Link(ELinkType::Outgoing, LinkIdx);
|
||||
|
||||
if ( (pLink->State() == FOURCC('IS00') && pLink->Message() == FOURCC('ATCH')) || // InternalState00/Attach
|
||||
(pLink->State() == FOURCC('MOTP') && pLink->Message() == FOURCC('ATCH')) ) // MotionPath/Attach
|
||||
|
||||
@@ -79,9 +79,9 @@ void CWaypointExtra::BuildLinks()
|
||||
{
|
||||
mLinks.clear();
|
||||
|
||||
for (uint32 iLink = 0; iLink < mpInstance->NumLinks(eOutgoing); iLink++)
|
||||
for (uint32 iLink = 0; iLink < mpInstance->NumLinks(ELinkType::Outgoing); iLink++)
|
||||
{
|
||||
CLink *pLink = mpInstance->Link(eOutgoing, iLink);
|
||||
CLink *pLink = mpInstance->Link(ELinkType::Outgoing, iLink);
|
||||
|
||||
if (IsPathLink(pLink))
|
||||
{
|
||||
@@ -111,8 +111,8 @@ bool CWaypointExtra::IsPathLink(CLink *pLink)
|
||||
{
|
||||
CFourCC State(pLink->State());
|
||||
CFourCC Message(pLink->Message());
|
||||
if (State == "ARRV" && Message == "NEXT") Valid = true; // Arrived / Next (MP2)
|
||||
if (State == "NEXT" && Message == "ATCH") Valid = true; // Next / Attach (MP3/DKCR)
|
||||
if (State == FOURCC('ARRV') && Message == FOURCC('NEXT')) Valid = true; // Arrived / Next (MP2)
|
||||
if (State == FOURCC('NEXT') && Message == FOURCC('ATCH')) Valid = true; // Next / Attach (MP3/DKCR)
|
||||
}
|
||||
|
||||
if (Valid)
|
||||
@@ -160,14 +160,14 @@ void CWaypointExtra::AddToRenderer(CRenderer *pRenderer, const SViewInfo& rkView
|
||||
// won't work properly because we haven't finished loading the scene yet.
|
||||
if (!mLinksBuilt) BuildLinks();
|
||||
|
||||
if (!rkViewInfo.GameMode && (rkViewInfo.ShowFlags & eShowObjectGeometry) && mpParent->IsVisible() && !mpParent->IsSelected())
|
||||
if (!rkViewInfo.GameMode && (rkViewInfo.ShowFlags & EShowFlag::ObjectGeometry) && mpParent->IsVisible() && !mpParent->IsSelected())
|
||||
{
|
||||
for (uint32 iLink = 0; iLink < mLinks.size(); iLink++)
|
||||
{
|
||||
CScriptNode *pNode = mLinks[iLink].pWaypoint;
|
||||
|
||||
if (pNode->IsVisible() && !pNode->IsSelected() && rkViewInfo.ViewFrustum.BoxInFrustum(mLinks[iLink].LineAABB))
|
||||
pRenderer->AddMesh(this, iLink, mLinks[iLink].LineAABB, false, eDrawMesh);
|
||||
pRenderer->AddMesh(this, iLink, mLinks[iLink].LineAABB, false, ERenderCommand::DrawMesh);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user