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.
292 lines
9.1 KiB
292 lines
9.1 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#ifndef MAPATOM_H |
|
#define MAPATOM_H |
|
#pragma once |
|
|
|
#include "hammer_mathlib.h" |
|
#include "tier1/utlvector.h" |
|
|
|
class Box3D; |
|
class CRender2D; |
|
class CRender3D; |
|
|
|
enum SelectionState_t |
|
{ |
|
SELECT_NONE = 0, // unselected |
|
SELECT_NORMAL, // selected |
|
SELECT_MORPH, // selected for vertex manipulation |
|
SELECT_MULTI_PARTIAL, // partial selection in a multiselect |
|
SELECT_MODIFY, // being modified by a tool |
|
}; |
|
|
|
// |
|
// Notification codes for NotifyDependents. |
|
// |
|
enum Notify_Dependent_t |
|
{ |
|
Notify_Changed = 0, // The notifying object has changed. |
|
Notify_Removed, // The notifying object is being removed from the world. |
|
Notify_Undo, |
|
Notify_Transform, |
|
Notify_Rebuild, |
|
Notify_Rebuild_Full, |
|
Notify_Clipped_Intermediate, |
|
Notify_Clipped |
|
}; |
|
|
|
class CMapAtom |
|
{ |
|
public: |
|
|
|
|
|
int m_nObjectID; |
|
//----------------------------------------------------------------------------- |
|
// Purpose: Debugging hook. |
|
//----------------------------------------------------------------------------- |
|
virtual void Debug(void) {} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Returns whether this object is selected. |
|
//----------------------------------------------------------------------------- |
|
virtual bool IsSelected(void) const |
|
{ |
|
return(m_eSelectionState != SELECT_NONE); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Returns the current selection state of this object. |
|
//----------------------------------------------------------------------------- |
|
virtual SelectionState_t GetSelectionState(void) const |
|
{ |
|
return(m_eSelectionState); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Sets the current selection state of this object. |
|
//----------------------------------------------------------------------------- |
|
virtual SelectionState_t SetSelectionState(SelectionState_t eSelectionState) |
|
{ |
|
SelectionState_t ePrevState = m_eSelectionState; |
|
m_eSelectionState = eSelectionState; |
|
return ePrevState; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Sets the render color of this object. |
|
//----------------------------------------------------------------------------- |
|
virtual void SetRenderColor(unsigned char red, unsigned char green, unsigned char blue) |
|
{ |
|
r = red; |
|
g = green; |
|
b = blue; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Sets the render color of this object. |
|
//----------------------------------------------------------------------------- |
|
virtual void SetRenderColor(color32 rgbColor) |
|
{ |
|
r = rgbColor.r; |
|
g = rgbColor.g; |
|
b = rgbColor.b; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Returns the render color of this object. |
|
//----------------------------------------------------------------------------- |
|
virtual void GetRenderColor(unsigned char &red, unsigned char &green, unsigned char &blue) |
|
{ |
|
red = r; |
|
green = g; |
|
blue = b; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Returns the render color of this object. |
|
//----------------------------------------------------------------------------- |
|
virtual color32 GetRenderColor(void) |
|
{ |
|
color32 rgbColor; |
|
rgbColor.r = r; |
|
rgbColor.g = g; |
|
rgbColor.b = b; |
|
rgbColor.a = 0; |
|
|
|
return rgbColor; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Sets this object's parent. |
|
// Input : pParent - |
|
//----------------------------------------------------------------------------- |
|
virtual void SetParent(CMapAtom *pParent) |
|
{ |
|
m_pParent = pParent; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Returns the parent of this CMapAtom. |
|
// Output : Parent pointer, NULL if this object has no parent. |
|
//----------------------------------------------------------------------------- |
|
virtual CMapAtom *GetParent(void) const |
|
{ |
|
return(m_pParent); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Preloads any rendering info (textures, etc.). Called once per object |
|
// from the renderer's Initialize function. |
|
// Input : pRender - Pointer to the 3D rendering interface. |
|
// bNewContext - True if the renderer pointed to by pRender is a new |
|
// rendering context, false if not. |
|
//----------------------------------------------------------------------------- |
|
virtual bool RenderPreload(CRender3D *pRender, bool bNewContext) |
|
{ |
|
return(true); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Renders this object into the 3D view. |
|
// Input : pRender - Pointer to the 3D rendering interface. |
|
//----------------------------------------------------------------------------- |
|
virtual void Render3D(CRender3D *pRender) |
|
{ |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Renders this object into the 3D view. |
|
// Input : pRender - Pointer to the 3D rendering interface. |
|
//----------------------------------------------------------------------------- |
|
virtual void Render2D(CRender2D *pRender) |
|
{ |
|
} |
|
|
|
|
|
virtual void AddShadowingTriangles( CUtlVector<Vector> &tri_list ) |
|
{ |
|
// should add triangles representing the shadows this object would cast |
|
// in lighting preview mode by adding 3 vector positions per triangle |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Returns a coordinate frame to render in |
|
// Input : matrix - |
|
// Output : returns true if a new matrix is returned, false if the new matrix is bad |
|
//----------------------------------------------------------------------------- |
|
virtual bool GetTransformMatrix( VMatrix& matrix ) |
|
{ |
|
// try and get our parents transform matrix |
|
CMapAtom *p = GetParent(); |
|
if ( p ) |
|
{ |
|
return p->GetTransformMatrix( matrix ); |
|
} |
|
|
|
return false; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Transformation functions. |
|
//----------------------------------------------------------------------------- |
|
void Transform(const VMatrix &matrix) |
|
{ |
|
DoTransform(matrix); |
|
PostUpdate(Notify_Transform); |
|
} |
|
|
|
void TransMove(const Vector &Delta) |
|
{ |
|
VMatrix matrix; |
|
matrix.Identity(); |
|
matrix.SetTranslation(Delta); |
|
|
|
DoTransform(matrix); |
|
PostUpdate(Notify_Transform); |
|
} |
|
|
|
void TransRotate(const Vector &RefPoint, const QAngle &Angles) |
|
{ |
|
VMatrix matrix; |
|
QAngle hammerAngle( -Angles.y, Angles.z, Angles.x ); |
|
matrix.SetupMatrixOrgAngles( vec3_origin, hammerAngle ); |
|
Vector vOffset; |
|
matrix.V3Mul( RefPoint, vOffset ); |
|
vOffset = RefPoint - vOffset; |
|
matrix.SetTranslation( vOffset ); |
|
|
|
DoTransform(matrix); |
|
PostUpdate(Notify_Transform); |
|
} |
|
|
|
void TransScale(const Vector &RefPoint, const Vector &Scale) |
|
{ |
|
VMatrix matrix; |
|
matrix.Identity(); |
|
matrix = matrix.Scale( Scale ); |
|
Vector vOffset; |
|
matrix.V3Mul( RefPoint, vOffset ); |
|
vOffset = RefPoint - vOffset; |
|
matrix.SetTranslation( vOffset ); |
|
|
|
DoTransform(matrix); |
|
PostUpdate(Notify_Transform); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Must be called after modifying the object for bounds recalculation and |
|
// dependency updates. |
|
//----------------------------------------------------------------------------- |
|
virtual void PostUpdate(Notify_Dependent_t eNotifyType) {} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Override this for helpers. This indicates whether a helper provides a visual |
|
// representation for the entity that it belongs to. Entities with no |
|
// visual elements are given a default box so they can be seen. |
|
//----------------------------------------------------------------------------- |
|
virtual bool IsVisualElement(void) { return(false); } |
|
|
|
//----------------------------------------------------------------------------- |
|
// Override this to tell the renderer to render you last. This is useful for |
|
// alpha blended elements such as sprites. |
|
//----------------------------------------------------------------------------- |
|
virtual bool ShouldRenderLast(void) |
|
{ |
|
return(false); |
|
} |
|
virtual void SignalChanged(void ) // object has changed |
|
{ |
|
} |
|
|
|
protected: |
|
|
|
static int s_nObjectIDCtr; |
|
|
|
CMapAtom(void) |
|
{ |
|
m_eSelectionState = SELECT_NONE; |
|
m_pParent = NULL; |
|
m_nObjectID = s_nObjectIDCtr++; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// DoTransform functions. Virtual, called by base Transfom functions. |
|
//----------------------------------------------------------------------------- |
|
virtual void DoTransform(const VMatrix &matrix) {} |
|
|
|
CMapAtom *m_pParent; // This object's parent. |
|
SelectionState_t m_eSelectionState; // The current selection state of this object. |
|
|
|
unsigned char r; // Red color component. |
|
unsigned char g; // Green color component. |
|
unsigned char b; // Blue color component. |
|
}; |
|
|
|
|
|
#endif // MAPATOM_H
|
|
|