atomictool.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. var Q = require("q");
  2. var fs = require("fs");
  3. var os = require("os");
  4. var path = require("path");
  5. var spawn = require("child_process").spawn;
  6. try {
  7. var platform_cli = require('atomic-cli-mac');
  8. }
  9. catch (e) {
  10. }
  11. try {
  12. var platform_cli = require('atomic-cli-windows');
  13. }
  14. catch (e) {
  15. }
  16. var mode = process.env.ATOMIC_GAME_ENGINE_ENV || 'production';
  17. if (mode == 'dev') {
  18. if (process.platform == 'darwin')
  19. platform_cli.ATOMICTOOL_BIN = "/Users/josh/Dev/atomic/AtomicGameEngine-build/Source/AtomicTool/AtomicTool";
  20. else
  21. platform_cli.ATOMICTOOL_BIN = "C:/Dev/atomic/AtomicGameEngine-build/Source/AtomicTool/AtomicTool.exe";
  22. }
  23. // Commands ----------------------
  24. var newProject = function(folder) {
  25. return atomictool(["new", folder], {output:true});
  26. }
  27. var addPlatform = function (platform) {
  28. return atomictool(["platform-add", platform], {output:true});
  29. };
  30. var build = function (platform) {
  31. console.log("building");
  32. return atomictool(["build", platform], {output:true});
  33. };
  34. var activate = function (productkey) {
  35. return atomictool(["--activate", productkey.toUpperCase().trim()], {output:true});
  36. };
  37. var deactivate = function () {
  38. return atomictool(["--deactivate"], {output:true});
  39. };
  40. var run = function (platform, opts) {
  41. opts = opts || {};
  42. var debug = opts.debug;
  43. var run = function () {
  44. switch (platform) {
  45. case "web":
  46. var url = "http://localhost:" + HTTP_PORT + "/AtomicPlayer.html";
  47. console.log("Launching: " + url);
  48. var open = require("open");
  49. open(url);
  50. break;
  51. case "mac":
  52. var open = require("open");
  53. open(path.resolve("Build/Mac-Build/AtomicPlayer.app"));
  54. break;
  55. case "windows":
  56. var open = require("open");
  57. open(path.resolve("Build/Windows-Build/AtomicPlayer.exe"));
  58. break;
  59. }
  60. };
  61. return opts.noBuild ? run(platform) : build([platform], opts).then(function () {
  62. return run();
  63. });
  64. };
  65. // Utils --------------
  66. var exec = function (command, flags, opts) {
  67. opts = opts || {};
  68. if (opts.verbose !== false) {
  69. console.log([command].concat(flags).join(" "));
  70. }
  71. var deferred = Q.defer();
  72. var child = spawn(command, flags, {stdio: (opts.output === false) ? "ignore" : "inherit"});
  73. child.on("close", function (code) {
  74. if (code && opts.check !== false) {
  75. deferred.reject();
  76. }
  77. deferred.resolve(code);
  78. });
  79. child.on("error", function (error) {
  80. deferred.reject(error);
  81. });
  82. return deferred.promise;
  83. };
  84. var atomictool = function (flags, opts) {
  85. opts = opts || {};
  86. flags.unshift(platform_cli.ATOMICEDITOR_DATADIR);
  87. flags.unshift("--cli-data-path");
  88. return exec(platform_cli.ATOMICTOOL_BIN, flags, opts);
  89. };
  90. module.exports = {
  91. "atomictool" : atomictool,
  92. "newProject" : newProject,
  93. "addPlatform" : addPlatform,
  94. "build" : build,
  95. "run" : run,
  96. "activate" : activate,
  97. "deactivate" : deactivate
  98. }