summaryrefslogtreecommitdiff
path: root/tools/vcdblock/dmevmfentity.h
blob: 54006108ec78bcaae637438ede1b589d45d44a80 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: Represents an entity in a VMF
//
//=============================================================================

#ifndef DMEVMFENTITY_H
#define DMEVMFENTITY_H
#ifdef _WIN32
#pragma once
#endif

#include "toolutils/dmemdlrenderable.h"
#include "datamodel/dmelement.h"
#include "toolframework/itoolentity.h"
#include "materialsystem/MaterialSystemUtil.h"


//-----------------------------------------------------------------------------
// Represents an editable entity; draws its helpers
//-----------------------------------------------------------------------------
class CDmeVMFEntity : public CDmeMdlRenderable<CDmElement>
{
	DEFINE_ELEMENT( CDmeVMFEntity, CDmeMdlRenderable<CDmElement> );

public:
	// Inherited from CDmElement
	virtual	void	OnAttributeChanged( CDmAttribute *pAttribute );

public:
	// Inherited from DmeRenderable
	virtual const Vector &GetRenderOrigin( void );
	virtual const QAngle &GetRenderAngles( void );
	virtual int	DrawModel( int flags );
	virtual bool IsTransparent( void );
	virtual void GetRenderBounds( Vector& mins, Vector& maxs );

public:
	int GetEntityId() const;

	// Returns the next available entity id
	static int GetNextEntityId();
	static void SetNextEntityId( int nEntityId );

	const char *GetClassName() const;
	const char *GetTargetName() const;

	bool IsPlaceholder() const;

	// Entity Key iteration
	CDmAttribute *FirstEntityKey();
	CDmAttribute *NextEntityKey( CDmAttribute *pEntityKey );

	// Attach/detach from an engine entity with the same editor index
	void AttachToEngineEntity( HTOOLHANDLE hToolHandle );

	void SetRenderOrigin( const Vector &vecOrigin );
	void SetRenderAngles( const QAngle &angles );

	void MarkDirty( bool bDirty = true );
	bool IsDirty( void ) { return m_bIsDirty; };

	void MarkDeleted( bool bDeleted = true );
	bool IsDeleted( void ) { return m_bIsDeleted; };

	bool CopyFromServer( CBaseEntity *pServerEnt );
	bool CopyFromServer( CBaseEntity *pServerEnt, const char *szField );
	bool CopyFromServer( CBaseEntity *pServerEnt, const char *szSrcField, const char *szDstField );
	bool CopyToServer( void );

	bool IsSameOnServer( CBaseEntity *pServerEntity );
	bool CreateOnServer( void );

private:
	bool IsEntityKey( CDmAttribute *pEntityKey );

	// Draws the helper for the entity
	void DrawSprite( IMaterial *pMaterial );
	void DrawDragHelpers( IMaterial *pMaterial );
	void DrawFloorTarget( IMaterial *pMaterial );

	CDmaVar<Vector> m_vecLocalOrigin;
	// CDmAttributeVar<QAngle> m_vecLocalAngles;
	CDmaVar<Vector> m_vecLocalAngles; // something funky with the vmf importer, it asserts when it's a QAngle

	CDmaString m_ClassName;
	CDmaString m_TargetName;
	CDmaVar<bool> m_bIsPlaceholder;

	// The entity it's connected to in the engine
	HTOOLHANDLE	m_hEngineEntity;

	CMaterialReference m_Wireframe;

	CMaterialReference m_SelectedInfoTarget;
	CMaterialReference m_InfoTargetSprite;

	// pretty sure this entity is edited
	bool m_bIsDirty;

	// entity needs to be deleted
	CDmaVar<bool> m_bIsDeleted;

	// FIXME: This is a hack for info targets
	bool m_bInfoTarget;

	// Used to store the next unique entity id;
	static int s_nNextEntityId;
};


//-----------------------------------------------------------------------------
// Inline methods
//-----------------------------------------------------------------------------
inline const char *CDmeVMFEntity::GetClassName() const
{
	return m_ClassName;
}

inline const char *CDmeVMFEntity::GetTargetName() const
{
	return m_TargetName;
}

inline bool CDmeVMFEntity::IsPlaceholder() const
{
	return m_bIsPlaceholder;
}


#endif // DMEVMFENTITY_H