Browse Source

Fix ResourcePackage::has_loaded()

Daniele Bartolini 11 years ago
parent
commit
be8ce4c0e5
1 changed files with 81 additions and 4 deletions
  1. 81 4
      engine/resource/resource_package.h

+ 81 - 4
engine/resource/resource_package.h

@@ -19,7 +19,6 @@ struct ResourcePackage
 		: _resman(&resman)
 		, _id(id)
 		, _package(NULL)
-		, _has_loaded(false)
 	{
 		resman.load(PACKAGE_TYPE, _id);
 		resman.flush();
@@ -180,13 +179,92 @@ struct ResourcePackage
 	void flush()
 	{
 		_resman->flush();
-		_has_loaded = true;
 	}
 
 	/// Returns whether the package has been loaded.
 	bool has_loaded() const
 	{
-		return _has_loaded;
+		using namespace package_resource;
+
+		for (uint32_t i = 0; i < num_textures(_package); i++)
+		{
+			if (!_resman->can_get(TEXTURE_TYPE, get_texture_id(_package, i)))
+				return false;
+		}
+
+		for (uint32_t i = 0; i < num_scripts(_package); i++)
+		{
+			if (!_resman->can_get(LUA_TYPE, get_script_id(_package, i)))
+				return false;
+		}
+
+		for (uint32_t i = 0; i < num_sounds(_package); i++)
+		{
+			if (!_resman->can_get(SOUND_TYPE, get_sound_id(_package, i)))
+				return false;
+		}
+
+		for (uint32_t i = 0; i < num_meshes(_package); i++)
+		{
+			if (!_resman->can_get(MESH_TYPE, get_mesh_id(_package, i)))
+				return false;
+		}
+
+		for (uint32_t i = 0; i < num_units(_package); i++)
+		{
+			if (!_resman->can_get(UNIT_TYPE, get_unit_id(_package, i)))
+				return false;
+		}
+
+		for (uint32_t i = 0; i < num_sprites(_package); i++)
+		{
+			if (!_resman->can_get(SPRITE_TYPE, get_sprite_id(_package, i)))
+				return false;
+		}
+
+		for (uint32_t i = 0; i < num_physics(_package); i++)
+		{
+			if (!_resman->can_get(PHYSICS_TYPE, get_physics_id(_package, i)))
+				return false;
+		}
+
+		for (uint32_t i = 0; i < num_materials(_package); i++)
+		{
+			if (!_resman->can_get(MATERIAL_TYPE, get_material_id(_package, i)))
+				return false;
+		}
+
+		for (uint32_t i = 0; i < num_fonts(_package); i++)
+		{
+			if (!_resman->can_get(FONT_TYPE, get_font_id(_package, i)))
+				return false;
+		}
+
+		for (uint32_t i = 0; i < num_levels(_package); i++)
+		{
+			if (!_resman->can_get(LEVEL_TYPE, get_level_id(_package, i)))
+				return false;
+		}
+
+		for (uint32_t i = 0; i < num_physics_configs(_package); i++)
+		{
+			if (!_resman->can_get(PHYSICS_CONFIG_TYPE, get_physics_config_id(_package, i)))
+				return false;
+		}
+
+		for (uint32_t i = 0; i < num_shaders(_package); i++)
+		{
+			if (!_resman->can_get(SHADER_TYPE, get_shader_id(_package, i)))
+				return false;
+		}
+
+		for (uint32_t i = 0; i < num_sprite_animations(_package); i++)
+		{
+			if (!_resman->can_get(SPRITE_ANIMATION_TYPE, get_sprite_animation_id(_package, i)))
+				return false;
+		}
+
+		return true;
 	}
 
 private:
@@ -194,7 +272,6 @@ private:
 	ResourceManager* _resman;
 	StringId64 _id;
 	const PackageResource* _package;
-	bool _has_loaded;
 };
 
 } // namespace crown