| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- /*
- ** 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/>.
- */
- /* $Header: /Commando/Code/Tools/max2w3d/hiersave.h 29 10/26/00 5:59p Greg_h $ */
- /***********************************************************************************************
- *** Confidential - Westwood Studios ***
- ***********************************************************************************************
- * *
- * Project Name : Commando / G 3D Engine *
- * *
- * $Archive:: /Commando/Code/Tools/max2w3d/hiersave.h $*
- * *
- * $Author:: Greg_h $*
- * *
- * $Modtime:: 10/26/00 5:09p $*
- * *
- * $Revision:: 29 $*
- * *
- *---------------------------------------------------------------------------------------------*
- * Functions: *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
- #ifndef HIERSAVE_H
- #define HIERSAVE_H
- #include "always.h"
- #include <Max.h>
- #include <stdio.h>
- #ifndef W3D_FILE_H
- #include "w3d_file.h"
- #endif
- #ifndef PROGRESS_H
- #include "progress.h"
- #endif
- #ifndef CHUNKIO_H
- #include "chunkio.h"
- #endif
- #ifndef NODELIST_H
- #include "nodelist.h"
- #endif
- #ifndef VECTOR_H
- #include "vector.h"
- #endif
- struct HierarchyNodeStruct
- {
- INode * MaxNode;
- W3dPivotStruct Pivot;
- W3dPivotFixupStruct Fixup;
- bool operator == (const HierarchyNodeStruct & that) { return false; }
- bool operator != (const HierarchyNodeStruct & that) { return !(*this == that); }
- };
- class HierarchySaveClass
- {
- public:
- enum {
- MATRIX_FIXUP_NONE = 0,
- MATRIX_FIXUP_TRANS = 1,
- MATRIX_FIXUP_TRANS_ROT = 2
- };
- HierarchySaveClass();
-
- HierarchySaveClass(
- INode * root,
- TimeValue time,
- Progress_Meter_Class & treemeter,
- char * hname,
- int fixup_type = MATRIX_FIXUP_NONE,
- HierarchySaveClass * fixuptree = NULL);
- HierarchySaveClass(
- INodeListClass * rootlist,
- TimeValue time,
- Progress_Meter_Class & treemeter,
- char * hname,
- int fixup_type = MATRIX_FIXUP_NONE,
- HierarchySaveClass * fixuptree = NULL,
- const Matrix3 & origin_offset = Matrix3(1));
- ~HierarchySaveClass();
- bool Save(ChunkSaveClass & csave);
- bool Load(ChunkLoadClass & cload);
- int Num_Nodes(void) const { return CurNode; }
- const char * Get_Name(void) const;
- const char * Get_Node_Name(int node) const;
-
- // get ahold of the max inode
- INode * Get_Node(int node) const;
- // Returns the node's transform from object to world space
- Matrix3 Get_Node_Transform(int node) const;
- // Returns the node's transform relative to its parent
- Matrix3 Get_Node_Relative_Transform(int node) const { return get_relative_transform(node); }
- // Get the fixup matrix for the given pivot (always applied to the *relative* transform)
- Matrix3 Get_Fixup_Transform(int node) const;
- // Finds a node by name
- int Find_Named_Node(const char * name) const;
- // Get the coordinate system to use when exporting the given INode. Note that this
- // function takes into account the multiple skeletons present when exporting LOD models.
- void Get_Export_Coordinate_System(INode * node,int * set_bone_index,INode ** set_bone_node,Matrix3 * set_transform);
- // Turning on terrian mode will cause all HTrees to force all normal meshes to be
- // attached to the RootTransform regardless of the status of their 'Export_Transform' flag
- static void Enable_Terrain_Optimization(bool onoff) { TerrainModeEnabled = onoff; }
- private:
- enum { MAX_PIVOTS = 4096, DEFAULT_NODE_ARRAY_SIZE = 512, NODE_ARRAY_GROWTH_SIZE = 32 };
- TimeValue CurTime;
- W3dHierarchyStruct HierarchyHeader;
- DynamicVectorClass<HierarchyNodeStruct> Node;
- int CurNode;
- int FixupType;
- Matrix3 OriginOffsetTransform; // this transform makes a node relative to the origin
- HierarchySaveClass * FixupTree;
- static bool TerrainModeEnabled;
- void add_tree(INode * node,int pidx);
- int add_node(INode * node,int pidx);
- bool save_header(ChunkSaveClass & csave);
- bool save_pivots(ChunkSaveClass & csave);
- bool save_fixups(ChunkSaveClass & csave);
- bool load_header(ChunkLoadClass & cload);
- bool load_pivots(ChunkLoadClass & cload);
- bool load_fixups(ChunkLoadClass & cload);
- Matrix3 get_relative_transform(int nodeidx) const;
- Matrix3 fixup_matrix(const Matrix3 & src) const;
- void Free(void);
- };
- #endif /*HIERSAVE_H*/
|