You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
4.5 KiB
103 lines
4.5 KiB
5 years ago
|
//========= 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);
|
||
|
}
|
||
|
|