//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //=============================================================================// #ifndef STOCKSOLIDS_H #define STOCKSOLIDS_H #ifdef _WIN32 #pragma once #endif #pragma warning(push, 1) #pragma warning(disable:4701 4702 4530) #include #pragma warning(pop) #include "mathlib/vector.h" #include "MapFace.h" class BoundBox; class CMapSolid; class Vector; class StockSolid { public: void Serialize(std::fstream& file, BOOL bIsStoring); int GetFieldCount() const; void SetFieldData(int iIndex, int iData); int GetFieldData(int iIndex, int *piData = NULL) const; void GetFieldRange(int iIndex, int *piRangeLower, int *piRangeUpper); void SetOrigin(const Vector &o); void SetCenterOffset(const Vector &ofs); virtual void SetFromBox(BoundBox * pBox) {} virtual void CreateMapSolid(CMapSolid *pSolid, TextureAlignment_t eAlignment) = 0; ~StockSolid(); protected: StockSolid(int nFields); typedef enum { DFTYPE_INTEGER, DFTYPE_BOOLEAN } STSDF_TYPE; void AddDataField(STSDF_TYPE type, const char *pszName, int iRangeLower = -1, int iRangeUpper = -1); Vector origin; Vector cofs; private: void AllocateDataFields(int nFields); enum { DFFLAG_RANGED = 0x01 }; typedef struct { unsigned flags; STSDF_TYPE type; char szName[128]; // range: int iRangeLower; int iRangeUpper; // value: int iValue; } STSDATAFIELD; STSDATAFIELD *pFields; int nFields; int iMaxFields; }; class StockBlock : public StockSolid { public: StockBlock(); void CreateMapSolid(CMapSolid *pSolid, TextureAlignment_t eTextureAlignment); void SetFromBox(BoundBox *pBox); enum { fieldWidth, fieldDepth, fieldHeight }; }; class StockWedge : public StockSolid { public: StockWedge(); void CreateMapSolid(CMapSolid *pSolid, TextureAlignment_t eTextureAlignment); void SetFromBox(BoundBox *pBox); enum { fieldWidth, fieldDepth, fieldHeight }; }; class StockCylinder : public StockSolid { public: StockCylinder(); void CreateMapSolid(CMapSolid *pSolid, TextureAlignment_t eTextureAlignment); void SetFromBox(BoundBox *pBox); enum { fieldWidth, fieldDepth, fieldHeight, fieldSideCount }; }; class StockSpike : public StockSolid { public: StockSpike(); void CreateMapSolid(CMapSolid *pSolid, TextureAlignment_t eTextureAlignment); void SetFromBox(BoundBox *pBox); enum { fieldWidth, fieldDepth, fieldHeight, fieldSideCount }; }; class StockSphere : public StockSolid { public: StockSphere(); void CreateMapSolid(CMapSolid *pSolid, TextureAlignment_t eTextureAlignment); void SetFromBox(BoundBox *pBox); enum { fieldWidth, fieldDepth, fieldHeight, fieldSideCount }; }; #endif // STOCKSOLIDS_H