historical/toontown-classic.git/panda/include/maxOptionsDialog.h
2024-01-16 11:20:27 -06:00

112 lines
3.1 KiB
C++

/*
maxEggExpOptions.h
Created by Phillip Saltzman, 2/15/05
Carnegie Mellon University, Entetainment Technology Center
This file contains a class that allows users to specify
export options, and then execute the export
*/
#ifndef __maxEggExpOptions__H
#define __maxEggExpOptions__H
#include "pathReplace.h"
#pragma conform(forScope, off)
/* Externed Globals */
extern HINSTANCE hInstance;
// Saveload chunk definitions
#define CHUNK_OVERWRITE_FLAG 0x1000
#define CHUNK_PVIEW_FLAG 0x1001
#define CHUNK_LOG_OUTPUT 0x1002
#define CHUNK_EGG_EXP_OPTIONS 0x1100
#define CHUNK_ANIM_TYPE 0x1101
#define CHUNK_EGG_CHECKED 0x1102
#define CHUNK_DBL_SIDED 0x1103
#define CHUNK_SF 0x1104
#define CHUNK_EF 0x1105
#define CHUNK_FILENAME 0x1106
#define CHUNK_SHORTNAME 0x1107
#define CHUNK_EXPORT_FULL 0x1108
#define CHUNK_ALL_FRAMES 0x1109
#define CHUNK_NODE_LIST 0x1200
#define CHUNK_NODE_HANDLE 0x1201
// #define CHUNK_ADD_COLLISION 0x1202 #define CHUNK_CS_TYPE 0x1203
// #define CHUNK_CF_TYPE 0x1204
// Global functions
void ChunkSave(ISave *isave, int chunkid, int value);
void ChunkSave(ISave *isave, int chunkid, bool value);
void ChunkSave(ISave *isave, int chunkid, char *value);
TCHAR *ChunkLoadString(ILoad *iload, TCHAR *buffer, int maxLength);
int ChunkLoadInt(ILoad *iload);
bool ChunkLoadBool(ILoad *iload);
void SetICustEdit(HWND wnd, int nIDDlgItem, TCHAR *text);
INT_PTR CALLBACK MaxOptionsDialogProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam );
struct MaxEggOptions
{
MaxEggOptions();
enum Anim_Type {
AT_none,
AT_model,
AT_chan,
AT_pose,
AT_strobe,
AT_both
};
IObjParam *_max_interface;
Anim_Type _anim_type;
int _start_frame;
int _end_frame;
bool _double_sided;
bool _successful;
bool _export_whole_scene;
bool _export_all_frames;
TCHAR _file_name[2048];
TCHAR _short_name[256];
PT(PathReplace) _path_replace;
std::vector<ULONG> _node_list;
};
class MaxOptionsDialog : public MaxEggOptions
{
friend class MaxEggPlugin;
public:
int _min_frame, _max_frame;
bool _checked;
bool _choosing_nodes;
MaxEggOptions::Anim_Type _prev_type;
MaxOptionsDialog();
~MaxOptionsDialog();
// All these List functions should probably take what list they need to
// operate on rather than just operating on a global list
void SetMaxInterface(IObjParam *iface) { _max_interface = iface; }
void UpdateUI(HWND hWnd);
bool UpdateFromUI(HWND hWnd);
void RefreshNodeList(HWND hWnd);
void SetAnimRange();
bool FindNode(ULONG INodeHandle); //returns true if the node is already in the list
void AddNode(ULONG INodeHandle);
void RemoveNode(int i);
void RemoveNodeByHandle(ULONG INodeHandle);
void ClearNodeList(HWND hWnd);
void CullBadNodes();
ULONG GetNode(int i) { return (i >= 0 && i < _node_list.size()) ? _node_list[i] : ULONG_MAX; }
IOResult Load(ILoad *iload);
IOResult Save(ISave *isave);
};
#endif // __MaxEggExpOptions__H