/*
** 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 .
*/
/***********************************************************************************************
*** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
***********************************************************************************************
* *
* Project Name : LevelEdit *
* *
* $Archive:: /Commando/Code/Tools/LevelEdit/Preset.h $*
* *
* Author:: Patrick Smith *
* *
* $Modtime:: 8/26/01 9:53a $*
* *
* $Revision:: 25 $*
* *
*---------------------------------------------------------------------------------------------*
* Functions: *
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
#if defined(_MSC_VER)
#pragma once
#endif
#ifndef __PRESET_H
#define __PRESET_H
#include "refcount.h"
#include "persist.h"
#include "vector.h"
#include "listtypes.h"
#include "definition.h"
#include "utils.h"
#include "transition.h"
///////////////////////////////////////////////////////////////////////
// Forward declarations
///////////////////////////////////////////////////////////////////////
class DefinitionClass;
class NodeClass;
class ModelDefParameterClass;
///////////////////////////////////////////////////////////////////////
//
// PresetClass
//
///////////////////////////////////////////////////////////////////////
class PresetClass : public PersistClass
{
public:
////////////////////////////////////////////////////////////////////
// Public constructors/destructors
////////////////////////////////////////////////////////////////////
PresetClass (void);
virtual ~PresetClass (void);
////////////////////////////////////////////////////////////////////
// Public methods
////////////////////////////////////////////////////////////////////
//
// From PersistClass
//
const PersistFactoryClass & Get_Factory (void) const;
virtual bool Save (ChunkSaveClass &csave);
virtual bool Load (ChunkLoadClass &cload);
virtual void On_Post_Load (void);
virtual bool Show_Properties (bool read_only = false);
virtual bool Delete (void) { return true; }
virtual void Copy_Properties (const PresetClass &preset);
virtual NodeClass * Create (void);
//
// Asset management
//
void Load_All_Assets (void);
void Add_Files_To_VSS (void);
//
// Dependency management
//
void Get_All_Dependencies (STRING_LIST &list) const;
void Get_Implicit_Dependencies (STRING_LIST &list) const;
void Get_Manual_Dependencies (STRING_LIST &list) const;
void Set_Manual_Dependencies (STRING_LIST &list);
//
// Inline accessors
//
DefinitionClass * Get_Definition (void) const { return m_Definition; }
void Set_Definition (DefinitionClass *definition);
LPCTSTR Get_Comments (void) const;
void Set_Comments (LPCTSTR comments);
bool Get_IsTemporary (void) const;
void Set_IsTemporary (bool is_temp);
PresetClass * Get_Parent (void) const { return m_Parent; }
void Set_Parent (PresetClass *parent);
bool Is_A_Parent (PresetClass *preset);
bool Is_A_Parent (LPCTSTR parent_name);
//
// Child access
//
int Get_Child_Preset_Count (void) { return m_ChildIDList.Count (); }
int Get_Child_Preset_ID (int index) { return m_ChildIDList[index]; }
PresetClass * Get_Child_Preset (int index);
void Add_Child_Preset (int child_id);
void Remove_Child_Preset (int child_id);
//
// Definition access
//
void Collect_Definitions (DEFINITION_LIST &list);
static void Add_Definition_Dependencies (DefinitionClass *definition, STRING_LIST &list);
//
// Display methods
//
int Get_Icon_Index (void) const;
//
// Pass-thrus to the definition object
//
uint32 Get_ID (void) const;
void Set_ID (uint32 id);
LPCTSTR Get_Name (void) const;
void Set_Name (LPCTSTR name);
uint32 Get_Class_ID (void) const;
//
// Misc helper methods
//
bool Is_Valid_Sound_Preset (void);
bool Is_Soldier_Preset (void);
//
// Validity checks
//
bool Is_Valid (void) const;
//
// Node list access
//
void Build_Node_List (NodeClass *parent_node);
void Create_Linked_Nodes (NodeClass *parent_node);
NODE_LIST & Get_Node_List (void) { return m_NodeList; }
void Free_Node_List (void);
protected:
////////////////////////////////////////////////////////////////////
// Protected methods
////////////////////////////////////////////////////////////////////
virtual bool Save_Variables (ChunkSaveClass &csave);
virtual bool Load_Variables (ChunkLoadClass &cload);
TRANSITION_DATA_LIST * Get_Transition_List (void) const;
void Build_Zone_List (DefinitionClass *definition, ZONE_PARAM_LIST &zone_list) const;
ModelDefParameterClass * Get_Phys_Def_Param (void);
ScriptListParameterClass * Get_Script_List_Param (void);
////////////////////////////////////////////////////////////////////
// Protected member data
////////////////////////////////////////////////////////////////////
PresetClass * m_NextPreset;
PresetClass * m_PrevPreset;
private:
////////////////////////////////////////////////////////////////////
// Private member data
////////////////////////////////////////////////////////////////////
PresetClass * m_Parent;
DefinitionClass * m_Definition;
STRING_LIST m_ManualDependencies;
StringClass m_Comments;
bool m_IsTemporary;
bool m_IsValid;
uint32 m_ParentID;
mutable uint32 m_DefinitionID;
NODE_LIST m_NodeList;
DynamicVectorClass m_ChildIDList;
////////////////////////////////////////////////////////////////////
// Friends
////////////////////////////////////////////////////////////////////
friend class PresetMgrClass;
};
//INLINE_ACCESSOR_CONST (DefinitionClass *, PresetClass, Definition);
INLINE_ACCESSOR_CONST (LPCTSTR, PresetClass, Comments);
INLINE_ACCESSOR_CONST (bool, PresetClass, IsTemporary);
//INLINE_ACCESSOR_CONST (PresetClass *, PresetClass, Parent);
////////////////////////////////////////////////////////////////////
// Get_ID
////////////////////////////////////////////////////////////////////
inline uint32
PresetClass::Get_ID (void) const
{
if (m_Definition != NULL) {
m_DefinitionID = m_Definition->Get_ID ();
}
return m_DefinitionID;
}
////////////////////////////////////////////////////////////////////
// Set_ID
////////////////////////////////////////////////////////////////////
inline void
PresetClass::Set_ID (uint32 id)
{
if (m_Definition != NULL) {
m_Definition->Set_ID (id);
}
m_DefinitionID = id;
return ;
}
////////////////////////////////////////////////////////////////////
// Get_Name
////////////////////////////////////////////////////////////////////
inline LPCTSTR
PresetClass::Get_Name (void) const
{
LPCTSTR name = NULL;
if (m_Definition != NULL) {
name = m_Definition->Get_Name ();
}
return name;
}
////////////////////////////////////////////////////////////////////
// Set_Name
////////////////////////////////////////////////////////////////////
inline void
PresetClass::Set_Name (LPCTSTR name)
{
if (m_Definition != NULL) {
m_Definition->Set_Name (name);
}
return ;
}
////////////////////////////////////////////////////////////////////
// Is_Valid
////////////////////////////////////////////////////////////////////
inline bool
PresetClass::Is_Valid (void) const
{
return m_IsValid;
}
////////////////////////////////////////////////////////////////////
// Get_Manual_Dependencies
////////////////////////////////////////////////////////////////////
inline void
PresetClass::Get_Manual_Dependencies (STRING_LIST &list) const
{
list = m_ManualDependencies;
return ;
}
////////////////////////////////////////////////////////////////////
// Set_Manual_Dependencies
////////////////////////////////////////////////////////////////////
inline void
PresetClass::Set_Manual_Dependencies (STRING_LIST &list)
{
m_ManualDependencies = list;
return ;
}
////////////////////////////////////////////////////////////////////
// Get_Class_ID
////////////////////////////////////////////////////////////////////
inline uint32
PresetClass::Get_Class_ID (void) const
{
uint32 class_id = 0;
if (m_Definition != NULL) {
class_id = m_Definition->Get_Class_ID ();
}
return class_id;
}
#endif //__PRESET_H