summaryrefslogtreecommitdiff
path: root/hammer/helperfactory.cpp
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/helperfactory.cpp
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'hammer/helperfactory.cpp')
-rw-r--r--hammer/helperfactory.cpp102
1 files changed, 102 insertions, 0 deletions
diff --git a/hammer/helperfactory.cpp b/hammer/helperfactory.cpp
new file mode 100644
index 0000000..2cb7e71
--- /dev/null
+++ b/hammer/helperfactory.cpp
@@ -0,0 +1,102 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Implements a factory for entity helpers. When an entity is created,
+// the helpers from its class definition in the FGD are each instantiated
+// and added as children of the entity.
+//
+//=============================================================================
+
+#include "stdafx.h"
+#include "HelperFactory.h"
+#include "fgdlib/HelperInfo.h"
+#include "MapAlignedBox.h"
+#include "MapAnimator.h"
+#include "MapAxisHandle.h"
+#include "MapDecal.h"
+#include "MapFrustum.h"
+#include "MapKeyFrame.h"
+#include "MapLightCone.h"
+#include "MapLine.h"
+#include "MapSprite.h"
+#include "MapSphere.h"
+#include "MapStudioModel.h"
+#include "MapOverlay.h"
+#include "MapPointHandle.h"
+#include "MapQuadBounds.h"
+#include "MapLight.h"
+#include "MapSideList.h"
+#include "MapCylinder.h"
+#include "MapInstance.h"
+#include "mapsweptplayerhull.h"
+#include "DispShore.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include <tier0/memdbgon.h>
+
+typedef CMapClass *HELPERFACTORY(CHelperInfo *, CMapEntity *);
+
+
+typedef struct
+{
+ char *pszName;
+ HELPERFACTORY *pfnFactory;
+} HelperFactoryMap_t;
+
+
+static HelperFactoryMap_t HelperFactoryMap[] =
+{
+ "sprite", CMapSprite::CreateMapSprite, // Sprite, gets its render mode from the SPR file, has a selection handle.
+ "iconsprite", CMapSprite::CreateMapSprite, // Masked alpha sprite, no selection handle.
+ "studio", CMapStudioModel::CreateMapStudioModel, // Studio model with an axial bounding box.
+ "studioprop", CMapStudioModel::CreateMapStudioModel, // Studio model with an oriented bounding box.
+ "lightprop", CMapStudioModel::CreateMapStudioModel, // Studio model with an oriented bounding box, reverses pitch.
+ "quadbounds", CMapQuadBounds::CreateQuadBounds, // Extracts the verts from a quad face of a brush.
+ "animator", CMapAnimator::CreateMapAnimator, // Previews the motion of a moving entity (keyframe follower).
+ "keyframe", CMapKeyFrame::CreateMapKeyFrame, // Autonames when cloned and draws lines to the next keyframe.
+ "decal", CMapDecal::CreateMapDecal, // Decal that automatically attaches to nearby faces.
+ "wirebox", CMapAlignedBox::Create, // Wireframe box that can extract its mins & maxs.
+ "line", CMapLine::Create, // Line drawn between any two entities.
+ "nodelink", CMapLine::Create, // Line drawn between any two navigation nodes.
+ "lightcone", CMapLightCone::Create, // Faceted cone showing light angles and falloff.
+ "frustum", CMapFrustum::Create, // Wireframe frustum.
+ "sphere", CMapSphere::Create, // Wireframe sphere indicating a radius.
+ "overlay", CMapOverlay::CreateMapOverlay, // A decal with manipulatable vertices.
+ "light", CMapLight::CreateMapLight, // Light source for lighting preview.
+ "sidelist", CMapSideList::CreateMapSideList, // List of CMapFace pointers set by face ID.
+ "origin", CMapPointHandle::Create, // Handle used to manipulate the origin of an entity.
+ "vecline", CMapPointHandle::Create, // Handle used to manipulate another point that draws a line back to its parent entity.
+ "axis", CMapAxisHandle::Create, // Handle used to manipulate the axis of an entity.
+ "cylinder", CMapCylinder::Create, // Wireframe cylinder with separate radii at each end
+ "sweptplayerhull", CMapSweptPlayerHull::Create, // A swept player sized hull between two points (ladders)
+ "overlay_transition", CMapOverlayTransition::Create, // Notes!!
+ "instance", CMapInstance::Create, // A map instance used for rendering the sub-map
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Creates a helper from a helper info object.
+// Input : pHelperInfo - holds information about the helper to be created and
+// arguments to be passed to the helper when it is created.
+// pParent - The entity that will be the helper's parent.
+// Output : Returns a pointer to the newly created helper.
+//-----------------------------------------------------------------------------
+CMapClass *CHelperFactory::CreateHelper(CHelperInfo *pHelperInfo, CMapEntity *pParent)
+{
+ //
+ // Look up the helper factory function in the factory function table.
+ //
+ for (int i = 0; i < sizeof(HelperFactoryMap) / sizeof(HelperFactoryMap[0]); i++)
+ {
+ //
+ // If the function was found in the table, create the helper and return it.
+ //
+ if (!stricmp(HelperFactoryMap[i].pszName, pHelperInfo->GetName()))
+ {
+ CMapClass *pHelper = HelperFactoryMap[i].pfnFactory(pHelperInfo, pParent);
+ return(pHelper);
+ }
+ }
+
+ return(NULL);
+}
+