102 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
		
		
			
		
	
	
			102 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
|  | #pragma once
 | ||
|  | #include "PVF_IO.hpp"
 | ||
|  | 
 | ||
|  | static SQInteger Asset_LoadScript(HSQUIRRELVM v) | ||
|  | { | ||
|  |     // 获得路径
 | ||
|  |     const SQChar *Path; | ||
|  |     sq_getstring(v, 2, &Path); | ||
|  | 
 | ||
|  |     PVF_IO *pvf = new PVF_IO(Path); | ||
|  |     pvf->Init(); | ||
|  |     sq_pushuserpointer(v, pvf); | ||
|  |     return 1; | ||
|  | } | ||
|  | 
 | ||
|  | static SQInteger Asset_GetPvfFileSize(HSQUIRRELVM v) | ||
|  | { | ||
|  |     // 获取PVF指针
 | ||
|  |     SQUserPointer Pvfbuf; | ||
|  |     // 获得路径
 | ||
|  |     const SQChar *Path; | ||
|  |     sq_getuserpointer(v, 2, &Pvfbuf); | ||
|  |     sq_getstring(v, 3, &Path); | ||
|  | 
 | ||
|  |     PVF_IO *Pvf = (PVF_IO *)Pvfbuf; | ||
|  |     auto Info = Pvf->GetFileInfo(Path); | ||
|  |     if (Info) | ||
|  |         sq_pushinteger(v, Info->Length); | ||
|  |     else | ||
|  |         sq_pushnull(v); | ||
|  |     return 1; | ||
|  | } | ||
|  | 
 | ||
|  | static SQInteger Asset_GetPvfFile(HSQUIRRELVM v) | ||
|  | { | ||
|  |     // 获取PVF指针
 | ||
|  |     SQUserPointer Pvfbuf, blobp; | ||
|  |     // 获得路径
 | ||
|  |     const SQChar *Path; | ||
|  |     sq_getuserpointer(v, 2, &Pvfbuf); | ||
|  |     sq_getstring(v, 3, &Path); | ||
|  |     sqstd_getblob(v, 4, &blobp); | ||
|  | 
 | ||
|  |     PVF_IO *Pvf = (PVF_IO *)Pvfbuf; | ||
|  |     Pvf->LoadFileToBlob(v, Path, blobp); | ||
|  |     return 0; | ||
|  | } | ||
|  | 
 | ||
|  | static SQInteger Asset_GetPvfBinString(HSQUIRRELVM v) | ||
|  | { | ||
|  |     // 获取PVF指针
 | ||
|  |     SQUserPointer Pvfbuf; | ||
|  |     // 获得Key
 | ||
|  |     SQInteger Key; | ||
|  |     sq_getuserpointer(v, 2, &Pvfbuf); | ||
|  |     sq_getinteger(v, 3, &Key); | ||
|  | 
 | ||
|  |     PVF_IO *Pvf = (PVF_IO *)Pvfbuf; | ||
|  |     std::string value = Pvf->GetBinString(Key); | ||
|  | 
 | ||
|  |     sq_pushstring(v, value.c_str(), value.length()); | ||
|  |     return 1; | ||
|  | } | ||
|  | 
 | ||
|  | static SQInteger Asset_GetPvfLoadString(HSQUIRRELVM v) | ||
|  | { | ||
|  |     // 获取PVF指针
 | ||
|  |     SQUserPointer Pvfbuf; | ||
|  |     // 获取类型
 | ||
|  |     const SQChar *Type; | ||
|  |     // 获得Key
 | ||
|  |     const SQChar *Key; | ||
|  |     sq_getuserpointer(v, 2, &Pvfbuf); | ||
|  |     sq_getstring(v, 3, &Type); | ||
|  |     sq_getstring(v, 4, &Key); | ||
|  | 
 | ||
|  |     PVF_IO *Pvf = (PVF_IO *)Pvfbuf; | ||
|  | 
 | ||
|  |     std::string value = Pvf->GetLoadString(Type, Key); | ||
|  |     value = value.c_str(); | ||
|  | 
 | ||
|  |     sq_pushstring(v, value.c_str(), value.length()); | ||
|  |     return 1; | ||
|  | } | ||
|  | 
 | ||
|  | void RegisterAssetNutApi(const SQChar *funcName, SQFUNCTION funcAddr, HSQUIRRELVM v) | ||
|  | { | ||
|  |     sq_pushroottable(v); | ||
|  |     sq_pushstring(v, funcName, -1); | ||
|  |     sq_newclosure(v, funcAddr, 0); | ||
|  |     sq_newslot(v, -3, false); | ||
|  |     sq_poptop(v); | ||
|  | } | ||
|  | 
 | ||
|  | void RegisterAsset(HSQUIRRELVM v) | ||
|  | { | ||
|  |     RegisterAssetNutApi(_SC("Asset_LoadScript"), Asset_LoadScript, v); | ||
|  |     RegisterAssetNutApi(_SC("Asset_GetPvfFileSize"), Asset_GetPvfFileSize, v); | ||
|  |     RegisterAssetNutApi(_SC("Asset_GetPvfFile"), Asset_GetPvfFile, v); | ||
|  |     RegisterAssetNutApi(_SC("Asset_GetPvfBinString"), Asset_GetPvfBinString, v); | ||
|  |     RegisterAssetNutApi(_SC("Asset_GetPvfLoadString"), Asset_GetPvfLoadString, v); | ||
|  | } |