This repository has been archived on 2025-02-27. You can view files and clone it, but cannot push or open issues or pull requests.
CnC_Renegade/Code/Tools/LevelEdit/GroupMgr.h

234 lines
5.4 KiB
C++

/*
** Command & Conquer Renegade(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
///////////////////////////////////////////////////////////////////////////////////////
//
// GroupMgrClass.H
//
// Class declarations for managing different types of level items.
//
#ifndef __GROUPMGR_H
#define __GROUPMGR_H
#include "utils.h"
#include "vector3.h"
#include "aabox.h"
#include "sphere.h"
#include "uniquelist.h"
#include "listtypes.h"
class NodeClass;
class PresetClass;
///////////////////////////////////////////////////////////////
//
// GroupMgrClass
//
// Used to manage all items in a group.
//
class GroupMgrClass
{
public:
///////////////////////////////////////////////////
//
// Public constructors/destructors
//
GroupMgrClass (void)
: m_bHidden (false),
m_bDirty (true) {}
GroupMgrClass (const GroupMgrClass &src)
: m_bHidden (false),
m_bDirty (true) { *this = src; }
virtual ~GroupMgrClass (void) { Free_List (); }
///////////////////////////////////////////////////
//
// Public methods
//
//
// operators
//
NodeClass * operator[] (int index) { return m_GroupList[index]; }
const NodeClass * operator[] (int index) const { return m_GroupList[index]; }
const GroupMgrClass &operator= (const GroupMgrClass &src);
//
// Required enumeration methods
//
virtual int Get_Count (void) const { return m_GroupList.Count (); }
virtual NodeClass * Get_At (int index) const { return m_GroupList[index]; }
//
// Item addition/removal methods
//
virtual void Add_Node (NodeClass *node);
virtual void Import_Nodes (const NODE_LIST &node_list);
virtual void Export_Nodes (NODE_LIST &node_list);
virtual void Remove_Node (NodeClass *node);
virtual void Reset (void);
virtual void Free_List (void);
virtual bool Is_Item_In_Group (NodeClass *node);
//
// Member information methods
//
virtual bool Is_Hidden (void) const { return m_bHidden; }
virtual void Hide (bool bhide);
//
// Type methods
//
virtual bool Is_Managed (void) const { return true; }
//
// Information methods
//
const Vector3 & Get_Center (void) { Update (); return m_LowZCenter; }
const Vector3 & Get_Abs_Center (void) { Update (); return m_AbsCenter; }
const SphereClass & Get_Bounding_Sphere (void) { Update (); return m_BoundingSphere; }
const AABoxClass & Get_Bounding_Box (void) { Update (); return m_BoundingBox; }
const CString & Get_Name (void) const { return m_Name; }
void Set_Name (LPCTSTR name) { m_Name = name; }
//
// Update methods
//
void Set_Dirty (void) { m_bDirty = true; }
//
// Copy methods
//
virtual void Clone_Group (void);
protected:
///////////////////////////////////////////////////
//
// Protected member data
//
virtual void Recalc_Stats (void);
virtual void Update (void) { if (m_bDirty) { Recalc_Stats (); } }
///////////////////////////////////////////////////
//
// Protected member data
//
NODE_LIST m_GroupList;
SphereClass m_BoundingSphere;
AABoxClass m_BoundingBox;
Vector3 m_LowZCenter;
Vector3 m_AbsCenter;
CString m_Name;
bool m_bDirty;
bool m_bHidden;
};
///////////////////////////////////////////////////////////////
//
// SelectionMgrClass
//
// Used to manage all items in the current selection set.
//
class SelectionMgrClass : public GroupMgrClass
{
public:
///////////////////////////////////////////////////
//
// Public constructors/destructors
//
SelectionMgrClass (void) : GroupMgrClass () {}
virtual ~SelectionMgrClass (void) {}
///////////////////////////////////////////////////
//
// Public methods
//
//
// Item addition/removal methods
//
virtual void Add_Node (NodeClass *node);
virtual void Remove_Node (NodeClass *node);
virtual void Reset (void);
//
// Copy methods
//
virtual void Clone_Group (void);
};
///////////////////////////////////////////////////////////////
//
// UserGroupMgrClass
//
// Used to manage all nodes in a user-defined group .
//
class UserGroupMgrClass : public GroupMgrClass
{
public:
///////////////////////////////////////////////////
//
// Public constructors/destructors
//
UserGroupMgrClass (void) : GroupMgrClass () {}
virtual ~UserGroupMgrClass (void);
///////////////////////////////////////////////////
//
// Public methods
//
//
// Item addition/removal methods
//
virtual void Add_Node (NodeClass *node);
virtual void Remove_Node (NodeClass *node);
//
// Type methods
//
virtual bool Is_Managed (void) const { return false; }
protected:
///////////////////////////////////////////////////
//
// Protected methods
//
virtual void Recalc_Stats (void);
virtual void Update_Global_Group_List (void);
};
#endif //__GROUPMGR_H