⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 geosetmanagerwindow.cpp

📁 骨骼动画....把魔兽模型解出的代码..
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//+-----------------------------------------------------------------------------
//| Included files
//+-----------------------------------------------------------------------------
#include "GeosetManagerWindow.h"


//+-----------------------------------------------------------------------------
//| Global objects
//+-----------------------------------------------------------------------------
GEOSET_MANAGER_WINDOW GeosetManagerWindow;


//+-----------------------------------------------------------------------------
//| Constructor
//+-----------------------------------------------------------------------------
GEOSET_MANAGER_WINDOW::GEOSET_MANAGER_WINDOW()
{
	ManagerMenuId1 = GeosetMenu;
	ManagerMenuId2 = GeosetMenu2;

	Title = "Geoset Manager";
}


//+-----------------------------------------------------------------------------
//| Destructor
//+-----------------------------------------------------------------------------
GEOSET_MANAGER_WINDOW::~GEOSET_MANAGER_WINDOW()
{
	//Empty
}


//+-----------------------------------------------------------------------------
//| Creates a new window
//+-----------------------------------------------------------------------------
BOOL GEOSET_MANAGER_WINDOW::Create()
{
	if(!MANAGER_WINDOW::Create()) return FALSE;

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Destroys the window
//+-----------------------------------------------------------------------------
VOID GEOSET_MANAGER_WINDOW::Destroy()
{
	MANAGER_WINDOW::Destroy();
}


//+-----------------------------------------------------------------------------
//| Handles the window messages
//+-----------------------------------------------------------------------------
LRESULT GEOSET_MANAGER_WINDOW::MessageHandler(UINT Message, WPARAM W, LPARAM L)
{
	return MANAGER_WINDOW::MessageHandler(Message, W, L);
}


//+-----------------------------------------------------------------------------
//| Handles the window menu messages
//+-----------------------------------------------------------------------------
LRESULT GEOSET_MANAGER_WINDOW::MenuHandler(WORD MenuItem)
{
	switch(MenuItem)
	{
		case GeosetFileCreate:
		case GeosetFileCreate2:
		{
			if(!CreateNew())
			{
				Error.DisplayMessage(Window);
				Error.ClearMessage();
				return 0;
			}

			return 0;
		}

		case GeosetFileRemove:
		case GeosetFileRemove2:
		{
			if(!Remove(Window))
			{
				Error.DisplayMessage(Window);
				Error.ClearMessage();
				return 0;
			}

			return 0;
		}

		case GeosetFileImport:
		case GeosetFileImport2:
		{
			if(!Import())
			{
				Error.DisplayMessage(Window);
				Error.ClearMessage();
				return 0;
			}

			return 0;
		}

		case GeosetFileExport:
		case GeosetFileExport2:
		{
			if(!Export())
			{
				Error.DisplayMessage(Window);
				Error.ClearMessage();
				return 0;
			}

			return 0;
		}

		case GeosetFileEdit:
		case GeosetFileEdit2:
		{
			if(!Edit())
			{
				Error.DisplayMessage(Window);
				Error.ClearMessage();
				return 0;
			}

			return 0;
		}
	}

	return MANAGER_WINDOW::MenuHandler(MenuItem);
}


//+-----------------------------------------------------------------------------
//| Handles the window control messages
//+-----------------------------------------------------------------------------
LRESULT GEOSET_MANAGER_WINDOW::ControlHandler(HWND Control, WORD Code)
{
	if(Control == ListBox.GetWindow())
	{
		if(Code == LBN_DBLCLK)
		{
			SendMessage(WM_COMMAND, GeosetFileEdit, 0);
			return 0;
		}
	}

	return MANAGER_WINDOW::ControlHandler(Control, Code);
}


//+-----------------------------------------------------------------------------
//| Handles the window notify messages
//+-----------------------------------------------------------------------------
LRESULT GEOSET_MANAGER_WINDOW::NotifyHandler(HWND Control, UINT Code, NMHDR* Header)
{
	return MANAGER_WINDOW::NotifyHandler(Control, Code, Header);
}


//+-----------------------------------------------------------------------------
//| Selects a geoset
//+-----------------------------------------------------------------------------
VOID GEOSET_MANAGER_WINDOW::SelectGeoset(MODEL_GEOSET* Geoset)
{
	INT Size;
	INT Index;

	Size = ListBox.GetNrOfItems();
	Index = 0;

	while(Index < Size)
	{
		if(reinterpret_cast<MODEL_GEOSET*>(ListBox.GetData(Index)) == Geoset)
		{
			ListBox.SetCurrentSelection(Index);
			return;
		}

		Index++;
	}

	ListBox.SetCurrentSelection(-1);
}


//+-----------------------------------------------------------------------------
//| Creates a new geoset
//+-----------------------------------------------------------------------------
BOOL GEOSET_MANAGER_WINDOW::CreateNew()
{
	MODEL_GEOSET_DATA Data;
	MODEL_GEOSET* Geoset;
	MODEL_MATERIAL* Material;

	Material = NULL;

	Geoset = new MODEL_GEOSET();
	if(Geoset == NULL)
	{
		Error.SetMessage("Unable to create a new geoset, memory allocation failed!");
		return FALSE;
	}

	if(!GeosetDialog.Display(Window, Geoset, Data, Material))
	{
		delete Geoset;
		return TRUE;
	}

	Geoset->Data() = Data;
	if(Material != NULL)
	{
		Geoset->MaterialNode.Attach(Material->GeosetNodes);
	}
	else
	{
		Geoset->MaterialNode.Detach();
	}

	if(!Model.AddGeoset(Geoset))
	{
		delete Geoset;
		return FALSE;
	}

	MainWindow.MakeModelUnsaved();

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Removes an existing geoset
//+-----------------------------------------------------------------------------
BOOL GEOSET_MANAGER_WINDOW::Remove(HWND Window)
{
	INT Index;
	MODEL_GEOSET* Geoset;

	Index = ListBox.GetCurrentSelection();
	if(Index == INVALID_INDEX) return TRUE;

	Geoset = reinterpret_cast<MODEL_GEOSET*>(ListBox.GetData(Index));
	if(Geoset == NULL) return TRUE;

	if(!Model.RemoveGeoset(Geoset, Window)) return FALSE;

	MainWindow.MakeModelUnsaved();

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Imports an existing geoset from a geo file
//+-----------------------------------------------------------------------------
BOOL GEOSET_MANAGER_WINDOW::Import()
{
	MODEL_BASE* Node;
	MODEL_GEOSET* Geoset;
	std::string FileName;
	WINDOW_FILE_DIALOG FileDialog;

	FileDialog.SetTitle("Import Geoset");
	FileDialog.SetFilter(FILTER_GEOSET);
	if(!FileDialog.OpenFile(Window, FileName)) return TRUE;

	Node = NULL;

	if(!ImportGeosetDialog.Display(Window, Node)) return TRUE;

	Geoset = new MODEL_GEOSET();
	if(Geoset == NULL)
	{
		Error.SetMessage("Unable to create a new geoset, memory allocation failed!");
		return FALSE;
	}

	if(!ImportGeoset(*Geoset, FileName, Node))
	{
		delete Geoset;
		return FALSE;
	}

	if(!Model.AddGeoset(Geoset))
	{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -