|
|
@@ -42,10 +42,13 @@ PackageCompiler::PackageCompiler()
|
|
|
: m_has_texture(false)
|
|
|
, m_has_lua(false)
|
|
|
, m_has_sound(false)
|
|
|
+ , m_has_mesh(false)
|
|
|
+ , m_has_sprite(false)
|
|
|
, m_texture(default_allocator())
|
|
|
, m_script(default_allocator())
|
|
|
, m_sound(default_allocator())
|
|
|
, m_mesh(default_allocator())
|
|
|
+ , m_sprite(default_allocator())
|
|
|
{
|
|
|
}
|
|
|
|
|
|
@@ -162,11 +165,37 @@ size_t PackageCompiler::compile_impl(Filesystem& fs, const char* resource_path)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // Check for meshes
|
|
|
+ if (root.has_key("sprite"))
|
|
|
+ {
|
|
|
+ JSONElement sprite_array = root.key("sprite");
|
|
|
+ uint32_t sprite_array_size = sprite_array.size();
|
|
|
+
|
|
|
+ for (uint32_t i = 0; i < sprite_array_size; i++)
|
|
|
+ {
|
|
|
+ TempAllocator256 alloc;
|
|
|
+ DynamicString sprite_name(alloc);
|
|
|
+ sprite_name += sprite_array[i].string_value();
|
|
|
+ sprite_name += ".sprite";
|
|
|
+
|
|
|
+ if (!fs.is_file(sprite_name.c_str()))
|
|
|
+ {
|
|
|
+ Log::e("Sprite '%s' does not exist.", sprite_name.c_str());
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ ResourceId id;
|
|
|
+ id.id = hash::murmur2_64(sprite_name.c_str(), string::strlen(sprite_name.c_str()), 0);
|
|
|
+ m_sprite.push_back(id);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
return sizeof(PackageHeader) +
|
|
|
m_texture.size() * sizeof(ResourceId) +
|
|
|
m_script.size() * sizeof(ResourceId) +
|
|
|
m_sound.size() * sizeof(ResourceId) +
|
|
|
- m_mesh.size() * sizeof(ResourceId);
|
|
|
+ m_mesh.size() * sizeof(ResourceId) +
|
|
|
+ m_sprite.size() * sizeof(ResourceId);
|
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
@@ -177,11 +206,13 @@ void PackageCompiler::write_impl(File* out_file)
|
|
|
header.num_scripts = m_script.size();
|
|
|
header.num_sounds = m_sound.size();
|
|
|
header.num_meshes = m_mesh.size();
|
|
|
+ header.num_sprites = m_sprite.size();
|
|
|
|
|
|
header.textures_offset = sizeof(PackageHeader);
|
|
|
header.scripts_offset = header.textures_offset + sizeof(ResourceId) * header.num_textures;
|
|
|
header.sounds_offset = header.scripts_offset + sizeof(ResourceId) * header.num_scripts;
|
|
|
header.meshes_offset = header.sounds_offset + sizeof(ResourceId) * header.num_sounds;
|
|
|
+ header.sprites_offset = header.meshes_offset + sizeof(ResourceId) * header.num_meshes;
|
|
|
|
|
|
out_file->write((char*) &header, sizeof(PackageHeader));
|
|
|
|
|
|
@@ -201,12 +232,17 @@ void PackageCompiler::write_impl(File* out_file)
|
|
|
{
|
|
|
out_file->write((char*) m_mesh.begin(), sizeof(ResourceId) * header.num_meshes);
|
|
|
}
|
|
|
+ if (m_sprite.size() > 0)
|
|
|
+ {
|
|
|
+ out_file->write((char*) m_sprite.begin(), sizeof(ResourceId) * header.num_sprites);
|
|
|
+ }
|
|
|
|
|
|
// Cleanup
|
|
|
m_texture.clear();
|
|
|
m_script.clear();
|
|
|
m_sound.clear();
|
|
|
m_mesh.clear();
|
|
|
+ m_sprite.clear();
|
|
|
}
|
|
|
|
|
|
} // namespace crown
|