atomictool.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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 run = function (platform, opts) {
  35. opts = opts || {};
  36. var debug = opts.debug;
  37. var run = function () {
  38. switch (platform) {
  39. case "web":
  40. var url = "http://localhost:" + HTTP_PORT + "/AtomicPlayer.html";
  41. console.log("Launching: " + url);
  42. var open = require("open");
  43. open(url);
  44. break;
  45. case "mac":
  46. var open = require("open");
  47. open(path.resolve("Build/Mac-Build/AtomicPlayer.app"));
  48. break;
  49. case "windows":
  50. var open = require("open");
  51. open(path.resolve("Build/Windows-Build/AtomicPlayer.exe"));
  52. break;
  53. }
  54. };
  55. return opts.noBuild ? run(platform) : build([platform], opts).then(function () {
  56. return run();
  57. });
  58. };
  59. // Utils --------------
  60. var exec = function (command, flags, opts) {
  61. opts = opts || {};
  62. if (opts.verbose !== false) {
  63. console.log([command].concat(flags).join(" "));
  64. }
  65. var deferred = Q.defer();
  66. var child = spawn(command, flags, {stdio: (opts.output === false) ? "ignore" : "inherit"});
  67. child.on("close", function (code) {
  68. if (code && opts.check !== false) {
  69. deferred.reject();
  70. }
  71. deferred.resolve(code);
  72. });
  73. child.on("error", function (error) {
  74. deferred.reject(error);
  75. });
  76. return deferred.promise;
  77. };
  78. var atomictool = function (flags, opts) {
  79. opts = opts || {};
  80. flags.unshift(platform_cli.ATOMICEDITOR_DATADIR);
  81. flags.unshift("--cli-data-path");
  82. return exec(platform_cli.ATOMICTOOL_BIN, flags, opts);
  83. };
  84. module.exports = {
  85. "atomictool" : atomictool,
  86. "newProject" : newProject,
  87. "addPlatform" : addPlatform,
  88. "build" : build,
  89. "run" : run
  90. }