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