BuildWeb.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. //
  2. // Copyright (c) 2014-2015, THUNDERBEAST GAMES LLC All rights reserved
  3. // LICENSE: Atomic Game Engine Editor and Tools EULA
  4. // Please see LICENSE_ATOMIC_EDITOR_AND_TOOLS.md in repository root for
  5. // license information: https://github.com/AtomicGameEngine/AtomicGameEngine
  6. //
  7. #include <Atomic/Core/StringUtils.h>
  8. #include <Atomic/IO/FileSystem.h>
  9. #include <Atomic/IO/File.h>
  10. #include <Atomic/Resource/ResourceCache.h>
  11. #include "../ToolSystem.h"
  12. #include "../ToolEnvironment.h"
  13. #include "../Project/Project.h"
  14. #include "BuildEvents.h"
  15. #include "BuildSystem.h"
  16. #include "BuildWeb.h"
  17. namespace ToolCore
  18. {
  19. BuildWeb::BuildWeb(Context* context, Project* project) : BuildBase(context, project, PLATFORMID_WEB)
  20. {
  21. }
  22. BuildWeb::~BuildWeb()
  23. {
  24. }
  25. void BuildWeb::Initialize()
  26. {
  27. ToolSystem* tsystem = GetSubsystem<ToolSystem>();
  28. Project* project = tsystem->GetProject();
  29. Vector<String> defaultResourcePaths;
  30. GetDefaultResourcePaths(defaultResourcePaths);
  31. String projectResources = project->GetResourcePath();
  32. for (unsigned i = 0; i < defaultResourcePaths.Size(); i++)
  33. {
  34. AddResourceDir(defaultResourcePaths[i]);
  35. }
  36. // TODO: smart filtering of cache
  37. AddResourceDir(project->GetProjectPath() + "Cache/");
  38. AddResourceDir(projectResources);
  39. BuildResourceEntries();
  40. }
  41. void BuildWeb::Build(const String& buildPath)
  42. {
  43. ToolEnvironment* tenv = GetSubsystem<ToolEnvironment>();
  44. buildPath_ = AddTrailingSlash(buildPath) + GetBuildSubfolder();
  45. VariantMap buildOutput;
  46. buildOutput[BuildOutput::P_TEXT] = "\n\n<color #D4FB79>Starting Web Deployment</color>\n\n";
  47. SendEvent(E_BUILDOUTPUT, buildOutput);
  48. Initialize();
  49. FileSystem* fileSystem = GetSubsystem<FileSystem>();
  50. if (fileSystem->DirExists(buildPath_))
  51. fileSystem->RemoveDir(buildPath_, true);
  52. String dataPath = tenv->GetToolDataDir();
  53. String buildSourceDir = dataPath + "Deployment/Web";
  54. fileSystem->CreateDir(buildPath_);
  55. String resourcePackagePath = buildPath_ + "/AtomicResources.data";
  56. GenerateResourcePackage(resourcePackagePath);
  57. fileSystem->Copy(buildSourceDir + "/AtomicPlayer.html", buildPath_ + "/AtomicPlayer.html");
  58. fileSystem->Copy(buildSourceDir + "/AtomicPlayer.html.mem", buildPath_ + "/AtomicPlayer.html.mem");
  59. fileSystem->Copy(buildSourceDir + "/AtomicPlayer.js", buildPath_ + "/AtomicPlayer.js");
  60. fileSystem->Copy(buildSourceDir + "/AtomicLoader.js", buildPath_ + "/AtomicLoader.js");
  61. fileSystem->Copy(buildSourceDir + "/index.html", buildPath_ + "/index.html");
  62. fileSystem->Copy(buildSourceDir + "/Atomic_Logo_Header.png", buildPath_ + "/Atomic_Logo_Header.png");
  63. File file(context_, buildSourceDir + "/AtomicResources_js.template", FILE_READ);
  64. unsigned size = file.GetSize();
  65. SharedArrayPtr<char> buffer(new char[size + 1]);
  66. file.Read(buffer.Get(), size);
  67. buffer[size] = '\0';
  68. String resourcejs = (const char*) buffer.Get();
  69. file.Close();
  70. file.Open(buildPath_ + "/AtomicResources.data", FILE_READ);
  71. int rsize = (int) file.GetSize();
  72. file.Close();
  73. String request;
  74. request.AppendWithFormat("new DataRequest(0, %i, 0, 0).open('GET', '/AtomicResources%s');", rsize, PAK_EXTENSION);
  75. resourcejs.Replace("$$REMOTE_PACKAGE_SIZE$$", ToString("%i", rsize));
  76. resourcejs.Replace("$$ATOMIC_RESOURCES_DATA_REQUEST$$", request);
  77. file.Open(buildPath_ + "/AtomicResources.js", FILE_WRITE);
  78. file.Write(resourcejs.CString(), resourcejs.Length());
  79. file.Close();
  80. buildOutput[BuildOutput::P_TEXT] = "\n\n<color #D4FB79>Web Deployment Complete</color>\n\n";
  81. SendEvent(E_BUILDOUTPUT, buildOutput);
  82. BuildSystem* buildSystem = GetSubsystem<BuildSystem>();
  83. buildSystem->BuildComplete(PLATFORMID_WEB, buildPath_);
  84. //fileSystem->SystemCommandAsync("/Applications/Firefox.app/Contents/MacOS/firefox");
  85. }
  86. }