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

📄 fileloader.cpp

📁 骨骼动画....把魔兽模型解出的代码..
💻 CPP
字号:
//+-----------------------------------------------------------------------------
//| Included files
//+-----------------------------------------------------------------------------
#include "FileLoader.h"


//+-----------------------------------------------------------------------------
//| Global objects
//+-----------------------------------------------------------------------------
FILE_LOADER FileLoader;


//+-----------------------------------------------------------------------------
//| Constructor
//+-----------------------------------------------------------------------------
FILE_LOADER::FILE_LOADER()
{
	//Empty
}


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


//+-----------------------------------------------------------------------------
//| Loads a file
//+-----------------------------------------------------------------------------
BOOL FILE_LOADER::Load(CONST std::string& FileName, BUFFER& Buffer)
{
	if(LoadFromFile(FileName, Buffer)) return TRUE;
	if(LoadFromMpq(Mpq, FileName, Buffer)) return TRUE;
	if(LoadFromMpq(MpqWar3Patch, FileName, Buffer)) return TRUE;
	if(LoadFromMpq(MpqWar3xLocal, FileName, Buffer)) return TRUE;
	if(LoadFromMpq(MpqWar3x, FileName, Buffer)) return TRUE;
	if(LoadFromMpq(MpqWar3, FileName, Buffer)) return TRUE;

	Error.SetMessage("Unable to load \"" + FileName + "\", file does not exist!");
	return FALSE;
}


//+-----------------------------------------------------------------------------
//| Loads a file from a physical file
//+-----------------------------------------------------------------------------
BOOL FILE_LOADER::LoadFromFile(CONST std::string& FileName, BUFFER& Buffer)
{
	INT Size;
	std::ifstream File;

	File.open(FileName.c_str(), std::ios::in | std::ios::binary);
	if(File.fail()) return FALSE;

	File.seekg(0, std::ios::end);
	Size = File.tellg();
	File.seekg(0, std::ios::beg);

	if(!Buffer.Resize(Size)) return FALSE;

	File.read(Buffer.GetData(), Buffer.GetSize());

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Loads a file from an mpq archive
//+-----------------------------------------------------------------------------
BOOL FILE_LOADER::LoadFromMpq(MPQ& Mpq, CONST std::string& FileName, BUFFER& Buffer)
{
	if(!Mpq.LoadFile(FileName, Buffer))
	{
		Error.ClearMessage();
		return FALSE;
	}

	return TRUE;
}


//+-----------------------------------------------------------------------------
//| Saves a file to a physical file
//+-----------------------------------------------------------------------------
BOOL FILE_LOADER::SaveToFile(CONST std::string& FileName, BUFFER& Buffer)
{
	std::ofstream File;

	File.open(FileName.c_str(), std::ios::out | std::ios::binary);
	if(File.fail())
	{
		Error.SetMessage("Unable to save \"" + FileName + "\"!");
		return FALSE;
	}

	File.write(Buffer.GetData(), Buffer.GetSize());

	return TRUE;
}

⌨️ 快捷键说明

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