BuildBase.cpp 3.1 KB

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