resource_package.cpp 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /*
  2. * Copyright (c) 2012-2023 Daniele Bartolini et al.
  3. * SPDX-License-Identifier: MIT
  4. */
  5. #include "core/containers/array.inl"
  6. #include "resource/package_resource.h"
  7. #include "resource/resource_manager.h"
  8. #include "resource/resource_package.h"
  9. #include "world/types.h"
  10. namespace crown
  11. {
  12. ResourcePackage::ResourcePackage(StringId64 id, ResourceManager &resman)
  13. : _marker(RESOURCE_PACKAGE_MARKER)
  14. , _resource_manager(&resman)
  15. , _package_id(id)
  16. , _package(NULL)
  17. {
  18. }
  19. ResourcePackage::~ResourcePackage()
  20. {
  21. _resource_manager->unload(RESOURCE_TYPE_PACKAGE, _package_id);
  22. _marker = 0;
  23. }
  24. void ResourcePackage::load()
  25. {
  26. _resource_manager->load(RESOURCE_TYPE_PACKAGE, _package_id);
  27. _resource_manager->flush();
  28. _package = (const PackageResource *)_resource_manager->get(RESOURCE_TYPE_PACKAGE, _package_id);
  29. for (u32 ii = 0; ii < _package->num_resources; ++ii) {
  30. const ResourceOffset *ro = package_resource::resource_offset(_package, ii);
  31. _resource_manager->load(ro->type, ro->name);
  32. }
  33. }
  34. void ResourcePackage::unload()
  35. {
  36. for (u32 ii = 0; ii < _package->num_resources; ++ii) {
  37. const ResourceOffset *ro = package_resource::resource_offset(_package, ii);
  38. _resource_manager->unload(ro->type, ro->name);
  39. }
  40. }
  41. void ResourcePackage::flush()
  42. {
  43. _resource_manager->flush();
  44. }
  45. bool ResourcePackage::has_loaded() const
  46. {
  47. for (u32 ii = 0; ii < _package->num_resources; ++ii) {
  48. const ResourceOffset *ro = package_resource::resource_offset(_package, ii);
  49. if (!_resource_manager->can_get(ro->type, ro->name))
  50. return false;
  51. }
  52. return true;
  53. }
  54. } // namespace crown