summaryrefslogtreecommitdiff
path: root/hammer/mapstudiomodel.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /hammer/mapstudiomodel.h
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'hammer/mapstudiomodel.h')
-rw-r--r--hammer/mapstudiomodel.h147
1 files changed, 147 insertions, 0 deletions
diff --git a/hammer/mapstudiomodel.h b/hammer/mapstudiomodel.h
new file mode 100644
index 0000000..9ddbbd8
--- /dev/null
+++ b/hammer/mapstudiomodel.h
@@ -0,0 +1,147 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================//
+
+#ifndef MAPSTUDIOMODEL_H
+#define MAPSTUDIOMODEL_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+#include "MapHelper.h"
+#include "StudioModel.h"
+
+
+class CRender2D;
+class CRender3D;
+
+
+class CMapStudioModel : public CMapHelper
+{
+ public:
+
+ //
+ // Factories.
+ //
+ static CMapClass *CreateMapStudioModel(CHelperInfo *pHelperInfo, CMapEntity *pParent);
+ static CMapStudioModel *CreateMapStudioModel(const char *pszModelPath, bool bOrientedBBox, bool bReversePitch);
+
+ static void AdvanceAnimation(float flInterval);
+
+ //
+ // Construction/destruction:
+ //
+ CMapStudioModel(void);
+ ~CMapStudioModel(void);
+
+ DECLARE_MAPCLASS(CMapStudioModel,CMapHelper)
+
+ void CalcBounds(BOOL bFullUpdate = FALSE);
+
+ virtual CMapClass *Copy(bool bUpdateDependencies);
+ virtual CMapClass *CopyFrom(CMapClass *pFrom, bool bUpdateDependencies);
+
+ void Initialize(void);
+
+ void Render2D(CRender2D *pRender);
+ void Render3D(CRender3D *pRender);
+
+ void GetAngles(QAngle& pfAngles);
+ void SetAngles(QAngle& fAngles);
+
+ void OnParentKeyChanged(const char* szKey, const char* szValue);
+
+ bool RenderPreload(CRender3D *pRender, bool bNewContext);
+
+ int SerializeRMF(std::fstream &File, BOOL bRMF);
+ int SerializeMAP(std::fstream &File, BOOL bRMF);
+
+ static void SetRenderDistance(float fRenderDistance);
+ static void EnableAnimation(BOOL bEnable);
+
+ bool IsVisualElement(void) { return(true); }
+
+ bool ShouldRenderLast();
+
+ const char* GetDescription() { return("Studio model"); }
+
+ int GetFrame(void);
+ void SetFrame(int nFrame);
+
+ int GetSequence(void);
+ int GetSequenceCount(void);
+ void GetSequenceName(int nIndex, char *szName);
+ void SetSequence(int nIndex);
+
+ // Returns the index of the sequence (does a case-insensitive search).
+ // Returns -1 if the sequence doesn't exist.
+ int GetSequenceIndex( const char *pSequenceName ) const;
+
+ protected:
+
+ inline float ComputeFade( CRender3D *pRender ) const;
+ inline float ComputeDistanceFade( CRender3D *pRender ) const;
+ inline float ComputeScreenFade( CRender3D *pRender ) const;
+
+ void GetRenderAngles(QAngle &Angles);
+
+ //
+ // Implements CMapAtom transformation functions.
+ //
+ void DoTransform(const VMatrix &matrix);
+
+ inline void ReversePitch(bool bReversePitch);
+ inline void SetOrientedBounds(bool bOrientedBounds);
+
+ StudioModel *m_pStudioModel; // Pointer to a studio model in the model cache.
+ QAngle m_Angles; // Euler angles of this studio model.
+ float m_flPitch; // Pitch (stored separately for lights -- yuck!)
+ bool m_bPitchSet;
+
+ int m_Skin; // the model skin
+
+ bool m_bOrientedBounds; // Whether the bounding box should consider the orientation of the model.
+ // Note that this is not a true oriented bounding box, but an axial box
+ // indicating the extents of the oriented model.
+
+ bool m_bReversePitch; // Lights negate pitch, so models representing light sources in Hammer
+ // must do so as well.
+
+ bool m_bScreenSpaceFade; // If true, min & max dist are pixel size in screen space.
+ float m_flFadeScale; // Multiplied by distance to camera before calculating fade.
+ float m_flFadeMinDist; // The distance/pixels at which this model is fully visible.
+ float m_flFadeMaxDist; // The distance/pixels at which this model is fully invisible.
+ int m_iSolid; // The collision setting of this model: 0 = not solid, 2 = bounding box, 6 = vphysics
+
+ //
+ // Data that is common to all studio models.
+ //
+ static float m_fRenderDistance; // Distance beyond which studio models render as bounding boxes.
+ static BOOL m_bAnimateModels; // Whether to animate studio models.
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sets whether this object has an oriented or axial bounding box.
+// Note that this is not a true oriented bounding box, but an axial box
+// indicating the extents of the oriented model.
+//-----------------------------------------------------------------------------
+void CMapStudioModel::SetOrientedBounds(bool bOrientedBounds)
+{
+ m_bOrientedBounds = bOrientedBounds;
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Sets whether this object negates pitch.
+//-----------------------------------------------------------------------------
+void CMapStudioModel::ReversePitch(bool bReversePitch)
+{
+ m_bReversePitch = bReversePitch;
+}
+
+
+#endif // MAPSTUDIOMODEL_H