Просмотр исходного кода

update PackageCompiler according to Sprites

mikymod 12 лет назад
Родитель
Сommit
9ac14ba77f

+ 37 - 1
engine/compilers/package/PackageCompiler.cpp

@@ -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

+ 2 - 0
engine/compilers/package/PackageCompiler.h

@@ -48,11 +48,13 @@ private:
 	bool m_has_lua;
 	bool m_has_sound;
 	bool m_has_mesh;
+	bool m_has_sprite;
 
 	List<ResourceId> m_texture;
 	List<ResourceId> m_script;
 	List<ResourceId> m_sound;
 	List<ResourceId> m_mesh;
+	List<ResourceId> m_sprite;
 };
 
 } // namespace crown