149 lines
4.1 KiB
C++
149 lines
4.1 KiB
C++
////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Crytek Engine Source File.
|
|
// Copyright (C), Crytek Studios, 2001.
|
|
// -------------------------------------------------------------------------
|
|
// File name: Group.h
|
|
// Version: v1.00
|
|
// Created: 10/10/2001 by Timur.
|
|
// Compilers: Visual C++ 6.0
|
|
// Description: Group object definition.
|
|
// -------------------------------------------------------------------------
|
|
// History:
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef __Group_h__
|
|
#define __Group_h__
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "BaseObject.h"
|
|
|
|
/*!
|
|
* CGroup groups object together.
|
|
* Object can only be assigned to one group.
|
|
*
|
|
*/
|
|
class CGroup : public CBaseObject
|
|
{
|
|
public:
|
|
DECLARE_DYNCREATE(CGroup)
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Ovverides from CBaseObject.
|
|
//////////////////////////////////////////////////////////////////////////
|
|
bool Init( IEditor *ie,CBaseObject *prev,const CString &file );
|
|
void Done();
|
|
|
|
void Display( DisplayContext &disp );
|
|
|
|
void BeginEditParams( IEditor *ie,int flags );
|
|
void EndEditParams( IEditor *ie );
|
|
|
|
virtual void SetPos( const Vec3d &pos );
|
|
virtual void SetAngles( const Vec3d &angles );
|
|
virtual void SetScale( const Vec3d &scale );
|
|
|
|
//! Attach new child node.
|
|
void AttachChild( CBaseObject* child,bool bKeepPos=true );
|
|
|
|
void GetBoundBox( BBox &box );
|
|
void GetLocalBounds( BBox &box );
|
|
bool HitTest( HitContext &hc );
|
|
|
|
void Serialize( CObjectArchive &ar );
|
|
|
|
XmlNodeRef Export( const CString &levelPath,XmlNodeRef &xmlNode );
|
|
|
|
//! Ovveride event handler from CBaseObject.
|
|
void OnEvent( ObjectEvent event );
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Group interface
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//! Select objects withing specified distance from givven position.
|
|
//! Return number of selected objects.
|
|
int SelectObjects( const BBox &box,bool bUnselect=false );
|
|
|
|
//! Remove all childs from this group.
|
|
void Ungroup();
|
|
|
|
//! Open group.
|
|
//! Make childs accesseble from top user interface.
|
|
void Open();
|
|
|
|
//! Close group.
|
|
//! Make childs unacesseble from top user interface.
|
|
//! In Closed state group only display objects but not allow to select them.
|
|
void Close();
|
|
|
|
//! Return true if group is in Opened.
|
|
bool IsOpen() const { return m_opened; };
|
|
|
|
//! Called by child object, when it changes.
|
|
void OnChildModified();
|
|
|
|
void DeleteAllChilds();
|
|
|
|
//! If of this group used for geometry merging.
|
|
int GetGeomMergeId() const;
|
|
|
|
protected:
|
|
//! Dtor must be protected.
|
|
CGroup();
|
|
void InvalidateBBox() { m_bBBoxValid = false; };
|
|
|
|
bool HitTestChilds( HitContext &hc );
|
|
void SerializeChilds( CObjectArchive &ar );
|
|
virtual void CalcBoundBox();
|
|
|
|
static void RecursivelySetGroup( CBaseObject *object,CGroup *pGroup );
|
|
static void RecursivelySetFlags( CBaseObject *object,int flags );
|
|
static void RecursivelySetLayer( CBaseObject *object,CObjectLayer *pLayer );
|
|
//! Get combined bounding box of all childs in hierarchy.
|
|
static void RecursivelyGetBoundBox( CBaseObject *object,BBox &box );
|
|
|
|
// Ovveriden from CBaseObject.
|
|
void RemoveChild( CBaseObject *node );
|
|
void DeleteThis() { delete this; };
|
|
void OnMergeStaticGeom( IVariable *pVar );
|
|
|
|
BBox m_bbox;
|
|
bool m_bBBoxValid;
|
|
bool m_opened;
|
|
bool m_bAlwaysDrawBox;
|
|
bool m_ignoreChildModify;
|
|
|
|
CVariable<bool> mv_mergeStaticGeom;
|
|
|
|
// Geometry merging group assigned to this Group.
|
|
int m_geomMergeId;
|
|
|
|
static int s_groupGeomMergeId;
|
|
|
|
IEditor *m_ie;
|
|
};
|
|
|
|
/*!
|
|
* Class Description of Group.
|
|
*/
|
|
class CGroupClassDesc : public CObjectClassDesc
|
|
{
|
|
public:
|
|
REFGUID ClassID()
|
|
{
|
|
// {1ED5BF40-BECA-4ba1-8E90-0906FF862A75}
|
|
static const GUID guid = { 0x1ed5bf40, 0xbeca, 0x4ba1, { 0x8e, 0x90, 0x9, 0x6, 0xff, 0x86, 0x2a, 0x75 } };
|
|
return guid;
|
|
}
|
|
ObjectType GetObjectType() { return OBJTYPE_GROUP; };
|
|
const char* ClassName() { return "Group"; };
|
|
const char* Category() { return ""; };
|
|
CRuntimeClass* GetRuntimeClass() { return RUNTIME_CLASS(CGroup); };
|
|
};
|
|
|
|
#endif // __Group_h__
|