summaryrefslogtreecommitdiff
path: root/hammer/stocksolids.h
diff options
context:
space:
mode:
Diffstat (limited to 'hammer/stocksolids.h')
-rw-r--r--hammer/stocksolids.h153
1 files changed, 153 insertions, 0 deletions
diff --git a/hammer/stocksolids.h b/hammer/stocksolids.h
new file mode 100644
index 0000000..902386f
--- /dev/null
+++ b/hammer/stocksolids.h
@@ -0,0 +1,153 @@
+//========= 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 <fstream>
+#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