Files
DNF_DEV/source/Asset/ScriptData.cpp
2025-10-06 04:18:49 +08:00

106 lines
2.2 KiB
C++

#include "ScriptData.h"
#include "Tool/Tool_String.h"
#include "Asset/Asset_Script.h"
ScriptData::ScriptData()
{
}
ScriptData::~ScriptData()
{
}
void ScriptData::Init(std::vector<BYTE> Data, std::string FilePath)
{
std::string ASA = "";
for (size_t i = 0; i < Data.size(); i++)
{
ASA += std::to_string((int)Data[i]);
ASA += ",";
}
if (Data.size() < 7)
return;
IO = std::make_shared<Blob>(Data);
filepath = FilePath;
filetype = Tool_toLowerCase(FilePath.substr(0, FilePath.find_first_of("/")));
filesize = Data.size();
}
std::string ScriptData::Get()
{
if (!IO)
return "";
if (_CurI < filesize && filesize - _CurI >= 5)
{
std::string Ret = UnpackData();
_CurI += 5;
return Ret;
}
return "_nop_";
}
void ScriptData::Back()
{
if (_CurI >= 5)
_CurI -= 5;
}
bool ScriptData::IsEnd()
{
return (_CurI >= filesize || filesize - _CurI < 5);
}
std::string ScriptData::UnpackData()
{
IO->setOffset(_CurI);
int currentByte = (int)(IO->getByte());
int after = IO->getInt();
switch (currentByte)
{
case 9:
{
BYTE NewcurrentByte = IO->getByte(); // 内容指示位
(void)NewcurrentByte;
int Newafter = IO->getInt();
std::string Buf = Asset_Script::GetInstance().GetBinString(Newafter);
if (Buf.empty())
Buf = "";
else
Buf = Asset_Script::GetInstance().GetLoadString(filetype, Buf);
return Buf;
}
case 10:
{
std::string Buf = Asset_Script::GetInstance().GetBinString(after);
if (Buf.empty())
Buf = "";
else
Buf = Asset_Script::GetInstance().GetLoadString(filetype, Buf);
return Buf;
}
case 2:
{
IO->setOffset(IO->getOffset() - 4);
int ret = IO->getInt();
return std::to_string(ret);
}
case 4:
{
float Bbuf;
std::memcpy(&Bbuf, &after, sizeof(float));
return std::to_string(Bbuf);
}
case 6:
case 8:
case 7:
case 5:
{
return Asset_Script::GetInstance().GetBinString(after);
}
default:
return "";
}
}