BuildWeb.cpp 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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/Core/StringUtils.h>
  5. #include <Atomic/IO/FileSystem.h>
  6. #include <Atomic/IO/File.h>
  7. #include "../ToolSystem.h"
  8. #include "../Project/Project.h"
  9. #include "BuildSystem.h"
  10. #include "BuildWeb.h"
  11. namespace ToolCore
  12. {
  13. BuildWeb::BuildWeb(Context* context, Project* project) : BuildBase(context, project)
  14. {
  15. }
  16. BuildWeb::~BuildWeb()
  17. {
  18. }
  19. void BuildWeb::Initialize()
  20. {
  21. ToolSystem* tsystem = GetSubsystem<ToolSystem>();
  22. Project* project = tsystem->GetProject();
  23. String dataPath = tsystem->GetDataPath();
  24. String projectResources = project->GetResourcePath();
  25. String coreDataFolder = dataPath + "CoreData/";
  26. AddResourceDir(coreDataFolder);
  27. AddResourceDir(projectResources);
  28. BuildResourceEntries();
  29. }
  30. void BuildWeb::Build(const String& buildPath)
  31. {
  32. ToolSystem* tsystem = GetSubsystem<ToolSystem>();
  33. buildPath_ = AddTrailingSlash(buildPath) + GetBuildSubfolder();
  34. Initialize();
  35. FileSystem* fileSystem = GetSubsystem<FileSystem>();
  36. if (fileSystem->DirExists(buildPath_))
  37. fileSystem->RemoveDir(buildPath_, true);
  38. String dataPath = tsystem->GetDataPath();
  39. String buildSourceDir = dataPath + "Deployment/Web";
  40. fileSystem->CreateDir(buildPath_);
  41. String resourcePackagePath = buildPath_ + "/AtomicResources.data";
  42. GenerateResourcePackage(resourcePackagePath);
  43. fileSystem->Copy(buildSourceDir + "/AtomicPlayer.html", buildPath_ + "/AtomicPlayer.html");
  44. fileSystem->Copy(buildSourceDir + "/AtomicPlayer.html.mem", buildPath_ + "/AtomicPlayer.html.mem");
  45. fileSystem->Copy(buildSourceDir + "/AtomicPlayer.js", buildPath_ + "/AtomicPlayer.js");
  46. File file(context_, buildSourceDir + "/AtomicResources_js.template", FILE_READ);
  47. unsigned size = file.GetSize();
  48. SharedArrayPtr<char> buffer(new char[size + 1]);
  49. file.Read(buffer.Get(), size);
  50. buffer[size] = '\0';
  51. String resourcejs = (const char*) buffer.Get();
  52. file.Close();
  53. file.Open(buildPath_ + "/AtomicResources.data", FILE_READ);
  54. int rsize = (int) file.GetSize();
  55. file.Close();
  56. String request;
  57. request.AppendWithFormat("new DataRequest(0, %i, 0, 0).open('GET', '/AtomicResources.pak');", rsize);
  58. resourcejs.Replace("$$REMOTE_PACKAGE_SIZE$$", ToString("%i", rsize));
  59. resourcejs.Replace("$$ATOMIC_RESOURCES_DATA_REQUEST$$", request);
  60. file.Open(buildPath_ + "/AtomicResources.js", FILE_WRITE);
  61. file.Write(resourcejs.CString(), resourcejs.Length());
  62. file.Close();
  63. BuildSystem* buildSystem = GetSubsystem<BuildSystem>();
  64. buildSystem->BuildComplete(PLATFORMID_WEB, buildPath_);
  65. //fileSystem->SystemCommandAsync("/Applications/Firefox.app/Contents/MacOS/firefox");
  66. }
  67. }