BuildBase.cpp 3.8 KB

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