BuildBase.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. // Copyright (c) 2014-2015, THUNDERBEAST GAMES LLC All rights reserved
  2. // Please see LICENSE.md in repository root for license information
  3. // https://github.com/AtomicGameEngine/AtomicGameEngine
  4. #include <Atomic/IO/Log.h>
  5. #include <Atomic/IO/FileSystem.h>
  6. #include "../Project/Project.h"
  7. #include "../ToolEnvironment.h"
  8. #include "BuildBase.h"
  9. #include "ResourcePackager.h"
  10. namespace ToolCore
  11. {
  12. BuildBase::BuildBase(Context * context, Project* project) : Object(context), containsMDL_(false)
  13. {
  14. if (UseResourcePackager())
  15. resourcePackager_ = new ResourcePackager(context, this);
  16. project_ = project;
  17. }
  18. BuildBase::~BuildBase()
  19. {
  20. for (unsigned i = 0; i < resourceEntries_.Size(); i++)
  21. {
  22. delete resourceEntries_[i];
  23. }
  24. }
  25. void BuildBase::BuildLog(const String& message)
  26. {
  27. buildLog_.Push(message);
  28. }
  29. void BuildBase::BuildWarn(const String& warning)
  30. {
  31. buildWarnings_.Push(warning);
  32. }
  33. void BuildBase::BuildError(const String& error)
  34. {
  35. buildErrors_.Push(error);
  36. }
  37. void BuildBase::GetDefaultResourcePaths(Vector<String>& paths)
  38. {
  39. paths.Clear();
  40. ToolEnvironment* tenv = GetSubsystem<ToolEnvironment>();
  41. paths.Push(AddTrailingSlash(tenv->GetCoreDataDir()));
  42. paths.Push(AddTrailingSlash(tenv->GetPlayerDataDir()));
  43. }
  44. void BuildBase::ScanResourceDirectory(const String& resourceDir)
  45. {
  46. Vector<String> fileNames;
  47. FileSystem* fileSystem = GetSubsystem<FileSystem>();
  48. fileSystem->ScanDir(fileNames, resourceDir, "*.*", SCAN_FILES, true);
  49. for (unsigned i = 0; i < fileNames.Size(); i++)
  50. {
  51. const String& filename = fileNames[i];
  52. for (unsigned j = 0; j < resourceEntries_.Size(); j++)
  53. {
  54. const BuildResourceEntry* entry = resourceEntries_[j];
  55. if (entry->packagePath_ == filename)
  56. {
  57. BuildWarn(ToString("Resource Path: %s already exists", filename.CString()));
  58. continue;
  59. }
  60. }
  61. // TODO: Add additional filters
  62. if (GetExtension(filename) == ".psd")
  63. continue;
  64. BuildResourceEntry* newEntry = new BuildResourceEntry;
  65. // BEGIN LICENSE MANAGEMENT
  66. if (GetExtension(filename) == ".mdl")
  67. {
  68. containsMDL_ = true;
  69. }
  70. // END LICENSE MANAGEMENT
  71. newEntry->absolutePath_ = resourceDir + filename;
  72. newEntry->resourceDir_ = resourceDir;
  73. if (resourceDir.EndsWith("/Cache/"))
  74. newEntry->packagePath_ = "Cache/" + filename;
  75. else
  76. newEntry->packagePath_ = filename;
  77. resourceEntries_.Push(newEntry);
  78. //LOGINFOF("Adding resource: %s : %s", newEntry->absolutePath_.CString(), newEntry->packagePath_.CString());
  79. }
  80. }
  81. void BuildBase::BuildResourceEntries()
  82. {
  83. for (unsigned i = 0; i < resourceDirs_.Size(); i++)
  84. {
  85. ScanResourceDirectory(resourceDirs_[i]);
  86. }
  87. if (resourcePackager_.NotNull())
  88. {
  89. for (unsigned i = 0; i < resourceEntries_.Size(); i++)
  90. {
  91. BuildResourceEntry* entry = resourceEntries_[i];
  92. resourcePackager_->AddResourceEntry(entry);
  93. }
  94. }
  95. }
  96. void BuildBase::GenerateResourcePackage(const String& resourcePackagePath)
  97. {
  98. resourcePackager_->GeneratePackage(resourcePackagePath);
  99. }
  100. void BuildBase::AddResourceDir(const String& dir)
  101. {
  102. assert(!resourceDirs_.Contains(dir));
  103. resourceDirs_.Push(dir);
  104. }
  105. }