This commit is contained in:
romkazvo
2023-08-07 19:29:24 +08:00
commit 34d6c5d489
4832 changed files with 1389451 additions and 0 deletions

149
Editor/Objects/Group.h Normal file
View File

@@ -0,0 +1,149 @@
////////////////////////////////////////////////////////////////////////////
//
// 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__