2
0
mirror of https://github.com/Laupetin/OpenAssetTools.git synced 2026-01-19 23:11:50 +00:00

ZoneWriting stuff

This commit is contained in:
Jan
2021-03-16 12:37:15 +01:00
parent 9d26c9c927
commit 4feea62280
15 changed files with 625 additions and 38 deletions

View File

@@ -0,0 +1,44 @@
#include "AssetWriter.h"
#include <cassert>
#include <algorithm>
#include <iterator>
AssetWriter::AssetWriter(XAssetInfoGeneric* asset, Zone* zone, IZoneOutputStream* stream)
: ContentWriterBase(zone, stream),
m_asset(asset),
varScriptString(nullptr)
{
}
scr_string_t AssetWriter::UseScriptString(const scr_string_t scrString) const
{
if (m_asset->m_zone == m_zone)
return scrString;
const auto strValue = m_asset->m_zone->m_script_strings[scrString];
const auto scrStringEntry = std::find(m_zone->m_script_strings.begin(), m_zone->m_script_strings.end(), strValue);
assert(scrStringEntry != m_zone->m_script_strings.end());
if (scrStringEntry != m_zone->m_script_strings.end())
{
return static_cast<scr_string_t>(std::distance(scrStringEntry, m_zone->m_script_strings.begin()));
}
return 0;
}
void AssetWriter::WriteScriptStringArray(const bool atStreamStart, const size_t count)
{
assert(varScriptString != nullptr);
if (atStreamStart)
varScriptString = m_stream->Write<scr_string_t>(varScriptString, count);
auto* ptr = varScriptString;
for (size_t index = 0; index < count; index++)
{
*ptr = UseScriptString(*ptr);
ptr++;
}
}