/* ** Command & Conquer Generals(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 . */ /*********************************************************************************************** *** Confidential - Westwood Studios *** *********************************************************************************************** * * * Project Name : Commando / G 3D engine * * * * File Name : MeshDeformData.h * * * * Programmer : Patrick Smith * * * * Start Date : 04/26/99 * * * * Last Update : * * *---------------------------------------------------------------------------------------------* * Functions: * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ #ifndef __MESH_DEFORM_DATA_H #define __MESH_DEFORM_DATA_H #include #include "Vector.H" #include "MeshDeformSet.H" /////////////////////////////////////////////////////////////////////////// // // Typedefs // /////////////////////////////////////////////////////////////////////////// typedef DynamicVectorClass SETS_LIST; /////////////////////////////////////////////////////////////////////////// // // MeshDeformModData // /////////////////////////////////////////////////////////////////////////// class MeshDeformModData : public LocalModData { public: ////////////////////////////////////////////////////////////////////// // Public constructors/destructors ////////////////////////////////////////////////////////////////////// MeshDeformModData (void) : m_CurrentSet (0) { } virtual ~MeshDeformModData (void); ////////////////////////////////////////////////////////////////////// // Public methods ////////////////////////////////////////////////////////////////////// virtual LocalModData * Clone (void) { return new MeshDeformModData; } void Record_Mesh_State (TriObject &tri_obj, float state, bool update_all); // Inline accessors Mesh * Peek_Mesh (void) const { return m_SetsList[m_CurrentSet]->Peek_Mesh (); } const Point3 * Peek_Orig_Vertex_Array (void) const { return m_SetsList[m_CurrentSet]->Peek_Orig_Vertex_Array (); } Point3 * Peek_Vertex_OPStart_Array (void) const { return m_SetsList[m_CurrentSet]->Peek_Vertex_OPStart_Array (); } VertColor * Peek_Vertex_Colors (void) const { return m_SetsList[m_CurrentSet]->Peek_Vertex_Colors (); } // Auto apply bool Is_Auto_Apply (void) const { return m_SetsList[m_CurrentSet]->Does_Set_Auto_Apply (); } void Auto_Apply (bool auto_apply = true) { m_SetsList[m_CurrentSet]->Auto_Apply (auto_apply); } // Data modifiers void Update_Current_Data (void) { m_SetsList[m_CurrentSet]->Update_Current_Data (); } void Set_Vertex_Position (int index, const Point3 &value) { m_SetsList[m_CurrentSet]->Set_Vertex_Position (index, value); } void Set_Vertex_Color (int index, int color_index, const VertColor &value) { m_SetsList[m_CurrentSet]->Set_Vertex_Color (index, color_index, value); } // Set managment void Set_Max_Deform_Sets (int max); void Set_Current_Set (int set_index) { m_CurrentSet = set_index; } int Get_Current_Set (void) const { return m_CurrentSet; } void Select_Set (int set_index) { m_SetsList[set_index]->Select_Members (); } void Update_Set (int set_index, DEFORM_CHANNELS flags) { m_SetsList[set_index]->Update_Members (flags); } void Restore_Set (int set_index = -1); MeshDeformSetClass & Peek_Set (int index) { return *(m_SetsList[index]); } int Get_Set_Count (void) const { return m_SetsList.Count (); } // Persistent storage IOResult Save (ISave *save_obj); IOResult Load (ILoad *load_obj); protected: ////////////////////////////////////////////////////////////////////// // Protected methods ////////////////////////////////////////////////////////////////////// void Resize_Vertex_Array (int count, int color_count); void Copy_Vertex_Array (Mesh &mesh); void Free_Sets_List (void); void Util_Restore_Set (int set_index); private: ////////////////////////////////////////////////////////////////////// // Private member data ////////////////////////////////////////////////////////////////////// // Set managment int m_CurrentSet; SETS_LIST m_SetsList; }; #endif //__MESH_DEFORM_DATA_H