BuildBase.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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. BuildResourceEntry* newEntry = new BuildResourceEntry;
  63. // BEGIN LICENSE MANAGEMENT
  64. if (GetExtension(filename) == ".mdl")
  65. {
  66. containsMDL_ = true;
  67. }
  68. // END LICENSE MANAGEMENT
  69. newEntry->absolutePath_ = resourceDir + filename;
  70. newEntry->packagePath_ = filename;
  71. newEntry->resourceDir_ = resourceDir;
  72. resourceEntries_.Push(newEntry);
  73. }
  74. }
  75. void BuildBase::BuildResourceEntries()
  76. {
  77. for (unsigned i = 0; i < resourceDirs_.Size(); i++)
  78. {
  79. ScanResourceDirectory(resourceDirs_[i]);
  80. }
  81. if (resourcePackager_.NotNull())
  82. {
  83. for (unsigned i = 0; i < resourceEntries_.Size(); i++)
  84. {
  85. BuildResourceEntry* entry = resourceEntries_[i];
  86. resourcePackager_->AddResourceEntry(entry);
  87. }
  88. }
  89. }
  90. void BuildBase::GenerateResourcePackage(const String& resourcePackagePath)
  91. {
  92. resourcePackager_->GeneratePackage(resourcePackagePath);
  93. }
  94. void BuildBase::AddResourceDir(const String& dir)
  95. {
  96. assert(!resourceDirs_.Contains(dir));
  97. resourceDirs_.Push(dir);
  98. }
  99. }